From 67fbce9fecc187ffbc8068ab6ebf086ef56b86de Mon Sep 17 00:00:00 2001 From: Cristiano Hoshikawa Date: Wed, 5 Jun 2024 00:08:17 -0300 Subject: [PATCH] =?UTF-8?q?Adapta=C3=A7=C3=A3o:=20os=20patterns=20na=20esp?= =?UTF-8?q?ecifica=C3=A7=C3=A3o=20n=C3=A3o=20funcionam=20corretamente=20co?= =?UTF-8?q?m=20a=20\=20por=20problemas=20de=20escape=20characters.=20JSON?= =?UTF-8?q?=20e=20regex=20n=C3=A3o=20v=C3=A3o=20funcionar=20corretamente?= =?UTF-8?q?=20por=20problemas=20de=20convers=C3=A3o=20entre=20as=20bibliot?= =?UTF-8?q?ecas.=20Foi=20feita=20uma=20adapta=C3=A7=C3=A3o=20para=20substi?= =?UTF-8?q?tuir=20alguns=20patterns=20com=20\=20por=20outras=20op=C3=A7?= =?UTF-8?q?=C3=B5es.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `\d`: Corresponde a qualquer dígito decimal; isso é equivalente à classe `[0-9]`. - `\D`: Corresponde a qualquer caractere que não seja um dígito decimal; isso é equivalente à classe `[^0-9]`. - `\w`: Corresponde a qualquer caractere alfanumérico; isso é equivalente à classe `[a-zA-Z0-9_]`. - `\W`: Corresponde a qualquer caractere não-alfanumérico; isso é equivalente à classe `[^a-zA-Z0-9_]`. - `\s`: Corresponde a qualquer caractere de espaço em branco; isso é equivalente à classe `[ \t\n\r\f\v]`. - `\S`: Corresponde a qualquer caractere que não seja um espaço em branco; isso é equivalente à classe `[^ \t\n\r\f\v]`. - `\b`: Corresponde a uma fronteira de palavra, um lugar onde um caractere `\w` é seguido ou precedido por um caractere `\W`. - `\B`: Corresponde a um local onde a fronteira de uma palavra não é encontrada. - `\\`: Corresponde a uma única barra invertida `\`. - `\A`: Corresponde ao início da string. - `\Z`: Corresponde ao fim da string. Como se pode notar, \s, \S, \b, \B, \\, \A e \Z não estão cobertos neste ajuste. --- files/OCI_API_Gateway_Automation_files.zip | Bin 35506 -> 35915 bytes files/authApi/func.py | 45 ++++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/files/OCI_API_Gateway_Automation_files.zip b/files/OCI_API_Gateway_Automation_files.zip index 84bdc6b040bfd1d873d8efe043cbda26715fe208..a099424a0727b361e0883de86e10e3134887adde 100644 GIT binary patch delta 4330 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 delta 3965 zcmZ8k2{=@1AD^x4YcrF5EZK(aRD^6vV@Z**jBSu4TVcAGv1QjaUPW0dR}vMH>ngb> z_X?M+6$z=ED1(x@mEqV}W2o`q2ic z4zQlL097`KLp12v#KS=V&J3~`$&AdIQt|juy9(GQZpbYZh{9UAygq zo~@tkYcxdw21hN!VK5XL27?_UAlI+F>p!;G#!^jSQ_S50I^eVN;!fhY)i6|Yz}l1B zh>lI|W_$VIw5>B&%APOf03MPX*|~A$bi0I2`7~F$LRf}msSZlC^)`s>eQ}O0YA~1x zOdjSJeLC18;<$EDbQoDH;*6_{5R8Z2=1U0z=ls7pF+F_3$M%cUo?Raq6j6*64^*{q z=Iyt7Rl$Qixy_)tJn@96MwD{+!N@Z&uAL;kbUG!nD!=MqI%S1|xTdrQamrD^R_+(DH8z~0T&mAaRcEK`Q@@yiEp>}b0a!r21 z`sLhqa6dZ}n^WmBu}}XMZ-lW$r`ht$Cg7%Pv()G>POKNZqq&v*S?;{XO#VznQd6WesMXCVY8Ou!{6Gv8KGaXtdy(1P8ab{ zhwz;_WIwc|)u-xDk!w@=>IdAFmo#<>HcF>iL@*W7WA&>lMyy%cU6DnqFEaM5lo9q7 z8FYxOsQ=AZlv2~!>k^6YMh%^JvoplrAB0o)J!e(?Y+N|3dXDBvJsIRSBpqaRDLa6v zNlRUh=-Gv}K2na>3Cw;T0&MaUUPYd`bT7 zo$==*^i~SLX+B@o;6)*&hGNp_ghPKpqnnUgvx1EC(S8GeomV*YL|*UVu5(0Y-eStp z1*5=TF;>xRQ6A0JJeS-#PIv4vbUl5a+7kRg^tY^v_u-^uhtc`a94R<%E;f{WR#d64 zDe0gB-?*-}{A5q(_40t7WiP5>Q++JPwWJY&p zA?gAg1v0zjY`wOWy$i|xQy68iy_bNou*q}2B{9Y?cCVf!V5v=^PFtATY1NgdDz@_O zaj?8se(BCHaxEl%w=89Q=dy116U@QSN78Tyx47E38s22e*=EG@%)l#qTVj82{r;g{ zWTB(+@ds@RP1D05QhKWh_C%ryzvHD6QqxBT<`MMW_;mk?D+Mv8vQts<3zm;Gf1~ZR zH7+rgJzyqOiGmjk)W@`k4yoW_chzLEQ_WYi``t@bpN=qksW%Q6*z|BK=MODDw zhpG72c<2YqB`NCiR8ezct-~+BCvDA6P9(?v8dMdCrTM<=*;!^Y*!Fr=B?#3mY#izISw5_N7KrCwgZl;(n(r@1ocXuK(r8#S1kunlSbZa?R)Q@mSco z?aYp+lJa`t17o$LdE(wE=5&J8i-=FOL|K!pGJYC$_gB2c;a%1~yI;*%*Ztv4qeSH( zR-eYWq-&fKaI0>cOLvng#WwB!%KzS>(O3thHRRzlJ zhtcZ7>d!MyTGwkFoo*gjsp(g#yiqW3zADp=$u)R-@mI&Md`1%Awj3hx@V;AW+J@qV z!Pv3lKe-1A92hvLb5rI-Aa=IkMj&>U3IO3mp`C4Y#OdOs)plBrm!%h?{Jw{|%pNZT zcqqL;Oe1N6ys{9%9+-#MW}I$P2dapBk(MZ3@RsNVC7f<|Z*J@fgHr(0T@ciHY-T?7 z2COGPoEwukN%9KG5b_=OcH#OM-eVA`zZ#U_aZL2=wf&xi~70Un6|F_p`) zf}kVb^arVu-~tU-nqa$0$OB%gGt|T)6$Rp{uA8JZSfmC(r%Ko5KT9Lx?bOEG0F9hh0UWP$;tx;zIdu`x^Uoex)g%xx$fEy znn^MnPEBB+A&i{$f`QB4azC_X8B&M`B#t)Ihx^6GeQE`zG5@Jj=M96AqXPX-2l_=E z2aH(BA7g}MN+HyIIb)P&NL!YwPe|G6V-L?Xzq-1S^sw70y9(q{=z+TW6!#tMxw_ Cb;j2K diff --git a/files/authApi/func.py b/files/authApi/func.py index ea41e09..056c4c2 100644 --- a/files/authApi/func.py +++ b/files/authApi/func.py @@ -40,6 +40,47 @@ def beautify_str(str_msg): ### +def replace_regex(variavel): + variavel = variavel.replace("\\d", "[0-9]") + variavel = variavel.replace("\\D", "[^0-9]") + variavel = variavel.replace("\\w", "[a-zA-Z0-9_]") + variavel = variavel.replace("\\W", "[^a-zA-Z0-9_]") + variavel = variavel.replace("/^", "^") + variavel = variavel.replace("$/", "$") + + return variavel + +def replace_escape_chars(obj): + for k, v in obj.items(): + if isinstance(v, str): + obj[k] = replace_regex(v) + elif isinstance(v, dict): + obj[k] = replace_escape_chars(v) + elif isinstance(v, list): + for i in range(len(v)): + if isinstance(v[i], str): + v[i] = replace_regex(v[i]) + elif isinstance(v[i], dict): + v[i] = replace_escape_chars(v[i]) + return obj + +def remove_property(dictionary, property_name): + keys_to_delete = [key for key in dictionary if key == property_name] + for key in keys_to_delete: + if ("\\s" in dictionary[key] or "\\S" in dictionary[key] or "\\w" in dictionary[key] or "\\W" in dictionary[key] + or "\\b" in dictionary[key] or "\\B" in dictionary[key] or "\\A" in dictionary[key] or "\\Z" in dictionary[key]): + del dictionary[key] + else: + dictionary[key] = replace_regex(dictionary[key]) + for value in dictionary.values(): + if isinstance(value, dict): + remove_property(value, property_name) + elif isinstance(value, list): + for item in value: + if isinstance(item, dict): + remove_property(item, property_name) + return dictionary + def handler(ctx, data: io.BytesIO = None): config = oci.config.from_file("config") logging = oci.loggingingestion.LoggingClient(config) @@ -173,12 +214,14 @@ def handler(ctx, data: io.BytesIO = None): apigateway_client = oci.apigateway.ApiGatewayClient(config) api_spec = apigateway_client.get_api_content(contents[1]) spec_dict = json.loads(api_spec.data.content) + spec_dict = remove_property(spec_dict, "pattern") spec = Spec.from_dict(spec_dict, config=bravado_config) try: schema = spec_dict["definitions"][contents[0]] except: schema = spec_dict["components"]["schemas"][contents[0]] - validate_object(spec, schema, body) + schema_without_pattern = remove_property(schema, "pattern") + validate_object(spec, schema_without_pattern, body) except (Exception) as ex3: error_msg = beautify_str(str(ex3)) put_logs_response = logging.put_logs(