From f2b6a3447b7a27b35de688fdb05c84eda0e67e15 Mon Sep 17 00:00:00 2001 From: Jueun Park <s5616012@mailbox.tu-dresden.de> Date: Sat, 9 Oct 2021 22:22:22 +0900 Subject: [PATCH] NullPointerException --- .../6.8/executionHistory/executionHistory.bin | Bin 5678547 -> 5678547 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/6.8/fileHashes/fileHashes.bin | Bin 803049 -> 803049 bytes .gradle/6.8/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../6.8/fileHashes/resourceHashesCache.bin | Bin 393091 -> 395097 bytes .gradle/6.8/javaCompile/classAnalysis.bin | Bin 2038062 -> 2087334 bytes .gradle/6.8/javaCompile/jarAnalysis.bin | Bin 1721762 -> 1981770 bytes .gradle/6.8/javaCompile/javaCompile.lock | Bin 17 -> 17 bytes .gradle/6.8/javaCompile/taskHistory.bin | Bin 32828 -> 32828 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../inf/st/openapi/ast/ASTNode.class | Bin 13454 -> 13454 bytes .../tudresden/inf/st/openapi/ast/Delete.class | Bin 7326 -> 7326 bytes .../de/tudresden/inf/st/openapi/ast/Get.class | Bin 11995 -> 11995 bytes .../tudresden/inf/st/openapi/ast/Head.class | Bin 7318 -> 7318 bytes .../inf/st/openapi/ast/OpenAPIObject.class | Bin 35824 -> 35824 bytes .../inf/st/openapi/ast/OperationOb.class | Bin 3155 -> 3155 bytes .../inf/st/openapi/ast/OperationObject.class | Bin 40409 -> 40192 bytes .../inf/st/openapi/ast/Options.class | Bin 7330 -> 7330 bytes .../inf/st/openapi/ast/ParameterObject.class | Bin 22668 -> 22129 bytes .../tudresden/inf/st/openapi/ast/Patch.class | Bin 7322 -> 7322 bytes .../inf/st/openapi/ast/PathsObject.class | Bin 7761 -> 7761 bytes .../tudresden/inf/st/openapi/ast/Post.class | Bin 12157 -> 12157 bytes .../de/tudresden/inf/st/openapi/ast/Put.class | Bin 7314 -> 7314 bytes .../tudresden/inf/st/openapi/ast/Trace.class | Bin 7322 -> 7322 bytes .../java/test/openapi/OpenAPIMain_test.class | Bin 6182 -> 6381 bytes .../classes/openapi.OpenAPIMain_test.html | 150 ++- build/reports/tests/test/index.html | 44 +- .../reports/tests/test/packages/openapi.html | 32 +- .../main/1password.com-events-1.0.0.json | 518 --------- .../main/6-dot-authentiqio.appspot.com-6.json | 998 ------------------ .../abstractapi.com-geolocation-1.0.0.json | 233 ---- .../adyen.com-CheckoutUtilityService-1.json | 117 -- .../test/TEST-openapi.OpenAPIMain_test.xml | 118 ++- build/test-results/test/binary/output.bin | Bin 577 -> 60 bytes build/test-results/test/binary/output.bin.idx | Bin 36 -> 36 bytes build/test-results/test/binary/results.bin | Bin 81 -> 10717 bytes .../1password.com-events-1.0.0-actual.json | 0 .../1password.com-events-1.0.0-expected.json | 449 ++++++++ ...-dot-authentiqio.appspot.com-6-actual.json | 910 ++++++++++++++++ ...ot-authentiqio.appspot.com-6-expected.json | 910 ++++++++++++++++ ...tractapi.com-geolocation-1.0.0-actual.json | 219 ++++ ...actapi.com-geolocation-1.0.0-expected.json | 219 ++++ ...n.com-CheckoutUtilityService-1-actual.json | 107 ++ ...com-CheckoutUtilityService-1-expected.json | 107 ++ gen-api-ex/petstore-v2-actual.json | 0 gen-api-ex/petstore-v2-expected.json | 992 +++++++++++++++++ .../tudresden/inf/st/openapi/ast/ASTNode.java | 14 +- .../tudresden/inf/st/openapi/ast/Delete.java | 8 +- .../de/tudresden/inf/st/openapi/ast/Get.java | 8 +- .../de/tudresden/inf/st/openapi/ast/Head.java | 8 +- .../inf/st/openapi/ast/OpenAPIObject.java | 33 +- .../inf/st/openapi/ast/OperationOb.java | 8 +- .../inf/st/openapi/ast/OperationObject.java | 34 +- .../tudresden/inf/st/openapi/ast/Options.java | 8 +- .../inf/st/openapi/ast/ParameterObject.java | 18 - .../tudresden/inf/st/openapi/ast/Patch.java | 8 +- .../inf/st/openapi/ast/PathsObject.java | 8 +- .../de/tudresden/inf/st/openapi/ast/Post.java | 8 +- .../de/tudresden/inf/st/openapi/ast/Put.java | 8 +- .../inf/st/openapi/ast/SchemaTuple.java | 4 +- .../tudresden/inf/st/openapi/ast/Trace.java | 8 +- src/main/jastadd/InfSchema.jrag | 13 +- .../resources/1password.com-events-1.0.0.json | 518 --------- .../6-dot-authentiqio.appspot.com-6.json | 998 ------------------ .../abstractapi.com-geolocation-1.0.0.json | 233 ---- .../adyen.com-CheckoutUtilityService-1.json | 117 -- src/test/java/openapi/OpenAPIMain_test.java | 3 + 67 files changed, 4285 insertions(+), 3903 deletions(-) delete mode 100644 build/resources/main/1password.com-events-1.0.0.json delete mode 100644 build/resources/main/6-dot-authentiqio.appspot.com-6.json delete mode 100644 build/resources/main/abstractapi.com-geolocation-1.0.0.json delete mode 100644 build/resources/main/adyen.com-CheckoutUtilityService-1.json create mode 100644 gen-api-ex/1password.com-events-1.0.0-actual.json create mode 100644 gen-api-ex/1password.com-events-1.0.0-expected.json create mode 100644 gen-api-ex/6-dot-authentiqio.appspot.com-6-actual.json create mode 100644 gen-api-ex/6-dot-authentiqio.appspot.com-6-expected.json create mode 100644 gen-api-ex/abstractapi.com-geolocation-1.0.0-actual.json create mode 100644 gen-api-ex/abstractapi.com-geolocation-1.0.0-expected.json create mode 100644 gen-api-ex/adyen.com-CheckoutUtilityService-1-actual.json create mode 100644 gen-api-ex/adyen.com-CheckoutUtilityService-1-expected.json create mode 100644 gen-api-ex/petstore-v2-actual.json create mode 100644 gen-api-ex/petstore-v2-expected.json delete mode 100644 src/main/resources/1password.com-events-1.0.0.json delete mode 100644 src/main/resources/6-dot-authentiqio.appspot.com-6.json delete mode 100644 src/main/resources/abstractapi.com-geolocation-1.0.0.json delete mode 100644 src/main/resources/adyen.com-CheckoutUtilityService-1.json diff --git a/.gradle/6.8/executionHistory/executionHistory.bin b/.gradle/6.8/executionHistory/executionHistory.bin index ffab960dc1f554d2837a9906cd3de687d5d022ad..a499544384f3abbdc40b9561ceefff3753b3016b 100644 GIT binary patch delta 8295 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 delta 7991 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 Z+Qb9f#Dm(zgWJSI+QdV*iHBY80{~yVN{j#i diff --git a/.gradle/6.8/executionHistory/executionHistory.lock b/.gradle/6.8/executionHistory/executionHistory.lock index c0602a52accc5782ea61c5d64529ca8301ab2c00..59ea3d89546ac9cc38d3a8072cdddbd5f9c35126 100644 GIT binary patch literal 17 VcmZQp+O{L7ZHdZl1~3q>0su3y1iAnK literal 17 VcmZQp+O{L7ZHdZl1~3pi3;;9u1p)v7 diff --git a/.gradle/6.8/fileHashes/fileHashes.bin b/.gradle/6.8/fileHashes/fileHashes.bin index 2b24e898e3dffcdc620416fb863461b44bb11339..f30fa9596b32845baa38429dc3994ec8e2dd15d5 100644 GIT binary patch delta 5474 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 delta 5495 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 diff --git a/.gradle/6.8/fileHashes/fileHashes.lock b/.gradle/6.8/fileHashes/fileHashes.lock index f7069599a742f78b42e0afd0e5d7412fb1f15cbc..21d91eace8079df466ca307e4dcde4cd7b8f22c1 100644 GIT binary patch literal 17 WcmZP;t>XHyYn^sA0|+orm<|9fX#~Xp literal 17 WcmZP;t>XHyYn^sA0|+oze*yq4ngt60 diff --git a/.gradle/6.8/fileHashes/resourceHashesCache.bin b/.gradle/6.8/fileHashes/resourceHashesCache.bin index ad8cc79532afd419634d4332784c1b440103b024..81b32a3cf37a2a7cfd402c3d514832dea26b8ac5 100644 GIT binary patch delta 3428 zcmZqvFMhL6VuOhUW5HxoiG%!w%l8~x^emqN1lSn3H@}rAWaQV?aCstWwGbr6!1{mb z=1{4ZjQr}alG2_(Q2`6GvE)uRl?mkcDfO>>opKi<#^$-XR%RnVze?(V8+Nwy5JASq z&8j+uEc{BA&o8|z`2i7RTfe#2;3gA4=Yv1)d6ynR1+zED8t-CbQkuB=pw<3HMxV`% zdv5aZmpi#FEr^&8QNwV3bKuDvOadHt__qqx>5D-`S^76Co{8pXG~B%Q_NyR9`{^_E z7!COy;-}_5c8iB7VVFGqfF5HYf6k8FjoTKQLj+m8w{z$-K4jy+Hs7+qc~TiflzHLy z2d0c4nfTjl46THfEFhw67q_3VU~ClP7hJ@m@@M~6h$!>n=?>nEml=O<@9|;$CCccy zy*-Ihl8v8n^~=3~wOpWzthZ0kU|h(^|8UnDvs5m7sA%kV{VYaBetv1qeXm$AOoE6q z#&378WIV~tAGvbfg317Sh$z#<?d-LTPRvYln%h@5F#hUi)Z4yHfT@y)Uz5S9y?oY3 zh%$z)+r?y=Rx<IIW{VpZ1RaBjvaxR8CeOsl!+(~)*&=}{5+cgPxqX{96Eh=Y;`Glc ztXsEl*JYY6!Du<%-;K$W|9e^Z<shwzV3n-@UvBSrV^ZYjpZdL#IpISZSd@+J^Y-PT zOpz@7$M*DF9=Wg<BFg%B`}atuVot`)?JK{t#4>IdNM#BXW=!9nRKb+V$badzd;Pj& zPatZU^0yzVWQyeFzbVhPc&)>Ah$zeD=|b&H8~J;+ivB4Ztbz!#MsMHM&Sc5MAGs;E z{cX)DsHph%SCg4CnfZCk*QJ`BOM-~9Y~1cOohg`!ap!bJ9v0i_Wjrhf+nZ-GSxYlI zPT#+k=_9}8%ee~$f^S2Vv(|23zKzL{kALf)nX9#X>!6|sx1T@4^oWm1PILN|-7Kx! zGp;c0{>+#@UF8Jx4FQ37f3h;--<LzwGHu@e<pgsjEC0a&hY<0+O%PGW#oJTPF?TZZ zpOwC}U>);Dh$zd~?N81#ck=SrJ^c26=B6BoD68e<kB<YlZ@tTWh?{ZeM#Tue?FK)X z*RU~$Zom7FS(BCj&7Vyz+gF~2sAeeK{+F5MloXQ!=SD>i0g%!V#_9cfj2w)K+uaOU zEE)N=J?vIC9fM|7HuddghAbPI`9E-1cBnr~ftbSdeY%_}OAue>gT-3wZ6RVT?Ay~! zSvZ;b9~;ho?Q~-iM3i;@_B0C?K}LRk5!I<POrTN1_<VbwC5s?C|B?CIe)5M2g4MGA zKfb-pfh9?RNl|m7;tQ}hmauIPNMd;=32~wO_NNUjnOyw4-ZF9iJh~dJi;cN{dwCP% zLdNaSdRQd*`6E^@@^st@O%Lqm)4%sK&fMNNhsA-3|MHfnOBU^$3DL&zbGrW|MvLix z=dlEXgG~?=7Sos^Hd$|<u!V(_g@5Tf?*Qfl(0FCKx_!b97C{#NIfe6`T33cb3}Vro z-hYK@<95%zEFA3ow%&Yd8pqoqQcS+vJ&v$+a`6}SRB393+dxDa{HO1K%%r&e<vA8} zMuEDY<=0Arf`!0xtpA&*uYba1IX&<Kiv)k$Y{e;!!DqlSY)snQ6E3hAGcwNHs8}Hc za_bVd?G8Vg=ddzbZ@>G2g_DtgweZWdqiba$>KTu2zx$D8p)kMAA0ai4AB7N6cG2nf z`AnJH@3FGJVB)_}6nRb8Z!ScN`RVlgg-j>6w{fyAVnNt)f&~&HcH4KUvi@Y}mn?Z= zHbKG=qK83ux`HpG;`Y<JtQ^ApVzVz63wExANU`;9Kjpxx$;iJeYum~_x1q_2(RO-4 zETiIfZYNfGMwR%|WtE3~v^gO<m?i(C0R{%yhZ_|QV7@JgXLMlPzABb=3nQb^_V{?# zhwS{0s_v{OrbBB6M(OS5>8z(k7!Ph#3=oEf(S#LD^EkJ!ozHqLe!A>`R=$w4{B^s} zg#6jZs(k(6?p5xf@Rc)WU|^7BU|;~HL_q<)OY8SZtefqU?<~M(5!pGFfq?-{#roc} zJ5N~Id~Fmu$3Oq2@W1KW|5!}~ZadqCUEWi;aPlsDbNh^iU#D;6U=%j2w~CF4=*u^D zUcG&5Q&<?LVVXym>Mr$T^k=%gXy45p*3YIN+{-Fl|3y@Gi8R;Ng?hWif)c=K2h9x` z4VNpV*Nc6L+8e>(^wuK-)8Jq4B45px{wwwB^K|p}tBs&IKr`dwmHN9ku5T_-ygYk} zh{Mb^2s0#LfuZ?h#pg$UI<nt`o=vZwHcw&l#IM5jaYysd{ByC;n%Mt{`TVvBgf^J2 zX_r%WE51~Yj*JX_5>hy&8B>M7OZAGS*XNvG(zfw$2k-p^Och;{LQT^m%z9*3O!S$i zcw+}bMLo=#Emv3GX<7GtU*7u%8{!4zKvgrE59>{y{;u-juk|<I8o2FA({qF&Ff%$; z=iFPNGV`)hNw8PYLM~8EfM!O<B)_dbn*~mt$~(Mo>lST0hE$9Mk)}LJ>l$Yhb0uTq z?uxn3S~0DO=ly)|ML4V4lZi&Ip~o5cF;zSaUnPBN)gO(|FD;7tKCI=R{_p~;aQ%b# zheJg|UrOAM&@bOAvkOz((V4D(hfgkjlkrkdx<CCuKc)%?t}W{28)R24dHq)T>gL7K zm@4w#9n0{mXwAEC$*{9<(#o3%74V>bbMS0{fPBW!FLs|+KM_=Xk5B>&$l|Yx2R_RQ zrKSYE_xbomavi3M+^EO{^Kz#}9p()zeIFj?fvIBa9KP<g5Au1x--^uMcKy*3hI)*k z{y6>NzY}XD1y(xGcd+<S&yHz`X0p<QsrpRMO4I*eQk(D}R6(J|=!v5%7>Xi0mo-fa z5eV(c1XadpDw>WzbNjocY_reK*AFz0A1cI>c{FP;U)`ClsGPm)qSs#^;}w_=@$yb! zd48r=Ht^AX|Cm>C!P66evzpZJv)|FCy+h1Ch_S^=dg-qjnEI}M&56y4+oHL1#?onx z{2Ha0Dzq8ArnDwLSnzYltCPO<C03X!Sh^NT?pY)!mgB;-N3rWEGh9VIyqsg_ow?cV zXjJy1jtpnhUe;{561a+m4c=jjr<L>h=H%98-#U)PnpPpUZADqDKAkJgz3JzDzY)_6 z?^TKS-v_@i?QjS@AQ%%Z53(OEu*;sAK3ed)La0ls&cJ=!eo)&JO+~Uy=UJzO!&@6) zvQ4lsci_gfrex>y^I5IJQ;KJ=v9hn7HV;#U|BT>QWycbIjjtb4sk;<megRX7t*xf2 zT7FkZytGu$w*!8ldK}Fm;m16d?(ol_zvP0$cD+4X-jfgJ3G=VJ=`z!@k~yZX`F+!_ zJOgkv8|m-LI-DPK@#g0PHm+~yRO@5fRyoPu>WSH1`D=>(Vz;>R?oD?TV$1>n2PXIJ delta 837 zcmccFC(-<0e1nMuW9DR2iG!Q@Br_N{_eniqoZKekvH6+I3jWQ@bTU{rs~KKk+RSIN zk&Q|5<@8s!EGpC0>{ukHhug7uY~OCj!ofKGx;;z9W;vUr21c*VjeBnLY%V%^o@sOB znP7fK#_0i<m|Hh9-I*H1Xf=I?9;4y(hkA@2+a2{8Z?J7QG-G_hwB68>u|jD2L2t%W zjE&RtbXZ%r&-7t@E6QlQy*-Ihl5P8r48|FZ+cUBlCHS|`sAN3AyuF~7(UO@>_9O$d zxAXM99W0sKcQi1*?Pt{9zD$6rl4rZQEYkv}<?rR0c&4-KF#TecWMHT=oW4GV_2>5O zx=hn07|o{pyD@og-{8h1!N2`MC{qB-c8@5gEKWwn?UmnImNIS^NM#BXW=z_iRKb+V zxczY@QvmOD?{=mY+qpZK40yH&Phm=6-hO&IlNS@KBLfrb-|4m7EP>OXakEHF*W+RF z*d9EKDO;M+e)|5cOdq$O*v6#6x1HlC(@j1m*`L$*>}J_Iy>kzX!S)$fn7ThRCQny6 z!F*%8$Vuix*6nl8F*h)7H@(2zz&rWZV~_2k_m~fHGe&My+`+fq;0N;>HpY<ccmFYK zvTm1SVL2$pB>!=vqJjWODui)*zaAq8WAt`60~Slh?b8ieRxnQwH)ZkMzQdH|KhyT} z7Azc$+uvKVaIjCVvys@Y?#SXOz@#v9qhbX=$bcnm+Z_^Fo=HNCaoPT~fhCh`dqWc_ z^#Ap+Nbpaaz&K(1zBw!oOw%JKG3rluozD`?Sh!JffgnixG-ilK)9n+suyC?$-?)Q? zgJt@RD@-f4SMFuuV4p5<n<-)Y&m$}fT+>fHW|G+Md7j0bar%r4ES}qcUSQE;WaQka z$RP|e3gnWX%yU>7Ew<nNz{1J6{ohBH8N$;&@|hC0^RcnMV4D7-km<nobDXS;SQrC0 zDjpC5={mszae&qKU8<}<*{5szGD>WJtjo$Fyq(#RRe^DOWh|q__FyMgc}AZ9P{6<- z+qhA20$BeNw(SiGj1G+3SH-e!VPrJi9v{#8kbQeZI_n`3#+4ftGhl9;u!3nG=k~Sp IS+B(d0K`8suK)l5 diff --git a/.gradle/6.8/javaCompile/classAnalysis.bin b/.gradle/6.8/javaCompile/classAnalysis.bin index 9dadb4773c8bad3f1937fd82af4c06f892b88a84..a7e0e4e7e8ae9d7ee1345318ebc2f6c7f8bcefd6 100644 GIT binary patch delta 2718 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 Cx1H7i delta 870 zcmZ3sxqjWInhhorj0&4gB_dfjFO%)y*zBgZgLSi*P6yNGZF(~pH>Vi{F*6EIzqVdF zcY5>&=@rdkChcJ+jO}42Oxwdun9pc23T#)7XTHd>ohO4?pKW_^9`j7b?JNb%9ZcJo z6ftM9F;1KwI9q0GdrBp9drBosdrBp1drBqS_LNHYyQ+-8w>!;e=M>nUyq^6b%l4Qp z?Dg#1KksI*;Mv}Mf_)Pk>r4iYn<uBc7w`v8-%!9WKHW`=kAHjMdG@;PjFQ_gv~gsz zY!B?_C}7(Dv6mx&YkTAj4h@d&GZ%0OF|uYdNMx8!ZxWQ5x!qVu#)7e(b1_Fd=VH!w z&c$5qoQt`)b1vrbTF2-xJtUC#;C9_0UI(V_ts%S?jMJ}%@_yKUH;k8qcl+ODUIEta zs+qhe7^kyl^Ga+t&E{2L+@71mdkPdRR-#g8x66x3&0ySqw2-%<gHdq0+b>?j?ft)a z3s|>`^F3hP&d<d6fqA<)8{Z1H?bmtuI@y^dS57aAkUhJ7y9nQ`cZ@9CgP8eOGH(}V z=ikA%{jn%N7aL>Y_6}w_QO50CS>$FgZqJtEFIHld+kW4H|0m=24^I37Oxq<~`4@0+ zzYxIhz_DE;lK&$UlhniQ@0?}cFt#s`<!@geE6~0?R<M0}tWf*%SmE~Nu_EouV@2DS z$BMNtj}>oU9xJhZd90-021f1e-*}}2IY6HH!MI&tLh1(d_RvyZ4W{kxa#9JL)1TJy zPT20RA(g>6{b&Pk|MWO5DP=~<jfy{n+nMa7wlmpD`{yyrZ4X)_{gZKf@;d1UjLV}p zNHb5KW|px1@@DA_md($sEEuQn-YH$NIn9QHaeMG?>F<o&llDq?a!d|$tJq$BOuCbi zN$TN7MFY|8ad)JJjTj}i7xBqtGH(COFY`!Z`-9CgM?|+b+R1n@F-mMd<sf6pJN-ur zzsL4uKbZr}+b?ABFJRjKIYcIl4W#s_==NI$GP^VwMW;`lDPy?(-b|SQ;q7i~WnM6C zciSK{i+TIY0$Coh?MqI|IQB9MZhsag>&d*mUzG0!({}e*SqIkb>au(mjN7j#%kJRV zzC1_Pk%dWe<wnH}vF)GQWHoCTxwgwN%Na6H&z9q_*nXEy?gi`iyF79nEZd7U_-`<8 WzbYcv#m>mMQBgpAyN0nG+cN;kJUKJ~ diff --git a/.gradle/6.8/javaCompile/jarAnalysis.bin b/.gradle/6.8/javaCompile/jarAnalysis.bin index 6eb85caa5e133a1cfd73295bfdfbda678b798952..efcc0bb0aae97a68b965ff0ecccce97d66c979cc 100644 GIT binary patch delta 4716 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 RLExzXa3qM~Qvonu0061W(;5H( delta 173 zcmX^0t71`i<^~f9#`Mjm5(<o)TO}tjZ`PHa!8rM@oWx{a`Hz#u6jn^WrqI86s-glT z&wnUjVBp-jQSpcPMuP;tW=D^9M-Rq!M-QfUM-S$9M-P^EM-SF^M-R4kM-TRPM-Ps6 zM-R?+M-Q%cM-T3HM-QHMM-Se1M-RSsM-TpXM-PE^M-RbvM-QQPM-Sn4M-P#9M-S0< VM-Q=fM-TCKM-PeZjvkVUe*tVwJfHvo diff --git a/.gradle/6.8/javaCompile/javaCompile.lock b/.gradle/6.8/javaCompile/javaCompile.lock index c73fbee5fde729b4cbc8e25e5fdecf19ef72723c..b01e4c9381f02895d9d91919b447a4a3c89a7bf3 100644 GIT binary patch literal 17 UcmZS9_jn)L_pnKx0Sx4M0WX*X`v3p{ literal 17 UcmZS9_jn)L_pnKx0Sx540WZ`9H~;_u diff --git a/.gradle/6.8/javaCompile/taskHistory.bin b/.gradle/6.8/javaCompile/taskHistory.bin index ec6a3ba5c645e73fb30bb4472d5e1064fd436005..5908545b1ffb6056bb1699e06e1fefed16243906 100644 GIT binary patch delta 57 zcmdnfz_h1<X@hZ*fWaZnLzAvu>b7k5IG|@gw|esaG%o?iKe5}NN2muRpB1vZw1z`r OGh?6~>*m|#i5vju#2CT= delta 41 ycmdnfz_h1<X@hZ*z{544cpfus@(sN&EOAwI%FfOE(>fS8>jw$2Y`$Hd$N>O{&Jp|o diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 4b009fbd78769ba1eb5c2cc8d77dbd72aad7f96e..5074092233a6914190b42f834c58c8e3b895b6a1 100644 GIT binary patch literal 17 UcmZRMRkTpz>bjrL00zp203b&L5&!@I literal 17 UcmZRMRkTpz>bjrL00v4@03a>``Tzg` diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNode.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNode.class index bbafc00bead5f748f5d05c59a62b9a77187a0ab8..48ae3e244a16d4f7eda03a61f45b99951758cdc3 100644 GIT binary patch delta 14 VcmeCn?91G6gNM<0^G%+u>HskN1}gvn delta 14 VcmeCn?91G6gNM;#^G%+u>Hskr1~32s diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Delete.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Delete.class index 355c6e77d3593438ec23a7bbe977a50ea709dfeb..2b80a03b34d05b692f88091e05647c8b8fe491b2 100644 GIT binary patch delta 21 dcmbPdInQ##8g@qG&1=~mm>A7BzvJ8>1OQhz2a^B* delta 21 dcmbPdInQ##8g@pL&1=~mm>A7AzvJ8>1OQh)2a^B* diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Get.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Get.class index 44705924060ce907bf00de024c29530b15025d67..2df7717cf9d22f19130a0b4841a419f61185dbb0 100644 GIT binary patch delta 21 dcmcZ|dpmZ+H4aAO&DS{$Ss2YXbMjtN1OR682krm> delta 21 dcmcZ|dpmZ+H4a9T&DS{$Ss2YWbMjtN1OR6F2krm> diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Head.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Head.class index 59b0b3a31b91e6cb92baaca2fa592ee046662124..6c1f42d202663b957867d3217122ba0d124a79b8 100644 GIT binary patch delta 21 dcmbPcIn8pz3U)^0%`4d*m>A7Bzv5gY1OQcY2Xg=b delta 21 dcmbPcIn8pz3U)@5%`4d*m>A7Azv5gY1OQcf2Xg=b diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OpenAPIObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OpenAPIObject.class index 6a6bd1034e9760e821e8f5b3ddae0809d65df9b5..571e0e1a103569df6736cdbfb429b22df713dfdd 100644 GIT binary patch delta 1562 zcmew`o$14LrVS}(jAolt%}%N^9+<2jvrh0B0}G1>11HN`20oTs48jb@C%=nXta^cg zli?zRD8nTNMTW}^x(rtsEE%pcxH4R02xPd<5XW$XA)Ddm<ZZEimXFZ%KW30%c)}pZ z@RUJ?;TeNA!*d2Bh8GN$3@;fR7+x`WFuZ2)V|c?5#_)D?ZCo)U<EP0V<1HC~PS#Ga zVg1j*!pJZ=Cm}$Tm4Stkje(Pqoq>;$gF%>)lR<)!Yx2beM^=6Y4n~2=AFG8YYb7>I ziZie>N-%ISN-_vCN-@YY$}lK0$}%W1%1u6&n9Zm?*(j+_(UgIe(TstI(VRh?(Skva z(UL)l(TYKx(V9V*(VW4U(SGv9q&bRS46Kaa3_OfJ4C0Kw46=-V42q2Y3~G!43_6TH z3`UG0llzh<F-A>RObKF5Vqj%Vo?MX<#F#hvbV>|sIRhJG#bnuZ@yP`RB9p^Ytyt?B zI2juzf2@|Aygt=}v3;_Cy~1RUG(E=t$>wPej58+xFO-}-G0lN-A(-_#O_y~g0~_P2 z$+GFmj2kC6rrR^_ntU+bnep&s!7};DDj7zMr@>~FXIOJyW)Nn)!XUwTb@J|vQqG$U ztc<r9xEOCwHf)fb9F!Tr`Iv!~@d*Pr<I~BjGmBW?GH^1!n|vTod$Mnq7vp!ZeH*ik z82^DyX3kb;WSd-&Ej!sGTb+@AazVBmt2hH2lf-1%bnVH{vMm_pCpV^xPBzKWV$=Y$ zN^<lV4Z(U3<rpzqf?Xw=Yt8A%Ak5^%Ai?B3d3T27<f7adPIm@YCJzQKCQq=-KI8^) z1~RZR1u<|l1y5d`DLFYQFOoHyfs-j_@`1ck##FG&{PT?%bHJuA%vWbDnOu-9Ir&k( zHe)TArCy-R+Qz`f)D8`6Kh{15PNsfvINvF-V4MbajcK7C<Gjf!g$|6%C;u;$n!LZz zo^iwE|AlU>I~drQc7lCYT4cd^0PLT`MOus}!7S!tJ;qC5y90}j7;k~iT2gGy`G`T7 z=`n)@(-W}I7)xR}UofyTy=35GdIk1beMtc4Ck9rg&kWp5U%)>5SQ5$lhk=vnFF4$* zO1&7_z`nazYQ)GpS+LBFQ55W-!ZK|}IWTKmnJ%ju0~@nC*mc6?7L0meHzk&9F`9!} z3(NHw9l)-8Uv9+c0d}2Jg*9gYgD`U-g9LLB*md(OVmQMXSee5axR@iru9K|{;7nj( zWlm(^W=;aTuD>#pHH(3hIUDRci7GF~60qxPs*D(`!8V+$QfF)iyNkbCo3RJX3aQp( zoyx$@JZ*A&bt>yz22SRAlRs7mGA;$XB)LY9aqZ+uHI9tiChONqO@3G7z_@?1eyuC( zaRyfA6O$`z-54)VK2RILdYgfr`Oaj~x@5-3V1M=1X)(S5v(DA&F@6QxFH>*C_;<2@ zeKaR4gD?vlg9HmZ*mq~@V>r1PSXp=&xL9~68#ZKeiZZaWh%s=ph=YB$ry+_}o`H)+ zVX|PE@MOKlWJb-&`n8giS2r3l8h}my+o;ZH0rrnwlQyFxnAP0m#OuSr&f?1;#Nx*w z%@Q#AQj-U3I0G9?#ANyAaLxpVCkzY>3JlDX9a`ll&uc!fn$Ez%lF7i&lFcB^lEa|Q zlE+}olFyLFQoxYMQphlmrI=v>OZntUElU|2CiAvyPfl*VuiDPQ!P3dV&(h5x&C<i5 z%F@T6%hJyf%`%Z8nPn0~AInsR2`n=wr?)L-Tr`=ty@YYu<fe8@##NK|v@g)z#=y$5 zok5mm2ZIvJE(T4O-3-Podl@WP_AxlH>}T*|IlvIXa+o2W<rqT>%kjyb9Zxh*Gcd87 vVc=ys%OJ{fo<WM`0)rgOMFusNOAN*=ml<MNt}rCCTxCdOxxRT?XA~0vgPz|6 delta 1562 zcmew`o$14LrVS}(jHa7Y%}%N^?w_n5vrh0R0}G2g11HNG20oUX48jb@CcleWta_e- zli>n`D8oetMTScZx(t^YEE%paxH4R22xPd%5XW$xA)DdG<ZZEimJiYNKVpzzc+4Qj z@Pt8y;VFYQ!!rgWhUW~H3@;cQ7+x}XFuY>$V|dLF#_(oyZCo)U<HyM#<1HC~Ox8}Y zVg1Lz!tj4`PC|ev3j+%yD+4DZ8v`FBJA*JI2ZID7=j4kCj;wqP9E|*vKUND*)=F%a z6k}jz6ldUKlwc5Klw^=+lx9$5lwnX}l%0GmF`H3qvQbi<q6q^lqbUOqqZxxZqd9{d zqXmN!qa}knqZNZLqZxxSquu0-NploE8CV&;7<d@H8N?ZV7-SiJ859})7}Oa38FU!E z8H^Z%C-)^!VvL-um=eUA$iT{&G`S)rh%tBa>694OG6pur^2xI4;*$#sL?(x)TCvtK za5C0U{#Y$Jd3~w{W7}l^dWFdxX?l!(lg-l{7^hGEUnn_wVwwZv0x;`!nl9@K1~$f( zlV#JB88=LBOt)v;Ir(6^GvlGjf@SiPRWghiPl3%S&#>ma#30OgnL&c_%H-V{rJOey zSQ&3Ja53JRY}g<<IVdxL^AQ6p<6{PH#wU|kXBM%(Vc=wZJNZDK_GI5IFUD_R`!;47 zG5!Uc%$%*x$U3<oTXwQXwmKu<<brHBRxt)PCh^I#>DrT@Wm_=HO>RsVoote$#i$Nu zmE`C#8i4g4$}wWJ0J};w*P7FTL72&rL4wI?^6m`D$wj#_oNf%POzsR^OdepDeaH>q z3}9eo3S{7B3Yxq+Q*v@rUL<Q211D4T<O6x7j45E3`R5xkW`j*%n6J)QJh>oSa`K~m zZN?ffOT9pswUvR5sSO&|eyqI=oJ@V-aK2Mu!8jG{8q-2O#<`PI3LO}iP5xgfHF<xb zJ>&Yx{|nt%w==LY?Ew3%w8(;SKiEHqi?kR|fLYANdW;vrb_W(4G2R55wWQdZ^C5#U z(<256rpI8PF_y$|K4)NMdcnZO^b+i|`jP<7j|{9#pBT8AK7)Psu_Ti9Hv=crA8@!= zm3lF<f_-<d)QFL1vS67TqX^hPg=N}|vS8M>GF?_x1~z6ju<L}&Ef{sdZb~fIVl)G@ z7MANV+Jjy9zTAk>9qc-%3TsY(24Us^1_|asu<Pbm#Bhc(urh}+a50C2T_;-^z!}fL z%ACN!&725!U4LaHYbFCHa~9Zj5>;M|#bDRfR2eZ=fo(WfrOwy{b{BuOHe)xK6;iFo zI)#CqdFtf$>QvS_44lk!Cx5ICWLyGvNpg)I<C@8nY8)B2PS&rLn*6TDfpOnt{aRPn zV+^d!$0t|Tx-njwe4sXf^%es=^X<u^b;*p6!2as1(_(xLW}U0kWBdZPU#8xO@y}%c z`e;rT24NOf1_>56u<y>)$8d5nu(EJ7aIx@AHf+e`6k%Xx5oO?J5d-^dPeT-|90M1N z{A9s0;mLZ9$&4D4^=l<3uWmGA)CZgVw^5zZ9PA&vCT&IsFsr%AiPxKfoyCVih{cyd zn#F(er6v#7Fa|c3@X7Mc;hgadPZ$^&6d0H%JG9DAp4WU{HI0FTC4+&VC5u6tC7VH; zC6~dNC66JEC7&UWrGQ}`OA*5Yma@r{T9z`_Pv&jco}AozU$u>agQbIkpQVdInx&gT zm8F+Km!*#(nq>k*GRs7UK9(sA6If<UPH$VvxNtIWdkN#x$xZE+j4LPaX<wkbm4TII z8-py%b_OMuoeY{RyBLgF_Apqm>}7CZ*~j3;vY#P><q$(W%Tb0DmSdAUJDzBsVqju9 v&A`iYhC!6&9D@|gc?LO_3k+&37a5FME-}QiTxLjSxx$dfa&7ap&L}1T%JSa- diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationOb.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationOb.class index c4e68e17cc1c8b5c83dedd72fe59f5e8eade17ba..0354176d216a6f682343d291ca9c3d1235c2adee 100644 GIT binary patch delta 21 dcmcaCaam%+W@bj?&0Cl^GcuZQ&R~7b1^`_<2iO1r delta 21 dcmcaCaam%+W@bi{&0Cl^GcuZO&R~7b1^`_`2iO1r diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationObject.class index 62442c106146b74228612030479cf8dabce6c304..65701bdb3c6e361e6703386d5801c88a6f993c5f 100644 GIT binary patch delta 1510 zcmcb)o2g+J6W6JKyY?|KFqkl(-pFOnRPW4mjEm_Y({WY?2;kyoI>B^Oh=GCWybuE; z(`6wBCZ_8ku^a46H@O%ZnT~NWxHH`X>AB6taE&RLo#_rIgCo;jcBXq=3>{3tTnvs( z_t}{qa4~d4I1fR}9)XC*AmRx~!BdcyXIxCr>zQ7#GreSIdd1H48f1Df2h$r6{g#W# zndu!D(|e{5Tny8gK7urT0ui6N7}}V=fLMn?tgj#=zky8q4kCVlh@T+h7l`-`QuhZ$ z`~|t~ABgx5BJOiBI5IPEF?1L*GjK37f_O|I2j2$~2SCJOc4lUfFbjxa1rcoQ%<NnY zj+3*Q^&{Dtg}4|FGYfMw=`xFOGB`4evNMZuF&qbptY8*rXO`e#mgHhM#q^PzX$7+g zh>!v)ljdNS0nxG?%yL`|*O=u&1}lIFMRsN-c4p<tKbSwUX(y(nxMWTaVAa^H$y&t1 zqQcIsx_LgQF%yd#Bg5Ir7kw2bzh&jx#G}Q-sIggFf}f31bF#JED;6zA2FuBeTpE-4 z-MA+|aAn<`C?C(nsJ;21;u&Ff9d>42c4ocFQ%wE1^%)shyfgDs7#S?!>J`j*84V`u zneFE{W@KOoyCAuQkwHOY@&-#WiPDnH9DU!!0&7MF&Z5-fg8aPV)M7>kp~(f_B9k4> zy(XVA4`F9#He_U&qcQocdGO?|7V{ZRHiud+XJj<r{MSm3Rfvaq660hZ=E=-c*qNvD zFi&HiKH0!Q%xs1LlRrNP!*l`WnLNxL%(DcTXY;c%&k<mr%fmd6dA<Pi0)AHJg#yfr zK-|SV%uAS;GBSuyo)9k1%fq~kc{vYrFJlrTgZkvgNOcY#<`qmY85y)EU*yqd<zZgQ zylV1)2S@(ZjD_q>FL@Z#nfw_Uw4x^;4AY)m<rvMkhIuUy^E&4B?93Z@m^V&-?C2`7 zi7|<Xc{B4C9_Fpg6Brp7co-KkE@osfoa`u~GC5y?cXFXqx5_pi=IzWoco^<8JYZxH z%t|av)CUKUM`CeCaB2w;^G@a+lNFrHxOah6Jp`!=o4nB3kOLa58k=7`J2JBDW@NAh zIU5{bbrRg0b6qDe3JQSD%Sp^j*Y{7#N=+`={M+p>|77m)8s<IBdnb2=$FlBYWRTUE z+#fDEnKdGbbw4A6DVVppHKLA5-~bQvLFOYo%tx7z@i4DpK0aAE+LZC+X3uCxMwU~I z462hSM2k<(i{{(BIp(mHGCu<g0~-SaLxQ%i))t2I#~Jvwb~7B0WZ%wkVk^UWkdV&g z4b#Qyb#^kGWnu{5&7csuok7u0*NO!!x0B%<6GONp%LXe}WIpSD1||k`1}BC91_p)z zh9EG_!tjiNfkBUfn}LB<kAaC*pFxz>fI*4XkU@vln8BRYl);|WoWY6JiouuFoFRbK ziXoQOn&CME1A`VrC<}u<gCN6ChIb6iAlEXAF#G@)SP4w_4DT2i8JHO2n6#N37?>FT zFfcHPF)%^YGdV)kGubmaF)%VRGB7akGBE#P5M^g_7E7MIW5z>6cLpw24+ddYPX-xQ zF9uasZw3oi9|kv8Uxolye})*=K!ya?5QZGqK!$wQ5QbXT(8;G}YRiLc1(hIWOxjF3 z3@l(<c^E+EH-PM#EHW#DF>><7G?B>@XQ?vAZr(m?KU1<gqrDm@V+XT3W2YJ?;}m9f z#&|VO#-+^ajLXzGne>^}nGDo8nT(j#nT#DInar5gnatHVnGZ3aU_Q(s$#jZ=fkA<R endvkGGt(KSvrOl}tP4yRnJ$4@SD3CcT>}7sY;qU? delta 1667 zcmZqJ#dLEw6W6JKyY?|KFqkl(*~n$iRDX==I2Y4FrW33T5WvOFbdu?m5Ca3#1tA7T zrYk}WOiVXGVmH~DZgDX*G9Bk)aA&#=(sPH4;TlsgJJVfG21llQ>`eE$7&@4OxfmRo z9<Vb#<YMTCa2|n_Jq8g^K*Up!f@dHt&$*ah)HA(gXL`lX^qQUN4aoFh4yLyt`W+Y3 zF{bxiOdps&axqL}`UKMS8AN>HVrXOf3Su1wvA%(f{0=hh2Z;CyB7T90-yq@-NZnr$ z@eky-|6B|m%nTsb11<(fW=1ZC4jpDj4rV40j~V3P2O#1Ah&as7%mNZ-1rcl@f}MSG z0keJ_h$+O*EX>7lm|29INtaoalfjW$jGbAWi{Us(WCgPXJF_GQvlJJ@DW*@{Oe>g0 zL4-6&nG6TBEQprlV3y}%xW=piGEEUgD6umuvootq{=xi7(k4B%#3eJiBtAH`BtAGf zBQ-ZMq_iL>HGZ-qtJ-D>)*==bRd!~z&3&B4OswjR3}-bafAo=`e20~5^LuVB9!Aa0 zQWE@Zj9Qbm<X*98Gcs6CPUKOXd?Av3vx9s-6Qj=N4T@)k*>%~O_1Ky9CpVk=aT_o) zuy|+Yr7$vBz|>B5kmsJvZ^p}LI9b+gzl;eZ13T1Nj12l3K3R!niTb4_nK}Bwsgva_ zB^1GI-^2oIMh3PLkZX$>890kliwpAeic^aj8QdqI=aic4V4=@vhpKs@j*0-nkJfh9 zj10k(J1v6+85wS&*|Shbg$G&b<POW|$vPG@7)>`HwOG!`Xtp`mN{+Rjop}-u^JK=! zJj_#=r?N9o<6)l8JcE%zz$rh!q`0IgvA{RABqKkin4gV#rT~*aKL^8f0p?je%pJ_L z1(@gXvog;WV4larJfC@i0P{kAR^~+l%!@(XB|OYanU^s#h=V<!lbDyTA6!zDnV0TV znwgW5TExS=oOuNgGg~iX5+j59<d2-{96Zb`nO-q6XirWQ(dOV`Ud6nckwJMfBfs+G zNe<HdYZwdJnO^ZQrZf37GH69ZgPvpZQ-@f-wan{ynAbCJU}xUQ!@Oy7fTJt-X2v8Q z<}J)yd6>6NUf_6=Z95P14(6Sc^PQxbcQNmr-0M`vy_<O_55q%-2aF8qllhztC7@BJ zfsv99I?HcPbyj9%*~7?S3vwzbzBli4na#L4$L%-2pa8;;{z+M>$t9Ch!|K@gGVfz# zkk*)N5Gga6E!>uMKO=*z#^i_Ll9Lm|lUNThGMIvSn;(YPF$o;xVLrrsl!y5k^Kl;L zwah0b=SP_`p4z-L%8`-r^ycT$udS3^7+4tC85kHUcQYK0WZlki#7|dyC&N)DhHzaS z2tE1kH1T@foeU?L7-ll??q)a@DRf~w!<qeBTNuvk?qoR2#1OulK_PNGgQ69SB#RX* zRQwzhL%1aC1}ipXKHGi<CI&x-XogG%28K+AY%tBj@Qi_h!Hj{Ifq_+zfs<9AL6Fse zL6X&wL5J0d!IIUO!MUE*l);bHoFSamk|CPah9QmBk|C4ThM|nrmf<<5EM;J22xkyt z_{s2&fd%9nMiGV|;NrBB$)4c>10zU`$${Y=0}}%$LjjXElMVwj!yg6)1_cIYh)yO) zh)yPZCMTGBCT9jFMvz`^UIykr3_9#gx?-u5?@xbd=*hsv>ct?;>dhd->cgPQ>dRok z>c`;5>dz3s8psgC8qAQu8pe>r8qAQ-8pcq|8b0~s3~fe-$+9!0nH`v%CtJ_VV2qxu zm?biK$4phm_|5lb?q^EYV6<1`Wb9zpVC+=mWSqjR!5FW`$+(nRgK?P}CzC$229tpr zCzBDg29vRaB$FAl29voOC-Y(ElgvjLB$-Y_e8Y5xftl$n(>bQ|VAe&ZOH7x+tgB4d Hn63i=*NU#` diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Options.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Options.class index b475b99ce754c49b4fcc8b4eef0f6d2b9328a469..12e8b784823ef3119be920dec98a205820fb54ed 100644 GIT binary patch delta 21 dcmZ2vxyW+EI(A0m&Fk46m>A7Bf8g9C1OQkW2crN0 delta 21 dcmZ2vxyW+EI(9~r&Fk46m>A7Af8g9C1OQkd2crN0 diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterObject.class index c735aa730843498b274618633dd32d5ee62b9b6b..846fd0a4863b1ee61eba7d99967934c62adf2953 100644 GIT binary patch literal 22129 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 literal 22668 zcmX^0Z`VEs1_l$RY%YdA#s!=V5{wH$#3FXa#UOeKJL6I=1~$e8TnrM7%h(y0b1`s2 zI4eLRD?!965V0CWtN{^gLBu)`u^vQh01+EOrf&ifn?b}DcE+tB;cXx*wsSG=VBE>h zxQm@}H#_4VcE-J24DyT%I2iYV=>1%b2N(}>F&<((4B{T)Vvu7z3etNFL>%X0U|~D~ zVx0uBPJs+R4Knl$h&T%(&Vh*YAmRduxCkOHfr!f>;tGhk%E5RIWX5%nPnUs+8zAB& zJL64|@GTH=8|3jDAl4la>n?~m$<BBWMBfJy%RmHJ=>w3ehwO}xK=fk}@r0f6DLdmc zE(Tx5=iH37j4wd8zGP>7#l;W^5_!$|hMn;(2je>~h7iW1+>EaoU$8U2=VFL}1odGq zMn=XDAnr$yX`eu>&mh(p5bG<5^$o=O4r2WPv3`PBzd)?tAl4rc>o17)55)S<#UR1N zz{Oz0#K^@E!NdgOGJ{wwAQme-6B`#pA=qjrb}j}^CJt`KdL~W~!NtYk%)|{Mc(|B& znfSOF>zMdKIt4&F1wn)m7lS8Ai6@gV7n2B+C`eWeBq0tWB)AxSK(anek{}5wZpPP4 z(i}`OAjimZFv)Q-^fAeU6e@rSMRq17b|z&;27!|N?9{yAlA_GK^mxC-+*C#eA)l<o zvPAuy#JqHUh=esG10S+F&pbv3aby9P)Z*l#%z~24{5(bmQLv0tetu4BVqSbuYGG++ zQECb!gD{f0P+4n6200YfE~y1YsmX~YsVPtuj0`d;3LJBC^2=Rw3rZ@(5_3vZ85sn@ z(hzsX2bWalq%tyyfW@FD#Jg4$<m9KMGBQY^2!l-uN-a(;Dg(O?Ea{(=m6}`<?^=<V zTL3Z%IV>P@){G36$@#ej`NgRLiA9OIsU@jJ@o<)ZQoL_sK|Dlhe7s|Dh+lq6YJ7ZI zW^rZ-$Qph~Ae5G5=I95fmRK_~h!iJhq~<0<wZIiJMlmvo7r<;lmu0ib%*!mXV`N~~ z&<tZ_U~vX}kl!aWFV(L!Hz~C!Bryr%{`};`oUp{AOb{O`$WoG#S<J{_=#!GFUs9S< zlv<pUnx~(cm!@A_qMu)onwMCRsh?O}qL1V)P_S4tGVp?|RdLS9%t<Lq&0}QD(17>{ zIkAu^0*xkXByGeALE@ZPeT4k#Ur>T<6ePf{2?mi@VsVLMN{UZraS06-gW{N}z<`l~ zslX6K7=Z|55Mcr$OhJShh%g5c79hfskwKN9>p`AoWMD2ZGys!^j10O2^&tBgtjh>Y z8Z$D8`Jg1W%7RpAf(s;QsDD9;4M9c0(2QbjXU)hEOHetILkXJ=&G8|n1v#m-FyA>p zuOv0E1Yv#@wcTHmnpd2ep9gk4XK-eEUSdgUQ7R*o;&95Mgd-9uksy^QWMpT;R-vUC z>P9G9f}yVAt`&&X0xDZ1gG%#CGILYIGK({la#9`h^72a(LA7}?JCiCS1GjU2UU5lL zX>v(^5hDYSXI@@vk#kOBadB!fBZECbr$K8$gsCb>=2<f`u;hW;9W0RM2NS4u!Hv?Q z;6OAY1hKRb_`y{<a-)D1+7Mue*ZsU;HHhk-1C~x08Q7um$jHD0Wr1@kBLfd|956C) z!b6Rbfu*FfAeE7U4N?a&GO$CdEJg-iP*Dam+>Vif4U+U286=U*BV>#0(BzP9wPR!u zL)8b3I6FoLmh8;D6h;Qt5Ks$_k%8I2poEcu1ymC;GH~aW=E7@fP$R*Uk%2EavC<>4 zEHx;#yeP9I72I}+Vr1Y;%PB3+a4ab)a!yRn0JWaL0?zq4IjPB@GyoN5P0q>BOJ!s* z*3cvv<CqNxmOO9^h0C=fIThSaEM{b2NzN~*WMp7WWn@r8%B#*Gd;IcCf=deu@{3AR zQ{Z|)4UpiH#N=$>!~$s5!jV>*lj96FhYOK3Ky?wK5sMJFW@Hd9DN0QRY4FPrDN4*M zPRlRKWn^GY1~q9I83=m~nwYH_85lDe85li5X`v`Jm63r1W-ucIM`p2#Yhh_(4kLq( z2Eo9BnW!1X$iQBlS^~)iqF9P;P*!CvgS30u(_tz_G&GSy50WCS*_qVXnba8>EQz%q zDR+Vslr<v*YjJ7`C^NFALukI@)Do0@$(N2Mz+IeLg2=04$X<YE5NnVhxYLo9iK4h4 zrVi9F2APi09}odsiXkjioLU0T<H+TJP&yVtj^fl3X!*dA4rg)|r<TA=3$An|jsVPL zMCl;_GZ!HQ3LIFr2j@f$!Z8nOeu2V+IUkgDLx|EqxLSg_!rBfJ*dXshTTYA&x`Zu( z>jybai(vYJD`#Zj&PXhVaTysvv5es95K(NvRD=4PpqPQW8XTPJMCb>FCnG~JaVkj) zNOmR-Mg|W5f)a3{%E&-iGc;EtWh<C&Yeoi1RNtW#MUaFD?SG<_0+5;n9I2253RQ$! z06<kSG6;iHG*}I|LW9%{280s;QiTJyj3p<txP*}*fh3)TLkPJJgr-$ce)TKOMV4V? zkOh@=sDdZ~#t+V{2!Ap%7;1PDF36EBv1Vl8&qypr7Gh-JPfSTc6)_|n0>~P`fu~0> z1EFYPWROC$7S*q4amvVGM53EKLAhEOEyy5AL!XF@gPb-P8RALPL2{a4XVPS3-~_o2 zn(u50h9+jdgKM{DWRSz+ag+d-LQ{YuDS#$f%*Y^(E`*{1lm(HSb0DWsKO-UAfSQqz zW#AbJSrEmwpp1kpNn}Ps)&k8)$U=~egepQrMncv=WJW^K0?A0oLa2T%PAx%}Bq}2z zYp{lABxF%Y1XDd*AX@?M;DgdJvLMJ_6#s$JF|q;_Nl-dQmV~Bb6d_a%;9>{b^#Iw$ z$Pi1o+(9ZUh{^d-<Dn@Slo-KP0aTcg0pulQ5fm5lfb$_-tsZeT093s-BLfe(_=oZt z8F;{jFr2GL*t77?Avm#W6D+3?>KPftk!?fu7IMHdGU$`y4sZemMK#<iNX*4hztDyT z6gX)@N<^p#$VL<oi6h4oiVQEZOfe&a1PUKTsQ~%_JR?Io;gCV<ltM>(!K3iLi3Qf0 zKKVuIu%U00Ed7GSqT<vd{oMSN)ExaXW5hr>sM}Y<$iS5fnIP~@EMR0n9?}OH#>l{x z3>obMOY@|{23x>fPWYHUsJBUiwFQg}+;F}ANyH4*BKw$;fjJlCTJCtbA;pXg0+5~~ zI3PfAWzERog(T#gSYQL;q73lkcQv#<15OM+5Zz$&$ui70H6=4Kq_O}qC~HdCxGebG z6|^A?8Z5@+45%uC`4!r(u(q>iXVPM4(q?DUVQ121WLQE;!b1*R(j7v4s%2-=V`Sh2 zjqzkAm4b$T$Z1ExwOg|@=`%90c!P(ZEQk#`q@EB+r!^x3b8w^|JCgxu7%jiFC^?mp z!HNvSg28&N85!6TiwjbdOBfkAoFVgbMT`twDXGahiAAX?jwOr?p{`ajNuV*Vocto) zl8n^i%;K2f%=D1d;u3Um-K@molEjphnBt=3nB2t7ycn1O%xt}^qQrD7V+$ij1|H-Y zJVpisBFa}-PZv6^CWLH4JamMIaL)nF6i&~)G>8x*LkKne3O5hxSw;qac;Nv_u8a(# zXd*DzvjwH5xu=#eG6Yh?B@n~l&fqM9jA4f4Gcsrs5!|rM3o4ou^WX!Z#B_L2%TO*z zYIDm3O|FU{$$=tL4^;N>Ff3wN%)>CBVF3@rLWTv54C;ht9-)roVKQXg#mJycNV$JO z2@jJIlQAQMHX)@*4KN;tKMa3)7+F9B8;Iaw<m6%G0TFy4LI5Nt1Y(JR2z5pc9)@Qi zk30tvFBs=CGUyYs4lOu%7+x^E<Y6*l_{z?>i-+L_qZT8BRy46W+?tU=1r(l;bqKh} zgc%w55z1VPia;|I;s_DQaHvyhW==|K5hH^<ScR1Wcr05XFTX^g7&gkRkd|Mhz{6z9 zWX8^9&ckHEWXaBC#l!HQk%5N^)Ield#PFAg;WNWa9)>p{;xprH9wr+mTONj=jI((d zelh&!VVJ-$k%wUth?oo_rZ7z9VVDLYrh|wXAhDSs)+`V)n_&(k0|O7E0;3`ilO4lj zMg|Q+Aq>gg{z*Jc_Dr@sj8=@+Jd6&E);vrOAniJYv_orV@MsVZlOvN84`U$6h+sx* zMh1eqk-G;xj42?EX&{Z7gsp|P1{oQI!7&4F4mcJSC02sk96St*n4Ec-T$o&W80Ip} zV`LCSDDp@w&InE|VP|sVVRC13Wn_>7%Yj=X&^ask>;NM}f^%k3a%oOtkwQvp8fc|L zW`3SRewspJNl6j7;!{9MqI&3!NDU-O9c-&OH1!x6)bY1{;70H;c`!WXVfe%3$-~IX z$iTzM0%CD7a`P~9FnRGXvV+9fn7nxyc^SERn0!EDf*>&gkeDb)od`%w7{n3+vE&%# zd6;~e{CJrBnF4qiH5s*d7}c2qc^LIUagP>ezKI1qj834G5yTYC!xX~sl!qylQHzHu z43wP1nIhPkB6*min4)=@VwhrinBth?c^KUo9`i7Uf;1&CC9*Rm@h~MbrSLGNg5)AW zav31GG>|drOc^{(nV<-9ASKMfr6h7)r=h9G!#II)A|r!6Ddy;*RXSi}W`VNdPf*tU z!0?iY(h(k4pvE*LVS>{YxU2y!mtkkhVq~x-l)9nCH&XKkX?By5K>(3pA!QLGgE{F& zf~RB{8LUXx2^)20WUwY(GbnpPN8b3r{s8A(kSHSqFG2v^u@OS>JxfxH62WuDNWmJC zQIuZ}3RbdQ0&jdWGMJI>4^V@Xk->s=jgab|k%0p|KL}d#!~mK;f`$nZlPS>D0U0e~ zD@ZI#%_{*lRSODIL6f(-$WvsH^kI!Tn+L7FtWi=EtN{j^!vasnGcpLH%%p(@K?8E& zh=C^U#NuMmRAoNIE=C5hZphrH4l!dUF#kZNcl@BU%!~}65oK_wpmfy5AVc?<5*&#s zDPU33W=KIx-88`C8qA3)DU1wQr$?et(q=HI4ax!PkSAv56*DrhXBLBJ2pJh{v4%a7 z<-0W_gCnwj*t8{~KAB@uF}&QdW@K<cHUknT1P3F~jNk>&%EIPD85ww?^%|tDz{rqD zxPuB&>YqgFun0t-H6sHje2$TkAw+|~U<y<hB_Rb#`=o{xM<%>n5`*OwaDfIZudEpv z*fSD~{ZcDHD=G586kB>~iFaxxBLie44Lr>Ru^u!$PV_VrM2j^egD#;$2---4XkcXE zgGMJ*n5dC1s9J~-q(&-KGpK)FP+G#sV1b-OQH%r^DNqsQLJKOy$N*Xn05z@{k>9{U z4jL#UF$I7o2jRm(5Icxlje@4hnux9pnifU|*pMS!f{`JcaK?hGhB%khsDNt+FB67O zSiprrMR|H^33Meis33q3^%gTS2tgwb5#C{p3~WWIx%p+Oj0}c^(jl~@N3?4g6d5EK z`WP4)`Wbi`SU`Op1_lNeP<IDRPiB}1rl&AW1=G`@^mHga11dig%AW<LXEV$JtDnm- z4@}QzSOBIMg6UWWMutTUiy0UhmM}0dxH2#?FfuSO@M~>nVANvX%D@C7m^U&oFfcJJ zWnf?sVqjrlV322EVYXr5WcFj=V^CmN#=yY91JTB?oM8n60|O(&O1P2b49s9TOD*=j z3@lq2ShaRDutjcXU}xUOz@fF9firSD0~ZStn-z)8wvB-UVYw6o8v_G_CIbh97J~?b zHiH6#4ucMZE`tSw9+D$0;f`3uu!?~h<S)iP24)6+1_p){RDWq{Z)4!r(%Htqqouoz zfmchCWg7#ZmL%&o27WC`wrvaoT9WMB7zDK>IkqtfX-RT!V-VJo<N`Zfl6xD2h?XP| z*yWPEU`I>x!Q9IX4lFMQAqEBpbELqsU=U`oWRPI6VvuF9W>99ZVbEl-Wzc7^V=!f~ zXRu~)U~pt`Wbj~cV(?>dW(Z|)VTfUHWk_al1N(0V#1ByaF)*YstY(-94%`%mH4GCO zm_R;cSj#Yxff>wN$1oKfT`3If8KyF@g2gs4Oa+Hx3d2T*i45#uu}ut9892bK%?wi+ zIKiwf3|kqvz^rWya~Qb6tnCat7<j;}oeVn|c)_e)3_BS37<Mx-Fla&T+QP60s&hNT zUby;waP|8c_!tg=6VyS5LktWIlNlHpjxjJZ9FJz;D`q%R%y6=p;Z!lh>0*X6#SCYQ z8O{|moG)g$P|R?#nBh_}!{uUzE5!^~8LokqUoU2Wpc};u5Of{JxLM3_tC-<-F~gl= zhPw>+z{>9zGvGoGz)}y389<1Eh2asyV`!$(VPFIYG86k6u(Lt=fDJ6-4UQH_+Gm1B z3nRl5hNtK{nbCCyVb%Ezo@<PucCu=1XAni?04{JGM=-E3L?Ri$3b*<>Rs+P)4Txi4 zVTi|Szzc?#3{0Rb!{Efg2)2w%YdeGZ0R{;l?G13>L!6Pqz`>9THbo4g66y>N1}27A z3@aEI8D4`68b$_L21d}B4m4EuFtC8tJ8NxYko3`J+{z%OwS|H87=xfTh~CB^eSkq` zD+8<c2A|ywa*?|k<RiB;C<rNTV^GrC#-O~7L1i0*(l!Rw?F?%B!O@_=pvWN00LgQ5 z;541Xz{-%zz{QZqAjpu<AkR?9pvX|fpu|uNcCG>gGXpDw4AhZI42leI8Qy_Sa)x^0 zJp%)SC<D_U26=V{iT|LuU}unEU}OjT<O9P?NU_4850YVEU|`kS#-NS}9!TP70NVvg z9IzPr$N&PMR1Z?~30zcuW_Sq=m<<ff;5=liwT(f;2NV{^7_^veWk9Tbix}iVw2YCT z?lA^F-E9n-e%iV++ZZ@nm>8G;zXy&TND!!jvv3y!D?>K}4?_=wI72Uk977+25<@?O zI>Q78U4|Y8V}>bU=YcY<90NbY7lyA4%nW=Cstn&4zJp`O6dDw)3<eB8z_AGm6kZ1A zzYKir3=)iTzZh5<7#V)TUB4dcdJ`nqYa(1PrzNwEK?~-1ZDhya$8h|723Cdz44?sC zafU?<vJ8tE6d9H<s4*;M&|z4}V8pNz?s!=w$E&~{ZvuC`K32!ef*j8R8dHP@{cQ#& zu&-xnX>VuHnaMC&YYT&}_5lWoEeyKL7+STqFz7*eddnEfwYD(mLwNej7&5iCFc?61 z2Fn<twYD%ALU@MD7<{$1Fc?92M#~uNwYD%ALwLr^7!0+xFqlAiCd(L<wYD&rLU^Xj z7(}(UFqlDjX3H4ZS(Y=ffJ+ca{DP7W1H*c75I}O?EU0%G7-liNV))9y$N-8fb_S;3 z3^N=+h1Va3zfh0bK|RW*rM;Cw7rkKE&cMpB1Ib`ExWQ};|G;$(BWS=DT10q2lfNJ+ zu#PcsfvDvStU~6Xtbpv+!(byJSwRqLB-Dj`j_iz#;Cg_Yfsql^R5)JDaDsu6kp;Vx z_0XMsnt_$!4A^`~SYUB7Xn+ulll34@*2C)L>tG{^ck)RFMn*R5PS!_v@_hzYh6iBt zaXXov5!B=YwaJh}Ss&tLeXLG?4K|W^C!b<qWaMDv#Fj7&(4G95ftBG4*nDhGo(f6` zj9iS|&`?H{i(42BK#2j;c!VU}|6pSv&V-eVpb`-&{!cS7f~HQexy%sFWsK|$tc)CB zBXPTo7puz*(OkwT3^oR@%g!(`GV);$Gb41DNi(oA%7Bf;?J|C>E;B-RnL5}Qye>P- zz{n_oJpme{yG);fmC*ofBsQ0Unv{%;f>;xvF(d&RV@rUH)?gzct|TU#pJQNT6v7^u zCg@IfW?*G>0h^D_$&dsnj5RP#&;!#SYz)MiI1=D_21Z5^>@G7!cUd?CD`N!MNZc+H z#p*IsbeAQAjlt`(3k-~mVvOR@j26hi46e4=wX{LK5|Gm%<u15|#+bvv#+VB>6XG;> zXxYoaz|JVau$6%k+;E532NK!CzzAuYGfFZrGD<N@Lvx@L)EX|WZ44G5n=C;#K{7SO zrV<8D#!@7kxZpN%F}z}w0hbT5@OH5)h|j>lAOJFN8-vwM>~$Pt4cJ78`vjmSg6a)c z1|~jGy~ZfVC=Yd_8MNoh12U3%8-w)$1{?I?Z9y`Q2WlK6XnGLZoHK@+!KuZ(jX~=G z0~@*ly+{UdLJa_SWf+y<RhTLRBg64xhKmf0jB1RE(0D>I*%ph*)9{$g$f(Y!0re(I z^=*b83-cIQ8Rvsdg2Xp!T{s66>Y#ZosH2ceX)|=Mt^yka33?ov<PrlTqc)=s)HI}| z2<j7qoQ9kfH!-j=ZU&nPaT;<`)MeO#mK1dv_QI2*9s?t23Jw|oMj%fxFfedvZDX+8 z#$b=uv0~f>wgcjB4rmlHG8(`;bIAG~wlO%O>ql;?AoLqDg7krEV+Uya36#$4q_;6R z9bj-q4?E=M2rQj}hDbn7Yeoh}Mq{iQ0puH88Q}_&udrqW6Gl^L0M#)tfxG{bT3Z;T zjx&I=tiy5!c2IEn>S%9cZ~?^(3wV5j52TRs4ude`T?Prpdtf_2eIo`2NodG{Sg#n( z7#JCZ8Q2&>@x%l#G9V&*8JJ*=O+IIK22KV>Msv7ZlA&(l*4oD4fUq5sE+Do)Vqj%_ z%)rI?1j%-8xb55w5ZhTXY=?+|Y-eP&V6=pKJ`dUl0mqJ?uC~lJ23L@Ok!^g#z{>cR zft&Fi*hWwX2oyJvfh!OTVk3wJiZ3PxRt9#k&za#qhluP24Qzpy2tZ4ZP-x2F)?xvd z9-NRKGsJ30Dfx|olkq#)T1X~<d6biZ32X(TJcfuMGJy@ee6fd=FP9k@K`RrWnGaFE zuxw+nJ;1<;mL!=Nz_voN1!~D<!@$Vsh&6dTNN;0s!%W^x>|nDXKERf|ofxg5&O($h z+ZgQ7ox~3|2I3@G2?HriK~8eUYKQ~6Arg2EaluwPfrjc3X#yNEObQHaOp0KmAl@QW zI_-m(POc1$pm}|0`U8~`pz%{s>Ew=CIx%U0?SS|hQM$NeEuB0tOD85ntol6|J)!m^ zmrm}G(#aD&$gIF-K>Ud<`n<4~P9WdlD4m#`z$QX`g|&3@X7qtN5KHOg0V$o_5#<9? z>BQv4Ak5^=Ai?AVwgX$~<cp_t+J{*>`N7?STsnCmY=>l6aOuPpz`)8B$iT$}8Lora z4$HI*44~2pWILoR+QEP*8zCYf+Zh@C83Ul6M=qV*v6oIvQ4Fk1(G1*7F<}2<E1f_# z5-y$gflH@AMr(}Hi4{lb#FWCo$%H(f2lFVTEJCiLAtH!O5QJVjU14Bk42I`mMCrte zy>!Y0dlr&_P)nyE21dpZtjXI0QaWKIZ{$`ew&WcOcNTK#<c^+8YLT3TS~`K86o%Ch z4|GG?@EQ`1t#m@2L4cG_eGF_&{a~XYxt37r1R52El%x?1jEs?3OBXLJr4w=^6j3@w zVb$-ArF4QcJt5JE&>zhh15N+PrIQz=bn-zDvK2`F#1?(ASW736Z*Y}P8^9()T!poC zierq2IuJ|g<P9mEyb$FBa_O{#L6~VLg9H<#)d?vdP}@!kcuJ@Jn59!9+%3qZlQ+V4 z<kD#$11r;h1}>%pU>`zkhh<tw=>)PJQWjyBP9WPE8Iu^3p`J%BoxE_APA3>xnNBir zGo1q4h^=%2*+{r_+7B+BQm~XxY`99NOAMS$m%-LTG6Bq^kg^D~bV6i;RP@s6Dgz^9 z8axLhN+&k#rPCd-t&jwSS~{gNFfyiNP2S#+(g`DZKL(ox@d38vodI_ia_QuSo=cF2 z`cO+Jkdrd88sd#^2xL4D;x9}?vKX@=RR>En0}E(Ek11?7gKs43b_PE`UG1F={!9$v zx;hYAYYRibaRz>^-3)<|?AsZFwlV~OgmiZ@1T!(rWZ>P+5E3aAx}70xKU6rJi6MM9 zLqz0uhDa+G&_K5pD`?g=Y8ylJECxPF7APks9K?u47LDD;5C;~GKL%46zl|XQER=|> zFmW405?C}Dt}uBULkd_Z6<J~GHik5?XgXYB`Zk6PuuvvkD03S_7Fa0z7=t*(f!QF( zW$SEX$l1n_3zo}+E6>};kPj9rn91O~o1rjrJ42Bb8%RU(Hii-_c1iY~45f?=GZ{2M ztTNEBi?bDnBpYa^xg11P=<Hyq+{sYI%n-i({}o9V&~$V)*u)xi6Kipq=m|5i4rF4z z&JKnKG!q-aCSnQ7rkM;LD9&z1wL}H(Y#*2<Eg(x;VHVtgIJr%d#fl9Y>FrDm;gW0{ ztT>VRoS<UJkI90`je&v5jmZN<GeC;ia}34|pdKnGGb4i_GZTX(Gc$t@GYf+yGb@8L zGdqJHGbckhGZ#ZFGY>-sGcQ9iGao}8Ge1KovjD?HW<iEI%t8#ynS~iPF^e$lVisjM z$}Glkfmxj4HnRl7V`fQ)cg#`@-<YKt8JT4mIhkb{Wtrs|Rhi`(4VV=eEtnM<9hsFF z6PcA6tC&?7o0!!YyO`A(Co^j>Zf4eGJj1NTc!gPq@eZ>t<8x*`#`nznj6awSm?W4D znRJ<rm`s>WnJkzsn4FnSncSEyn1Y!t!8yN*frl}XL5wkn(TstE(UHNCF_$q9JTw9l z^JU;*oXp_Jm=6+Tl3);Gc*~f;z`^)~!G^H_B*qZV_@1$lv50|%A(rtaV===D(6l~N z7_7t06vkM>SPGiTWC~*}W6Wb<V&G)*Wh`f`V1RUAwHR2SwpKE*LG7wyV1wFF4O$ui z)>#9sn&KJ6|1jvVGuDdzWzc75h+t=s5ETMJA!(t%3{vcjb?l7wzZmp>F|ea?k)^eM zF|hq-5M*FsXOLiL=mYDjWng4yY=90oHiC<2X$B_776wL!d#Q}=j2(>K3`~qY#f-g- zeZ`FZ42+;<%+P*i8FV~SRci|a6Rdpc0GBT;pfxMo7_zr9bozkSt}r3ZElPpB$Lz|$ z&g{k@$n3!&#_Y);$Lz(R%<K)097wUO3Jpv-26o0tjG)yCpdm+Q21Y?Vj+_E=<WvSm z#%b^g^a7|OLDRO(Fh_R59LcN&b{;c^^THX}nIjkknWGrQn4=jam}3}ZnPZWhCl7U= z1Oq$cbojh10q4yCId3KdBjYT_+0g19QNL_w=tip=m=nPkqE-!zjC0^^FZhxO@U$dk zAQ(Km!wl&_Ky*TvL<l%C{A8SqVeK}C9yDtiq%f@&aAf$5RWrtXJ9f<<80SJ04Z_3Q z7<!4Y864XnPkmxw5O8F8fz=>MVhn;Wg8+vFW(1HB64*2o9TKyt6B2K*q@isL8bpKy zI2f_Hg5+R)!Kj7BGo%^Az{Chz5y!+hpW!G21A`R<JHufn6^0{foQzCNDh&74I2o0h pR2Ws%I2mo3R2c2lI2oImR2ZApI2l`+R2bVFBpExIR2aL|I05fd;_d(d diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Patch.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Patch.class index f680f1ebd2ad03a4c330e1cf1f4768952676a282..b6566150b3f9f4122597a541cbbfc43447f63f37 100644 GIT binary patch delta 21 dcmbPbIm>dxDt1QW&8yiRm>A7Bzu{ab1OQf52ZI0r delta 21 dcmbPbIm>dxDt1Pb&8yiRm>A7Azu{ab1OQfC2ZI0r diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathsObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathsObject.class index 6fe7326c466402b960d4f3232dbd090dce48f0c0..b8d3036127d5729fc7a39ee97ae6fcfc7be49291 100644 GIT binary patch delta 21 dcmca;bJ1qQUJgcs&HFh1GBO%(-orIj7yxGJ2#o*$ delta 21 dcmca;bJ1qQUJgdX&HFh1GBO%%-orIj7yxGQ2#o*$ diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Post.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Post.class index d33e7eb467fc48f8c041aba27310294d0f6c3826..73bafd4599843bd81823d2b41379565eaf0aab8b 100644 GIT binary patch delta 21 dcmewx_cw0C0}e*x%?~-uSs2YXOY){D0RU|g2k`&^ delta 21 dcmewx_cw0C0}e)$%?~-uSs2YWOY){D0RU|n2k`&^ diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Put.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Put.class index ba73674a9d8eb25f101a2e25cfb758d6a511b28b..a1bead1590236f3dbf6add4b73ccaec962e26dc0 100644 GIT binary patch delta 21 dcmbPaImvRvGImDe&CA&xm>A7Bzu;UY1OQZ#2V(#L delta 21 dcmbPaImvRvGImCj&CA&xm>A7Azu;UY1OQZ+2V(#L diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Trace.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Trace.class index df82d8488e72e2cef1dac07efc3c6655f95a8233..07b1212b1c59fa2804e6d55a355a37f2fa0af8b9 100644 GIT binary patch delta 21 dcmbPbIm>dxDt1QW&8yiRm>A7Bzu{ab1OQf52ZI0r delta 21 dcmbPbIm>dxDt1Pb&8yiRm>A7Azu{ab1OQfC2ZI0r diff --git a/build/classes/java/test/openapi/OpenAPIMain_test.class b/build/classes/java/test/openapi/OpenAPIMain_test.class index 8a64de368fe8743d13ff8370cebdac1ea3a4ac8a..862b12ddb39f7be5a4c1e6d041acc9b6a5a27845 100644 GIT binary patch delta 2216 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 delta 2130 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 diff --git a/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html b/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html index 709702c1..954849ea 100644 --- a/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html +++ b/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html @@ -29,7 +29,7 @@ </td> <td> <div class="infoBox" id="failures"> -<div class="counter">0</div> +<div class="counter">1</div> <p>failures</p> </div> </td> @@ -41,7 +41,7 @@ </td> <td> <div class="infoBox" id="duration"> -<div class="counter">0.633s</div> +<div class="counter">0.401s</div> <p>duration</p> </div> </td> @@ -50,8 +50,8 @@ </div> </td> <td> -<div class="infoBox success" id="successRate"> -<div class="percent">100%</div> +<div class="infoBox failures" id="successRate"> +<div class="percent">0%</div> <p>successful</p> </div> </td> @@ -61,16 +61,127 @@ <div id="tabs"> <ul class="tabLinks"> <li> -<a href="#tab0">Tests</a> +<a href="#tab0">Failed tests</a> </li> <li> -<a href="#tab1">Standard output</a> +<a href="#tab1">Tests</a> </li> <li> -<a href="#tab2">Standard error</a> +<a href="#tab2">Standard output</a> </li> </ul> <div id="tab0" class="tab"> +<h2>Failed tests</h2> +<div class="test"> +<a name="test()"></a> +<h3 class="failures">test()</h3> +<span class="code"> +<pre>java.lang.NullPointerException + at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494) + at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494) + at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494) + at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494) + at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494) + at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494) + at de.tudresden.inf.st.openapi.ast.OpenAPIObject.survey_OpenAPIObject_schemaTuples(OpenAPIObject.java:1102) + at de.tudresden.inf.st.openapi.ast.OpenAPIObject.schemaTuples_compute(OpenAPIObject.java:1232) + at de.tudresden.inf.st.openapi.ast.OpenAPIObject.schemaTuples(OpenAPIObject.java:1214) + at openapi.OpenAPIMain_test.test(OpenAPIMain_test.java:72) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) + at com.sun.proxy.$Proxy2.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.stop(TestWorker.java:133) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) + at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) + at java.base/java.lang.Thread.run(Thread.java:829) +</pre> +</span> +</div> +</div> +<div id="tab1" class="tab"> <h2>Tests</h2> <table> <thead> @@ -81,33 +192,20 @@ </tr> </thead> <tr> -<td class="success">test()</td> -<td class="success">0.633s</td> -<td class="success">passed</td> +<td class="failures">test()</td> +<td class="failures">0.401s</td> +<td class="failures">failed</td> </tr> </table> </div> -<div id="tab1" class="tab"> +<div id="tab2" class="tab"> <h2>Standard output</h2> <span class="code"> -<pre>5 -Loading expression DSL file '1password.com-events-1.0.0.json'. -Loading expression DSL file '6-dot-authentiqio.appspot.com-6.json'. -Loading expression DSL file 'abstractapi.com-geolocation-1.0.0.json'. -Loading expression DSL file 'adyen.com-CheckoutUtilityService-1.json'. +<pre>1 Loading expression DSL file 'petstore-v2.yaml'. </pre> </span> </div> -<div id="tab2" class="tab"> -<h2>Standard error</h2> -<span class="code"> -<pre>SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". -SLF4J: Defaulting to no-operation (NOP) logger implementation -SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. -</pre> -</span> -</div> </div> <div id="footer"> <p> @@ -116,7 +214,7 @@ SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further detail <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/> </label> </div>Generated by -<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 10. 9. 오전 8:15:11</p> +<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 10. 9. 오후 10:17:33</p> </div> </div> </body> diff --git a/build/reports/tests/test/index.html b/build/reports/tests/test/index.html index 3f9de5cc..38a8e8ca 100644 --- a/build/reports/tests/test/index.html +++ b/build/reports/tests/test/index.html @@ -26,7 +26,7 @@ </td> <td> <div class="infoBox" id="failures"> -<div class="counter">0</div> +<div class="counter">1</div> <p>failures</p> </div> </td> @@ -38,7 +38,7 @@ </td> <td> <div class="infoBox" id="duration"> -<div class="counter">0.633s</div> +<div class="counter">0.401s</div> <p>duration</p> </div> </td> @@ -47,8 +47,8 @@ </div> </td> <td> -<div class="infoBox success" id="successRate"> -<div class="percent">100%</div> +<div class="infoBox failures" id="successRate"> +<div class="percent">0%</div> <p>successful</p> </div> </td> @@ -58,13 +58,25 @@ <div id="tabs"> <ul class="tabLinks"> <li> -<a href="#tab0">Packages</a> +<a href="#tab0">Failed tests</a> +</li> +<li> +<a href="#tab1">Packages</a> </li> <li> -<a href="#tab1">Classes</a> +<a href="#tab2">Classes</a> </li> </ul> <div id="tab0" class="tab"> +<h2>Failed tests</h2> +<ul class="linkList"> +<li> +<a href="classes/openapi.OpenAPIMain_test.html">OpenAPIMain_test</a>. +<a href="classes/openapi.OpenAPIMain_test.html#test()">test()</a> +</li> +</ul> +</div> +<div id="tab1" class="tab"> <h2>Packages</h2> <table> <thead> @@ -79,19 +91,19 @@ </thead> <tbody> <tr> -<td class="success"> +<td class="failures"> <a href="packages/openapi.html">openapi</a> </td> <td>1</td> +<td>1</td> <td>0</td> -<td>0</td> -<td>0.633s</td> -<td class="success">100%</td> +<td>0.401s</td> +<td class="failures">0%</td> </tr> </tbody> </table> </div> -<div id="tab1" class="tab"> +<div id="tab2" class="tab"> <h2>Classes</h2> <table> <thead> @@ -106,14 +118,14 @@ </thead> <tbody> <tr> -<td class="success"> +<td class="failures"> <a href="classes/openapi.OpenAPIMain_test.html">openapi.OpenAPIMain_test</a> </td> <td>1</td> +<td>1</td> <td>0</td> -<td>0</td> -<td>0.633s</td> -<td class="success">100%</td> +<td>0.401s</td> +<td class="failures">0%</td> </tr> </tbody> </table> @@ -126,7 +138,7 @@ <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/> </label> </div>Generated by -<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 10. 9. 오전 8:15:11</p> +<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 10. 9. 오후 10:17:33</p> </div> </div> </body> diff --git a/build/reports/tests/test/packages/openapi.html b/build/reports/tests/test/packages/openapi.html index b4f04ceb..bb6322e9 100644 --- a/build/reports/tests/test/packages/openapi.html +++ b/build/reports/tests/test/packages/openapi.html @@ -28,7 +28,7 @@ </td> <td> <div class="infoBox" id="failures"> -<div class="counter">0</div> +<div class="counter">1</div> <p>failures</p> </div> </td> @@ -40,7 +40,7 @@ </td> <td> <div class="infoBox" id="duration"> -<div class="counter">0.633s</div> +<div class="counter">0.401s</div> <p>duration</p> </div> </td> @@ -49,8 +49,8 @@ </div> </td> <td> -<div class="infoBox success" id="successRate"> -<div class="percent">100%</div> +<div class="infoBox failures" id="successRate"> +<div class="percent">0%</div> <p>successful</p> </div> </td> @@ -60,10 +60,22 @@ <div id="tabs"> <ul class="tabLinks"> <li> -<a href="#tab0">Classes</a> +<a href="#tab0">Failed tests</a> +</li> +<li> +<a href="#tab1">Classes</a> </li> </ul> <div id="tab0" class="tab"> +<h2>Failed tests</h2> +<ul class="linkList"> +<li> +<a href="../classes/openapi.OpenAPIMain_test.html">OpenAPIMain_test</a>. +<a href="../classes/openapi.OpenAPIMain_test.html#test()">test()</a> +</li> +</ul> +</div> +<div id="tab1" class="tab"> <h2>Classes</h2> <table> <thread> @@ -77,14 +89,14 @@ </tr> </thread> <tr> -<td class="success"> +<td class="failures"> <a href="../classes/openapi.OpenAPIMain_test.html">OpenAPIMain_test</a> </td> <td>1</td> +<td>1</td> <td>0</td> -<td>0</td> -<td>0.633s</td> -<td class="success">100%</td> +<td>0.401s</td> +<td class="failures">0%</td> </tr> </table> </div> @@ -96,7 +108,7 @@ <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/> </label> </div>Generated by -<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 10. 9. 오전 8:15:11</p> +<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 10. 9. 오후 10:17:33</p> </div> </div> </body> diff --git a/build/resources/main/1password.com-events-1.0.0.json b/build/resources/main/1password.com-events-1.0.0.json deleted file mode 100644 index 503bd16f..00000000 --- a/build/resources/main/1password.com-events-1.0.0.json +++ /dev/null @@ -1,518 +0,0 @@ -{ - "openapi": "3.0.0", - "servers": [ - { - "description": "1Password", - "url": "https://events.1password.com" - }, - { - "description": "1Password CA", - "url": "https://events.1password.ca" - }, - { - "description": "1Password EU", - "url": "https://events.1password.eu" - }, - { - "description": "1Password Enterprise", - "url": "https://events.ent.1password.com" - } - ], - "info": { - "description": "1Password Events API Specification.", - "title": "Events API", - "version": "1.0.0", - "x-apisguru-categories": [ - "security" - ], - "x-logo": { - "url": "https://api.apis.guru/v2/cache/logo/https_upload.wikimedia.org_wikipedia_commons_thumb_e_e3_1password-logo.svg_1280px-1password-logo.svg.png" - }, - "x-origin": [ - { - "format": "openapi", - "url": "https://i.1password.com/media/1password-events-reporting/1password-events-api.yaml", - "version": "3.0" - } - ], - "x-providerName": "1password.com", - "x-serviceName": "events" - }, - "paths": { - "/api/auth/introspect": { - "get": { - "operationId": "getAuthIntrospect", - "responses": { - "200": { - "$ref": "#/components/responses/IntrospectResponse" - }, - "401": { - "$ref": "#/components/responses/UnauthorizedErrorResponse" - }, - "default": { - "$ref": "#/components/responses/GenericErrorResponse" - } - }, - "security": [ - { - "jwtsa": [] - } - ], - "summary": "Performs introspection of the provided Bearer JWT token", - "tags": [ - "auth" - ] - } - }, - "/api/v1/itemusages": { - "post": { - "description": "This endpoint requires your JSON Web Token to have the *itemusages* feature.", - "operationId": "getItemUsages", - "requestBody": { - "$ref": "#/components/requestBodies/ItemUsagesRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/ItemUsagesResponse" - }, - "401": { - "$ref": "#/components/responses/UnauthorizedErrorResponse" - }, - "default": { - "$ref": "#/components/responses/GenericErrorResponse" - } - }, - "security": [ - { - "jwtsa": [] - } - ], - "summary": "Retrieves item usages", - "tags": [ - "api-v1" - ] - } - }, - "/api/v1/signinattempts": { - "post": { - "description": "This endpoint requires your JSON Web Token to have the *signinattempts* feature.", - "operationId": "getSignInAttempts", - "requestBody": { - "$ref": "#/components/requestBodies/SignInAttemptsRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/SignInAttemptsResponse" - }, - "401": { - "$ref": "#/components/responses/UnauthorizedErrorResponse" - }, - "default": { - "$ref": "#/components/responses/GenericErrorResponse" - } - }, - "security": [ - { - "jwtsa": [] - } - ], - "summary": "Retrieves sign-in attempts", - "tags": [ - "api-v1" - ] - } - } - }, - "components": { - "examples": { - "Cursor": { - "summary": "Used for continued calling with a cursor", - "value": { - "cursor": "aGVsbG8hIGlzIGl0IG1lIHlvdSBhcmUgbG9va2luZyBmb3IK" - } - }, - "ResetCursor": { - "summary": "Used for reseting the cursor", - "value": { - "limit": 100, - "start_time": "2021-06-11T16:32:50-03:00" - } - } - }, - "requestBodies": { - "CursorRequest": { - "content": { - "application/json": { - "examples": { - "Continuing cursor": { - "$ref": "#/components/examples/Cursor" - }, - "Resetting cursor": { - "$ref": "#/components/examples/ResetCursor" - } - }, - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/Cursor" - }, - { - "$ref": "#/components/schemas/ResetCursor" - } - ] - } - } - } - }, - "ItemUsagesRequest": { - "$ref": "#/components/requestBodies/CursorRequest" - }, - "SignInAttemptsRequest": { - "$ref": "#/components/requestBodies/CursorRequest" - } - }, - "responses": { - "GenericErrorResponse": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Generic error" - }, - "IntrospectResponse": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Introspection" - } - } - }, - "description": "Introspection object" - }, - "ItemUsagesResponse": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ItemUsageItems" - } - } - }, - "description": "Item usages response object" - }, - "SignInAttemptsResponse": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SignInAttemptItems" - } - } - }, - "description": "Sign-in attempts response object" - }, - "UnauthorizedErrorResponse": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unauthorized" - } - }, - "schemas": { - "Client": { - "description": "Metadata gathered about the client", - "properties": { - "app_name": { - "example": "1Password Extension", - "type": "string" - }, - "app_version": { - "example": "20127", - "type": "string" - }, - "ip_address": { - "example": "13.227.95.22", - "type": "string" - }, - "os_name": { - "example": "MacOSX", - "type": "string" - }, - "os_version": { - "example": "10.15.6", - "type": "string" - }, - "platform_name": { - "example": "Chrome", - "type": "string" - }, - "platform_version": { - "description": "Depending on the platform used, this can be the version of the browser that the client extension is installed, the model of computer that the native application is installed or the machine's CPU version that the CLI was installed", - "type": "string" - } - } - }, - "Cursor": { - "description": "Cursor", - "properties": { - "cursor": { - "description": "Cursor to fetch more data if available or continue the polling process if required", - "example": "aGVsbG8hIGlzIGl0IG1lIHlvdSBhcmUgbG9va2luZyBmb3IK", - "type": "string" - } - } - }, - "CursorCollection": { - "allOf": [ - { - "$ref": "#/components/schemas/Cursor" - }, - { - "properties": { - "has_more": { - "description": "Whether there may still be more data to fetch using the returned cursor. If true, the subsequent request could still be empty.", - "type": "boolean" - } - } - } - ], - "description": "Common cursor properties for collection responses" - }, - "DateTimeRFC3339": { - "example": "2020-06-11T16:32:50-03:00", - "format": "date-time", - "type": "string" - }, - "Details": { - "description": "Additional information about the sign-in attempt", - "properties": { - "value": { - "description": "For firewall prevented sign-ins, the value is the chosen continent, country, etc. that blocked the sign-in attempt", - "example": "Europe", - "type": "string" - } - } - }, - "Error": { - "properties": { - "Error": { - "properties": { - "Message": { - "description": "The error message.", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "Introspection": { - "properties": { - "Features": { - "example": [ - "itemusages", - "signinattempts" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "IssuedAt": { - "$ref": "#/components/schemas/DateTimeRFC3339" - }, - "UUID": { - "type": "string" - } - }, - "type": "object" - }, - "ItemUsage": { - "description": "A single item usage object", - "properties": { - "client": { - "$ref": "#/components/schemas/Client" - }, - "item_uuid": { - "$ref": "#/components/schemas/UUID" - }, - "timestamp": { - "$ref": "#/components/schemas/DateTimeRFC3339" - }, - "used_version": { - "type": "integer" - }, - "user": { - "$ref": "#/components/schemas/User" - }, - "uuid": { - "$ref": "#/components/schemas/UUID" - }, - "vault_uuid": { - "$ref": "#/components/schemas/UUID" - } - } - }, - "ItemUsageItems": { - "allOf": [ - { - "properties": { - "items": { - "items": { - "$ref": "#/components/schemas/ItemUsage" - }, - "type": "array" - } - } - }, - { - "$ref": "#/components/schemas/CursorCollection" - } - ], - "description": "An object wrapping cursor properties and a list of items usages" - }, - "ResetCursor": { - "description": "Reset cursor", - "properties": { - "end_time": { - "$ref": "#/components/schemas/DateTimeRFC3339" - }, - "limit": { - "maximum": 1000, - "minimum": 1, - "type": "number" - }, - "start_time": { - "$ref": "#/components/schemas/DateTimeRFC3339" - } - } - }, - "SignInAttempt": { - "description": "A single sign-in attempt object", - "properties": { - "category": { - "enum": [ - "success", - "credentials_failed", - "mfa_failed", - "modern_version_failed", - "firewall_failed", - "firewall_reported_success" - ], - "example": "firewall_failed", - "type": "string" - }, - "client": { - "$ref": "#/components/schemas/Client" - }, - "country": { - "description": "Country ISO Code", - "example": "France", - "type": "string" - }, - "details": { - "$ref": "#/components/schemas/Details" - }, - "session_uuid": { - "$ref": "#/components/schemas/UUID" - }, - "target_user": { - "$ref": "#/components/schemas/User" - }, - "timestamp": { - "$ref": "#/components/schemas/DateTimeRFC3339" - }, - "type": { - "enum": [ - "credentials_ok", - "mfa_ok", - "password_secret_bad", - "mfa_missing", - "totp_disabled", - "totp_bad", - "totp_timeout", - "u2f_disabled", - "u2f_bad", - "u2f_timout", - "duo_disabled", - "duo_bad", - "duo_timeout", - "duo_native_bad", - "platform_secret_disabled", - "platform_secret_bad", - "platform_secret_proxy", - "code_disabled", - "code_bad", - "code_timeout", - "ip_blocked", - "continent_blocked", - "country_blocked", - "anonymous_blocked", - "all_blocked", - "modern_version_missing", - "modern_version_old" - ], - "example": "continent_blocked", - "type": "string" - }, - "uuid": { - "$ref": "#/components/schemas/UUID" - } - } - }, - "SignInAttemptItems": { - "allOf": [ - { - "properties": { - "items": { - "items": { - "$ref": "#/components/schemas/SignInAttempt" - }, - "type": "array" - } - } - }, - { - "$ref": "#/components/schemas/CursorCollection" - } - ], - "description": "An object wrapping cursor properties and a list of sign-in attempts" - }, - "UUID": { - "example": "56YE2TYN2VFYRLNSHKPW5NVT5E", - "type": "string" - }, - "User": { - "description": "User object", - "properties": { - "email": { - "format": "email", - "type": "string" - }, - "name": { - "description": "Full name", - "example": "Jack O'Neill", - "type": "string" - }, - "uuid": { - "$ref": "#/components/schemas/UUID" - } - } - } - }, - "securitySchemes": { - "jwtsa": { - "bearerFormat": "JWT-SA", - "description": "A JWT SA token issued to this service", - "scheme": "bearer", - "type": "http" - } - } - } -} \ No newline at end of file diff --git a/build/resources/main/6-dot-authentiqio.appspot.com-6.json b/build/resources/main/6-dot-authentiqio.appspot.com-6.json deleted file mode 100644 index a59849b1..00000000 --- a/build/resources/main/6-dot-authentiqio.appspot.com-6.json +++ /dev/null @@ -1,998 +0,0 @@ -{ - "openapi": "3.0.0", - "servers": [ - { - "url": "https://6-dot-authentiqio.appspot.com" - } - ], - "info": { - "contact": { - "email": "hello@authentiq.com", - "name": "Authentiq team", - "url": "http://authentiq.io/support" - }, - "description": "Strong authentication, without the passwords.", - "license": { - "name": "Apache 2.0", - "url": "http://www.apache.org/licenses/LICENSE-2.0.html" - }, - "termsOfService": "http://authentiq.com/terms/", - "title": "Authentiq API", - "version": "6", - "x-apisguru-categories": [ - "security" - ], - "x-logo": { - "backgroundColor": "#F26641", - "url": "https://api.apis.guru/v2/cache/logo/https_www.authentiq.com_theme_images_authentiq-logo-a-inverse.svg" - }, - "x-origin": [ - { - "format": "openapi", - "url": "https://raw.githubusercontent.com/AuthentiqID/authentiq-docs/master/docs/swagger/issuer.yaml", - "version": "3.0" - } - ], - "x-providerName": "6-dot-authentiqio.appspot.com" - }, - "paths": { - "/key": { - "delete": { - "description": "Revoke an Authentiq ID using email & phone.\n\nIf called with `email` and `phone` only, a verification code \nwill be sent by email. Do a second call adding `code` to \ncomplete the revocation.\n", - "operationId": "key_revoke_nosecret", - "parameters": [ - { - "description": "primary email associated to Key (ID)", - "in": "query", - "name": "email", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "primary phone number, international representation", - "in": "query", - "name": "phone", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "verification code sent by email", - "in": "query", - "name": "code", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "description": "pending or done", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successfully deleted" - }, - "401": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Authentication error `auth-error`" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unknown key `unknown-key`" - }, - "409": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Confirm with code sent `confirm-first`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "key", - "delete" - ] - }, - "post": { - "description": "Register a new ID `JWT(sub, devtoken)`\n\nv5: `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "key_register", - "requestBody": { - "$ref": "#/components/requestBodies/AuthentiqID" - }, - "responses": { - "201": { - "content": { - "application/json": { - "schema": { - "properties": { - "secret": { - "description": "revoke key", - "type": "string" - }, - "status": { - "description": "registered", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successfully registered" - }, - "409": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Key already registered `duplicate-key`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "key", - "post" - ] - } - }, - "/key/{PK}": { - "delete": { - "description": "Revoke an Identity (Key) with a revocation secret", - "operationId": "key_revoke", - "parameters": [ - { - "$ref": "#/components/parameters/PK" - }, - { - "description": "revokation secret", - "in": "query", - "name": "secret", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "description": "done", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successful response" - }, - "401": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Key not found / wrong code `auth-error`" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unknown key `unknown-key`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "key", - "delete" - ] - }, - "get": { - "description": "Get public details of an Authentiq ID.\n", - "operationId": "key_retrieve", - "parameters": [ - { - "$ref": "#/components/parameters/PK" - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "since": { - "format": "date-time", - "type": "string" - }, - "status": { - "type": "string" - }, - "sub": { - "description": "base64safe encoded public signing key", - "type": "string" - } - }, - "title": "JWT", - "type": "object" - } - } - }, - "description": "Successfully retrieved" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unknown key `unknown-key`" - }, - "410": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Key is revoked (gone). `revoked-key`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "key", - "get" - ] - }, - "head": { - "description": "HEAD info on Authentiq ID\n", - "parameters": [ - { - "$ref": "#/components/parameters/PK" - } - ], - "responses": { - "200": { - "description": "Key exists" - }, - "404": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unknown key `unknown-key`" - }, - "410": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Key is revoked `revoked-key`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "key", - "head" - ] - }, - "post": { - "description": "update properties of an Authentiq ID.\n(not operational in v4; use PUT for now)\n\nv5: POST issuer-signed email & phone scopes in\na self-signed JWT\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "key_update", - "parameters": [ - { - "$ref": "#/components/parameters/PK" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/AuthentiqID" - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "description": "confirmed", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successfully updated" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unknown key `unknown-key`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "key", - "post" - ] - }, - "put": { - "description": "Update Authentiq ID by replacing the object.\n\nv4: `JWT(sub,email,phone)` to bind email/phone hash; \n\nv5: POST issuer-signed email & phone scopes\nand PUT to update registration `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "key_bind", - "parameters": [ - { - "$ref": "#/components/parameters/PK" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/AuthentiqID" - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "description": "confirmed", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successfully updated" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unknown key `unknown-key`" - }, - "409": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Already bound to another key `duplicate-hash`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "key", - "put" - ] - } - }, - "/login": { - "post": { - "description": "push sign-in request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "push_login_request", - "parameters": [ - { - "description": "URI App will connect to", - "in": "query", - "name": "callback", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/jwt": { - "schema": { - "$ref": "#/components/schemas/PushToken" - } - } - }, - "description": "Push Token.", - "required": true - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "description": "sent", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successful response" - }, - "401": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unauthorized for this callback audience `aud-error` or JWT should be self-signed `auth-error`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "login", - "post" - ] - } - }, - "/scope": { - "post": { - "description": "scope verification request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "sign_request", - "parameters": [ - { - "description": "test only mode, using test issuer", - "in": "query", - "name": "test", - "required": false, - "schema": { - "type": "integer" - } - } - ], - "requestBody": { - "content": { - "application/jwt": { - "schema": { - "$ref": "#/components/schemas/Claims" - } - } - }, - "description": "Claims of scope", - "required": true - }, - "responses": { - "201": { - "content": { - "application/json": { - "schema": { - "properties": { - "job": { - "description": "20-character ID", - "type": "string" - }, - "status": { - "description": "waiting", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successful response" - }, - "429": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Too Many Requests on same address / number `rate-limit`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "scope", - "post" - ] - } - }, - "/scope/{job}": { - "delete": { - "description": "delete a verification job", - "operationId": "sign_delete", - "parameters": [ - { - "$ref": "#/components/parameters/JobID" - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "description": "done", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successfully deleted" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Job not found `unknown-job`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "scope", - "delete" - ] - }, - "get": { - "description": "get the status / current content of a verification job", - "operationId": "sign_retrieve", - "parameters": [ - { - "$ref": "#/components/parameters/JobID" - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "exp": { - "type": "integer" - }, - "field": { - "type": "string" - }, - "sub": { - "description": "base64safe encoded public signing key", - "type": "string" - } - }, - "title": "JWT", - "type": "object" - } - }, - "application/jwt": { - "schema": { - "properties": { - "exp": { - "type": "integer" - }, - "field": { - "type": "string" - }, - "sub": { - "description": "base64safe encoded public signing key", - "type": "string" - } - }, - "title": "JWT", - "type": "object" - } - } - }, - "description": "Successful response (JWT)" - }, - "204": { - "description": "Confirmed, waiting for signing" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, - "application/jwt": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Job not found `unknown-job`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "scope", - "get" - ] - }, - "head": { - "description": "HEAD to get the status of a verification job", - "operationId": "sign_retrieve_head", - "parameters": [ - { - "$ref": "#/components/parameters/JobID" - } - ], - "responses": { - "200": { - "description": "Confirmed and signed" - }, - "204": { - "description": "Confirmed, waiting for signing" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Job not found `unknown-job`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "scope", - "head" - ] - }, - "post": { - "description": "this is a scope confirmation", - "operationId": "sign_confirm", - "parameters": [ - { - "$ref": "#/components/parameters/JobID" - } - ], - "responses": { - "202": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "description": "confirmed", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successfully confirmed" - }, - "401": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Confirmation error `auth-error`" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Job not found `unknown-job`" - }, - "405": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "JWT POSTed to scope `not-supported`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "scope", - "post" - ] - }, - "put": { - "description": "authority updates a JWT with its signature\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "sign_update", - "parameters": [ - { - "$ref": "#/components/parameters/JobID" - } - ], - "responses": { - "200": { - "content": { - "application/jwt": { - "schema": { - "properties": { - "jwt": { - "description": "result is JWT or JSON??", - "type": "string" - }, - "status": { - "description": "ready", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successfully updated" - }, - "404": { - "content": { - "application/jwt": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Job not found `unknown-job`" - }, - "409": { - "content": { - "application/jwt": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Job not confirmed yet `confirm-first`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "scope", - "put" - ] - } - } - }, - "components": { - "parameters": { - "JobID": { - "description": "Job ID (20 chars)", - "in": "path", - "name": "job", - "required": true, - "schema": { - "type": "string" - } - }, - "PK": { - "description": "Public Signing Key - Authentiq ID (43 chars)", - "in": "path", - "name": "PK", - "required": true, - "schema": { - "type": "string" - } - } - }, - "requestBodies": { - "AuthentiqID": { - "content": { - "application/jwt": { - "schema": { - "$ref": "#/components/schemas/AuthentiqID" - } - } - }, - "description": "Authentiq ID to register", - "required": true - } - }, - "responses": { - "ErrorResponse": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Error response" - } - }, - "schemas": { - "AuthentiqID": { - "description": "Authentiq ID in JWT format, self-signed.\n", - "properties": { - "devtoken": { - "description": "device token for push messages", - "type": "string" - }, - "sub": { - "description": "UUID and public signing key", - "type": "string" - } - }, - "required": [ - "sub" - ] - }, - "Claims": { - "description": "Claim in JWT format, self- or issuer-signed. \n", - "properties": { - "email": { - "type": "string" - }, - "phone": { - "type": "string" - }, - "scope": { - "description": "claim scope", - "type": "string" - }, - "sub": { - "description": "UUID", - "type": "string" - }, - "type": { - "type": "string" - } - }, - "required": [ - "sub", - "scope" - ] - }, - "Error": { - "properties": { - "detail": { - "type": "string" - }, - "error": { - "type": "integer" - }, - "title": { - "type": "string" - }, - "type": { - "description": "unique uri for this error", - "type": "string" - } - }, - "required": [ - "error" - ] - }, - "PushToken": { - "description": "PushToken in JWT format, self-signed. \n", - "properties": { - "aud": { - "description": "audience (URI)", - "type": "string" - }, - "exp": { - "type": "integer" - }, - "iat": { - "type": "integer" - }, - "iss": { - "description": "issuer (URI)", - "type": "string" - }, - "nbf": { - "type": "integer" - }, - "sub": { - "description": "UUID and public signing key", - "type": "string" - } - }, - "required": [ - "sub", - "iss", - "aud" - ] - } - } - } -} \ No newline at end of file diff --git a/build/resources/main/abstractapi.com-geolocation-1.0.0.json b/build/resources/main/abstractapi.com-geolocation-1.0.0.json deleted file mode 100644 index 48bc4de4..00000000 --- a/build/resources/main/abstractapi.com-geolocation-1.0.0.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "openapi": "3.0.1", - "servers": [ - { - "url": "https://ipgeolocation.abstractapi.com" - } - ], - "info": { - "description": "Abstract IP geolocation API allows developers to retrieve the region, country and city behind any IP worldwide. The API covers the geolocation of IPv4 and IPv6 addresses in 180+ countries worldwide. Extra information can be retrieved like the currency, flag or language associated to an IP.", - "title": "IP geolocation API", - "version": "1.0.0", - "x-apisguru-categories": [ - "location" - ], - "x-logo": { - "url": "https://api.apis.guru/v2/cache/logo/https_global-uploads.webflow.com_5ebbd0a566a3996636e55959_5ec2ba29feeeb05d69160e7b_webclip.png" - }, - "x-origin": [ - { - "format": "openapi", - "url": "https://documentation.abstractapi.com/ip-geolocation-openapi.json", - "version": "3.0" - } - ], - "x-providerName": "abstractapi.com", - "x-serviceName": "geolocation" - }, - "externalDocs": { - "description": "API Documentation", - "url": "https://www.abstractapi.com/ip-geolocation-api#docs" - }, - "paths": { - "/v1": { - "get": { - "description": "Retrieve the location of an IP address", - "parameters": [ - { - "explode": true, - "in": "query", - "name": "api_key", - "required": true, - "schema": { - "type": "string" - }, - "style": "form" - }, - { - "explode": true, - "in": "query", - "name": "ip_address", - "required": false, - "schema": { - "example": "195.154.25.40", - "type": "string" - }, - "style": "form" - }, - { - "explode": true, - "in": "query", - "name": "fields", - "required": false, - "schema": { - "example": "country,city,timezone", - "type": "string" - }, - "style": "form" - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "examples": { - "0": { - "value": "{\"ip_address\":\"195.154.25.40\",\"city\":\"Paris\",\"city_geoname_id\":2988507,\"region\":\"Île-de-France\",\"region_iso_code\":\"IDF\",\"region_geoname_id\":3012874,\"postal_code\":\"75008\",\"country\":\"France\",\"country_code\":\"FR\",\"country_geoname_id\":3017382,\"country_is_eu\":true,\"continent\":\"Europe\",\"continent_code\":\"EU\",\"continent_geoname_id\":6255148,\"longitude\":2.4075,\"latitude\":48.8323,\"security\":{\"is_vpn\":false},\"timezone\":{\"name\":\"Europe/Paris\",\"abbreviation\":\"CEST\",\"gmt_offset\":2,\"current_time\":\"15:42:18\",\"is_dst\":true},\"flag\":{\"emoji\":\"<ë<÷\",\"unicode\":\"U+1F1EB U+1F1F7\",\"png\":\"https://static.abstractapi.com/country-flags/FR_flag.png\",\"svg\":\"https://static.abstractapi.com/country-flags/FR_flag.svg\"},\"currency\":{\"currency_name\":\"Euros\",\"currency_code\":\"EUR\"},\"connection\":{\"autonomous_system_number\":12876,\"autonomous_system_organization\":\"Online S.a.s.\",\"connection_type\":\"Corporate\",\"isp_name\":\"Online S.A.S.\",\"organization_name\":\"ONLINE\"}}" - } - }, - "schema": { - "$ref": "#/components/schemas/inline_response_200" - } - } - }, - "description": "Location of geolocated IP" - } - }, - "servers": [ - { - "url": "https://ipgeolocation.abstractapi.com" - } - ] - }, - "servers": [ - { - "url": "https://ipgeolocation.abstractapi.com" - } - ] - } - }, - "components": { - "schemas": { - "inline_response_200": { - "properties": { - "city": { - "type": "string" - }, - "city_geoname_id": { - "type": "integer" - }, - "connection": { - "properties": { - "autonomous_system_number": { - "type": "integer" - }, - "autonomous_system_organization": { - "type": "string" - }, - "connection_type": { - "type": "string" - }, - "isp_name": { - "type": "string" - }, - "organization_name": { - "type": "string" - } - }, - "type": "object" - }, - "continent": { - "type": "string" - }, - "continent_code": { - "type": "string" - }, - "continent_geoname_id": { - "type": "integer" - }, - "country": { - "type": "string" - }, - "country_code": { - "type": "string" - }, - "country_geoname_id": { - "type": "integer" - }, - "country_is_eu": { - "type": "boolean" - }, - "currency": { - "properties": { - "currency_code": { - "type": "string" - }, - "currency_name": { - "type": "string" - } - }, - "type": "object" - }, - "flag": { - "properties": { - "emoji": { - "type": "string" - }, - "png": { - "type": "string" - }, - "svg": { - "type": "string" - }, - "unicode": { - "type": "string" - } - }, - "type": "object" - }, - "ip_address": { - "type": "string" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "postal_code": { - "type": "string" - }, - "region": { - "type": "string" - }, - "region_geoname_id": { - "type": "integer" - }, - "region_iso_code": { - "type": "string" - }, - "security": { - "properties": { - "is_vpn": { - "type": "boolean" - } - }, - "type": "object" - }, - "timezone": { - "properties": { - "abbreviation": { - "type": "string" - }, - "current_time": { - "type": "string" - }, - "gmt_offset": { - "type": "integer" - }, - "is_dst": { - "type": "boolean" - }, - "name": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - } - } -} \ No newline at end of file diff --git a/build/resources/main/adyen.com-CheckoutUtilityService-1.json b/build/resources/main/adyen.com-CheckoutUtilityService-1.json deleted file mode 100644 index f673d455..00000000 --- a/build/resources/main/adyen.com-CheckoutUtilityService-1.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "openapi": "3.0.0", - "servers": [ - { - "url": "https://checkout-test.adyen.com/v1" - } - ], - "info": { - "contact": { - "email": "support@adyen.com", - "name": "Adyen Support", - "url": "https://support.adyen.com/", - "x-twitter": "Adyen" - }, - "description": "A web service containing utility functions available for merchants integrating with Checkout APIs.\n## Authentication\nEach request to the Checkout Utility API must be signed with an API key. For this, obtain an API Key from your Customer Area, as described in [How to get the Checkout API key](https://docs.adyen.com/developers/user-management/how-to-get-the-checkout-api-key). Then set this key to the `X-API-Key` header value, for example:\n\n```\ncurl\n-H \"Content-Type: application/json\" \\\n-H \"X-API-Key: Your_Checkout_API_key\" \\\n...\n```\nNote that when going live, you need to generate a new API Key to access the [live endpoints](https://docs.adyen.com/developers/api-reference/live-endpoints).\n\n## Versioning\nCheckout API supports versioning of its endpoints through a version suffix in the endpoint URL. This suffix has the following format: \"vXX\", where XX is the version number.\n\nFor example:\n```\nhttps://checkout-test.adyen.com/v1/originKeys\n```", - "termsOfService": "https://docs.adyen.com/legal/terms-conditions", - "title": "Adyen Checkout Utility Service", - "version": "1", - "x-apisguru-categories": [ - "payment" - ], - "x-logo": { - "url": "https://api.apis.guru/v2/cache/logo/https_twitter.com_Adyen_profile_image.jpeg" - }, - "x-origin": [ - { - "converter": { - "url": "https://github.com/lucybot/api-spec-converter", - "version": "2.7.11" - }, - "format": "openapi", - "url": "https://raw.githubusercontent.com/adyen/adyen-openapi/master/specs/3.0/CheckoutUtilityService-v1.json", - "version": "3.0" - } - ], - "x-providerName": "adyen.com", - "x-serviceName": "CheckoutUtilityService" - }, - "paths": { - "/originKeys": { - "post": { - "description": "This operation takes the origin domains and returns a JSON object containing the corresponding origin keys for the domains.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CheckoutUtilityRequest" - } - } - } - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CheckoutUtilityResponse" - } - } - }, - "description": "OK - the request has succeeded." - }, - "400": { - "description": "Bad Request - a problem reading or understanding the request." - }, - "401": { - "description": "Unauthorized - authentication required." - }, - "403": { - "description": "Forbidden - insufficient permissions to process the request." - }, - "422": { - "description": "Unprocessable Entity - a request validation error." - }, - "500": { - "description": "Internal Server Error - the server could not process the request." - } - }, - "summary": "Create originKey values for one or more merchant domains.", - "x-groupName": "General", - "x-sortIndex": 0 - } - } - }, - "components": { - "schemas": { - "CheckoutUtilityRequest": { - "properties": { - "originDomains": { - "description": "The list of origin domains, for which origin keys are requested.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "originDomains" - ] - }, - "CheckoutUtilityResponse": { - "properties": { - "originKeys": { - "additionalProperties": { - "type": "string" - }, - "description": "The list of origin keys for all requested domains. For each list item, the key is the domain and the value is the origin key.", - "type": "object" - } - } - } - } - }, - "x-groups": [ - "General" - ] -} \ No newline at end of file diff --git a/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml b/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml index 95c28d39..c3a8822f 100644 --- a/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml +++ b/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml @@ -1,16 +1,112 @@ <?xml version="1.0" encoding="UTF-8"?> -<testsuite name="openapi.OpenAPIMain_test" tests="1" skipped="0" failures="0" errors="0" timestamp="2021-10-08T23:15:10" hostname="DESKTOP-7SEB5SB" time="0.633"> +<testsuite name="openapi.OpenAPIMain_test" tests="1" skipped="0" failures="1" errors="0" timestamp="2021-10-09T13:17:32" hostname="DESKTOP-7SEB5SB" time="0.401"> <properties/> - <testcase name="test()" classname="openapi.OpenAPIMain_test" time="0.633"/> - <system-out><![CDATA[5 -Loading expression DSL file '1password.com-events-1.0.0.json'. -Loading expression DSL file '6-dot-authentiqio.appspot.com-6.json'. -Loading expression DSL file 'abstractapi.com-geolocation-1.0.0.json'. -Loading expression DSL file 'adyen.com-CheckoutUtilityService-1.json'. + <testcase name="test()" classname="openapi.OpenAPIMain_test" time="0.401"> + <failure message="java.lang.NullPointerException" type="java.lang.NullPointerException">java.lang.NullPointerException + at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494) + at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494) + at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494) + at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494) + at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494) + at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494) + at de.tudresden.inf.st.openapi.ast.OpenAPIObject.survey_OpenAPIObject_schemaTuples(OpenAPIObject.java:1102) + at de.tudresden.inf.st.openapi.ast.OpenAPIObject.schemaTuples_compute(OpenAPIObject.java:1232) + at de.tudresden.inf.st.openapi.ast.OpenAPIObject.schemaTuples(OpenAPIObject.java:1214) + at openapi.OpenAPIMain_test.test(OpenAPIMain_test.java:72) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) + at com.sun.proxy.$Proxy2.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.stop(TestWorker.java:133) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182) + at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164) + at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) + at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) + at java.base/java.lang.Thread.run(Thread.java:829) +</failure> + </testcase> + <system-out><![CDATA[1 Loading expression DSL file 'petstore-v2.yaml'. ]]></system-out> - <system-err><![CDATA[SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". -SLF4J: Defaulting to no-operation (NOP) logger implementation -SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. -]]></system-err> + <system-err><![CDATA[]]></system-err> </testsuite> diff --git a/build/test-results/test/binary/output.bin b/build/test-results/test/binary/output.bin index 771876248854dcd16aa4dd7dca804351fe458c0c..b2cafb86a330d768ceb0ed22fa2b81c8e6f3f8be 100644 GIT binary patch delta 13 UcmX@eV#CVF#K>$oS(DKm01)>AGXMYp literal 577 zcmZQ%Vq`Yu<zi%FbnwYfOv%hkS4gcWC`v6Z&dkqKa0&KNNXyJgRZur9NGvWc&o4^R zOU}>LO)X2!D=F4B)HBdC(90^$&r{a}o8gMr3^U!7{1V;7(vpnSypqhq%zVAXf`a0L z{1UL4X2=G)<25KTsko#lF}WnMAQP-LJvBckKRK}^Gd~a0O&<7-N~uiE0~_L;k(!*H zUs@7cl9`iPQW>0DRF;{Xs%wbsEJM6z6{MCFm*f|v>XsSlRVL=<fC7bqiP0(8$IZmc zO2I8LGbc4gp(I}+CqFSoAvq_pxL83czbIX=I48{{OD{9GAV)8_B(Wqj*(X0eJ+;Uw zGcP5zNJ)>Ei-C#J9%_n9YFc7xP6;TYO7a!*@^$kIQj5S|SJ3eD571P|0qa!&nU<QH zng=p3KM!m~2-Jw+)KrCxl9B=|ef{$Ca;WY3Md|v<`6;QzdKo3TIm(#sP)N%!Qb;Q; UD#=JKQb<WHNzBYC*5l;@00J+(NB{r; diff --git a/build/test-results/test/binary/output.bin.idx b/build/test-results/test/binary/output.bin.idx index 9706eed18037e5fadeb6cba0825aa2d189605b66..42aeebea8d46c35d355eb76aef19d1abdb6becfc 100644 GIT binary patch literal 36 RcmZQ%Vq|1M1?>OP004-<5B&fD literal 36 WcmZQ%Vq|1M0gT!ZE@J|eehB~w69Ihy diff --git a/build/test-results/test/binary/results.bin b/build/test-results/test/binary/results.bin index 6530dd67ad20d1d227125da75a2bd76f3a62c9df..d4ad4c7c961d027b3b361fa11d92845108376246 100644 GIT binary patch literal 10717 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 GCIJAFCuNHO delta 38 ocmcZ`95}&HA;}<lIwNCyNosM4h9;C^_{qY+z*v)HkS4$Y0RPzwqW}N^ diff --git a/gen-api-ex/1password.com-events-1.0.0-actual.json b/gen-api-ex/1password.com-events-1.0.0-actual.json new file mode 100644 index 00000000..e69de29b diff --git a/gen-api-ex/1password.com-events-1.0.0-expected.json b/gen-api-ex/1password.com-events-1.0.0-expected.json new file mode 100644 index 00000000..5621a5d9 --- /dev/null +++ b/gen-api-ex/1password.com-events-1.0.0-expected.json @@ -0,0 +1,449 @@ +{ + "openapi" : "3.0.0", + "info" : { + "description" : "1Password Events API Specification.", + "title" : "Events API", + "version" : "1.0.0", + "x-providerName" : "1password.com", + "x-logo" : { + "url" : "https://api.apis.guru/v2/cache/logo/https_upload.wikimedia.org_wikipedia_commons_thumb_e_e3_1password-logo.svg_1280px-1password-logo.svg.png" + }, + "x-apisguru-categories" : [ "security" ], + "x-serviceName" : "events", + "x-origin" : [ { + "format" : "openapi", + "url" : "https://i.1password.com/media/1password-events-reporting/1password-events-api.yaml", + "version" : "3.0" + } ] + }, + "servers" : [ { + "url" : "https://events.1password.com", + "description" : "1Password" + }, { + "url" : "https://events.1password.ca", + "description" : "1Password CA" + }, { + "url" : "https://events.1password.eu", + "description" : "1Password EU" + }, { + "url" : "https://events.ent.1password.com", + "description" : "1Password Enterprise" + } ], + "paths" : { + "/api/auth/introspect" : { + "get" : { + "tags" : [ "auth" ], + "summary" : "Performs introspection of the provided Bearer JWT token", + "operationId" : "getAuthIntrospect", + "responses" : { + "200" : { + "$ref" : "#/components/responses/IntrospectResponse" + }, + "401" : { + "$ref" : "#/components/responses/UnauthorizedErrorResponse" + }, + "default" : { + "$ref" : "#/components/responses/GenericErrorResponse" + } + }, + "security" : [ { + "jwtsa" : [ ] + } ] + } + }, + "/api/v1/itemusages" : { + "post" : { + "tags" : [ "api-v1" ], + "summary" : "Retrieves item usages", + "description" : "This endpoint requires your JSON Web Token to have the *itemusages* feature.", + "operationId" : "getItemUsages", + "requestBody" : { + "$ref" : "#/components/requestBodies/ItemUsagesRequest" + }, + "responses" : { + "200" : { + "$ref" : "#/components/responses/ItemUsagesResponse" + }, + "401" : { + "$ref" : "#/components/responses/UnauthorizedErrorResponse" + }, + "default" : { + "$ref" : "#/components/responses/GenericErrorResponse" + } + }, + "security" : [ { + "jwtsa" : [ ] + } ] + } + }, + "/api/v1/signinattempts" : { + "post" : { + "tags" : [ "api-v1" ], + "summary" : "Retrieves sign-in attempts", + "description" : "This endpoint requires your JSON Web Token to have the *signinattempts* feature.", + "operationId" : "getSignInAttempts", + "requestBody" : { + "$ref" : "#/components/requestBodies/SignInAttemptsRequest" + }, + "responses" : { + "200" : { + "$ref" : "#/components/responses/SignInAttemptsResponse" + }, + "401" : { + "$ref" : "#/components/responses/UnauthorizedErrorResponse" + }, + "default" : { + "$ref" : "#/components/responses/GenericErrorResponse" + } + }, + "security" : [ { + "jwtsa" : [ ] + } ] + } + } + }, + "components" : { + "examples" : { + "Cursor" : { + "summary" : "Used for continued calling with a cursor", + "value" : { + "cursor" : "aGVsbG8hIGlzIGl0IG1lIHlvdSBhcmUgbG9va2luZyBmb3IK" + } + }, + "ResetCursor" : { + "summary" : "Used for reseting the cursor", + "value" : { + "limit" : 100, + "start_time" : "2021-06-11T16:32:50-03:00" + } + } + }, + "requestBodies" : { + "CursorRequest" : { + "content" : { + "application/json" : { + "examples" : { + "Continuing cursor" : { + "$ref" : "#/components/examples/Cursor", + "abs$ref" : "file:/E:/bachelor-thesis/SigTest/bachelor-thesis-jastadd/build/resources/main/1password.com-events-1.0.0.json#/components/examples/Cursor" + }, + "Resetting cursor" : { + "$ref" : "#/components/examples/ResetCursor", + "abs$ref" : "file:/E:/bachelor-thesis/SigTest/bachelor-thesis-jastadd/build/resources/main/1password.com-events-1.0.0.json#/components/examples/ResetCursor" + } + }, + "schema" : { + "oneOf" : [ { + "$ref" : "#/components/schemas/Cursor" + }, { + "$ref" : "#/components/schemas/ResetCursor" + } ] + } + } + } + }, + "ItemUsagesRequest" : { + "$ref" : "#/components/requestBodies/CursorRequest" + }, + "SignInAttemptsRequest" : { + "$ref" : "#/components/requestBodies/CursorRequest" + } + }, + "responses" : { + "GenericErrorResponse" : { + "description" : "Generic error", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "IntrospectResponse" : { + "description" : "Introspection object", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Introspection" + } + } + } + }, + "ItemUsagesResponse" : { + "description" : "Item usages response object", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ItemUsageItems" + } + } + } + }, + "SignInAttemptsResponse" : { + "description" : "Sign-in attempts response object", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/SignInAttemptItems" + } + } + } + }, + "UnauthorizedErrorResponse" : { + "description" : "Unauthorized", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + }, + "schemas" : { + "Client" : { + "description" : "Metadata gathered about the client", + "properties" : { + "app_name" : { + "example" : "1Password Extension", + "type" : "string" + }, + "app_version" : { + "example" : "20127", + "type" : "string" + }, + "ip_address" : { + "example" : "13.227.95.22", + "type" : "string" + }, + "os_name" : { + "example" : "MacOSX", + "type" : "string" + }, + "os_version" : { + "example" : "10.15.6", + "type" : "string" + }, + "platform_name" : { + "example" : "Chrome", + "type" : "string" + }, + "platform_version" : { + "description" : "Depending on the platform used, this can be the version of the browser that the client extension is installed, the model of computer that the native application is installed or the machine's CPU version that the CLI was installed", + "type" : "string" + } + } + }, + "Cursor" : { + "description" : "Cursor", + "properties" : { + "cursor" : { + "description" : "Cursor to fetch more data if available or continue the polling process if required", + "example" : "aGVsbG8hIGlzIGl0IG1lIHlvdSBhcmUgbG9va2luZyBmb3IK", + "type" : "string" + } + } + }, + "CursorCollection" : { + "description" : "Common cursor properties for collection responses", + "allOf" : [ { + "$ref" : "#/components/schemas/Cursor" + }, { + "properties" : { + "has_more" : { + "description" : "Whether there may still be more data to fetch using the returned cursor. If true, the subsequent request could still be empty.", + "type" : "boolean" + } + } + } ] + }, + "DateTimeRFC3339" : { + "example" : "2020-06-11T16:32:50-03:00", + "format" : "date-time", + "type" : "string" + }, + "Details" : { + "description" : "Additional information about the sign-in attempt", + "properties" : { + "value" : { + "description" : "For firewall prevented sign-ins, the value is the chosen continent, country, etc. that blocked the sign-in attempt", + "example" : "Europe", + "type" : "string" + } + } + }, + "Error" : { + "properties" : { + "Error" : { + "properties" : { + "Message" : { + "description" : "The error message.", + "type" : "string" + } + }, + "type" : "object" + } + }, + "type" : "object" + }, + "Introspection" : { + "properties" : { + "Features" : { + "example" : [ "itemusages", "signinattempts" ], + "type" : "array", + "items" : { + "type" : "string" + } + }, + "IssuedAt" : { + "$ref" : "#/components/schemas/DateTimeRFC3339" + }, + "UUID" : { + "type" : "string" + } + }, + "type" : "object" + }, + "ItemUsage" : { + "description" : "A single item usage object", + "properties" : { + "client" : { + "$ref" : "#/components/schemas/Client" + }, + "item_uuid" : { + "$ref" : "#/components/schemas/UUID" + }, + "timestamp" : { + "$ref" : "#/components/schemas/DateTimeRFC3339" + }, + "used_version" : { + "type" : "integer" + }, + "user" : { + "$ref" : "#/components/schemas/User" + }, + "uuid" : { + "$ref" : "#/components/schemas/UUID" + }, + "vault_uuid" : { + "$ref" : "#/components/schemas/UUID" + } + } + }, + "ItemUsageItems" : { + "description" : "An object wrapping cursor properties and a list of items usages", + "allOf" : [ { + "properties" : { + "items" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/ItemUsage" + } + } + } + }, { + "$ref" : "#/components/schemas/CursorCollection" + } ] + }, + "ResetCursor" : { + "description" : "Reset cursor", + "properties" : { + "end_time" : { + "$ref" : "#/components/schemas/DateTimeRFC3339" + }, + "limit" : { + "maximum" : 1000, + "minimum" : 1, + "type" : "number" + }, + "start_time" : { + "$ref" : "#/components/schemas/DateTimeRFC3339" + } + } + }, + "SignInAttempt" : { + "description" : "A single sign-in attempt object", + "properties" : { + "category" : { + "example" : "firewall_failed", + "type" : "string", + "enum" : [ "success", "credentials_failed", "mfa_failed", "modern_version_failed", "firewall_failed", "firewall_reported_success" ] + }, + "client" : { + "$ref" : "#/components/schemas/Client" + }, + "country" : { + "description" : "Country ISO Code", + "example" : "France", + "type" : "string" + }, + "details" : { + "$ref" : "#/components/schemas/Details" + }, + "session_uuid" : { + "$ref" : "#/components/schemas/UUID" + }, + "target_user" : { + "$ref" : "#/components/schemas/User" + }, + "timestamp" : { + "$ref" : "#/components/schemas/DateTimeRFC3339" + }, + "type" : { + "example" : "continent_blocked", + "type" : "string", + "enum" : [ "credentials_ok", "mfa_ok", "password_secret_bad", "mfa_missing", "totp_disabled", "totp_bad", "totp_timeout", "u2f_disabled", "u2f_bad", "u2f_timout", "duo_disabled", "duo_bad", "duo_timeout", "duo_native_bad", "platform_secret_disabled", "platform_secret_bad", "platform_secret_proxy", "code_disabled", "code_bad", "code_timeout", "ip_blocked", "continent_blocked", "country_blocked", "anonymous_blocked", "all_blocked", "modern_version_missing", "modern_version_old" ] + }, + "uuid" : { + "$ref" : "#/components/schemas/UUID" + } + } + }, + "SignInAttemptItems" : { + "description" : "An object wrapping cursor properties and a list of sign-in attempts", + "allOf" : [ { + "properties" : { + "items" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/SignInAttempt" + } + } + } + }, { + "$ref" : "#/components/schemas/CursorCollection" + } ] + }, + "UUID" : { + "example" : "56YE2TYN2VFYRLNSHKPW5NVT5E", + "type" : "string" + }, + "User" : { + "description" : "User object", + "properties" : { + "email" : { + "format" : "email", + "type" : "string" + }, + "name" : { + "description" : "Full name", + "example" : "Jack O'Neill", + "type" : "string" + }, + "uuid" : { + "$ref" : "#/components/schemas/UUID" + } + } + } + }, + "securitySchemes" : { + "jwtsa" : { + "type" : "http", + "description" : "A JWT SA token issued to this service", + "scheme" : "bearer", + "bearerFormat" : "JWT-SA" + } + } + } +} \ No newline at end of file diff --git a/gen-api-ex/6-dot-authentiqio.appspot.com-6-actual.json b/gen-api-ex/6-dot-authentiqio.appspot.com-6-actual.json new file mode 100644 index 00000000..f9464ad0 --- /dev/null +++ b/gen-api-ex/6-dot-authentiqio.appspot.com-6-actual.json @@ -0,0 +1,910 @@ +{ + "openapi" : "3.0.0", + "info" : { + "contact" : { + "email" : "hello@authentiq.com", + "name" : "Authentiq team", + "url" : "http://authentiq.io/support" + }, + "description" : "Strong authentication, without the passwords.", + "license" : { + "name" : "Apache 2.0", + "url" : "http://www.apache.org/licenses/LICENSE-2.0.html" + }, + "termsOfService" : "http://authentiq.com/terms/", + "title" : "Authentiq API", + "version" : "6", + "x-providerName" : "6-dot-authentiqio.appspot.com", + "x-logo" : { + "backgroundColor" : "#F26641", + "url" : "https://api.apis.guru/v2/cache/logo/https_www.authentiq.com_theme_images_authentiq-logo-a-inverse.svg" + }, + "x-apisguru-categories" : [ "security" ], + "x-origin" : [ { + "format" : "openapi", + "url" : "https://raw.githubusercontent.com/AuthentiqID/authentiq-docs/master/docs/swagger/issuer.yaml", + "version" : "3.0" + } ] + }, + "servers" : [ { + "url" : "https://6-dot-authentiqio.appspot.com" + } ], + "paths" : { + "/scope/{job}" : { + "head" : { + "tags" : [ "scope", "head" ], + "description" : "HEAD to get the status of a verification job", + "operationId" : "sign_retrieve_head", + "parameters" : [ { + "$ref" : "#/components/parameters/JobID" + } ], + "responses" : { + "200" : { + "description" : "Confirmed and signed" + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + }, + "204" : { + "description" : "Confirmed, waiting for signing" + }, + "404" : { + "description" : "Job not found `unknown-job`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + } + }, + "get" : { + "tags" : [ "scope", "get" ], + "description" : "get the status / current content of a verification job", + "operationId" : "sign_retrieve", + "parameters" : [ { + "$ref" : "#/components/parameters/JobID" + } ], + "responses" : { + "200" : { + "description" : "Successful response (JWT)", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "sub" : { + "description" : "base64safe encoded public signing key", + "type" : "string" + }, + "field" : { + "type" : "string" + }, + "exp" : { + "type" : "integer" + } + }, + "type" : "object", + "title" : "JWT" + } + }, + "application/jwt" : { + "schema" : { + "properties" : { + "sub" : { + "description" : "base64safe encoded public signing key", + "type" : "string" + }, + "field" : { + "type" : "string" + }, + "exp" : { + "type" : "integer" + } + }, + "type" : "object", + "title" : "JWT" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + }, + "204" : { + "description" : "Confirmed, waiting for signing" + }, + "404" : { + "description" : "Job not found `unknown-job`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + }, + "application/jwt" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + } + }, + "put" : { + "tags" : [ "scope", "put" ], + "description" : "authority updates a JWT with its signature\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", + "operationId" : "sign_update", + "parameters" : [ { + "$ref" : "#/components/parameters/JobID" + } ], + "responses" : { + "200" : { + "description" : "Successfully updated", + "content" : { + "application/jwt" : { + "schema" : { + "properties" : { + "jwt" : { + "description" : "result is JWT or JSON??", + "type" : "string" + }, + "status" : { + "description" : "ready", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + }, + "404" : { + "description" : "Job not found `unknown-job`", + "content" : { + "application/jwt" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "409" : { + "description" : "Job not confirmed yet `confirm-first`", + "content" : { + "application/jwt" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + } + }, + "post" : { + "tags" : [ "scope", "post" ], + "description" : "this is a scope confirmation", + "operationId" : "sign_confirm", + "parameters" : [ { + "$ref" : "#/components/parameters/JobID" + } ], + "responses" : { + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + }, + "202" : { + "description" : "Successfully confirmed", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "status" : { + "description" : "confirmed", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "401" : { + "description" : "Confirmation error `auth-error`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "404" : { + "description" : "Job not found `unknown-job`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "405" : { + "description" : "JWT POSTed to scope `not-supported`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + } + }, + "delete" : { + "tags" : [ "scope", "delete" ], + "description" : "delete a verification job", + "operationId" : "sign_delete", + "parameters" : [ { + "$ref" : "#/components/parameters/JobID" + } ], + "responses" : { + "200" : { + "description" : "Successfully deleted", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "status" : { + "description" : "done", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + }, + "404" : { + "description" : "Job not found `unknown-job`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + } + } + }, + "/scope" : { + "post" : { + "tags" : [ "scope", "post" ], + "description" : "scope verification request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", + "operationId" : "sign_request", + "parameters" : [ { + "description" : "test only mode, using test issuer", + "required" : false, + "schema" : { + "type" : "integer" + }, + "in" : "query", + "name" : "test" + } ], + "requestBody" : { + "description" : "Claims of scope", + "required" : true, + "content" : { + "application/jwt" : { + "schema" : { + "$ref" : "#/components/schemas/Claims" + } + } + } + }, + "responses" : { + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + }, + "201" : { + "description" : "Successful response", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "job" : { + "description" : "20-character ID", + "type" : "string" + }, + "status" : { + "description" : "waiting", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "429" : { + "description" : "Too Many Requests on same address / number `rate-limit`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + } + } + }, + "/login" : { + "post" : { + "tags" : [ "login", "post" ], + "description" : "push sign-in request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", + "operationId" : "push_login_request", + "parameters" : [ { + "description" : "URI App will connect to", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "query", + "name" : "callback" + } ], + "requestBody" : { + "description" : "Push Token.", + "required" : true, + "content" : { + "application/jwt" : { + "schema" : { + "$ref" : "#/components/schemas/PushToken" + } + } + } + }, + "responses" : { + "200" : { + "description" : "Successful response", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "status" : { + "description" : "sent", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + }, + "401" : { + "description" : "Unauthorized for this callback audience `aud-error` or JWT should be self-signed `auth-error`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + } + } + }, + "/key" : { + "post" : { + "tags" : [ "key", "post" ], + "description" : "Register a new ID `JWT(sub, devtoken)`\n\nv5: `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", + "operationId" : "key_register", + "requestBody" : { + "$ref" : "#/components/requestBodies/AuthentiqID" + }, + "responses" : { + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + }, + "201" : { + "description" : "Successfully registered", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "secret" : { + "description" : "revoke key", + "type" : "string" + }, + "status" : { + "description" : "registered", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "409" : { + "description" : "Key already registered `duplicate-key`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + } + }, + "delete" : { + "tags" : [ "key", "delete" ], + "description" : "Revoke an Authentiq ID using email & phone.\n\nIf called with `email` and `phone` only, a verification code \nwill be sent by email. Do a second call adding `code` to \ncomplete the revocation.\n", + "operationId" : "key_revoke_nosecret", + "parameters" : [ { + "description" : "primary email associated to Key (ID)", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "query", + "name" : "email" + }, { + "description" : "primary phone number, international representation", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "query", + "name" : "phone" + }, { + "description" : "verification code sent by email", + "required" : false, + "schema" : { + "type" : "string" + }, + "in" : "query", + "name" : "code" + } ], + "responses" : { + "200" : { + "description" : "Successfully deleted", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "status" : { + "description" : "pending or done", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + }, + "401" : { + "description" : "Authentication error `auth-error`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "404" : { + "description" : "Unknown key `unknown-key`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "409" : { + "description" : "Confirm with code sent `confirm-first`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + } + } + }, + "/key/{PK}" : { + "head" : { + "tags" : [ "key", "head" ], + "description" : "HEAD info on Authentiq ID\n", + "parameters" : [ { + "$ref" : "#/components/parameters/PK" + } ], + "responses" : { + "200" : { + "description" : "Key exists" + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + }, + "410" : { + "description" : "Key is revoked `revoked-key`", + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "404" : { + "description" : "Unknown key `unknown-key`", + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + } + }, + "get" : { + "tags" : [ "key", "get" ], + "description" : "Get public details of an Authentiq ID.\n", + "operationId" : "key_retrieve", + "parameters" : [ { + "$ref" : "#/components/parameters/PK" + } ], + "responses" : { + "200" : { + "description" : "Successfully retrieved", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "sub" : { + "description" : "base64safe encoded public signing key", + "type" : "string" + }, + "since" : { + "format" : "date-time", + "type" : "string" + }, + "status" : { + "type" : "string" + } + }, + "type" : "object", + "title" : "JWT" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + }, + "410" : { + "description" : "Key is revoked (gone). `revoked-key`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "404" : { + "description" : "Unknown key `unknown-key`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + } + }, + "put" : { + "tags" : [ "key", "put" ], + "description" : "Update Authentiq ID by replacing the object.\n\nv4: `JWT(sub,email,phone)` to bind email/phone hash; \n\nv5: POST issuer-signed email & phone scopes\nand PUT to update registration `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", + "operationId" : "key_bind", + "parameters" : [ { + "$ref" : "#/components/parameters/PK" + } ], + "requestBody" : { + "$ref" : "#/components/requestBodies/AuthentiqID" + }, + "responses" : { + "200" : { + "description" : "Successfully updated", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "status" : { + "description" : "confirmed", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + }, + "404" : { + "description" : "Unknown key `unknown-key`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "409" : { + "description" : "Already bound to another key `duplicate-hash`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + } + }, + "post" : { + "tags" : [ "key", "post" ], + "description" : "update properties of an Authentiq ID.\n(not operational in v4; use PUT for now)\n\nv5: POST issuer-signed email & phone scopes in\na self-signed JWT\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", + "operationId" : "key_update", + "parameters" : [ { + "$ref" : "#/components/parameters/PK" + } ], + "requestBody" : { + "$ref" : "#/components/requestBodies/AuthentiqID" + }, + "responses" : { + "200" : { + "description" : "Successfully updated", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "status" : { + "description" : "confirmed", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + }, + "404" : { + "description" : "Unknown key `unknown-key`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + } + }, + "delete" : { + "tags" : [ "key", "delete" ], + "description" : "Revoke an Identity (Key) with a revocation secret", + "operationId" : "key_revoke", + "parameters" : [ { + "$ref" : "#/components/parameters/PK" + }, { + "description" : "revokation secret", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "query", + "name" : "secret" + } ], + "responses" : { + "200" : { + "description" : "Successful response", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "status" : { + "description" : "done", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + }, + "401" : { + "description" : "Key not found / wrong code `auth-error`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "404" : { + "description" : "Unknown key `unknown-key`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + } + } + } + }, + "components" : { + "parameters" : { + "PK" : { + "description" : "Public Signing Key - Authentiq ID (43 chars)", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "PK" + }, + "JobID" : { + "description" : "Job ID (20 chars)", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "job" + } + }, + "requestBodies" : { + "AuthentiqID" : { + "description" : "Authentiq ID to register", + "required" : true, + "content" : { + "application/jwt" : { + "schema" : { + "$ref" : "#/components/schemas/AuthentiqID" + } + } + } + } + }, + "responses" : { + "ErrorResponse" : { + "description" : "Error response", + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + }, + "schemas" : { + "Claims" : { + "description" : "Claim in JWT format, self- or issuer-signed. \n", + "properties" : { + "sub" : { + "description" : "UUID", + "type" : "string" + }, + "phone" : { + "type" : "string" + }, + "scope" : { + "description" : "claim scope", + "type" : "string" + }, + "type" : { + "type" : "string" + }, + "email" : { + "type" : "string" + } + }, + "required" : [ "sub", "scope" ] + }, + "Error" : { + "properties" : { + "detail" : { + "type" : "string" + }, + "error" : { + "type" : "integer" + }, + "title" : { + "type" : "string" + }, + "type" : { + "description" : "unique uri for this error", + "type" : "string" + } + }, + "required" : [ "error" ] + }, + "AuthentiqID" : { + "description" : "Authentiq ID in JWT format, self-signed.\n", + "properties" : { + "sub" : { + "description" : "UUID and public signing key", + "type" : "string" + }, + "devtoken" : { + "description" : "device token for push messages", + "type" : "string" + } + }, + "required" : [ "sub" ] + }, + "PushToken" : { + "description" : "PushToken in JWT format, self-signed. \n", + "properties" : { + "aud" : { + "description" : "audience (URI)", + "type" : "string" + }, + "sub" : { + "description" : "UUID and public signing key", + "type" : "string" + }, + "nbf" : { + "type" : "integer" + }, + "iss" : { + "description" : "issuer (URI)", + "type" : "string" + }, + "exp" : { + "type" : "integer" + }, + "iat" : { + "type" : "integer" + } + }, + "required" : [ "sub", "iss", "aud" ] + } + } + } +} \ No newline at end of file diff --git a/gen-api-ex/6-dot-authentiqio.appspot.com-6-expected.json b/gen-api-ex/6-dot-authentiqio.appspot.com-6-expected.json new file mode 100644 index 00000000..85303162 --- /dev/null +++ b/gen-api-ex/6-dot-authentiqio.appspot.com-6-expected.json @@ -0,0 +1,910 @@ +{ + "openapi" : "3.0.0", + "info" : { + "contact" : { + "email" : "hello@authentiq.com", + "name" : "Authentiq team", + "url" : "http://authentiq.io/support" + }, + "description" : "Strong authentication, without the passwords.", + "license" : { + "name" : "Apache 2.0", + "url" : "http://www.apache.org/licenses/LICENSE-2.0.html" + }, + "termsOfService" : "http://authentiq.com/terms/", + "title" : "Authentiq API", + "version" : "6", + "x-providerName" : "6-dot-authentiqio.appspot.com", + "x-logo" : { + "backgroundColor" : "#F26641", + "url" : "https://api.apis.guru/v2/cache/logo/https_www.authentiq.com_theme_images_authentiq-logo-a-inverse.svg" + }, + "x-apisguru-categories" : [ "security" ], + "x-origin" : [ { + "format" : "openapi", + "url" : "https://raw.githubusercontent.com/AuthentiqID/authentiq-docs/master/docs/swagger/issuer.yaml", + "version" : "3.0" + } ] + }, + "servers" : [ { + "url" : "https://6-dot-authentiqio.appspot.com" + } ], + "paths" : { + "/key" : { + "post" : { + "tags" : [ "key", "post" ], + "description" : "Register a new ID `JWT(sub, devtoken)`\n\nv5: `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", + "operationId" : "key_register", + "requestBody" : { + "$ref" : "#/components/requestBodies/AuthentiqID" + }, + "responses" : { + "201" : { + "description" : "Successfully registered", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "secret" : { + "description" : "revoke key", + "type" : "string" + }, + "status" : { + "description" : "registered", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "409" : { + "description" : "Key already registered `duplicate-key`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + } + } + }, + "delete" : { + "tags" : [ "key", "delete" ], + "description" : "Revoke an Authentiq ID using email & phone.\n\nIf called with `email` and `phone` only, a verification code \nwill be sent by email. Do a second call adding `code` to \ncomplete the revocation.\n", + "operationId" : "key_revoke_nosecret", + "parameters" : [ { + "description" : "primary email associated to Key (ID)", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "query", + "name" : "email" + }, { + "description" : "primary phone number, international representation", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "query", + "name" : "phone" + }, { + "description" : "verification code sent by email", + "required" : false, + "schema" : { + "type" : "string" + }, + "in" : "query", + "name" : "code" + } ], + "responses" : { + "200" : { + "description" : "Successfully deleted", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "status" : { + "description" : "pending or done", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "401" : { + "description" : "Authentication error `auth-error`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "404" : { + "description" : "Unknown key `unknown-key`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "409" : { + "description" : "Confirm with code sent `confirm-first`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + } + } + } + }, + "/key/{PK}" : { + "head" : { + "tags" : [ "key", "head" ], + "description" : "HEAD info on Authentiq ID\n", + "parameters" : [ { + "$ref" : "#/components/parameters/PK" + } ], + "responses" : { + "200" : { + "description" : "Key exists" + }, + "404" : { + "description" : "Unknown key `unknown-key`", + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "410" : { + "description" : "Key is revoked `revoked-key`", + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + } + } + }, + "get" : { + "tags" : [ "key", "get" ], + "description" : "Get public details of an Authentiq ID.\n", + "operationId" : "key_retrieve", + "parameters" : [ { + "$ref" : "#/components/parameters/PK" + } ], + "responses" : { + "200" : { + "description" : "Successfully retrieved", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "since" : { + "format" : "date-time", + "type" : "string" + }, + "status" : { + "type" : "string" + }, + "sub" : { + "description" : "base64safe encoded public signing key", + "type" : "string" + } + }, + "type" : "object", + "title" : "JWT" + } + } + } + }, + "404" : { + "description" : "Unknown key `unknown-key`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "410" : { + "description" : "Key is revoked (gone). `revoked-key`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + } + } + }, + "put" : { + "tags" : [ "key", "put" ], + "description" : "Update Authentiq ID by replacing the object.\n\nv4: `JWT(sub,email,phone)` to bind email/phone hash; \n\nv5: POST issuer-signed email & phone scopes\nand PUT to update registration `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", + "operationId" : "key_bind", + "parameters" : [ { + "$ref" : "#/components/parameters/PK" + } ], + "requestBody" : { + "$ref" : "#/components/requestBodies/AuthentiqID" + }, + "responses" : { + "200" : { + "description" : "Successfully updated", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "status" : { + "description" : "confirmed", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "404" : { + "description" : "Unknown key `unknown-key`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "409" : { + "description" : "Already bound to another key `duplicate-hash`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + } + } + }, + "post" : { + "tags" : [ "key", "post" ], + "description" : "update properties of an Authentiq ID.\n(not operational in v4; use PUT for now)\n\nv5: POST issuer-signed email & phone scopes in\na self-signed JWT\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", + "operationId" : "key_update", + "parameters" : [ { + "$ref" : "#/components/parameters/PK" + } ], + "requestBody" : { + "$ref" : "#/components/requestBodies/AuthentiqID" + }, + "responses" : { + "200" : { + "description" : "Successfully updated", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "status" : { + "description" : "confirmed", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "404" : { + "description" : "Unknown key `unknown-key`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + } + } + }, + "delete" : { + "tags" : [ "key", "delete" ], + "description" : "Revoke an Identity (Key) with a revocation secret", + "operationId" : "key_revoke", + "parameters" : [ { + "$ref" : "#/components/parameters/PK" + }, { + "description" : "revokation secret", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "query", + "name" : "secret" + } ], + "responses" : { + "200" : { + "description" : "Successful response", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "status" : { + "description" : "done", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "401" : { + "description" : "Key not found / wrong code `auth-error`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "404" : { + "description" : "Unknown key `unknown-key`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + } + } + } + }, + "/login" : { + "post" : { + "tags" : [ "login", "post" ], + "description" : "push sign-in request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", + "operationId" : "push_login_request", + "parameters" : [ { + "description" : "URI App will connect to", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "query", + "name" : "callback" + } ], + "requestBody" : { + "description" : "Push Token.", + "required" : true, + "content" : { + "application/jwt" : { + "schema" : { + "$ref" : "#/components/schemas/PushToken" + } + } + } + }, + "responses" : { + "200" : { + "description" : "Successful response", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "status" : { + "description" : "sent", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "401" : { + "description" : "Unauthorized for this callback audience `aud-error` or JWT should be self-signed `auth-error`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + } + } + } + }, + "/scope" : { + "post" : { + "tags" : [ "scope", "post" ], + "description" : "scope verification request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", + "operationId" : "sign_request", + "parameters" : [ { + "description" : "test only mode, using test issuer", + "required" : false, + "schema" : { + "type" : "integer" + }, + "in" : "query", + "name" : "test" + } ], + "requestBody" : { + "description" : "Claims of scope", + "required" : true, + "content" : { + "application/jwt" : { + "schema" : { + "$ref" : "#/components/schemas/Claims" + } + } + } + }, + "responses" : { + "201" : { + "description" : "Successful response", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "job" : { + "description" : "20-character ID", + "type" : "string" + }, + "status" : { + "description" : "waiting", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "429" : { + "description" : "Too Many Requests on same address / number `rate-limit`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + } + } + } + }, + "/scope/{job}" : { + "head" : { + "tags" : [ "scope", "head" ], + "description" : "HEAD to get the status of a verification job", + "operationId" : "sign_retrieve_head", + "parameters" : [ { + "$ref" : "#/components/parameters/JobID" + } ], + "responses" : { + "200" : { + "description" : "Confirmed and signed" + }, + "204" : { + "description" : "Confirmed, waiting for signing" + }, + "404" : { + "description" : "Job not found `unknown-job`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + } + } + }, + "get" : { + "tags" : [ "scope", "get" ], + "description" : "get the status / current content of a verification job", + "operationId" : "sign_retrieve", + "parameters" : [ { + "$ref" : "#/components/parameters/JobID" + } ], + "responses" : { + "200" : { + "description" : "Successful response (JWT)", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "exp" : { + "type" : "integer" + }, + "field" : { + "type" : "string" + }, + "sub" : { + "description" : "base64safe encoded public signing key", + "type" : "string" + } + }, + "type" : "object", + "title" : "JWT" + } + }, + "application/jwt" : { + "schema" : { + "properties" : { + "exp" : { + "type" : "integer" + }, + "field" : { + "type" : "string" + }, + "sub" : { + "description" : "base64safe encoded public signing key", + "type" : "string" + } + }, + "type" : "object", + "title" : "JWT" + } + } + } + }, + "204" : { + "description" : "Confirmed, waiting for signing" + }, + "404" : { + "description" : "Job not found `unknown-job`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + }, + "application/jwt" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + } + } + }, + "put" : { + "tags" : [ "scope", "put" ], + "description" : "authority updates a JWT with its signature\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", + "operationId" : "sign_update", + "parameters" : [ { + "$ref" : "#/components/parameters/JobID" + } ], + "responses" : { + "200" : { + "description" : "Successfully updated", + "content" : { + "application/jwt" : { + "schema" : { + "properties" : { + "jwt" : { + "description" : "result is JWT or JSON??", + "type" : "string" + }, + "status" : { + "description" : "ready", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "404" : { + "description" : "Job not found `unknown-job`", + "content" : { + "application/jwt" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "409" : { + "description" : "Job not confirmed yet `confirm-first`", + "content" : { + "application/jwt" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + } + } + }, + "post" : { + "tags" : [ "scope", "post" ], + "description" : "this is a scope confirmation", + "operationId" : "sign_confirm", + "parameters" : [ { + "$ref" : "#/components/parameters/JobID" + } ], + "responses" : { + "202" : { + "description" : "Successfully confirmed", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "status" : { + "description" : "confirmed", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "401" : { + "description" : "Confirmation error `auth-error`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "404" : { + "description" : "Job not found `unknown-job`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "405" : { + "description" : "JWT POSTed to scope `not-supported`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + } + } + }, + "delete" : { + "tags" : [ "scope", "delete" ], + "description" : "delete a verification job", + "operationId" : "sign_delete", + "parameters" : [ { + "$ref" : "#/components/parameters/JobID" + } ], + "responses" : { + "200" : { + "description" : "Successfully deleted", + "content" : { + "application/json" : { + "schema" : { + "properties" : { + "status" : { + "description" : "done", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "404" : { + "description" : "Job not found `unknown-job`", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + }, + "default" : { + "$ref" : "#/components/responses/ErrorResponse" + } + } + } + } + }, + "components" : { + "parameters" : { + "JobID" : { + "description" : "Job ID (20 chars)", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "job" + }, + "PK" : { + "description" : "Public Signing Key - Authentiq ID (43 chars)", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "PK" + } + }, + "requestBodies" : { + "AuthentiqID" : { + "description" : "Authentiq ID to register", + "required" : true, + "content" : { + "application/jwt" : { + "schema" : { + "$ref" : "#/components/schemas/AuthentiqID" + } + } + } + } + }, + "responses" : { + "ErrorResponse" : { + "description" : "Error response", + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/Error" + } + } + } + } + }, + "schemas" : { + "AuthentiqID" : { + "description" : "Authentiq ID in JWT format, self-signed.\n", + "properties" : { + "devtoken" : { + "description" : "device token for push messages", + "type" : "string" + }, + "sub" : { + "description" : "UUID and public signing key", + "type" : "string" + } + }, + "required" : [ "sub" ] + }, + "Claims" : { + "description" : "Claim in JWT format, self- or issuer-signed. \n", + "properties" : { + "email" : { + "type" : "string" + }, + "phone" : { + "type" : "string" + }, + "scope" : { + "description" : "claim scope", + "type" : "string" + }, + "sub" : { + "description" : "UUID", + "type" : "string" + }, + "type" : { + "type" : "string" + } + }, + "required" : [ "sub", "scope" ] + }, + "Error" : { + "properties" : { + "detail" : { + "type" : "string" + }, + "error" : { + "type" : "integer" + }, + "title" : { + "type" : "string" + }, + "type" : { + "description" : "unique uri for this error", + "type" : "string" + } + }, + "required" : [ "error" ] + }, + "PushToken" : { + "description" : "PushToken in JWT format, self-signed. \n", + "properties" : { + "aud" : { + "description" : "audience (URI)", + "type" : "string" + }, + "exp" : { + "type" : "integer" + }, + "iat" : { + "type" : "integer" + }, + "iss" : { + "description" : "issuer (URI)", + "type" : "string" + }, + "nbf" : { + "type" : "integer" + }, + "sub" : { + "description" : "UUID and public signing key", + "type" : "string" + } + }, + "required" : [ "sub", "iss", "aud" ] + } + } + } +} \ No newline at end of file diff --git a/gen-api-ex/abstractapi.com-geolocation-1.0.0-actual.json b/gen-api-ex/abstractapi.com-geolocation-1.0.0-actual.json new file mode 100644 index 00000000..59e7e531 --- /dev/null +++ b/gen-api-ex/abstractapi.com-geolocation-1.0.0-actual.json @@ -0,0 +1,219 @@ +{ + "openapi" : "3.0.1", + "info" : { + "description" : "Abstract IP geolocation API allows developers to retrieve the region, country and city behind any IP worldwide. The API covers the geolocation of IPv4 and IPv6 addresses in 180+ countries worldwide. Extra information can be retrieved like the currency, flag or language associated to an IP.", + "title" : "IP geolocation API", + "version" : "1.0.0", + "x-providerName" : "abstractapi.com", + "x-logo" : { + "url" : "https://api.apis.guru/v2/cache/logo/https_global-uploads.webflow.com_5ebbd0a566a3996636e55959_5ec2ba29feeeb05d69160e7b_webclip.png" + }, + "x-apisguru-categories" : [ "location" ], + "x-serviceName" : "geolocation", + "x-origin" : [ { + "format" : "openapi", + "url" : "https://documentation.abstractapi.com/ip-geolocation-openapi.json", + "version" : "3.0" + } ] + }, + "servers" : [ { + "url" : "https://ipgeolocation.abstractapi.com" + } ], + "paths" : { + "/v1" : { + "servers" : [ { + "url" : "https://ipgeolocation.abstractapi.com" + } ], + "get" : { + "description" : "Retrieve the location of an IP address", + "parameters" : [ { + "explode" : true, + "required" : true, + "schema" : { + "type" : "string" + }, + "style" : "form", + "in" : "query", + "name" : "api_key" + }, { + "explode" : true, + "required" : false, + "schema" : { + "example" : "195.154.25.40", + "type" : "string" + }, + "style" : "form", + "in" : "query", + "name" : "ip_address" + }, { + "explode" : true, + "required" : false, + "schema" : { + "example" : "country,city,timezone", + "type" : "string" + }, + "style" : "form", + "in" : "query", + "name" : "fields" + } ], + "responses" : { + "200" : { + "description" : "Location of geolocated IP", + "content" : { + "application/json" : { + "examples" : { + "0" : { + "value" : "{\"ip_address\":\"195.154.25.40\",\"city\":\"Paris\",\"city_geoname_id\":2988507,\"region\":\"?le-de-France\",\"region_iso_code\":\"IDF\",\"region_geoname_id\":3012874,\"postal_code\":\"75008\",\"country\":\"France\",\"country_code\":\"FR\",\"country_geoname_id\":3017382,\"country_is_eu\":true,\"continent\":\"Europe\",\"continent_code\":\"EU\",\"continent_geoname_id\":6255148,\"longitude\":2.4075,\"latitude\":48.8323,\"security\":{\"is_vpn\":false},\"timezone\":{\"name\":\"Europe/Paris\",\"abbreviation\":\"CEST\",\"gmt_offset\":2,\"current_time\":\"15:42:18\",\"is_dst\":true},\"flag\":{\"emoji\":\"<?<��\",\"unicode\":\"U+1F1EB U+1F1F7\",\"png\":\"https://static.abstractapi.com/country-flags/FR_flag.png\",\"svg\":\"https://static.abstractapi.com/country-flags/FR_flag.svg\"},\"currency\":{\"currency_name\":\"Euros\",\"currency_code\":\"EUR\"},\"connection\":{\"autonomous_system_number\":12876,\"autonomous_system_organization\":\"Online S.a.s.\",\"connection_type\":\"Corporate\",\"isp_name\":\"Online S.A.S.\",\"organization_name\":\"ONLINE\"}}" + } + }, + "schema" : { + "$ref" : "#/components/schemas/inline_response_200" + } + } + } + } + }, + "servers" : [ { + "url" : "https://ipgeolocation.abstractapi.com" + } ] + } + } + }, + "components" : { + "schemas" : { + "inline_response_200" : { + "properties" : { + "continent" : { + "type" : "string" + }, + "country" : { + "type" : "string" + }, + "flag" : { + "properties" : { + "emoji" : { + "type" : "string" + }, + "svg" : { + "type" : "string" + }, + "png" : { + "type" : "string" + }, + "unicode" : { + "type" : "string" + } + }, + "type" : "object" + }, + "country_geoname_id" : { + "type" : "integer" + }, + "city" : { + "type" : "string" + }, + "city_geoname_id" : { + "type" : "integer" + }, + "country_is_eu" : { + "type" : "boolean" + }, + "timezone" : { + "properties" : { + "name" : { + "type" : "string" + }, + "gmt_offset" : { + "type" : "integer" + }, + "abbreviation" : { + "type" : "string" + }, + "current_time" : { + "type" : "string" + }, + "is_dst" : { + "type" : "boolean" + } + }, + "type" : "object" + }, + "latitude" : { + "type" : "number" + }, + "continent_code" : { + "type" : "string" + }, + "ip_address" : { + "type" : "string" + }, + "region_geoname_id" : { + "type" : "integer" + }, + "region_iso_code" : { + "type" : "string" + }, + "country_code" : { + "type" : "string" + }, + "security" : { + "properties" : { + "is_vpn" : { + "type" : "boolean" + } + }, + "type" : "object" + }, + "connection" : { + "properties" : { + "isp_name" : { + "type" : "string" + }, + "connection_type" : { + "type" : "string" + }, + "organization_name" : { + "type" : "string" + }, + "autonomous_system_organization" : { + "type" : "string" + }, + "autonomous_system_number" : { + "type" : "integer" + } + }, + "type" : "object" + }, + "currency" : { + "properties" : { + "currency_name" : { + "type" : "string" + }, + "currency_code" : { + "type" : "string" + } + }, + "type" : "object" + }, + "continent_geoname_id" : { + "type" : "integer" + }, + "postal_code" : { + "type" : "string" + }, + "region" : { + "type" : "string" + }, + "longitude" : { + "type" : "number" + } + }, + "type" : "object" + } + } + }, + "externalDocs" : { + "description" : "API Documentation", + "url" : "https://www.abstractapi.com/ip-geolocation-api#docs" + } +} \ No newline at end of file diff --git a/gen-api-ex/abstractapi.com-geolocation-1.0.0-expected.json b/gen-api-ex/abstractapi.com-geolocation-1.0.0-expected.json new file mode 100644 index 00000000..78f32585 --- /dev/null +++ b/gen-api-ex/abstractapi.com-geolocation-1.0.0-expected.json @@ -0,0 +1,219 @@ +{ + "openapi" : "3.0.1", + "info" : { + "description" : "Abstract IP geolocation API allows developers to retrieve the region, country and city behind any IP worldwide. The API covers the geolocation of IPv4 and IPv6 addresses in 180+ countries worldwide. Extra information can be retrieved like the currency, flag or language associated to an IP.", + "title" : "IP geolocation API", + "version" : "1.0.0", + "x-providerName" : "abstractapi.com", + "x-logo" : { + "url" : "https://api.apis.guru/v2/cache/logo/https_global-uploads.webflow.com_5ebbd0a566a3996636e55959_5ec2ba29feeeb05d69160e7b_webclip.png" + }, + "x-apisguru-categories" : [ "location" ], + "x-serviceName" : "geolocation", + "x-origin" : [ { + "format" : "openapi", + "url" : "https://documentation.abstractapi.com/ip-geolocation-openapi.json", + "version" : "3.0" + } ] + }, + "servers" : [ { + "url" : "https://ipgeolocation.abstractapi.com" + } ], + "paths" : { + "/v1" : { + "servers" : [ { + "url" : "https://ipgeolocation.abstractapi.com" + } ], + "get" : { + "description" : "Retrieve the location of an IP address", + "parameters" : [ { + "explode" : true, + "required" : true, + "schema" : { + "type" : "string" + }, + "style" : "form", + "in" : "query", + "name" : "api_key" + }, { + "explode" : true, + "required" : false, + "schema" : { + "example" : "195.154.25.40", + "type" : "string" + }, + "style" : "form", + "in" : "query", + "name" : "ip_address" + }, { + "explode" : true, + "required" : false, + "schema" : { + "example" : "country,city,timezone", + "type" : "string" + }, + "style" : "form", + "in" : "query", + "name" : "fields" + } ], + "responses" : { + "200" : { + "description" : "Location of geolocated IP", + "content" : { + "application/json" : { + "examples" : { + "0" : { + "value" : "{\"ip_address\":\"195.154.25.40\",\"city\":\"Paris\",\"city_geoname_id\":2988507,\"region\":\"?le-de-France\",\"region_iso_code\":\"IDF\",\"region_geoname_id\":3012874,\"postal_code\":\"75008\",\"country\":\"France\",\"country_code\":\"FR\",\"country_geoname_id\":3017382,\"country_is_eu\":true,\"continent\":\"Europe\",\"continent_code\":\"EU\",\"continent_geoname_id\":6255148,\"longitude\":2.4075,\"latitude\":48.8323,\"security\":{\"is_vpn\":false},\"timezone\":{\"name\":\"Europe/Paris\",\"abbreviation\":\"CEST\",\"gmt_offset\":2,\"current_time\":\"15:42:18\",\"is_dst\":true},\"flag\":{\"emoji\":\"<?<��\",\"unicode\":\"U+1F1EB U+1F1F7\",\"png\":\"https://static.abstractapi.com/country-flags/FR_flag.png\",\"svg\":\"https://static.abstractapi.com/country-flags/FR_flag.svg\"},\"currency\":{\"currency_name\":\"Euros\",\"currency_code\":\"EUR\"},\"connection\":{\"autonomous_system_number\":12876,\"autonomous_system_organization\":\"Online S.a.s.\",\"connection_type\":\"Corporate\",\"isp_name\":\"Online S.A.S.\",\"organization_name\":\"ONLINE\"}}" + } + }, + "schema" : { + "$ref" : "#/components/schemas/inline_response_200" + } + } + } + } + }, + "servers" : [ { + "url" : "https://ipgeolocation.abstractapi.com" + } ] + } + } + }, + "components" : { + "schemas" : { + "inline_response_200" : { + "properties" : { + "city" : { + "type" : "string" + }, + "city_geoname_id" : { + "type" : "integer" + }, + "connection" : { + "properties" : { + "autonomous_system_number" : { + "type" : "integer" + }, + "autonomous_system_organization" : { + "type" : "string" + }, + "connection_type" : { + "type" : "string" + }, + "isp_name" : { + "type" : "string" + }, + "organization_name" : { + "type" : "string" + } + }, + "type" : "object" + }, + "continent" : { + "type" : "string" + }, + "continent_code" : { + "type" : "string" + }, + "continent_geoname_id" : { + "type" : "integer" + }, + "country" : { + "type" : "string" + }, + "country_code" : { + "type" : "string" + }, + "country_geoname_id" : { + "type" : "integer" + }, + "country_is_eu" : { + "type" : "boolean" + }, + "currency" : { + "properties" : { + "currency_code" : { + "type" : "string" + }, + "currency_name" : { + "type" : "string" + } + }, + "type" : "object" + }, + "flag" : { + "properties" : { + "emoji" : { + "type" : "string" + }, + "png" : { + "type" : "string" + }, + "svg" : { + "type" : "string" + }, + "unicode" : { + "type" : "string" + } + }, + "type" : "object" + }, + "ip_address" : { + "type" : "string" + }, + "latitude" : { + "type" : "number" + }, + "longitude" : { + "type" : "number" + }, + "postal_code" : { + "type" : "string" + }, + "region" : { + "type" : "string" + }, + "region_geoname_id" : { + "type" : "integer" + }, + "region_iso_code" : { + "type" : "string" + }, + "security" : { + "properties" : { + "is_vpn" : { + "type" : "boolean" + } + }, + "type" : "object" + }, + "timezone" : { + "properties" : { + "abbreviation" : { + "type" : "string" + }, + "current_time" : { + "type" : "string" + }, + "gmt_offset" : { + "type" : "integer" + }, + "is_dst" : { + "type" : "boolean" + }, + "name" : { + "type" : "string" + } + }, + "type" : "object" + } + }, + "type" : "object" + } + } + }, + "externalDocs" : { + "description" : "API Documentation", + "url" : "https://www.abstractapi.com/ip-geolocation-api#docs" + } +} \ No newline at end of file diff --git a/gen-api-ex/adyen.com-CheckoutUtilityService-1-actual.json b/gen-api-ex/adyen.com-CheckoutUtilityService-1-actual.json new file mode 100644 index 00000000..47f0f252 --- /dev/null +++ b/gen-api-ex/adyen.com-CheckoutUtilityService-1-actual.json @@ -0,0 +1,107 @@ +{ + "openapi" : "3.0.0", + "info" : { + "contact" : { + "email" : "support@adyen.com", + "name" : "Adyen Support", + "url" : "https://support.adyen.com/", + "x-twitter" : "Adyen" + }, + "description" : "A web service containing utility functions available for merchants integrating with Checkout APIs.\n## Authentication\nEach request to the Checkout Utility API must be signed with an API key. For this, obtain an API Key from your Customer Area, as described in [How to get the Checkout API key](https://docs.adyen.com/developers/user-management/how-to-get-the-checkout-api-key). Then set this key to the `X-API-Key` header value, for example:\n\n```\ncurl\n-H \"Content-Type: application/json\" \\\n-H \"X-API-Key: Your_Checkout_API_key\" \\\n...\n```\nNote that when going live, you need to generate a new API Key to access the [live endpoints](https://docs.adyen.com/developers/api-reference/live-endpoints).\n\n## Versioning\nCheckout API supports versioning of its endpoints through a version suffix in the endpoint URL. This suffix has the following format: \"vXX\", where XX is the version number.\n\nFor example:\n```\nhttps://checkout-test.adyen.com/v1/originKeys\n```", + "termsOfService" : "https://docs.adyen.com/legal/terms-conditions", + "title" : "Adyen Checkout Utility Service", + "version" : "1", + "x-providerName" : "adyen.com", + "x-logo" : { + "url" : "https://api.apis.guru/v2/cache/logo/https_twitter.com_Adyen_profile_image.jpeg" + }, + "x-apisguru-categories" : [ "payment" ], + "x-serviceName" : "CheckoutUtilityService", + "x-origin" : [ { + "converter" : { + "url" : "https://github.com/lucybot/api-spec-converter", + "version" : "2.7.11" + }, + "format" : "openapi", + "url" : "https://raw.githubusercontent.com/adyen/adyen-openapi/master/specs/3.0/CheckoutUtilityService-v1.json", + "version" : "3.0" + } ] + }, + "servers" : [ { + "url" : "https://checkout-test.adyen.com/v1" + } ], + "paths" : { + "/originKeys" : { + "post" : { + "summary" : "Create originKey values for one or more merchant domains.", + "description" : "This operation takes the origin domains and returns a JSON object containing the corresponding origin keys for the domains.", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CheckoutUtilityRequest" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK - the request has succeeded.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CheckoutUtilityResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request - a problem reading or understanding the request." + }, + "422" : { + "description" : "Unprocessable Entity - a request validation error." + }, + "401" : { + "description" : "Unauthorized - authentication required." + }, + "500" : { + "description" : "Internal Server Error - the server could not process the request." + }, + "403" : { + "description" : "Forbidden - insufficient permissions to process the request." + } + }, + "x-groupName" : "General", + "x-sortIndex" : 0 + } + } + }, + "components" : { + "schemas" : { + "CheckoutUtilityRequest" : { + "properties" : { + "originDomains" : { + "description" : "The list of origin domains, for which origin keys are requested.", + "type" : "array", + "items" : { + "type" : "string" + } + } + }, + "required" : [ "originDomains" ] + }, + "CheckoutUtilityResponse" : { + "properties" : { + "originKeys" : { + "description" : "The list of origin keys for all requested domains. For each list item, the key is the domain and the value is the origin key.", + "type" : "object", + "additionalProperties" : { + "type" : "string" + } + } + } + } + } + }, + "x-groups" : [ "General" ] +} \ No newline at end of file diff --git a/gen-api-ex/adyen.com-CheckoutUtilityService-1-expected.json b/gen-api-ex/adyen.com-CheckoutUtilityService-1-expected.json new file mode 100644 index 00000000..cd12a310 --- /dev/null +++ b/gen-api-ex/adyen.com-CheckoutUtilityService-1-expected.json @@ -0,0 +1,107 @@ +{ + "openapi" : "3.0.0", + "info" : { + "contact" : { + "email" : "support@adyen.com", + "name" : "Adyen Support", + "url" : "https://support.adyen.com/", + "x-twitter" : "Adyen" + }, + "description" : "A web service containing utility functions available for merchants integrating with Checkout APIs.\n## Authentication\nEach request to the Checkout Utility API must be signed with an API key. For this, obtain an API Key from your Customer Area, as described in [How to get the Checkout API key](https://docs.adyen.com/developers/user-management/how-to-get-the-checkout-api-key). Then set this key to the `X-API-Key` header value, for example:\n\n```\ncurl\n-H \"Content-Type: application/json\" \\\n-H \"X-API-Key: Your_Checkout_API_key\" \\\n...\n```\nNote that when going live, you need to generate a new API Key to access the [live endpoints](https://docs.adyen.com/developers/api-reference/live-endpoints).\n\n## Versioning\nCheckout API supports versioning of its endpoints through a version suffix in the endpoint URL. This suffix has the following format: \"vXX\", where XX is the version number.\n\nFor example:\n```\nhttps://checkout-test.adyen.com/v1/originKeys\n```", + "termsOfService" : "https://docs.adyen.com/legal/terms-conditions", + "title" : "Adyen Checkout Utility Service", + "version" : "1", + "x-providerName" : "adyen.com", + "x-logo" : { + "url" : "https://api.apis.guru/v2/cache/logo/https_twitter.com_Adyen_profile_image.jpeg" + }, + "x-apisguru-categories" : [ "payment" ], + "x-serviceName" : "CheckoutUtilityService", + "x-origin" : [ { + "converter" : { + "url" : "https://github.com/lucybot/api-spec-converter", + "version" : "2.7.11" + }, + "format" : "openapi", + "url" : "https://raw.githubusercontent.com/adyen/adyen-openapi/master/specs/3.0/CheckoutUtilityService-v1.json", + "version" : "3.0" + } ] + }, + "servers" : [ { + "url" : "https://checkout-test.adyen.com/v1" + } ], + "paths" : { + "/originKeys" : { + "post" : { + "summary" : "Create originKey values for one or more merchant domains.", + "description" : "This operation takes the origin domains and returns a JSON object containing the corresponding origin keys for the domains.", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CheckoutUtilityRequest" + } + } + } + }, + "responses" : { + "200" : { + "description" : "OK - the request has succeeded.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CheckoutUtilityResponse" + } + } + } + }, + "400" : { + "description" : "Bad Request - a problem reading or understanding the request." + }, + "401" : { + "description" : "Unauthorized - authentication required." + }, + "403" : { + "description" : "Forbidden - insufficient permissions to process the request." + }, + "422" : { + "description" : "Unprocessable Entity - a request validation error." + }, + "500" : { + "description" : "Internal Server Error - the server could not process the request." + } + }, + "x-groupName" : "General", + "x-sortIndex" : 0 + } + } + }, + "components" : { + "schemas" : { + "CheckoutUtilityRequest" : { + "properties" : { + "originDomains" : { + "description" : "The list of origin domains, for which origin keys are requested.", + "type" : "array", + "items" : { + "type" : "string" + } + } + }, + "required" : [ "originDomains" ] + }, + "CheckoutUtilityResponse" : { + "properties" : { + "originKeys" : { + "description" : "The list of origin keys for all requested domains. For each list item, the key is the domain and the value is the origin key.", + "type" : "object", + "additionalProperties" : { + "type" : "string" + } + } + } + } + } + }, + "x-groups" : [ "General" ] +} \ No newline at end of file diff --git a/gen-api-ex/petstore-v2-actual.json b/gen-api-ex/petstore-v2-actual.json new file mode 100644 index 00000000..e69de29b diff --git a/gen-api-ex/petstore-v2-expected.json b/gen-api-ex/petstore-v2-expected.json new file mode 100644 index 00000000..59ea6f3d --- /dev/null +++ b/gen-api-ex/petstore-v2-expected.json @@ -0,0 +1,992 @@ +{ + "openapi" : "3.0.0", + "info" : { + "description" : "This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters.", + "license" : { + "name" : "Apache-2.0", + "url" : "https://www.apache.org/licenses/LICENSE-2.0.html" + }, + "title" : "OpenAPI Petstore", + "version" : "1.0.0" + }, + "servers" : [ { + "url" : "https://petstore.swagger.io/v2" + } ], + "tags" : [ { + "name" : "pet", + "description" : "Everything about your Pets" + }, { + "name" : "store", + "description" : "Access to Petstore orders" + }, { + "name" : "user", + "description" : "Operations about user" + } ], + "paths" : { + "/pet" : { + "put" : { + "tags" : [ "pet" ], + "summary" : "Update an existing pet", + "description" : "", + "operationId" : "updatePet", + "requestBody" : { + "$ref" : "#/components/requestBodies/Pet" + }, + "responses" : { + "200" : { + "description" : "successful operation", + "content" : { + "application/xml" : { + "schema" : { + "$ref" : "#/components/schemas/Pet" + } + }, + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Pet" + } + } + } + }, + "400" : { + "description" : "Invalid ID supplied" + }, + "404" : { + "description" : "Pet not found" + }, + "405" : { + "description" : "Validation exception" + } + }, + "security" : [ { + "petstore_auth" : [ "write:pets", "read:pets" ] + } ] + }, + "post" : { + "tags" : [ "pet" ], + "summary" : "Add a new pet to the store", + "description" : "", + "operationId" : "addPet", + "requestBody" : { + "$ref" : "#/components/requestBodies/Pet" + }, + "responses" : { + "200" : { + "description" : "successful operation", + "content" : { + "application/xml" : { + "schema" : { + "$ref" : "#/components/schemas/Pet" + } + }, + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Pet" + } + } + } + }, + "405" : { + "description" : "Invalid input" + } + }, + "security" : [ { + "petstore_auth" : [ "write:pets", "read:pets" ] + } ] + } + }, + "/pet/findByStatus" : { + "get" : { + "tags" : [ "pet" ], + "summary" : "Finds Pets by status", + "description" : "Multiple status values can be provided with comma separated strings", + "operationId" : "findPetsByStatus", + "parameters" : [ { + "deprecated" : true, + "description" : "Status values that need to be considered for filter", + "explode" : false, + "required" : true, + "schema" : { + "type" : "array", + "items" : { + "type" : "string", + "default" : "available", + "enum" : [ "available", "pending", "sold" ] + } + }, + "style" : "form", + "in" : "query", + "name" : "status" + } ], + "responses" : { + "200" : { + "description" : "successful operation", + "content" : { + "application/xml" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/Pet" + } + } + }, + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/Pet" + } + } + } + } + }, + "400" : { + "description" : "Invalid status value" + } + }, + "security" : [ { + "petstore_auth" : [ "read:pets" ] + } ] + } + }, + "/pet/findByTags" : { + "get" : { + "tags" : [ "pet" ], + "summary" : "Finds Pets by tags", + "description" : "Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.", + "operationId" : "findPetsByTags", + "parameters" : [ { + "description" : "Tags to filter by", + "explode" : false, + "required" : true, + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "style" : "form", + "in" : "query", + "name" : "tags" + } ], + "responses" : { + "200" : { + "description" : "successful operation", + "content" : { + "application/xml" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/Pet" + } + } + }, + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/Pet" + } + } + } + } + }, + "400" : { + "description" : "Invalid tag value" + } + }, + "deprecated" : true, + "security" : [ { + "petstore_auth" : [ "read:pets" ] + } ] + } + }, + "/pet/{petId}" : { + "get" : { + "tags" : [ "pet" ], + "summary" : "Find pet by ID", + "description" : "Returns a single pet", + "operationId" : "getPetById", + "parameters" : [ { + "description" : "ID of pet to return", + "required" : true, + "schema" : { + "format" : "int64", + "type" : "integer" + }, + "in" : "path", + "name" : "petId" + } ], + "responses" : { + "200" : { + "description" : "successful operation", + "content" : { + "application/xml" : { + "schema" : { + "$ref" : "#/components/schemas/Pet" + } + }, + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Pet" + } + } + } + }, + "400" : { + "description" : "Invalid ID supplied" + }, + "404" : { + "description" : "Pet not found" + } + }, + "security" : [ { + "api_key" : [ ] + } ] + }, + "post" : { + "tags" : [ "pet" ], + "summary" : "Updates a pet in the store with form data", + "description" : "", + "operationId" : "updatePetWithForm", + "parameters" : [ { + "description" : "ID of pet that needs to be updated", + "required" : true, + "schema" : { + "format" : "int64", + "type" : "integer" + }, + "in" : "path", + "name" : "petId" + } ], + "requestBody" : { + "content" : { + "application/x-www-form-urlencoded" : { + "schema" : { + "properties" : { + "name" : { + "description" : "Updated name of the pet", + "type" : "string" + }, + "status" : { + "description" : "Updated status of the pet", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "responses" : { + "405" : { + "description" : "Invalid input" + } + }, + "security" : [ { + "petstore_auth" : [ "write:pets", "read:pets" ] + } ] + }, + "delete" : { + "tags" : [ "pet" ], + "summary" : "Deletes a pet", + "description" : "", + "operationId" : "deletePet", + "parameters" : [ { + "required" : false, + "schema" : { + "type" : "string" + }, + "in" : "header", + "name" : "api_key" + }, { + "description" : "Pet id to delete", + "required" : true, + "schema" : { + "format" : "int64", + "type" : "integer" + }, + "in" : "path", + "name" : "petId" + } ], + "responses" : { + "400" : { + "description" : "Invalid pet value" + } + }, + "security" : [ { + "petstore_auth" : [ "write:pets", "read:pets" ] + } ] + } + }, + "/pet/{petId}/uploadImage" : { + "post" : { + "tags" : [ "pet" ], + "summary" : "uploads an image", + "description" : "", + "operationId" : "uploadFile", + "parameters" : [ { + "description" : "ID of pet to update", + "required" : true, + "schema" : { + "format" : "int64", + "type" : "integer" + }, + "in" : "path", + "name" : "petId" + } ], + "requestBody" : { + "content" : { + "multipart/form-data" : { + "schema" : { + "properties" : { + "additionalMetadata" : { + "description" : "Additional data to pass to server", + "type" : "string" + }, + "file" : { + "description" : "file to upload", + "format" : "binary", + "type" : "string" + } + }, + "type" : "object" + } + } + } + }, + "responses" : { + "200" : { + "description" : "successful operation", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ApiResponse" + } + } + } + } + }, + "security" : [ { + "petstore_auth" : [ "write:pets", "read:pets" ] + } ] + } + }, + "/store/inventory" : { + "get" : { + "tags" : [ "store" ], + "summary" : "Returns pet inventories by status", + "description" : "Returns a map of status codes to quantities", + "operationId" : "getInventory", + "responses" : { + "200" : { + "description" : "successful operation", + "content" : { + "application/json" : { + "schema" : { + "type" : "object", + "additionalProperties" : { + "format" : "int32", + "type" : "integer" + } + } + } + } + } + }, + "security" : [ { + "api_key" : [ ] + } ] + } + }, + "/store/order" : { + "post" : { + "tags" : [ "store" ], + "summary" : "Place an order for a pet", + "description" : "", + "operationId" : "placeOrder", + "requestBody" : { + "description" : "order placed for purchasing the pet", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Order" + } + } + } + }, + "responses" : { + "200" : { + "description" : "successful operation", + "content" : { + "application/xml" : { + "schema" : { + "$ref" : "#/components/schemas/Order" + } + }, + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Order" + } + } + } + }, + "400" : { + "description" : "Invalid Order" + } + } + } + }, + "/store/order/{orderId}" : { + "get" : { + "tags" : [ "store" ], + "summary" : "Find purchase order by ID", + "description" : "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions", + "operationId" : "getOrderById", + "parameters" : [ { + "description" : "ID of pet that needs to be fetched", + "required" : true, + "schema" : { + "format" : "int64", + "maximum" : 10, + "minimum" : 1, + "type" : "integer" + }, + "in" : "path", + "name" : "orderId" + } ], + "responses" : { + "200" : { + "description" : "successful operation", + "content" : { + "application/xml" : { + "schema" : { + "$ref" : "#/components/schemas/Order" + } + }, + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Order" + } + } + } + }, + "400" : { + "description" : "Invalid ID supplied" + }, + "404" : { + "description" : "Order not found" + } + } + }, + "delete" : { + "tags" : [ "store" ], + "summary" : "Delete purchase order by ID", + "description" : "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", + "operationId" : "deleteOrder", + "parameters" : [ { + "description" : "ID of the order that needs to be deleted", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "orderId" + } ], + "responses" : { + "400" : { + "description" : "Invalid ID supplied" + }, + "404" : { + "description" : "Order not found" + } + } + } + }, + "/user" : { + "post" : { + "tags" : [ "user" ], + "summary" : "Create user", + "description" : "This can only be done by the logged in user.", + "operationId" : "createUser", + "requestBody" : { + "description" : "Created user object", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/User" + } + } + } + }, + "responses" : { + "default" : { + "description" : "successful operation" + } + }, + "security" : [ { + "api_key" : [ ] + } ] + } + }, + "/user/createWithArray" : { + "post" : { + "tags" : [ "user" ], + "summary" : "Creates list of users with given input array", + "description" : "", + "operationId" : "createUsersWithArrayInput", + "requestBody" : { + "$ref" : "#/components/requestBodies/UserArray" + }, + "responses" : { + "default" : { + "description" : "successful operation" + } + }, + "security" : [ { + "api_key" : [ ] + } ] + } + }, + "/user/createWithList" : { + "post" : { + "tags" : [ "user" ], + "summary" : "Creates list of users with given input array", + "description" : "", + "operationId" : "createUsersWithListInput", + "requestBody" : { + "$ref" : "#/components/requestBodies/UserArray" + }, + "responses" : { + "default" : { + "description" : "successful operation" + } + }, + "security" : [ { + "api_key" : [ ] + } ] + } + }, + "/user/login" : { + "get" : { + "tags" : [ "user" ], + "summary" : "Logs user into the system", + "description" : "", + "operationId" : "loginUser", + "parameters" : [ { + "description" : "The user name for login", + "required" : true, + "schema" : { + "pattern" : "^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$", + "type" : "string" + }, + "in" : "query", + "name" : "username" + }, { + "description" : "The password for login in clear text", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "query", + "name" : "password" + } ], + "responses" : { + "200" : { + "description" : "successful operation", + "headers" : { + "Set-Cookie" : { + "description" : "Cookie authentication key for use with the `api_key` apiKey authentication.", + "schema" : { + "example" : "AUTH_KEY=abcde12345; Path=/; HttpOnly", + "type" : "string" + } + }, + "X-Rate-Limit" : { + "description" : "calls per hour allowed by the user", + "schema" : { + "format" : "int32", + "type" : "integer" + } + }, + "X-Expires-After" : { + "description" : "date in UTC when token expires", + "schema" : { + "format" : "date-time", + "type" : "string" + } + } + }, + "content" : { + "application/xml" : { + "schema" : { + "type" : "string" + } + }, + "application/json" : { + "schema" : { + "type" : "string" + } + } + } + }, + "400" : { + "description" : "Invalid username/password supplied" + } + } + } + }, + "/user/logout" : { + "get" : { + "tags" : [ "user" ], + "summary" : "Logs out current logged in user session", + "description" : "", + "operationId" : "logoutUser", + "responses" : { + "default" : { + "description" : "successful operation" + } + }, + "security" : [ { + "api_key" : [ ] + } ] + } + }, + "/user/{username}" : { + "get" : { + "tags" : [ "user" ], + "summary" : "Get user by user name", + "description" : "", + "operationId" : "getUserByName", + "parameters" : [ { + "description" : "The name that needs to be fetched. Use user1 for testing.", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "username" + } ], + "responses" : { + "200" : { + "description" : "successful operation", + "content" : { + "application/xml" : { + "schema" : { + "$ref" : "#/components/schemas/User" + } + }, + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/User" + } + } + } + }, + "400" : { + "description" : "Invalid username supplied" + }, + "404" : { + "description" : "User not found" + } + } + }, + "put" : { + "tags" : [ "user" ], + "summary" : "Updated user", + "description" : "This can only be done by the logged in user.", + "operationId" : "updateUser", + "parameters" : [ { + "description" : "name that need to be deleted", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "username" + } ], + "requestBody" : { + "description" : "Updated user object", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/User" + } + } + } + }, + "responses" : { + "400" : { + "description" : "Invalid user supplied" + }, + "404" : { + "description" : "User not found" + } + }, + "security" : [ { + "api_key" : [ ] + } ] + }, + "delete" : { + "tags" : [ "user" ], + "summary" : "Delete user", + "description" : "This can only be done by the logged in user.", + "operationId" : "deleteUser", + "parameters" : [ { + "description" : "The name that needs to be deleted", + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "username" + } ], + "responses" : { + "400" : { + "description" : "Invalid username supplied" + }, + "404" : { + "description" : "User not found" + } + }, + "security" : [ { + "api_key" : [ ] + } ] + } + } + }, + "components" : { + "requestBodies" : { + "UserArray" : { + "description" : "List of user object", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/User" + } + } + } + } + }, + "Pet" : { + "description" : "Pet object that needs to be added to the store", + "required" : true, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/Pet" + } + }, + "application/xml" : { + "schema" : { + "$ref" : "#/components/schemas/Pet" + } + } + } + } + }, + "schemas" : { + "Order" : { + "description" : "An order for a pets from the pet store", + "properties" : { + "id" : { + "format" : "int64", + "type" : "integer" + }, + "petId" : { + "format" : "int64", + "type" : "integer" + }, + "quantity" : { + "format" : "int32", + "type" : "integer" + }, + "shipDate" : { + "format" : "date-time", + "type" : "string" + }, + "status" : { + "description" : "Order Status", + "type" : "string", + "enum" : [ "placed", "approved", "delivered" ] + }, + "complete" : { + "type" : "boolean", + "default" : false + } + }, + "type" : "object", + "title" : "Pet Order", + "xml" : { + "name" : "Order" + } + }, + "Category" : { + "description" : "A category for a pet", + "properties" : { + "id" : { + "format" : "int64", + "type" : "integer" + }, + "name" : { + "pattern" : "^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$", + "type" : "string" + } + }, + "type" : "object", + "title" : "Pet category", + "xml" : { + "name" : "Category" + } + }, + "User" : { + "description" : "A User who is purchasing from the pet store", + "properties" : { + "id" : { + "format" : "int64", + "type" : "integer" + }, + "username" : { + "type" : "string" + }, + "firstName" : { + "type" : "string" + }, + "lastName" : { + "type" : "string" + }, + "email" : { + "type" : "string" + }, + "password" : { + "type" : "string" + }, + "phone" : { + "type" : "string" + }, + "userStatus" : { + "description" : "User Status", + "format" : "int32", + "type" : "integer" + } + }, + "type" : "object", + "title" : "a User", + "xml" : { + "name" : "User" + } + }, + "Tag" : { + "description" : "A tag for a pet", + "properties" : { + "id" : { + "format" : "int64", + "type" : "integer" + }, + "name" : { + "type" : "string" + } + }, + "type" : "object", + "title" : "Pet Tag", + "xml" : { + "name" : "Tag" + } + }, + "Pet" : { + "description" : "A pet for sale in the pet store", + "properties" : { + "id" : { + "format" : "int64", + "type" : "integer" + }, + "category" : { + "$ref" : "#/components/schemas/Category" + }, + "name" : { + "example" : "doggie", + "type" : "string" + }, + "photoUrls" : { + "type" : "array", + "xml" : { + "name" : "photoUrl", + "wrapped" : true + }, + "items" : { + "type" : "string" + } + }, + "tags" : { + "type" : "array", + "xml" : { + "name" : "tag", + "wrapped" : true + }, + "items" : { + "$ref" : "#/components/schemas/Tag" + } + }, + "status" : { + "description" : "pet status in the store", + "deprecated" : true, + "type" : "string", + "enum" : [ "available", "pending", "sold" ] + } + }, + "type" : "object", + "title" : "a Pet", + "xml" : { + "name" : "Pet" + }, + "required" : [ "name", "photoUrls" ] + }, + "ApiResponse" : { + "description" : "Describes the result of uploading an image resource", + "properties" : { + "code" : { + "format" : "int32", + "type" : "integer" + }, + "type" : { + "type" : "string" + }, + "message" : { + "type" : "string" + } + }, + "type" : "object", + "title" : "An uploaded response" + } + }, + "securitySchemes" : { + "petstore_auth" : { + "type" : "oauth2", + "flows" : { + "implicit" : { + "authorizationUrl" : "http://petstore.swagger.io/api/oauth/dialog", + "scopes" : { + "write:pets" : "modify pets in your account", + "read:pets" : "read your pets" + } + } + } + }, + "api_key" : { + "type" : "apiKey", + "name" : "api_key", + "in" : "header" + } + } + }, + "externalDocs" : { + "description" : "Find out more about Swagger", + "url" : "http://swagger.io" + } +} \ No newline at end of file diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNode.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNode.java index 6337e90e..9e6d4b58 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNode.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNode.java @@ -486,7 +486,7 @@ public class ASTNode<T extends ASTNode> implements Cloneable { } /** * @aspect <NoAspect> - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:15 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:16 */ /** @apilevel internal */ protected void collect_contributors_OpenAPIObject_schemaTuples(OpenAPIObject _root, java.util.Map<ASTNode, java.util.Set<ASTNode>> _map) { @@ -495,16 +495,16 @@ public class ASTNode<T extends ASTNode> implements Cloneable { } } /** @apilevel internal */ - protected void contributeTo_OpenAPIObject_schemaTuples(java.util.Set<SchemaTuple> collection) { + protected void contributeTo_OpenAPIObject_schemaTuples(Set<SchemaTuple> collection) { } /** * @attribute inh * @aspect InfSchema - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:18 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:13 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.INH) - @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:18") + @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:13") public OpenAPIObject root() { if (root_visited) { throw new RuntimeException("Circular definition of attribute ASTNode.root()."); @@ -537,7 +537,7 @@ protected boolean root_visited = false; } /** - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:19 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:14 * @apilevel internal * @return {@code true} if this node has an equation for the inherited attribute root */ @@ -557,7 +557,7 @@ protected boolean root_visited = false; } /** - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:22 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:21 * @apilevel internal * @return {@code true} if this node has an equation for the inherited attribute inferUrl */ @@ -577,7 +577,7 @@ protected boolean root_visited = false; } /** - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:83 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:84 * @apilevel internal * @return {@code true} if this node has an equation for the inherited attribute generateUrl */ diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Delete.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Delete.java index c59221f3..f44a1adf 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Delete.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Delete.java @@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited; /** * @attribute syn * @aspect InfSchema - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34") + @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33") public String inferRandomUrl(String pathRef, OperationObject operationObject) { java.util.List _parameters = new java.util.ArrayList(2); _parameters.add(pathRef); @@ -206,10 +206,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj /** * @attribute syn * @aspect RandomRequestGenerator - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96") + @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97") public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) { java.util.List _parameters = new java.util.ArrayList(3); _parameters.add(pathRef); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Get.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Get.java index 2ae57182..c79388d2 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Get.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Get.java @@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited; /** * @attribute syn * @aspect InfSchema - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34") + @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33") public String inferRandomUrl(String pathRef, OperationObject operationObject) { java.util.List _parameters = new java.util.ArrayList(2); _parameters.add(pathRef); @@ -207,10 +207,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj /** * @attribute syn * @aspect RandomRequestGenerator - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96") + @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97") public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) { java.util.List _parameters = new java.util.ArrayList(3); _parameters.add(pathRef); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Head.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Head.java index 1aa23269..9d818573 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Head.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Head.java @@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited; /** * @attribute syn * @aspect InfSchema - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34") + @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33") public String inferRandomUrl(String pathRef, OperationObject operationObject) { java.util.List _parameters = new java.util.ArrayList(2); _parameters.add(pathRef); @@ -206,10 +206,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj /** * @attribute syn * @aspect RandomRequestGenerator - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96") + @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97") public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) { java.util.List _parameters = new java.util.ArrayList(3); _parameters.add(pathRef); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java index 0ea8197f..ff1db0e6 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java @@ -128,7 +128,8 @@ public class OpenAPIObject extends ASTNode<ASTNode> implements Cloneable { for( PathsObject p : this.getPathsObjects() ) p.generateUrl(responses); - System.out.println(responses.size()); /* + System.out.println(responses.size()); + /* for( String path : urls ){ if( path.endsWith("GET") ){ System.out.println(this.getServerObject(0).getUrl() + path.substring(0, path.length()-3)); @@ -1089,7 +1090,7 @@ public class OpenAPIObject extends ASTNode<ASTNode> implements Cloneable { } /** * @aspect <NoAspect> - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:15 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:16 */ /** @apilevel internal */ protected java.util.Map<ASTNode, java.util.Set<ASTNode>> contributorMap_OpenAPIObject_schemaTuples = null; @@ -1103,7 +1104,7 @@ protected java.util.Map<ASTNode, java.util.Set<ASTNode>> contributorMap_OpenAPIO } /** - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:18 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:13 * @apilevel internal */ public OpenAPIObject Define_root(ASTNode _callerNode, ASTNode _childNode) { @@ -1111,7 +1112,7 @@ protected java.util.Map<ASTNode, java.util.Set<ASTNode>> contributorMap_OpenAPIO return this; } /** - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:18 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:13 * @apilevel internal * @return {@code true} if this node has an equation for the inherited attribute root */ @@ -1119,12 +1120,12 @@ protected java.util.Map<ASTNode, java.util.Set<ASTNode>> contributorMap_OpenAPIO return true; } /** - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:21 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:20 * @apilevel internal */ public Set<String> Define_inferUrl(ASTNode _callerNode, ASTNode _childNode, Set<String> urls) { if (_callerNode == getPathsObjectListNoTransform()) { - // @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:22 + // @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:21 int i = _callerNode.getIndexOfChild(_childNode); { PathItemObject p = ((PathsObject) _childNode).getPathItemOb().pathItemObject(); @@ -1143,7 +1144,7 @@ protected java.util.Map<ASTNode, java.util.Set<ASTNode>> contributorMap_OpenAPIO } } /** - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:21 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:20 * @apilevel internal * @return {@code true} if this node has an equation for the inherited attribute inferUrl */ @@ -1151,12 +1152,12 @@ protected java.util.Map<ASTNode, java.util.Set<ASTNode>> contributorMap_OpenAPIO return true; } /** - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:82 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:83 * @apilevel internal */ public Map<ResponseObject, String> Define_generateUrl(ASTNode _callerNode, ASTNode _childNode, Map<ResponseObject, String> responses) { if (_callerNode == getPathsObjectListNoTransform()) { - // @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:83 + // @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:84 int i = _callerNode.getIndexOfChild(_childNode); { PathItemObject p = ((PathsObject) _childNode).getPathItemOb().pathItemObject(); @@ -1177,7 +1178,7 @@ protected java.util.Map<ASTNode, java.util.Set<ASTNode>> contributorMap_OpenAPIO } } /** - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:82 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:83 * @apilevel internal * @return {@code true} if this node has an equation for the inherited attribute generateUrl */ @@ -1197,11 +1198,11 @@ protected boolean OpenAPIObject_schemaTuples_visited = false; /** * @attribute coll * @aspect InfSchema - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:15 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:16 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.COLL) - @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:15") - public java.util.Set<SchemaTuple> schemaTuples() { + @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:16") + public Set<SchemaTuple> schemaTuples() { ASTState state = state(); if (OpenAPIObject_schemaTuples_computed == ASTState.NON_CYCLE || OpenAPIObject_schemaTuples_computed == state().cycle()) { return OpenAPIObject_schemaTuples_value; @@ -1222,14 +1223,14 @@ protected boolean OpenAPIObject_schemaTuples_visited = false; return OpenAPIObject_schemaTuples_value; } /** @apilevel internal */ - private java.util.Set<SchemaTuple> schemaTuples_compute() { + private Set<SchemaTuple> schemaTuples_compute() { ASTNode node = this; while (node != null && !(node instanceof OpenAPIObject)) { node = node.getParent(); } OpenAPIObject root = (OpenAPIObject) node; root.survey_OpenAPIObject_schemaTuples(); - java.util.Set<SchemaTuple> _computedValue = new java.util.HashSet<>(); + Set<SchemaTuple> _computedValue = new HashSet<>(); if (root.contributorMap_OpenAPIObject_schemaTuples.containsKey(this)) { for (ASTNode contributor : root.contributorMap_OpenAPIObject_schemaTuples.get(this)) { contributor.contributeTo_OpenAPIObject_schemaTuples(_computedValue); @@ -1241,6 +1242,6 @@ protected boolean OpenAPIObject_schemaTuples_visited = false; protected ASTState.Cycle OpenAPIObject_schemaTuples_computed = null; /** @apilevel internal */ - protected java.util.Set<SchemaTuple> OpenAPIObject_schemaTuples_value; + protected Set<SchemaTuple> OpenAPIObject_schemaTuples_value; } diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationOb.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationOb.java index 23953274..e4a48bdc 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationOb.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationOb.java @@ -101,18 +101,18 @@ public abstract class OperationOb extends ASTNode<ASTNode> implements Cloneable /** * @attribute syn * @aspect InfSchema - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34") + @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33") public abstract String inferRandomUrl(String pathRef, OperationObject operationObject); /** * @attribute syn * @aspect RandomRequestGenerator - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96") + @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97") public abstract String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses); /** @apilevel internal */ public ASTNode rewriteTo() { diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java index 8104e7f3..37781338 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java @@ -136,7 +136,7 @@ public class OperationObject extends OperationOb implements Cloneable { } /** * @aspect RandomRequestGenerator - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:376 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:377 */ public String generateRandomString(Random rand, JastAddList<EnumObj> objs) { if( objs.getNumChild() != 0 ) @@ -150,7 +150,7 @@ public class OperationObject extends OperationOb implements Cloneable { } /** * @aspect RandomRequestGenerator - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:387 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:388 */ public String generateRandomInt(Random rand, int minimum, int maximum){ if( minimum > -1 && maximum > 0 ) @@ -1293,10 +1293,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited; /** * @attribute syn * @aspect InfSchema - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34") + @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33") public String inferRandomUrl(String pathRef, OperationObject operationObject) { java.util.List _parameters = new java.util.ArrayList(2); _parameters.add(pathRef); @@ -1314,30 +1314,28 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited; } } /** @apilevel internal */ -protected java.util.Set getDict_Set_SchemaTuple__Map_ResponseObject__String__visited; +protected java.util.Set addDict_Map_ResponseObject__String__visited; /** * @attribute syn * @aspect InfSchema - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:65 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:64 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:65") - public Map<String, List<String>> getDict(Set<SchemaTuple> tuples, Map<ResponseObject, String> responses) { - java.util.List _parameters = new java.util.ArrayList(2); - _parameters.add(tuples); - _parameters.add(responses); - if (getDict_Set_SchemaTuple__Map_ResponseObject__String__visited == null) getDict_Set_SchemaTuple__Map_ResponseObject__String__visited = new java.util.HashSet(4); - if (getDict_Set_SchemaTuple__Map_ResponseObject__String__visited.contains(_parameters)) { - throw new RuntimeException("Circular definition of attribute OperationObject.getDict(Set_SchemaTuple_,Map_ResponseObject__String_)."); + @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:64") + public Map<String, List<String>> addDict(Map<ResponseObject, String> responses) { + Object _parameters = responses; + if (addDict_Map_ResponseObject__String__visited == null) addDict_Map_ResponseObject__String__visited = new java.util.HashSet(4); + if (addDict_Map_ResponseObject__String__visited.contains(_parameters)) { + throw new RuntimeException("Circular definition of attribute OperationObject.addDict(Map_ResponseObject__String_)."); } - getDict_Set_SchemaTuple__Map_ResponseObject__String__visited.add(_parameters); + addDict_Map_ResponseObject__String__visited.add(_parameters); try { Map<String, List<String>> map = new HashMap<>(); return map; } finally { - getDict_Set_SchemaTuple__Map_ResponseObject__String__visited.remove(_parameters); + addDict_Map_ResponseObject__String__visited.remove(_parameters); } } /** @apilevel internal */ @@ -1345,10 +1343,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj /** * @attribute syn * @aspect RandomRequestGenerator - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96") + @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97") public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) { java.util.List _parameters = new java.util.ArrayList(3); _parameters.add(pathRef); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Options.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Options.java index 07a19195..95f709cd 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Options.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Options.java @@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited; /** * @attribute syn * @aspect InfSchema - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34") + @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33") public String inferRandomUrl(String pathRef, OperationObject operationObject) { java.util.List _parameters = new java.util.ArrayList(2); _parameters.add(pathRef); @@ -206,10 +206,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj /** * @attribute syn * @aspect RandomRequestGenerator - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96") + @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97") public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) { java.util.List _parameters = new java.util.ArrayList(3); _parameters.add(pathRef); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java index a00d115e..e352fe27 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java @@ -825,24 +825,6 @@ protected java.util.Set composeParameter_ParameterOb_Map_Object__ASTNode__visite } } /** @apilevel internal */ -protected boolean schemaObject_visited = false; - /** - * @attribute syn - * @aspect InfSchema - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:3 - */ - @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:3") - public SchemaObject schemaObject() { - if (schemaObject_visited) { - throw new RuntimeException("Circular definition of attribute ParameterObject.schemaObject()."); - } - schemaObject_visited = true; - SchemaObject schemaObject_value = getSchemaOb().schemaObject(); - schemaObject_visited = false; - return schemaObject_value; - } -/** @apilevel internal */ protected boolean parameterObject_visited = false; /** * @attribute syn diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Patch.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Patch.java index 52722173..f70f6436 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Patch.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Patch.java @@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited; /** * @attribute syn * @aspect InfSchema - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34") + @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33") public String inferRandomUrl(String pathRef, OperationObject operationObject) { java.util.List _parameters = new java.util.ArrayList(2); _parameters.add(pathRef); @@ -206,10 +206,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj /** * @attribute syn * @aspect RandomRequestGenerator - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96") + @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97") public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) { java.util.List _parameters = new java.util.ArrayList(3); _parameters.add(pathRef); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java index 6b24d4f0..a160031a 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java @@ -207,10 +207,10 @@ public class PathsObject extends ASTNode<ASTNode> implements Cloneable { /** * @attribute inh * @aspect InfSchema - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:21 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:20 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.INH) - @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:21") + @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:20") public Set<String> inferUrl(Set<String> urls) { Object _parameters = urls; if (inferUrl_Set_String__visited == null) inferUrl_Set_String__visited = new java.util.HashSet(4); @@ -227,10 +227,10 @@ protected java.util.Set inferUrl_Set_String__visited; /** * @attribute inh * @aspect RandomRequestGenerator - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:82 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:83 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.INH) - @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:82") + @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:83") public Map<ResponseObject, String> generateUrl(Map<ResponseObject, String> responses) { Object _parameters = responses; if (generateUrl_Map_ResponseObject__String__visited == null) generateUrl_Map_ResponseObject__String__visited = new java.util.HashSet(4); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Post.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Post.java index 4e567100..ddab0d5b 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Post.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Post.java @@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited; /** * @attribute syn * @aspect InfSchema - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34") + @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33") public String inferRandomUrl(String pathRef, OperationObject operationObject) { java.util.List _parameters = new java.util.ArrayList(2); _parameters.add(pathRef); @@ -207,10 +207,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj /** * @attribute syn * @aspect RandomRequestGenerator - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96") + @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97") public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) { java.util.List _parameters = new java.util.ArrayList(3); _parameters.add(pathRef); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Put.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Put.java index 3f15eda0..24bd11ab 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Put.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Put.java @@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited; /** * @attribute syn * @aspect InfSchema - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34") + @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33") public String inferRandomUrl(String pathRef, OperationObject operationObject) { java.util.List _parameters = new java.util.ArrayList(2); _parameters.add(pathRef); @@ -206,10 +206,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj /** * @attribute syn * @aspect RandomRequestGenerator - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96") + @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97") public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) { java.util.List _parameters = new java.util.ArrayList(3); _parameters.add(pathRef); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaTuple.java index 3f676540..2529060d 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaTuple.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaTuple.java @@ -214,7 +214,7 @@ public class SchemaTuple extends ASTNode<ASTNode> implements Cloneable { } /** @apilevel internal */ protected void collect_contributors_OpenAPIObject_schemaTuples(OpenAPIObject _root, java.util.Map<ASTNode, java.util.Set<ASTNode>> _map) { - // @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:16 + // @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:17 { java.util.Set<ASTNode> contributors = _map.get(_root); if (contributors == null) { @@ -226,7 +226,7 @@ public class SchemaTuple extends ASTNode<ASTNode> implements Cloneable { super.collect_contributors_OpenAPIObject_schemaTuples(_root, _map); } /** @apilevel internal */ - protected void contributeTo_OpenAPIObject_schemaTuples(java.util.Set<SchemaTuple> collection) { + protected void contributeTo_OpenAPIObject_schemaTuples(Set<SchemaTuple> collection) { super.contributeTo_OpenAPIObject_schemaTuples(collection); collection.add(this); } diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Trace.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Trace.java index 3d747775..88c142f2 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Trace.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Trace.java @@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited; /** * @attribute syn * @aspect InfSchema - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34") + @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33") public String inferRandomUrl(String pathRef, OperationObject operationObject) { java.util.List _parameters = new java.util.ArrayList(2); _parameters.add(pathRef); @@ -206,10 +206,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj /** * @attribute syn * @aspect RandomRequestGenerator - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97 */ @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN) - @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96") + @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97") public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) { java.util.List _parameters = new java.util.ArrayList(3); _parameters.add(pathRef); diff --git a/src/main/jastadd/InfSchema.jrag b/src/main/jastadd/InfSchema.jrag index 0685d401..13750b83 100644 --- a/src/main/jastadd/InfSchema.jrag +++ b/src/main/jastadd/InfSchema.jrag @@ -1,7 +1,5 @@ aspect InfSchema { - syn SchemaObject ParameterObject.schemaObject() = getSchemaOb().schemaObject(); - // syn Set<SchemaObject> ResponseObject.schemaObject () = for( ContentTuple c : getContentTuples() ) add.SchemaObject(); @@ -10,14 +8,15 @@ aspect InfSchema { SchemaOb contributes this when schemaObject() to OpenAPIObject.collectSchemaObs(); - */ - - coll java.util.Set<SchemaTuple> OpenAPIObject.schemaTuples() [new java.util.HashSet<>()] root OpenAPIObject; - SchemaTuple contributes this to OpenAPIObject.schemaTuples(); + */ inh OpenAPIObject ASTNode.root(); eq OpenAPIObject.getChild().root() = this; + coll Set<SchemaTuple> OpenAPIObject.schemaTuples() [new HashSet<>()] root OpenAPIObject; + SchemaTuple contributes this + to OpenAPIObject.schemaTuples(); + inh Set<String> PathsObject.inferUrl(Set<String> urls); eq OpenAPIObject.getPathsObject(int i).inferUrl(Set<String> urls) { PathItemObject p = ((PathsObject) _childNode).getPathItemOb().pathItemObject(); @@ -62,7 +61,7 @@ aspect InfSchema { return ""; } - syn Map<String, List<String>> OperationObject.getDict (Set<SchemaTuple> tuples, Map<ResponseObject, String> responses){ + syn Map<String, List<String>> OperationObject.addDict (Map<ResponseObject, String> responses){ Map<String, List<String>> map = new HashMap<>(); return map; diff --git a/src/main/resources/1password.com-events-1.0.0.json b/src/main/resources/1password.com-events-1.0.0.json deleted file mode 100644 index 503bd16f..00000000 --- a/src/main/resources/1password.com-events-1.0.0.json +++ /dev/null @@ -1,518 +0,0 @@ -{ - "openapi": "3.0.0", - "servers": [ - { - "description": "1Password", - "url": "https://events.1password.com" - }, - { - "description": "1Password CA", - "url": "https://events.1password.ca" - }, - { - "description": "1Password EU", - "url": "https://events.1password.eu" - }, - { - "description": "1Password Enterprise", - "url": "https://events.ent.1password.com" - } - ], - "info": { - "description": "1Password Events API Specification.", - "title": "Events API", - "version": "1.0.0", - "x-apisguru-categories": [ - "security" - ], - "x-logo": { - "url": "https://api.apis.guru/v2/cache/logo/https_upload.wikimedia.org_wikipedia_commons_thumb_e_e3_1password-logo.svg_1280px-1password-logo.svg.png" - }, - "x-origin": [ - { - "format": "openapi", - "url": "https://i.1password.com/media/1password-events-reporting/1password-events-api.yaml", - "version": "3.0" - } - ], - "x-providerName": "1password.com", - "x-serviceName": "events" - }, - "paths": { - "/api/auth/introspect": { - "get": { - "operationId": "getAuthIntrospect", - "responses": { - "200": { - "$ref": "#/components/responses/IntrospectResponse" - }, - "401": { - "$ref": "#/components/responses/UnauthorizedErrorResponse" - }, - "default": { - "$ref": "#/components/responses/GenericErrorResponse" - } - }, - "security": [ - { - "jwtsa": [] - } - ], - "summary": "Performs introspection of the provided Bearer JWT token", - "tags": [ - "auth" - ] - } - }, - "/api/v1/itemusages": { - "post": { - "description": "This endpoint requires your JSON Web Token to have the *itemusages* feature.", - "operationId": "getItemUsages", - "requestBody": { - "$ref": "#/components/requestBodies/ItemUsagesRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/ItemUsagesResponse" - }, - "401": { - "$ref": "#/components/responses/UnauthorizedErrorResponse" - }, - "default": { - "$ref": "#/components/responses/GenericErrorResponse" - } - }, - "security": [ - { - "jwtsa": [] - } - ], - "summary": "Retrieves item usages", - "tags": [ - "api-v1" - ] - } - }, - "/api/v1/signinattempts": { - "post": { - "description": "This endpoint requires your JSON Web Token to have the *signinattempts* feature.", - "operationId": "getSignInAttempts", - "requestBody": { - "$ref": "#/components/requestBodies/SignInAttemptsRequest" - }, - "responses": { - "200": { - "$ref": "#/components/responses/SignInAttemptsResponse" - }, - "401": { - "$ref": "#/components/responses/UnauthorizedErrorResponse" - }, - "default": { - "$ref": "#/components/responses/GenericErrorResponse" - } - }, - "security": [ - { - "jwtsa": [] - } - ], - "summary": "Retrieves sign-in attempts", - "tags": [ - "api-v1" - ] - } - } - }, - "components": { - "examples": { - "Cursor": { - "summary": "Used for continued calling with a cursor", - "value": { - "cursor": "aGVsbG8hIGlzIGl0IG1lIHlvdSBhcmUgbG9va2luZyBmb3IK" - } - }, - "ResetCursor": { - "summary": "Used for reseting the cursor", - "value": { - "limit": 100, - "start_time": "2021-06-11T16:32:50-03:00" - } - } - }, - "requestBodies": { - "CursorRequest": { - "content": { - "application/json": { - "examples": { - "Continuing cursor": { - "$ref": "#/components/examples/Cursor" - }, - "Resetting cursor": { - "$ref": "#/components/examples/ResetCursor" - } - }, - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/Cursor" - }, - { - "$ref": "#/components/schemas/ResetCursor" - } - ] - } - } - } - }, - "ItemUsagesRequest": { - "$ref": "#/components/requestBodies/CursorRequest" - }, - "SignInAttemptsRequest": { - "$ref": "#/components/requestBodies/CursorRequest" - } - }, - "responses": { - "GenericErrorResponse": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Generic error" - }, - "IntrospectResponse": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Introspection" - } - } - }, - "description": "Introspection object" - }, - "ItemUsagesResponse": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ItemUsageItems" - } - } - }, - "description": "Item usages response object" - }, - "SignInAttemptsResponse": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SignInAttemptItems" - } - } - }, - "description": "Sign-in attempts response object" - }, - "UnauthorizedErrorResponse": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unauthorized" - } - }, - "schemas": { - "Client": { - "description": "Metadata gathered about the client", - "properties": { - "app_name": { - "example": "1Password Extension", - "type": "string" - }, - "app_version": { - "example": "20127", - "type": "string" - }, - "ip_address": { - "example": "13.227.95.22", - "type": "string" - }, - "os_name": { - "example": "MacOSX", - "type": "string" - }, - "os_version": { - "example": "10.15.6", - "type": "string" - }, - "platform_name": { - "example": "Chrome", - "type": "string" - }, - "platform_version": { - "description": "Depending on the platform used, this can be the version of the browser that the client extension is installed, the model of computer that the native application is installed or the machine's CPU version that the CLI was installed", - "type": "string" - } - } - }, - "Cursor": { - "description": "Cursor", - "properties": { - "cursor": { - "description": "Cursor to fetch more data if available or continue the polling process if required", - "example": "aGVsbG8hIGlzIGl0IG1lIHlvdSBhcmUgbG9va2luZyBmb3IK", - "type": "string" - } - } - }, - "CursorCollection": { - "allOf": [ - { - "$ref": "#/components/schemas/Cursor" - }, - { - "properties": { - "has_more": { - "description": "Whether there may still be more data to fetch using the returned cursor. If true, the subsequent request could still be empty.", - "type": "boolean" - } - } - } - ], - "description": "Common cursor properties for collection responses" - }, - "DateTimeRFC3339": { - "example": "2020-06-11T16:32:50-03:00", - "format": "date-time", - "type": "string" - }, - "Details": { - "description": "Additional information about the sign-in attempt", - "properties": { - "value": { - "description": "For firewall prevented sign-ins, the value is the chosen continent, country, etc. that blocked the sign-in attempt", - "example": "Europe", - "type": "string" - } - } - }, - "Error": { - "properties": { - "Error": { - "properties": { - "Message": { - "description": "The error message.", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "Introspection": { - "properties": { - "Features": { - "example": [ - "itemusages", - "signinattempts" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "IssuedAt": { - "$ref": "#/components/schemas/DateTimeRFC3339" - }, - "UUID": { - "type": "string" - } - }, - "type": "object" - }, - "ItemUsage": { - "description": "A single item usage object", - "properties": { - "client": { - "$ref": "#/components/schemas/Client" - }, - "item_uuid": { - "$ref": "#/components/schemas/UUID" - }, - "timestamp": { - "$ref": "#/components/schemas/DateTimeRFC3339" - }, - "used_version": { - "type": "integer" - }, - "user": { - "$ref": "#/components/schemas/User" - }, - "uuid": { - "$ref": "#/components/schemas/UUID" - }, - "vault_uuid": { - "$ref": "#/components/schemas/UUID" - } - } - }, - "ItemUsageItems": { - "allOf": [ - { - "properties": { - "items": { - "items": { - "$ref": "#/components/schemas/ItemUsage" - }, - "type": "array" - } - } - }, - { - "$ref": "#/components/schemas/CursorCollection" - } - ], - "description": "An object wrapping cursor properties and a list of items usages" - }, - "ResetCursor": { - "description": "Reset cursor", - "properties": { - "end_time": { - "$ref": "#/components/schemas/DateTimeRFC3339" - }, - "limit": { - "maximum": 1000, - "minimum": 1, - "type": "number" - }, - "start_time": { - "$ref": "#/components/schemas/DateTimeRFC3339" - } - } - }, - "SignInAttempt": { - "description": "A single sign-in attempt object", - "properties": { - "category": { - "enum": [ - "success", - "credentials_failed", - "mfa_failed", - "modern_version_failed", - "firewall_failed", - "firewall_reported_success" - ], - "example": "firewall_failed", - "type": "string" - }, - "client": { - "$ref": "#/components/schemas/Client" - }, - "country": { - "description": "Country ISO Code", - "example": "France", - "type": "string" - }, - "details": { - "$ref": "#/components/schemas/Details" - }, - "session_uuid": { - "$ref": "#/components/schemas/UUID" - }, - "target_user": { - "$ref": "#/components/schemas/User" - }, - "timestamp": { - "$ref": "#/components/schemas/DateTimeRFC3339" - }, - "type": { - "enum": [ - "credentials_ok", - "mfa_ok", - "password_secret_bad", - "mfa_missing", - "totp_disabled", - "totp_bad", - "totp_timeout", - "u2f_disabled", - "u2f_bad", - "u2f_timout", - "duo_disabled", - "duo_bad", - "duo_timeout", - "duo_native_bad", - "platform_secret_disabled", - "platform_secret_bad", - "platform_secret_proxy", - "code_disabled", - "code_bad", - "code_timeout", - "ip_blocked", - "continent_blocked", - "country_blocked", - "anonymous_blocked", - "all_blocked", - "modern_version_missing", - "modern_version_old" - ], - "example": "continent_blocked", - "type": "string" - }, - "uuid": { - "$ref": "#/components/schemas/UUID" - } - } - }, - "SignInAttemptItems": { - "allOf": [ - { - "properties": { - "items": { - "items": { - "$ref": "#/components/schemas/SignInAttempt" - }, - "type": "array" - } - } - }, - { - "$ref": "#/components/schemas/CursorCollection" - } - ], - "description": "An object wrapping cursor properties and a list of sign-in attempts" - }, - "UUID": { - "example": "56YE2TYN2VFYRLNSHKPW5NVT5E", - "type": "string" - }, - "User": { - "description": "User object", - "properties": { - "email": { - "format": "email", - "type": "string" - }, - "name": { - "description": "Full name", - "example": "Jack O'Neill", - "type": "string" - }, - "uuid": { - "$ref": "#/components/schemas/UUID" - } - } - } - }, - "securitySchemes": { - "jwtsa": { - "bearerFormat": "JWT-SA", - "description": "A JWT SA token issued to this service", - "scheme": "bearer", - "type": "http" - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/6-dot-authentiqio.appspot.com-6.json b/src/main/resources/6-dot-authentiqio.appspot.com-6.json deleted file mode 100644 index a59849b1..00000000 --- a/src/main/resources/6-dot-authentiqio.appspot.com-6.json +++ /dev/null @@ -1,998 +0,0 @@ -{ - "openapi": "3.0.0", - "servers": [ - { - "url": "https://6-dot-authentiqio.appspot.com" - } - ], - "info": { - "contact": { - "email": "hello@authentiq.com", - "name": "Authentiq team", - "url": "http://authentiq.io/support" - }, - "description": "Strong authentication, without the passwords.", - "license": { - "name": "Apache 2.0", - "url": "http://www.apache.org/licenses/LICENSE-2.0.html" - }, - "termsOfService": "http://authentiq.com/terms/", - "title": "Authentiq API", - "version": "6", - "x-apisguru-categories": [ - "security" - ], - "x-logo": { - "backgroundColor": "#F26641", - "url": "https://api.apis.guru/v2/cache/logo/https_www.authentiq.com_theme_images_authentiq-logo-a-inverse.svg" - }, - "x-origin": [ - { - "format": "openapi", - "url": "https://raw.githubusercontent.com/AuthentiqID/authentiq-docs/master/docs/swagger/issuer.yaml", - "version": "3.0" - } - ], - "x-providerName": "6-dot-authentiqio.appspot.com" - }, - "paths": { - "/key": { - "delete": { - "description": "Revoke an Authentiq ID using email & phone.\n\nIf called with `email` and `phone` only, a verification code \nwill be sent by email. Do a second call adding `code` to \ncomplete the revocation.\n", - "operationId": "key_revoke_nosecret", - "parameters": [ - { - "description": "primary email associated to Key (ID)", - "in": "query", - "name": "email", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "primary phone number, international representation", - "in": "query", - "name": "phone", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "verification code sent by email", - "in": "query", - "name": "code", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "description": "pending or done", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successfully deleted" - }, - "401": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Authentication error `auth-error`" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unknown key `unknown-key`" - }, - "409": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Confirm with code sent `confirm-first`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "key", - "delete" - ] - }, - "post": { - "description": "Register a new ID `JWT(sub, devtoken)`\n\nv5: `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "key_register", - "requestBody": { - "$ref": "#/components/requestBodies/AuthentiqID" - }, - "responses": { - "201": { - "content": { - "application/json": { - "schema": { - "properties": { - "secret": { - "description": "revoke key", - "type": "string" - }, - "status": { - "description": "registered", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successfully registered" - }, - "409": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Key already registered `duplicate-key`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "key", - "post" - ] - } - }, - "/key/{PK}": { - "delete": { - "description": "Revoke an Identity (Key) with a revocation secret", - "operationId": "key_revoke", - "parameters": [ - { - "$ref": "#/components/parameters/PK" - }, - { - "description": "revokation secret", - "in": "query", - "name": "secret", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "description": "done", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successful response" - }, - "401": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Key not found / wrong code `auth-error`" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unknown key `unknown-key`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "key", - "delete" - ] - }, - "get": { - "description": "Get public details of an Authentiq ID.\n", - "operationId": "key_retrieve", - "parameters": [ - { - "$ref": "#/components/parameters/PK" - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "since": { - "format": "date-time", - "type": "string" - }, - "status": { - "type": "string" - }, - "sub": { - "description": "base64safe encoded public signing key", - "type": "string" - } - }, - "title": "JWT", - "type": "object" - } - } - }, - "description": "Successfully retrieved" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unknown key `unknown-key`" - }, - "410": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Key is revoked (gone). `revoked-key`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "key", - "get" - ] - }, - "head": { - "description": "HEAD info on Authentiq ID\n", - "parameters": [ - { - "$ref": "#/components/parameters/PK" - } - ], - "responses": { - "200": { - "description": "Key exists" - }, - "404": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unknown key `unknown-key`" - }, - "410": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Key is revoked `revoked-key`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "key", - "head" - ] - }, - "post": { - "description": "update properties of an Authentiq ID.\n(not operational in v4; use PUT for now)\n\nv5: POST issuer-signed email & phone scopes in\na self-signed JWT\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "key_update", - "parameters": [ - { - "$ref": "#/components/parameters/PK" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/AuthentiqID" - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "description": "confirmed", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successfully updated" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unknown key `unknown-key`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "key", - "post" - ] - }, - "put": { - "description": "Update Authentiq ID by replacing the object.\n\nv4: `JWT(sub,email,phone)` to bind email/phone hash; \n\nv5: POST issuer-signed email & phone scopes\nand PUT to update registration `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "key_bind", - "parameters": [ - { - "$ref": "#/components/parameters/PK" - } - ], - "requestBody": { - "$ref": "#/components/requestBodies/AuthentiqID" - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "description": "confirmed", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successfully updated" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unknown key `unknown-key`" - }, - "409": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Already bound to another key `duplicate-hash`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "key", - "put" - ] - } - }, - "/login": { - "post": { - "description": "push sign-in request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "push_login_request", - "parameters": [ - { - "description": "URI App will connect to", - "in": "query", - "name": "callback", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/jwt": { - "schema": { - "$ref": "#/components/schemas/PushToken" - } - } - }, - "description": "Push Token.", - "required": true - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "description": "sent", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successful response" - }, - "401": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Unauthorized for this callback audience `aud-error` or JWT should be self-signed `auth-error`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "login", - "post" - ] - } - }, - "/scope": { - "post": { - "description": "scope verification request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "sign_request", - "parameters": [ - { - "description": "test only mode, using test issuer", - "in": "query", - "name": "test", - "required": false, - "schema": { - "type": "integer" - } - } - ], - "requestBody": { - "content": { - "application/jwt": { - "schema": { - "$ref": "#/components/schemas/Claims" - } - } - }, - "description": "Claims of scope", - "required": true - }, - "responses": { - "201": { - "content": { - "application/json": { - "schema": { - "properties": { - "job": { - "description": "20-character ID", - "type": "string" - }, - "status": { - "description": "waiting", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successful response" - }, - "429": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Too Many Requests on same address / number `rate-limit`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "scope", - "post" - ] - } - }, - "/scope/{job}": { - "delete": { - "description": "delete a verification job", - "operationId": "sign_delete", - "parameters": [ - { - "$ref": "#/components/parameters/JobID" - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "description": "done", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successfully deleted" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Job not found `unknown-job`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "scope", - "delete" - ] - }, - "get": { - "description": "get the status / current content of a verification job", - "operationId": "sign_retrieve", - "parameters": [ - { - "$ref": "#/components/parameters/JobID" - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "exp": { - "type": "integer" - }, - "field": { - "type": "string" - }, - "sub": { - "description": "base64safe encoded public signing key", - "type": "string" - } - }, - "title": "JWT", - "type": "object" - } - }, - "application/jwt": { - "schema": { - "properties": { - "exp": { - "type": "integer" - }, - "field": { - "type": "string" - }, - "sub": { - "description": "base64safe encoded public signing key", - "type": "string" - } - }, - "title": "JWT", - "type": "object" - } - } - }, - "description": "Successful response (JWT)" - }, - "204": { - "description": "Confirmed, waiting for signing" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, - "application/jwt": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Job not found `unknown-job`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "scope", - "get" - ] - }, - "head": { - "description": "HEAD to get the status of a verification job", - "operationId": "sign_retrieve_head", - "parameters": [ - { - "$ref": "#/components/parameters/JobID" - } - ], - "responses": { - "200": { - "description": "Confirmed and signed" - }, - "204": { - "description": "Confirmed, waiting for signing" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Job not found `unknown-job`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "scope", - "head" - ] - }, - "post": { - "description": "this is a scope confirmation", - "operationId": "sign_confirm", - "parameters": [ - { - "$ref": "#/components/parameters/JobID" - } - ], - "responses": { - "202": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "description": "confirmed", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successfully confirmed" - }, - "401": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Confirmation error `auth-error`" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Job not found `unknown-job`" - }, - "405": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "JWT POSTed to scope `not-supported`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "scope", - "post" - ] - }, - "put": { - "description": "authority updates a JWT with its signature\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n", - "operationId": "sign_update", - "parameters": [ - { - "$ref": "#/components/parameters/JobID" - } - ], - "responses": { - "200": { - "content": { - "application/jwt": { - "schema": { - "properties": { - "jwt": { - "description": "result is JWT or JSON??", - "type": "string" - }, - "status": { - "description": "ready", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Successfully updated" - }, - "404": { - "content": { - "application/jwt": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Job not found `unknown-job`" - }, - "409": { - "content": { - "application/jwt": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Job not confirmed yet `confirm-first`" - }, - "default": { - "$ref": "#/components/responses/ErrorResponse" - } - }, - "tags": [ - "scope", - "put" - ] - } - } - }, - "components": { - "parameters": { - "JobID": { - "description": "Job ID (20 chars)", - "in": "path", - "name": "job", - "required": true, - "schema": { - "type": "string" - } - }, - "PK": { - "description": "Public Signing Key - Authentiq ID (43 chars)", - "in": "path", - "name": "PK", - "required": true, - "schema": { - "type": "string" - } - } - }, - "requestBodies": { - "AuthentiqID": { - "content": { - "application/jwt": { - "schema": { - "$ref": "#/components/schemas/AuthentiqID" - } - } - }, - "description": "Authentiq ID to register", - "required": true - } - }, - "responses": { - "ErrorResponse": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - }, - "description": "Error response" - } - }, - "schemas": { - "AuthentiqID": { - "description": "Authentiq ID in JWT format, self-signed.\n", - "properties": { - "devtoken": { - "description": "device token for push messages", - "type": "string" - }, - "sub": { - "description": "UUID and public signing key", - "type": "string" - } - }, - "required": [ - "sub" - ] - }, - "Claims": { - "description": "Claim in JWT format, self- or issuer-signed. \n", - "properties": { - "email": { - "type": "string" - }, - "phone": { - "type": "string" - }, - "scope": { - "description": "claim scope", - "type": "string" - }, - "sub": { - "description": "UUID", - "type": "string" - }, - "type": { - "type": "string" - } - }, - "required": [ - "sub", - "scope" - ] - }, - "Error": { - "properties": { - "detail": { - "type": "string" - }, - "error": { - "type": "integer" - }, - "title": { - "type": "string" - }, - "type": { - "description": "unique uri for this error", - "type": "string" - } - }, - "required": [ - "error" - ] - }, - "PushToken": { - "description": "PushToken in JWT format, self-signed. \n", - "properties": { - "aud": { - "description": "audience (URI)", - "type": "string" - }, - "exp": { - "type": "integer" - }, - "iat": { - "type": "integer" - }, - "iss": { - "description": "issuer (URI)", - "type": "string" - }, - "nbf": { - "type": "integer" - }, - "sub": { - "description": "UUID and public signing key", - "type": "string" - } - }, - "required": [ - "sub", - "iss", - "aud" - ] - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/abstractapi.com-geolocation-1.0.0.json b/src/main/resources/abstractapi.com-geolocation-1.0.0.json deleted file mode 100644 index 48bc4de4..00000000 --- a/src/main/resources/abstractapi.com-geolocation-1.0.0.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "openapi": "3.0.1", - "servers": [ - { - "url": "https://ipgeolocation.abstractapi.com" - } - ], - "info": { - "description": "Abstract IP geolocation API allows developers to retrieve the region, country and city behind any IP worldwide. The API covers the geolocation of IPv4 and IPv6 addresses in 180+ countries worldwide. Extra information can be retrieved like the currency, flag or language associated to an IP.", - "title": "IP geolocation API", - "version": "1.0.0", - "x-apisguru-categories": [ - "location" - ], - "x-logo": { - "url": "https://api.apis.guru/v2/cache/logo/https_global-uploads.webflow.com_5ebbd0a566a3996636e55959_5ec2ba29feeeb05d69160e7b_webclip.png" - }, - "x-origin": [ - { - "format": "openapi", - "url": "https://documentation.abstractapi.com/ip-geolocation-openapi.json", - "version": "3.0" - } - ], - "x-providerName": "abstractapi.com", - "x-serviceName": "geolocation" - }, - "externalDocs": { - "description": "API Documentation", - "url": "https://www.abstractapi.com/ip-geolocation-api#docs" - }, - "paths": { - "/v1": { - "get": { - "description": "Retrieve the location of an IP address", - "parameters": [ - { - "explode": true, - "in": "query", - "name": "api_key", - "required": true, - "schema": { - "type": "string" - }, - "style": "form" - }, - { - "explode": true, - "in": "query", - "name": "ip_address", - "required": false, - "schema": { - "example": "195.154.25.40", - "type": "string" - }, - "style": "form" - }, - { - "explode": true, - "in": "query", - "name": "fields", - "required": false, - "schema": { - "example": "country,city,timezone", - "type": "string" - }, - "style": "form" - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "examples": { - "0": { - "value": "{\"ip_address\":\"195.154.25.40\",\"city\":\"Paris\",\"city_geoname_id\":2988507,\"region\":\"Île-de-France\",\"region_iso_code\":\"IDF\",\"region_geoname_id\":3012874,\"postal_code\":\"75008\",\"country\":\"France\",\"country_code\":\"FR\",\"country_geoname_id\":3017382,\"country_is_eu\":true,\"continent\":\"Europe\",\"continent_code\":\"EU\",\"continent_geoname_id\":6255148,\"longitude\":2.4075,\"latitude\":48.8323,\"security\":{\"is_vpn\":false},\"timezone\":{\"name\":\"Europe/Paris\",\"abbreviation\":\"CEST\",\"gmt_offset\":2,\"current_time\":\"15:42:18\",\"is_dst\":true},\"flag\":{\"emoji\":\"<ë<÷\",\"unicode\":\"U+1F1EB U+1F1F7\",\"png\":\"https://static.abstractapi.com/country-flags/FR_flag.png\",\"svg\":\"https://static.abstractapi.com/country-flags/FR_flag.svg\"},\"currency\":{\"currency_name\":\"Euros\",\"currency_code\":\"EUR\"},\"connection\":{\"autonomous_system_number\":12876,\"autonomous_system_organization\":\"Online S.a.s.\",\"connection_type\":\"Corporate\",\"isp_name\":\"Online S.A.S.\",\"organization_name\":\"ONLINE\"}}" - } - }, - "schema": { - "$ref": "#/components/schemas/inline_response_200" - } - } - }, - "description": "Location of geolocated IP" - } - }, - "servers": [ - { - "url": "https://ipgeolocation.abstractapi.com" - } - ] - }, - "servers": [ - { - "url": "https://ipgeolocation.abstractapi.com" - } - ] - } - }, - "components": { - "schemas": { - "inline_response_200": { - "properties": { - "city": { - "type": "string" - }, - "city_geoname_id": { - "type": "integer" - }, - "connection": { - "properties": { - "autonomous_system_number": { - "type": "integer" - }, - "autonomous_system_organization": { - "type": "string" - }, - "connection_type": { - "type": "string" - }, - "isp_name": { - "type": "string" - }, - "organization_name": { - "type": "string" - } - }, - "type": "object" - }, - "continent": { - "type": "string" - }, - "continent_code": { - "type": "string" - }, - "continent_geoname_id": { - "type": "integer" - }, - "country": { - "type": "string" - }, - "country_code": { - "type": "string" - }, - "country_geoname_id": { - "type": "integer" - }, - "country_is_eu": { - "type": "boolean" - }, - "currency": { - "properties": { - "currency_code": { - "type": "string" - }, - "currency_name": { - "type": "string" - } - }, - "type": "object" - }, - "flag": { - "properties": { - "emoji": { - "type": "string" - }, - "png": { - "type": "string" - }, - "svg": { - "type": "string" - }, - "unicode": { - "type": "string" - } - }, - "type": "object" - }, - "ip_address": { - "type": "string" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "postal_code": { - "type": "string" - }, - "region": { - "type": "string" - }, - "region_geoname_id": { - "type": "integer" - }, - "region_iso_code": { - "type": "string" - }, - "security": { - "properties": { - "is_vpn": { - "type": "boolean" - } - }, - "type": "object" - }, - "timezone": { - "properties": { - "abbreviation": { - "type": "string" - }, - "current_time": { - "type": "string" - }, - "gmt_offset": { - "type": "integer" - }, - "is_dst": { - "type": "boolean" - }, - "name": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/adyen.com-CheckoutUtilityService-1.json b/src/main/resources/adyen.com-CheckoutUtilityService-1.json deleted file mode 100644 index f673d455..00000000 --- a/src/main/resources/adyen.com-CheckoutUtilityService-1.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "openapi": "3.0.0", - "servers": [ - { - "url": "https://checkout-test.adyen.com/v1" - } - ], - "info": { - "contact": { - "email": "support@adyen.com", - "name": "Adyen Support", - "url": "https://support.adyen.com/", - "x-twitter": "Adyen" - }, - "description": "A web service containing utility functions available for merchants integrating with Checkout APIs.\n## Authentication\nEach request to the Checkout Utility API must be signed with an API key. For this, obtain an API Key from your Customer Area, as described in [How to get the Checkout API key](https://docs.adyen.com/developers/user-management/how-to-get-the-checkout-api-key). Then set this key to the `X-API-Key` header value, for example:\n\n```\ncurl\n-H \"Content-Type: application/json\" \\\n-H \"X-API-Key: Your_Checkout_API_key\" \\\n...\n```\nNote that when going live, you need to generate a new API Key to access the [live endpoints](https://docs.adyen.com/developers/api-reference/live-endpoints).\n\n## Versioning\nCheckout API supports versioning of its endpoints through a version suffix in the endpoint URL. This suffix has the following format: \"vXX\", where XX is the version number.\n\nFor example:\n```\nhttps://checkout-test.adyen.com/v1/originKeys\n```", - "termsOfService": "https://docs.adyen.com/legal/terms-conditions", - "title": "Adyen Checkout Utility Service", - "version": "1", - "x-apisguru-categories": [ - "payment" - ], - "x-logo": { - "url": "https://api.apis.guru/v2/cache/logo/https_twitter.com_Adyen_profile_image.jpeg" - }, - "x-origin": [ - { - "converter": { - "url": "https://github.com/lucybot/api-spec-converter", - "version": "2.7.11" - }, - "format": "openapi", - "url": "https://raw.githubusercontent.com/adyen/adyen-openapi/master/specs/3.0/CheckoutUtilityService-v1.json", - "version": "3.0" - } - ], - "x-providerName": "adyen.com", - "x-serviceName": "CheckoutUtilityService" - }, - "paths": { - "/originKeys": { - "post": { - "description": "This operation takes the origin domains and returns a JSON object containing the corresponding origin keys for the domains.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CheckoutUtilityRequest" - } - } - } - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CheckoutUtilityResponse" - } - } - }, - "description": "OK - the request has succeeded." - }, - "400": { - "description": "Bad Request - a problem reading or understanding the request." - }, - "401": { - "description": "Unauthorized - authentication required." - }, - "403": { - "description": "Forbidden - insufficient permissions to process the request." - }, - "422": { - "description": "Unprocessable Entity - a request validation error." - }, - "500": { - "description": "Internal Server Error - the server could not process the request." - } - }, - "summary": "Create originKey values for one or more merchant domains.", - "x-groupName": "General", - "x-sortIndex": 0 - } - } - }, - "components": { - "schemas": { - "CheckoutUtilityRequest": { - "properties": { - "originDomains": { - "description": "The list of origin domains, for which origin keys are requested.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "originDomains" - ] - }, - "CheckoutUtilityResponse": { - "properties": { - "originKeys": { - "additionalProperties": { - "type": "string" - }, - "description": "The list of origin keys for all requested domains. For each list item, the key is the domain and the value is the origin key.", - "type": "object" - } - } - } - } - }, - "x-groups": [ - "General" - ] -} \ No newline at end of file diff --git a/src/test/java/openapi/OpenAPIMain_test.java b/src/test/java/openapi/OpenAPIMain_test.java index 88b33091..786273e0 100644 --- a/src/test/java/openapi/OpenAPIMain_test.java +++ b/src/test/java/openapi/OpenAPIMain_test.java @@ -26,6 +26,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; +import java.util.Set; import org.junit.jupiter.api.Test; import org.opentest4j.TestAbortedException; @@ -68,6 +69,8 @@ public class OpenAPIMain_test { // openAPI object is integrated in JastAdd grammar openApi = OpenAPIObject.parseOpenAPI(api); + Set<SchemaTuple> s = openApi.schemaTuples(); + System.out.println(s.size()); // composed openAPI object, it is expected to be equivalent to parsed source object api3 = OpenAPIObject.composeOpenAPI(openApi); -- GitLab