From a928397ebe2b5453c51b9c4405299430fc953643 Mon Sep 17 00:00:00 2001 From: brausjonas Date: Tue, 9 May 2023 00:27:48 +0200 Subject: [PATCH] Request Entries from Rest API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Required for Request: SessionID (Login), tag in der woche (montag: 0) kalenderwoche semesterid (evtl.später semestername) --- backend/database.mv.db | Bin 40960 -> 36864 bytes backend/database.trace.db | 40 ++++++++++ .../backend/anwprj/DataBaseHandler.java | 51 ++++++++++++ .../example/backend/anwprj/Entries/Entry.java | 73 ++++++++++++++++++ .../anwprj/Users/UserSessionIDHandler.java | 21 +++-- .../anwprj/controller/EntriesController.java | 38 +++++++++ 6 files changed, 217 insertions(+), 6 deletions(-) create mode 100644 backend/src/main/java/com/example/backend/anwprj/Entries/Entry.java create mode 100644 backend/src/main/java/com/example/backend/anwprj/controller/EntriesController.java diff --git a/backend/database.mv.db b/backend/database.mv.db index a0b7d0415b3ffec2eb4c17d10472f681593d87d6..a5d3de0811b850b518c53e537d75ce510a9c3122 100644 GIT binary patch literal 36864 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 Ds1C

