From 4707e8061780335782aec41c27bce1841c304a9a Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Thu, 21 Dec 2023 22:58:21 +0100 Subject: [PATCH] base servlet --- .classpath | 3 +- javax.servlet-api-4.0.1.jar | Bin 0 -> 95505 bytes src/dev/peerat/framework/Client.java | 6 +- src/dev/peerat/framework/HttpReader.java | 5 ++ src/dev/peerat/framework/HttpWriter.java | 5 ++ src/dev/peerat/framework/Router.java | 8 +- .../peerat/framework/TomcatHttpReader.java | 27 +++++++ .../peerat/framework/TomcatHttpWriter.java | 24 ++++++ src/dev/peerat/framework/TomcatServlet.java | 75 ++++++++++++++++++ .../framework/utils/json/JsonParser.java | 10 +-- .../framework/utils/json/JsonTokenizer.java | 6 +- 11 files changed, 156 insertions(+), 13 deletions(-) create mode 100644 javax.servlet-api-4.0.1.jar create mode 100644 src/dev/peerat/framework/TomcatHttpReader.java create mode 100644 src/dev/peerat/framework/TomcatHttpWriter.java create mode 100644 src/dev/peerat/framework/TomcatServlet.java diff --git a/.classpath b/.classpath index 3f0bc57..49a1664 100644 --- a/.classpath +++ b/.classpath @@ -5,6 +5,7 @@ - + + diff --git a/javax.servlet-api-4.0.1.jar b/javax.servlet-api-4.0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..844ec7f17a6c8469282e2ad66952593e120b7805 GIT binary patch literal 95505 zcmb5WQ;=v)vn|@TZQI?eZQHhO+qP}n_G;TUSKD^?S^w7Adw(}h#GMfn519{HbBxT& zs?3s?0tSHs_}4{fnk@ZqAOG=y{QH&>Q5K+;kQJqu{|_+;0D`|_%aJ0UJAeQH`5*uQ zDF0ndMnG0VR76RcPDV6GNyaXVAElf44qr7JsinFfUs5tz$gnMecuUh^!>T2~tQ+>S zaGRy^$7eSXI2M;&CGK>3rWc9m$lKhIwlg zD?29%w44fDD3qCi?SWDNWfnvuIsTSZE*JbY{-T~VwjcPUeHI1$I3C`xx{ z%EgX5V<_+XxB-8m-lt~`O%920S0ez$&prrtIi`D7@|tt8aH;^nz;by8^xD+IR=M#2 zwcM6r)}U$SkBNSYyY1(ujW8A6T5C$~RicI7vjd4DpXtVwailEaaI@%_0bhGJhBsz( zXzc?PFbZmgGUA)UCaF<{r1Q>@Q*(RByHas7RguO_v#w*$xo?QHFYk~}G%GYfrbCk^ zp8}oMUesw$$!jP|xfY65|8%Qr%EYTvDtFT*!+cd`gXh)yBhbx56{U%wc++OCx4(>A z81b?f{~v*B7w2%t95Kp=@U_0XtY@(zvzL>Y%)?`ACDgJp4u6q5TW}nEwTTX$c__StSuVXLsjm9}OoWjmG0HUy<~w5k)5AisZ)B+65tO zO2Pa3MljFk7p*SsUA$bDH=O5tYorLV?$A86cTCUPK{f`7Zj7kNvRSY zaT8_j(P$kJQc8P=AwC)3G{4?A#@fp+)Mf=4L zxjl;GR_2+tQs^CQIpRCihe~r#M zG>&i<>2&^iOCrJ|gHA%Tz0T{JXPCi1+nm+-UY@}cqkmL;yifLLl6KE5Xb{nq$&nR& z1ihk@Y+~{pqOM@TX;sYhR)QF0UA>oD^*L~rlcQ}KwiW7Xjr$tsMZ@b?`iwRj#1RfF zLsGk9j9Y9pqTeR_CSJc}O?WFR?l<2TNtgq`-6+{VB=o#TN{VSvqnbC`PpIEEWTT(* zyD|4?+0GyKyFnrn4}-^gA=9n9s_KR^?KW#72lD5Zuzb0-YID5{I)q~n27mf2of=|W zo@ts`xws5@{>Fx%{yB3g!c&h^*Lx*l8@83H(l}ZV)r~zkN({l7FGZ%E-nhm8q_uHG zuAY(&f)?&NZi+JbqjrO*PRuqd(Mny()pI-fNir!tEmg0K+p@LXeh*5m9$4rHFy(GTrq6d(87OXG3?#6_;YWk-8#eZQ3@5K3>bdxF7N4$k~Ju z_<1|cOFZm?|Eo@~_R#pyT^eFikLGq*LO_vkTDS0$6jjq-?GP31Kw~RPbnDhyP4vPz zDOvg!E=D?!w!pqIgc53==q`1Jp6<-q9S^a!|MDA6i2D}zLGw?vvpxm26;`l#3*cn0 zEJvoC@mgu&)NM~TQw@?PIbEc6!jL{FwN3Dc$?79xjBv2QzUn0!(f*dA#G%i)>-K3d z-r2(M`|FA#7a7md`3>#`K9$HUKIvX@sCX4nF#Pg4_$Mh&w({`5&dX1Is#OmStid!WW@us<6$(>;_Sl~pXT<0=~1(St%sl-jL5SXljYZ@ zT=9USvr%QnQG~1-w!$oRiKq%8$u~end7qE_emR69QSZh&l&t1q-L)0)zD{uV97PA&mVR@e;gKYh0%5cHN(BQXLHdz6bjp|iQlav> z%$;8lr)EG;n0N<2owQ^aPoq(O5x!WM;ydi4E8#Rf)1>SOm!&`O|HdyV!ehX&!rpx2-?`UvldFi;Had8V1+{pepA0jzmi3<{dS ze}t@%0BE5Rl*9Z8j{qLB=->b`M0d+CUfDsaB2tXJugY;(46YswdUgYMg?;P67&Nb*ZZ9^2HnQ zOI=m=o7~ZNUQm#OUDKoe&0T6njHDsDWSerzI+&Hdt z%9>H&w_NPElVP(`Qc<0|=)lzl?;*=wg^pRG>NUg-3uP3mom`4HnhJE7is`4(@_kU70()U!q`bo;$95!kJaO=uZW{9D&+TDB^@OCqbaT8_LBkZy(z52 z_cj)g{jOC+Bt#VSGKN$gljf=KoodW}h{f_oVUZ=~v&!%t&!yrb2|0=RbSn($KtN1R zr%_YqN#N?^9V}Df^k$gFfrml9|4uhJr)MKx9Syy~k5OW8TmfJD_XA?8pd1E;#-Mu< zCRMHQ(`PZQ)dN7k)IHcJ*rkM51s6Fh*TJj1j&ZTX1zckB!BX&JW004m7az0YlrMeUG-XpFX9nX-utHyLK-IIBZ!wF+uE~2A2zt5J5DweBvrx*w`o=jiRiA!CH?=Pz{&QZrec%lG;1N*(WoQD{b>&>m9 zPcnpPN_+Zk9FS`yPCJ1BH&{7%KWiT|x@SklY)zkVMs+E)F4QRxnA-SB&jc-<&h9m| z>>otJ_z1*V%;Jtc&9}yoC?($k5hC+VS}sKLJtSRFL8(ZNs8DOAQn+0ex|o;CgxP5_ zuVY|Bf6MB?wQCQj99Hd$3nu}T4dmK%$!<=)M(xr3XIjk!3JMnSyX^&(DDL&fRN85L zlgIS>4_>++jNnA+Dhk%gO+x4$@zJS+qP)E{o8=>Q#;ik|_c+@();}!x$Rw z^((8~2d@r^4J(<52v|!}=p{Ld)m1~Z-m3je>DryWbVHqKCjku`ydTXv+$ZW43z6t` z4_z^R;2xpzd-hEb^JAUrZ}Iwkp#eboXmD*NEJ?~19XN-r@bK7Kkl@B-Wa?QCz1r5H zg>A_w#YL3IMyd1hhKNz4!f(OzvoyhoGYI$0vaMoyV5H`($r(DN3QTmtfyn;?38N zI?%&vm@U$^9Qp_F6YvlouC&l(M?>Aa`fc7Tz+}wV_-!a-Ew{=u``3_8&6m4&0RYsU zCW#w@eyiFpOzV%Pczz%DplZJ(Nr>W5NpOVp_`<>IbCcV@a$Oa+^<3+)cgu$PNZR?| z61E{4Wh8_Ti4e@2v1&a_+3OEWokmKZqN$RVf7*x>h8;b13?#n-g{o*SmIbNcUgAU= zucpz0BZ4<;YeD&rE~C7UbBv2m6C1p@=?TSOwO}vAWBe4|R3)i|)fus<@3y-|wot(# zK!*0U2m0FJ*ys!R=uP!b|3Z*DD8)< z+V)JbkDt)33Kit!BqGrVO-AK#$$uuUu1xT-5N|xAi@8n|$wmDLtTmZ0D539^hcHm} z@7a8WnC>u6+{0f=>}Ah>}-Y|{HQ8at;+dbw73_n4F~yjafhTrcojYLwApG|!u++{iaIt}#^Z~>S0&{$nkL|U}5X0{my+CoOj3h_>>Ru`6BdY6Hp3q7| z+@dEPWh21ZH#z$s8IWeR4d~$w9?050F)NbAL6_^FPh&-Js?(8{Dje?H0a3GK6V75W z2r`WG=3t}q3I7ox9G=+hys!AT1O}|vm?FgDg~OPNOBCXYJBZAqP}H9RGnRX7$+k|6 z23-!%WZO`S17d|A5v3ok-%JC~%T2Nq2y($e9XN$;05F`KeOvvHj%(OkPvrBjobOv% z(w;@@=o~APcQ;=WKUA5qb!Lw;d|1*&ALFkt{ir^#44s8;rfrWI)3ms8g*z1I&!vz0 zZ0}21aHTn?5BjcLzUdtWj52nQr0*B{&dU++kF>ChKObMkd^rpChZ4-~UHEYCk4O5> z9Nz6%(YBuygZ4-= zbIm{LqvPV`w7dC0#(Jz}>-^IJUjzFQ*&B`DIiLK@)@``Jj0ZCR(fJMdWyNrC z5^ntRC;<*EOkUIwug`!r1=dp_13uC(`+CQi^zO)=SiN`mCwYa}r~TsMy!4kBYtc7p zj;P%|Y34KeZ+N;l2(qt_9e?mH962)earY%uFmp2^X_g#VQ}|z;goZFUx8Z4Eg3v15 zF9-yfV(^Q-Izrejp72AUN&P>iaTe4*2L0c=^dB!x@%Uek;c<{$Gw(@V{ox%W<5hX2 zpd|*q><|55vf0pr`4F~fIM0utaI(S+t~7@t;lk93?KHjYAriD?z0rx_<4x^h0G}8b zGfvO`6<%kDVdjwW{7fdc<|NMu67A~6(cC*R*8vV7YIiy}<;k)T&cjD=h6yS75%lQ+ z_RWyu8CgE1n=ROuNzuc|j&%@uyh-m+;%?W{Ga|oPT-HSjD{uSpjyiWBAbysFy4L2wIf_fJGn6Ithg9i5%NTbiU)1 z=+-E*_JuNTcC5f;t+EET3l51lcH0=yZX?i*p6z$|Ra|Z(ZQvty-&gRWMd?u4VRYe> zt_#Mx`~cZR$Zmmu^@CP@tw5N{coW}0{s6Yz=60!uf*?_53L4p{ zy2fFL$L{1HmPGoqT20D;ih4Lc|JxH;p0*VUL5JFa3SGCO|Fc2H(akFzjwviBkTs1! z$T_W6MuA`UlomcOB@6^$zHO4*S0NA1i82bYF};m0;1B>?Gqx@-EN1*h5h%D>Y$u?Y z9*s*x+u<>h+yqkAKhOV$Ob$mEf*zQ+QDc(CeWiFvK6xoNe2Dg#c-~;Jon4ujfc9nI zveyJBDIHsL+^JhO^`gf}_$f%;u2W~JH$Oa%}FPCS@@ zrB{e}PIFM;W)T2@znlarB6;IT-|@|!Ee8-<8WX3zF7yjqF|62kG>IO>-1eioP=aN) z5IM|O9CsH6oXyActC{${3%o`yGhOBVq(51I>amp#2ME%6LxH~x7ucDG(|%ddNcF(w z=^{6acMCXIraHIuCyQ5m2g>~%x$}L=OcLh9U&K9-EDtH9)&*d|CkS#7EgxNz7?@`u z8DuOJw;w$i{QEgyf4|agwTo~-L)(6H@Yw=z*FWr;XNn7?oe)JtJx*2J@6Mj>@NW5} zKc4K1JNJ_%b7th_n%>j6jYrTq@BP&kWDEj<#yuDgdZ0(yk4yA36y;Q zH;6#(I}cFqBRmI==Dq%7S{S6!MA$xzwi^%TE@;)2EHH0#c-zklrdn12Dc##tSkElM zBW;ZrYs%^u5#&)Ur0s%m(Al!Tg@m~c4Kyy?Xr7Ba=PKomh2my`S#prKpfwBH!K;J4 zY(KwS5539;fImL&R|PhYb3`MX{ug4}{F8$QB(U6(U`aRhNmPO_$Arc4>N zz=XQ8r17u8Vf?4Vyu!(A7q^9w^LKl+oalX0?vJO{ywkuWM78iFXeJh%_Jqq_(yXUG zn#Y8^quKd4xnj&&KaZcuuqOQR86FNU)aCc{+vQAv9fiH}qd5_U-8sx@Cs({2>GAVr zS_fX@)<4XWhYmEP1QT!c+j=v6*}wUm8oXZSr(&UzNmdh4I1@%t6p2WCM=tOr zHmSe$()^2z>_y@XJz$Y((u!{jN&_Q&K#Dz7Yd{$(+K7zG`EZ^^zwUyJ4gqjGx`EX6 zI*zP0;eo;l(VKzj0Ov>+U<+9botsdxfnmtE(Xi;y*7&ScTbyW?39O6_3~Pmqa_?^< zXL5{8AUf8VF++GXhf}eVH;3MKN`VHbk)k!5uC~%$@P9J>Q?XQj){Z0^q=%GX%1L#J zWoZ>?Rx=^y60fduc>5EB_}Qm7B8qR9M0TKVjs}_HkB0CstP!o~3=SpgdG`Bq-qOTZ?-)m1 zMk0_C)xj^JF$*2ov1%xy@>#1EHM55&Q_Ys6PLP7b{eB$;@gQ28M0?A~=LQrcmkupk zL(!ZCRHKo!nwR#G-Ww=-5TF8+imn93Ov6Cv90Q>@47*Q1f5@cLLTf{0!m)YxtPZkD z@o?9ZG*aNXSxu*!@Z}yN-#kYxj_Q1xli*xR`fZI1CMCbYZSY?K$zDvA49VafB3!y! z(W~=Zhzo_%k09_9ClA@OM1VZTa_NiLD zSgd{mvX<#4-9(Y$lAa|NMc zmXztLFwi*;p$9C6k5!ip$|kWhOT$Y&E&fES|0WAg9KEfncVCqg1K@84pY~6PH?23E zTn4={Rq$vt38PvNVG~y&Cu%hI935kr+5g#a=#2FXn|XjB`HjgV%tm%3vg70sx_L4_ z?K3xW(2cC2>@IqvyV1?dIjHo0EBD*=wdxdW>iY4KMW$O>r{Cc^&o{;t?3KJzZ&bV_ z1L-64^l%j3cqI|5Kgg};bntC`ef^^;4&RsXFyGC2NvskCgg9pqjW@8dd8%uB6&dVw zonyMAKTSfO{TxUzvV#ke2hV}3azt`j1g+?Lo8aD64$4L-O)C886N`FACkTD4BgFqm zCV{)Ou{LpdSE^fV1xrw9ga#3JqIg6p(w+k{_4rCO&sxW#Aht(shO~QLoM?Oa(u8q0 z7jn0Q^tYd#L(XI@1yE2_-jR3mlja}1+up!lU}~cfIt8xM*d7pY^#dKmIXOj`o`Hg@ zxAakL_f+Uu5N-jgfmBIJ$hC=#gaFoQR@U{sIpvfZT4nf(Pk@TBac=M>9%0ACcrsmA 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
    Gt){I9jrQxGEDP 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 literal 0 HcmV?d00001 diff --git a/src/dev/peerat/framework/Client.java b/src/dev/peerat/framework/Client.java index 58806f9..b587b83 100644 --- a/src/dev/peerat/framework/Client.java +++ b/src/dev/peerat/framework/Client.java @@ -26,7 +26,7 @@ public class Client extends Thread{ reader.readHeaders(); RequestType type = RequestType.valueOf(headers[0]); - context = new Context(type, headers[1], isLogin(router, type, reader), writer, router.getDefaultHeaders(type)); + context = new Context(type, headers[1], isLogin(type, reader), writer, router.getDefaultHeaders(type)); router.exec(context, reader, writer); writer.flush(); writer.close(); @@ -44,12 +44,12 @@ public class Client extends Thread{ if(context != null) logger.setValue(context); } - private User isLogin(Router router, RequestType type, HttpReader reader) throws InvalidJwtException{ + private User isLogin(RequestType type, HttpReader reader) throws InvalidJwtException{ String auth = reader.getHeader("Authorization"); if(auth == null) return null; auth = auth.substring(7); try{ - return this.router.getUser(auth); + return router.getUser(auth); }catch(InvalidJwtException e){ try{ writer.response(401, router.getDefaultHeaders(type)); diff --git a/src/dev/peerat/framework/HttpReader.java b/src/dev/peerat/framework/HttpReader.java index dee1cdd..fd9c81b 100644 --- a/src/dev/peerat/framework/HttpReader.java +++ b/src/dev/peerat/framework/HttpReader.java @@ -39,6 +39,11 @@ public class HttpReader{ this.reader = origin.reader; } + HttpReader(InputStream in, BufferedReader reader){ + this.in = in; + this.reader = reader; + } + public boolean isClosed(){ return this.socket.isClosed(); } diff --git a/src/dev/peerat/framework/HttpWriter.java b/src/dev/peerat/framework/HttpWriter.java index 3616336..08f999f 100644 --- a/src/dev/peerat/framework/HttpWriter.java +++ b/src/dev/peerat/framework/HttpWriter.java @@ -21,6 +21,11 @@ public class HttpWriter{ this.out = origin.out; this.writer = origin.writer; } + + public HttpWriter(OutputStream out, BufferedWriter writer){ + this.out = out; + this.writer = writer; + } public void write(byte[] buffer) throws IOException{ this.out.write(buffer); diff --git a/src/dev/peerat/framework/Router.java b/src/dev/peerat/framework/Router.java index a222eca..5f27295 100644 --- a/src/dev/peerat/framework/Router.java +++ b/src/dev/peerat/framework/Router.java @@ -9,6 +9,8 @@ import java.util.regex.Pattern; import javax.net.ssl.SSLServerSocket; import javax.net.ssl.SSLServerSocketFactory; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.jose4j.jwa.AlgorithmConstraints.ConstraintType; import org.jose4j.jwk.RsaJsonWebKey; @@ -101,7 +103,7 @@ public class Router{ if(this.mappers[context.getType().ordinal()].exec(context, reader, writer)) return; if(noFileFound != null) noFileFound.exec(null, context, reader, writer); } - + public Router configureSSL(String keyStore, String keyStorePassword){ System.setProperty("javax.net.ssl.keyStore", keyStore); System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword); @@ -133,6 +135,10 @@ public class Router{ return this.logger; } + public void useTomcat(){ + TomcatServlet.setRouter(this); + } + public void listen(int port, boolean ssl) throws Exception{ if (ssl) { // Not needed with the use of a proxy try { diff --git a/src/dev/peerat/framework/TomcatHttpReader.java b/src/dev/peerat/framework/TomcatHttpReader.java new file mode 100644 index 0000000..fa661fb --- /dev/null +++ b/src/dev/peerat/framework/TomcatHttpReader.java @@ -0,0 +1,27 @@ +package dev.peerat.framework; + +import javax.servlet.http.HttpServletRequest; + +public class TomcatHttpReader extends HttpReader{ + + private HttpServletRequest request; + + public TomcatHttpReader(HttpServletRequest request) throws Exception{ + super(request.getInputStream(), request.getReader()); + this.request = request; + } + + @Override + public boolean isClosed(){ + return false; + } + + @Override + void readHeaders() throws Exception{} + + @Override + public String getHeader(String key){ + return request.getHeader(key); + } + +} diff --git a/src/dev/peerat/framework/TomcatHttpWriter.java b/src/dev/peerat/framework/TomcatHttpWriter.java new file mode 100644 index 0000000..c909ae4 --- /dev/null +++ b/src/dev/peerat/framework/TomcatHttpWriter.java @@ -0,0 +1,24 @@ +package dev.peerat.framework; + +import java.io.BufferedWriter; + +import javax.servlet.http.HttpServletResponse; + +public class TomcatHttpWriter extends HttpWriter{ + + private HttpServletResponse response; + + public TomcatHttpWriter(HttpServletResponse response) throws Exception{ + super(response.getOutputStream(), new BufferedWriter(response.getWriter())); + this.response = response; + } + + @Override + void response(int code, String... headers) throws Exception { + response.setStatus(code); + for(String header : headers){ + String[] split = header.split("\\s*:\\s*"); + response.setHeader(split[0], split[1]); + } + } +} diff --git a/src/dev/peerat/framework/TomcatServlet.java b/src/dev/peerat/framework/TomcatServlet.java new file mode 100644 index 0000000..b8c4f20 --- /dev/null +++ b/src/dev/peerat/framework/TomcatServlet.java @@ -0,0 +1,75 @@ +package dev.peerat.framework; + +import java.io.IOException; +import java.lang.reflect.Method; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.jose4j.jwt.consumer.InvalidJwtException; + +public class TomcatServlet extends HttpServlet{ + + private static Router router; + + static void setRouter(Router router){ + TomcatServlet.router = router; + } + + @Override + public void init(ServletConfig config) throws ServletException{ + try{ + String value = config.getInitParameter("router"); + Class clazz = Class.forName(value); + for(Method method : clazz.getDeclaredMethods()){ + if(method.getName().equals("main")) method.invoke(null, new Object[] {null}); + } + }catch(Exception ex){ + throw new RuntimeException(ex); + } + } + + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + Context context = null; + HttpReader reader = null; + HttpWriter writer = null; + try{ + reader = new TomcatHttpReader(request); + writer = new TomcatHttpWriter(response); + context = new Context(RequestType.GET, request.getPathInfo(), isLogin(router, RequestType.GET, reader, writer), writer); + router.exec(context, reader, writer); + writer.flush(); + writer.close(); + }catch(InvalidJwtException e){ + }catch(Exception e){ + if(context != null && context.getResponseCode() == 0){ + try{ + context.response(500); + writer.flush(); + writer.close(); + }catch(Exception ex){} + } + } + if(context != null) router.getLogger().setValue(context); + } + + private User isLogin(Router router, RequestType type, HttpReader reader, HttpWriter writer) throws Exception{ + String auth = reader.getHeader("Authorization"); + if(auth == null) return null; + auth = auth.substring(7); + try{ + return router.getUser(auth); + }catch(InvalidJwtException e){ + try{ + writer.response(401, router.getDefaultHeaders(type)); + writer.flush(); + writer.close(); + }catch(Exception ex){} + throw e; + } + } + +} diff --git a/src/dev/peerat/framework/utils/json/JsonParser.java b/src/dev/peerat/framework/utils/json/JsonParser.java index d51783c..d69a14b 100644 --- a/src/dev/peerat/framework/utils/json/JsonParser.java +++ b/src/dev/peerat/framework/utils/json/JsonParser.java @@ -6,11 +6,11 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import be.jeffcheasey88.peeratcode.parser.Parser; -import be.jeffcheasey88.peeratcode.parser.Token; -import be.jeffcheasey88.peeratcode.parser.TokenType; -import be.jeffcheasey88.peeratcode.parser.state.RedirectStateTree; -import be.jeffcheasey88.peeratcode.parser.state.StateTree; +import dev.peerat.parser.Parser; +import dev.peerat.parser.Token; +import dev.peerat.parser.TokenType; +import dev.peerat.parser.state.RedirectStateTree; +import dev.peerat.parser.state.StateTree; public class JsonParser extends Parser{ diff --git a/src/dev/peerat/framework/utils/json/JsonTokenizer.java b/src/dev/peerat/framework/utils/json/JsonTokenizer.java index 4271358..c28a08e 100644 --- a/src/dev/peerat/framework/utils/json/JsonTokenizer.java +++ b/src/dev/peerat/framework/utils/json/JsonTokenizer.java @@ -1,8 +1,8 @@ package dev.peerat.framework.utils.json; -import be.jeffcheasey88.peeratcode.parser.Token; -import be.jeffcheasey88.peeratcode.parser.TokenType; -import be.jeffcheasey88.peeratcode.parser.Tokenizer; +import dev.peerat.parser.Token; +import dev.peerat.parser.TokenType; +import dev.peerat.parser.Tokenizer; public class JsonTokenizer extends Tokenizer{