hb&T}9J?OD z;J#;n^UcoV_x-*ZuT->>x7qXWRdl{>Z+xFrfU2q`|L*?wy$Z%9f0MY|6;SebiQ6YZ z1z;3n%~FZ0mBQZcmfNR^+$Xzx8@=u5{&17@{kvqh0(_{t22>Yw@=qcl5s(N-1SA3y z0f~S_Kq4R!kO)WwBmxqFFA#wh>HmL$=*w421SA3y0f~S_Kq4R!kO)WwBmxoviGW1l z@gNWf`Gp8TD{Yb})W7BKR18cv4=Ns&0&J59{R%GaxOd1N6$ZEyOkzM-gwYuTgCYzAi(m~Eb>Ac!G6~(mX5gxRQ70zWpoNPDR-p$& zP&6#pbX7!mJm`5KL`5U8kng&B(IBqx0?Va4o`x|FPn$^fpzqQx)R1NtP1g)f9}&6} zVABfxB2qN~g3u@;6GBZ_=?)?mR#8|)p{HYjtRfCw&Cpc6NL-Jo8q$lQt|L{q@P*#) zo$_6+ymf!C-`geSz$>@*H#cv(oBO2h_TA3I9r8HuDGk}ve^9>3RUjl_Mnwi)Y`8wP z_TkGzH&f%+dv6G{#a*XPi_iXXW@J|HIsriD7dRlp@bxLQpbl( z*4&+o)yDa4rIkL}>tBz4wq5`3 zw!1~vH{NjfuH4yjH#W0cJE7pM`rm*y|O+UhhLnpSO-Ep7h4=jT5?zm%M` z)04T}+{*k<=5mXY9=ldWi^?ZMS$KCcHR#cc68zyQ)KG1lC zv3&S}4m8$h!w=QBQez4B@ifMU%vjSUV~wTR;?hWXII`SWci7lutQ6VG#!88?nud^{ zF_sOTIM5knL4qu`CPLOCAZu*+oA@)pAU4)y#?paY{24GUXZj^**|8nag~4KQ2gTry zUQt!3Baja6#+QA@LclBpsySeyo(E^?cqU3O`m}Udk~T3k7=2I}dWt>R{VLn^cF1;T*WKQu zLn^AZ-FqdIsydp67{z9dHinEwVDvfh?r*T<_qT)IYVS^Y*lI)uuWQ38lb6}^wDqUG z!021VsCJoWf^6;3Ze#47Vi2CBM|%^No){ssq7@@)4hns1)Ip8DRwS0!@>br=<2=k8 z1)vvzS}@cC&%#_@;j zJMux8yl7TC)c-GjR{S`(a5fqZ&M%xgU3_lw%-P&a$}6|pPDiP&J9fwER&O*{>xu^S zC1vT{J9&OqxzTpkm1aX}UF#^$t!BH^R+jAg+LF??S3Alj0DRL7UCSjd!m1B0DJyn+ zMY*H~o@QW+1iEg9zOF(D41z7)3k)j=0EU*K>K>s)2{FO|6JntN7(mAacy5SjI`k#Y z)&)g5_emi(rDoSwoVwDntE-N(bp1wkwOLy#FGUu%mo6_xa4j|KOG>lVajsIUuR1Mf zo#w2rRBtPFr(xfq7Tay5S$F72v~yc&JKw$Gv})PJ+PB*sXRRx)bZuLOW}~imow^CT zI%Q3|R-@7A+A7VRW8*r)&JqKsbz^n4#Eob)*V~&*IHNG-OjZxE7O;0VgL1z!frcjG!bY0 zq{>@0>Ih=1-nFW>)72fP(XApIcB>98a1A>(fZ#}Zvs}IAINxdASgTUoMDF8qc3Sm= zFCPAxu+(om_PBHhPA@LMGG%d2mfMMn6OI(;C0d;S7T?wZbvMH0#Of|KY9_R5PPeWj zy{m(oO{=rf=&Ds*t!p(5>t=PdEaML>(~!i)IHn92moHPqAH?m`1odY!lMVuWxWX(` zg#UR6!gc%hi2-b@2v$@NjbDqg@j=8!#9gGk#z4$!7Q9AgO6z!D!x%Gq zA0)LR?kcqqW|^1iqiQ46P{u&&@$o=g#&1*cG`tHN(vRa^@>eMD@;c>T=;s*zgUMmhJ|#a-!38g#VA@ z&rpxaW9I)87A*itQ{~1yfEjbdT14rpdZ<|mM~tZdYbJaWT?-&;mjF^p`pV<&@%aDW zW&B^p{~xc|VUk$s3B-kE{C`mJGDb5Z5lHH;puR>LS!m(lNNR5tcxtJQ*nL8w}-{=%t+RIP@g;HGu4V~QO# z6Os7SnSt?h}is>L#8fWynhg(TWQA&OWCd^owis>j#%9($BxVYG5L@X7} z@`+g1kRA(gIW4s>;b9@28)c^AVhB|zgwd(;FU!=L%vh|Bmu+Jd8*3eItj~;1l+c1S z7UD6G$hPS#xyC$e9hE5_jx6HF`dMUE7=^oHN*ZVel^OE`NT5!|#QY$Z8S?|+;vl)A zt2)lejA_^_|K2A|Zanv&Z!@{^{QTQA2zDhm|6+%Q!{$H#G26-?iGV~vA|Mfv2uK7Z z0#hLn>+jR}dlLW8tfNnKQ@1P+9xrr0?r9PKA09GOH(kvCpJH&F*q#i1$G!7d=Xm`8 zZ!-QbvP9r#Sv%4IR`FTaWOqP z%cjdY+(T@-0BMl*eir9&7k*IubUrhQ0tgOV6FYD!GW>Uf3>WhfIDwlkxNsoN%w{EU zo_WG$7APBElk<)@v{?K9Wq9CNp7Yp;h5v8F@f{S$cQXEe zG|g&Y{XY=P|D)zC3X=Io8g^2BKV1t58!S#kSKb@@?jxO~{{P&|b6?73!kl9obkVZw z$7|WeY=}oxN*?BvEj#^>AD^<8J?V1Nx;NNAM%`dKdr!~K-kX9G8;N7ZXf71Uqr2kKwPPv8~Da$q7;#HX^ zTEk8H|MA#;I+xcjEsW>HL2J=mKr#Nyh(& z#i-2xKdS6B$wDG3J(8-hM#&#BQgtPw4Ov7ge^yR! zU_i(piGV~vA|Mfv2+SOTSpT2;-x=pQjsI)(f4W1SG1enK)=3fnAD-XI{QslQ=V z%+oxUjROyJ|Nqa&^#48X|NGMam;V2Z{eSZi|KEI?{eQ1u_;gP6k8&6DxwF&x|AGiG zB@r;-DM}(h5&>cz1g4%lHW84p7U`hkP}bt8RDWvh5m%UCtVJT6rHeMi!rAHcwO2B% t#ZPBGMw1Cj1SA3y0f~S_VAcr4{(tI!XPoEM|A)x8u!jab;h7vP{tt`T(+vOs diff --git a/backend/database.trace.db b/backend/database.trace.db index e20ae35..9dce667 100644 --- a/backend/database.trace.db +++ b/backend/database.trace.db @@ -247,3 +247,43 @@ Wrong user name or password [28000-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:510) at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) ... 16 more +2023-05-08 14:01:35 database: wrong user or password; user: "ADM" +org.h2.message.DbException: Falscher Benutzername oder Passwort +Wrong user name or password [28000-214] + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.message.DbException.get(DbException.java:188) + at org.h2.engine.Engine.openSession(Engine.java:154) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:122) + at org.h2.util.JdbcUtils.getConnection(JdbcUtils.java:288) + at org.h2.server.web.WebServer.getConnection(WebServer.java:808) + at org.h2.server.web.WebApp.login(WebApp.java:1033) + at org.h2.server.web.WebApp.process(WebApp.java:226) + at org.h2.server.web.WebApp.processRequest(WebApp.java:176) + at org.h2.server.web.WebThread.process(WebThread.java:152) + at org.h2.server.web.WebThread.run(WebThread.java:101) + at java.base/java.lang.Thread.run(Thread.java:1623) +Caused by: org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Falscher Benutzername oder Passwort +Wrong user name or password [28000-214] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:510) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) + ... 16 more +2023-05-08 23:46:11 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Tabelle "WEEK" nicht gefunden +Table "WEEK" not found; SQL statement: +select * from week [42102-214] +2023-05-08 23:46:25 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Tabelle "SEMESTR" nicht gefunden +Table "SEMESTR" not found; SQL statement: +select * from semestr [42102-214] +2023-05-08 23:46:46 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Tabelle "WEEK" nicht gefunden +Table "WEEK" not found; SQL statement: +select * from week [42102-214] +2023-05-08 23:54:05 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax Fehler in SQL Befehl "select * [*]froms days" +Syntax error in SQL statement "select * [*]froms days"; SQL statement: +select * froms days [42000-214] diff --git a/backend/src/main/java/com/example/backend/anwprj/DataBaseHandler.java b/backend/src/main/java/com/example/backend/anwprj/DataBaseHandler.java index 273ed67..5b3e4ae 100644 --- a/backend/src/main/java/com/example/backend/anwprj/DataBaseHandler.java +++ b/backend/src/main/java/com/example/backend/anwprj/DataBaseHandler.java @@ -1,9 +1,14 @@ package com.example.backend.anwprj; +import com.example.backend.anwprj.Entries.Entry; import com.example.backend.anwprj.Semesters.Semester; import com.example.backend.anwprj.Users.User; +import com.example.backend.anwprj.Users.UserSessionIDHandler; import java.sql.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; public class DataBaseHandler { @@ -34,6 +39,52 @@ public class DataBaseHandler } } + public Entry[] getEntries(int dayinweek, int weeknumber, int semesterid, User user) + { + try + { + ResultSet rs = st.executeQuery("select distinct e.id, e.dayid, e.usercreatedbyid, e.timestart, e.timeend, e.info " + + "from entries e, days d, weeks w, semester s " + + "where e.dayid = d.id and " + + "d.weekid = w.id and " + + "w.semesterid = s.id and " + + "d.dayinweek = " + dayinweek + " and " + + "w.weeknumber = " + weeknumber + " and " + + "s.id = " + semesterid); + + + boolean editable = false; + + List temp = new ArrayList<>(); + while(rs.next()) + { + editable = false; + if(rs.getInt("usercreatedbyid") == user.getId()) + { + editable = true; + } + + temp.add( + new Entry( + rs.getInt("id"), + rs.getInt("dayid"), + rs.getInt("usercreatedbyid"), + rs.getInt("timestart"), + rs.getInt("timeend"), + rs.getString("info"), + editable + ) + ); + } + + return temp.toArray(new Entry[0]); + + } catch (SQLException e) + { + throw new RuntimeException(e); + } + } + public Semester findSemester(String name) { try diff --git a/backend/src/main/java/com/example/backend/anwprj/Entries/Entry.java b/backend/src/main/java/com/example/backend/anwprj/Entries/Entry.java new file mode 100644 index 0000000..c140be4 --- /dev/null +++ b/backend/src/main/java/com/example/backend/anwprj/Entries/Entry.java @@ -0,0 +1,73 @@ +package com.example.backend.anwprj.Entries; + +public class Entry +{ + private int id; + private int dayid; + private int usercreatedbyid; + private int timestart; + private int timeend; + private String info; + private boolean editable; + + public Entry(int id, int dayid, int usercreatedbyid, int timestart, int timeend, String info, boolean editable) + { + this.id = id; + this.dayid = dayid; + this.usercreatedbyid = usercreatedbyid; + this.timestart = timestart; + this.timeend = timeend; + this.info = info; + this.editable = editable; + } + + public int getId() + { + return id; + } + + public int getDayid() + { + return dayid; + } + + public int getUsercreatedbyid() + { + return usercreatedbyid; + } + + public int getTimestart() + { + return timestart; + } + + public int getTimeend() + { + return timeend; + } + + public String getInfo() + { + return info; + } + + public void setDayid(int dayid) + { + this.dayid = dayid; + } + + public void setTimestart(int timestart) + { + this.timestart = timestart; + } + + public void setTimeend(int timeend) + { + this.timeend = timeend; + } + + public void setInfo(String info) + { + this.info = info; + } +} diff --git a/backend/src/main/java/com/example/backend/anwprj/Users/UserSessionIDHandler.java b/backend/src/main/java/com/example/backend/anwprj/Users/UserSessionIDHandler.java index d7bad8d..86ed1fd 100644 --- a/backend/src/main/java/com/example/backend/anwprj/Users/UserSessionIDHandler.java +++ b/backend/src/main/java/com/example/backend/anwprj/Users/UserSessionIDHandler.java @@ -10,28 +10,37 @@ public class UserSessionIDHandler { public static HashMap mapping = new HashMap<>(); + public static User getUserBySessionID(String sessionID) + { + return mapping.get(sessionID); + } + public static String addUser(String mail, String password) { User user = DataBaseHandler.getInstance().findUser(mail, password); if(user != null) { - byte[] array = new byte[30]; // length is bounded by 7 - new Random().nextBytes(array); - String generatedString = new String(array, StandardCharsets.UTF_8); - mapping.put(generatedString, user); + byte[] id = new byte[100]; + for(int i = 0; i < id.length; i++) + { + id[i] = (byte) (Math.random() * 26 + 64); + } + + String generatedString = new String(id, StandardCharsets.US_ASCII); + + mapping.put(generatedString, user); new java.util.Timer().schedule(new java.util.TimerTask(){ @Override public void run() { mapping.remove(generatedString); - System.out.println("test"); return; } //value to be higher - }, 5000); + }, 5000000); return generatedString; } diff --git a/backend/src/main/java/com/example/backend/anwprj/controller/EntriesController.java b/backend/src/main/java/com/example/backend/anwprj/controller/EntriesController.java new file mode 100644 index 0000000..4a0129d --- /dev/null +++ b/backend/src/main/java/com/example/backend/anwprj/controller/EntriesController.java @@ -0,0 +1,38 @@ +package com.example.backend.anwprj.controller; + +import com.example.backend.anwprj.DataBaseHandler; +import com.example.backend.anwprj.Entries.Entry; +import com.example.backend.anwprj.Users.User; +import com.example.backend.anwprj.Users.UserSessionIDHandler; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +public class EntriesController +{ + private DataBaseHandler db; + + { + db = DataBaseHandler.getInstance(); + } + + @CrossOrigin + @GetMapping("/entries") + public ResponseEntity getEntries( + @RequestParam(name = "sessionid") String sessionID, + @RequestParam(name = "dayinweek") int dayinweek, + @RequestParam(name = "weeknumber") int weeknumber, + @RequestParam(name = "semesterid") int semesterid) + { + User user = UserSessionIDHandler.getUserBySessionID(sessionID); + + if(user == null) + { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + + Entry[] entries = db.getEntries(dayinweek, weeknumber, semesterid, user); + return new ResponseEntity<>(entries, HttpStatus.OK); + } +}