@@ -60,6 +60,7 @@ class Get @Inject()(cc: ControllerComponents, dbContext: DBContext) extends Abst
60
60
Cookie (CookieFields .id.toString, member.member_id.toString, secure = true , httpOnly = false ),
61
61
Cookie (CookieFields .cookiePopupAccepted.toString, " 1" , secure = true , httpOnly = false )
62
62
)
63
+ .withSession(" id" -> member.member_id.toString)
63
64
}
64
65
}
65
66
@@ -78,7 +79,14 @@ class Get @Inject()(cc: ControllerComponents, dbContext: DBContext) extends Abst
78
79
79
80
def show (repertory : String , symptom : String , page : Int , remedyString : String , minWeight : Int ) = Action { implicit request : Request [AnyContent ] =>
80
81
try {
81
- Ok (views.html.index_lookup(request, repertory, URLEncoder .encode(symptom, StandardCharsets .UTF_8 .toString()), page - 1 , remedyString, minWeight, s " OOREP - ${symptom} ( ${repertory}) " ))
82
+ getAuthenticatedUser(request) match {
83
+ case None =>
84
+ Ok (views.html.index_lookup(request, repertory, URLEncoder .encode(symptom, StandardCharsets .UTF_8 .toString()), page - 1 , remedyString, minWeight, s " OOREP - ${symptom} ( ${repertory}) " ))
85
+ .withSession(" id" -> " -1" )
86
+ case Some (member) =>
87
+ Ok (views.html.index_lookup(request, repertory, URLEncoder .encode(symptom, StandardCharsets .UTF_8 .toString()), page - 1 , remedyString, minWeight, s " OOREP - ${symptom} ( ${repertory}) " ))
88
+ .withSession(" id" -> member.member_id.toString)
89
+ }
82
90
} catch {
83
91
case e : Exception =>
84
92
Logger .debug(s " GET: show() failed; most likely URLEncoder.encode(): ${e.toString}" )
@@ -88,7 +96,14 @@ class Get @Inject()(cc: ControllerComponents, dbContext: DBContext) extends Abst
88
96
89
97
def showMM (materiaMedica : String , symptom : String , page : Int , hideSections : Boolean , remedyString : String ) = Action { implicit request : Request [AnyContent ] =>
90
98
try {
91
- Ok (views.html.index_lookup_mm(request, materiaMedica, URLEncoder .encode(symptom, StandardCharsets .UTF_8 .toString()), page - 1 , hideSections, remedyString, s " OOREP - ${symptom} ( ${materiaMedica}) " ))
99
+ getAuthenticatedUser(request) match {
100
+ case None =>
101
+ Ok (views.html.index_lookup_mm(request, materiaMedica, URLEncoder .encode(symptom, StandardCharsets .UTF_8 .toString()), page - 1 , hideSections, remedyString, s " OOREP - ${symptom} ( ${materiaMedica}) " ))
102
+ .withSession(" id" -> " -1" )
103
+ case Some (member) =>
104
+ Ok (views.html.index_lookup_mm(request, materiaMedica, URLEncoder .encode(symptom, StandardCharsets .UTF_8 .toString()), page - 1 , hideSections, remedyString, s " OOREP - ${symptom} ( ${materiaMedica}) " ))
105
+ .withSession(" id" -> member.member_id.toString)
106
+ }
92
107
} catch {
93
108
case e : Exception =>
94
109
Logger .debug(s " GET: showMM() failed; most likely URLEncoder.encode(): ${e.toString}" )
@@ -160,15 +175,36 @@ class Get @Inject()(cc: ControllerComponents, dbContext: DBContext) extends Abst
160
175
}
161
176
162
177
def apiAvailableRemedies () = Action { request : Request [AnyContent ] =>
163
- Ok (repertoryDao.getRemedies().asJson.toString())
178
+ getAuthenticatedUser(request) match {
179
+ case Some (member) =>
180
+ Ok (repertoryDao.getRemedies().asJson.toString())
181
+ .withSession(" id" -> member.member_id.toString)
182
+ case None =>
183
+ Ok (repertoryDao.getRemedies().asJson.toString())
184
+ .withSession(" id" -> " -1" )
185
+ }
164
186
}
165
187
166
188
def apiAvailableRepertoriesAndRemedies () = Action { request : Request [AnyContent ] =>
167
- Ok ((repertoryDao.getRepsAndRemedies(getAuthenticatedUser(request)).asJson.toString))
189
+ getAuthenticatedUser(request) match {
190
+ case Some (member) =>
191
+ Ok ((repertoryDao.getRepsAndRemedies(getAuthenticatedUser(request)).asJson.toString))
192
+ .withSession(" id" -> member.member_id.toString)
193
+ case None =>
194
+ Ok ((repertoryDao.getRepsAndRemedies(getAuthenticatedUser(request)).asJson.toString))
195
+ .withSession(" id" -> " -1" )
196
+ }
168
197
}
169
198
170
199
def apiAvailableMateriaMedicasAndRemedies () = Action { request : Request [AnyContent ] =>
171
- Ok (mmDao.getMMsAndRemedies(getAuthenticatedUser(request)).asJson.toString())
200
+ getAuthenticatedUser(request) match {
201
+ case Some (member) =>
202
+ Ok (mmDao.getMMsAndRemedies(getAuthenticatedUser(request)).asJson.toString())
203
+ .withSession(" id" -> member.member_id.toString)
204
+ case None =>
205
+ Ok (mmDao.getMMsAndRemedies(getAuthenticatedUser(request)).asJson.toString())
206
+ .withSession(" id" -> " -1" )
207
+ }
172
208
}
173
209
174
210
/**
@@ -282,57 +318,75 @@ class Get @Inject()(cc: ControllerComponents, dbContext: DBContext) extends Abst
282
318
}
283
319
}
284
320
285
- def apiLookupRep (repertoryAbbrev : String , symptom : String , page : Int , remedyString : String , minWeight : Int , getRemedies : Int ) = Action { request : Request [AnyContent ] =>
286
- // We don't allow '*' in the middle of a search term. '*' can only be at beginning or end of a word, whether exact search term or not.
287
- if (symptom.trim.matches(" .*\\ w+\\ *\\ w+.*" ) || symptom.trim.contains(" * " )) {
288
- NoContent
289
- } else {
290
- val searchTerms = new SearchTerms (symptom.trim)
291
- val cleanedUpAbbrev = repertoryAbbrev.replaceAll(" [^0-9A-Za-z\\ -]" , " " )
292
-
293
- // Check if user is allowed to access the resource at all (might be Private or Protected and user not logged in)
294
- if (repertoryDao.getRepsAndRemedies(getAuthenticatedUser(request)).find(_.info.abbrev == cleanedUpAbbrev) == None ) {
295
- Logger .info(s " Get: apiLookupRep(abbrev: ${repertoryAbbrev}, symptom: ${symptom}, page: ${page}, remedy: ${remedyString}, weight: ${minWeight}): user not allowed to access ressource. " )
296
- NoContent
297
- }
298
- else {
299
- // Do actual look-up and return results in case of success.
300
- repertoryDao.queryRepertory(cleanedUpAbbrev, searchTerms, page, remedyString.trim, minWeight, getRemedies != 0 ) match {
301
- case Some ((ResultsCaseRubrics (totalNumberOfRepertoryRubrics, totalNumberOfResults, totalNumberOfPages, page, results), remedyStats)) if (totalNumberOfPages > 0 ) =>
302
- Ok ((ResultsCaseRubrics (totalNumberOfRepertoryRubrics, totalNumberOfResults, totalNumberOfPages, page, results), remedyStats).asJson.toString())
303
- case _ =>
304
- Logger .info(s " Get: apiLookupRep(abbrev: ${repertoryAbbrev}, symptom: ${symptom}, page: ${page}, remedy: ${remedyString}, weight: ${minWeight}): no results found " )
321
+ private def isCrossSiteRequest (request : Request [AnyContent ]): Boolean = {
322
+ request.session.get(" id" ) == None && getAuthenticatedUser(request) == None
323
+ }
324
+
325
+ def apiLookupRep (repertoryAbbrev : String , symptom : String , page : Int , remedyString : String , minWeight : Int , getRemedies : Int ): Action [AnyContent ] =
326
+ Action { request : Request [AnyContent ] =>
327
+ if (isCrossSiteRequest(request)) {
328
+ val errStr = (s " ERROR: request to ${request.uri} not authorized. Make sure your browser allows cookies. (IP: ${request.remoteAddress}) " )
329
+ Logger .error(errStr)
330
+ Unauthorized (errStr)
331
+ } else {
332
+ // We don't allow '*' in the middle of a search term. '*' can only be at beginning or end of a word, whether exact search term or not.
333
+ if (symptom.trim.matches(" .*\\ w+\\ *\\ w+.*" ) || symptom.trim.contains(" * " )) {
334
+ NoContent
335
+ } else {
336
+ val searchTerms = new SearchTerms (symptom.trim)
337
+ val cleanedUpAbbrev = repertoryAbbrev.replaceAll(" [^0-9A-Za-z\\ -]" , " " )
338
+
339
+ // Check if user is allowed to access the resource at all (might be Private or Protected and user not logged in)
340
+ if (repertoryDao.getRepsAndRemedies(getAuthenticatedUser(request)).find(_.info.abbrev == cleanedUpAbbrev) == None ) {
341
+ Logger .warn(s " Get: apiLookupRep(abbrev: ${repertoryAbbrev}, symptom: ${symptom}, page: ${page}, remedy: ${remedyString}, weight: ${minWeight}): user not allowed to access ressource. " )
305
342
NoContent
343
+ }
344
+ else {
345
+ // Do actual look-up and return results in case of success.
346
+ repertoryDao.queryRepertory(cleanedUpAbbrev, searchTerms, page, remedyString.trim, minWeight, getRemedies != 0 ) match {
347
+ case Some ((ResultsCaseRubrics (totalNumberOfRepertoryRubrics, totalNumberOfResults, totalNumberOfPages, page, results), remedyStats)) if (totalNumberOfPages > 0 ) =>
348
+ Ok ((ResultsCaseRubrics (totalNumberOfRepertoryRubrics, totalNumberOfResults, totalNumberOfPages, page, results), remedyStats).asJson.toString())
349
+ case _ =>
350
+ Logger .info(s " Get: apiLookupRep(abbrev: ${repertoryAbbrev}, symptom: ${symptom}, page: ${page}, remedy: ${remedyString}, weight: ${minWeight}): no results found " )
351
+ NoContent
352
+ }
353
+ }
306
354
}
307
355
}
308
356
}
309
- }
310
357
311
- def apiLookupMM (mmAbbrev : String , symptom : String , page : Int , remedyString : String ) = Action { request : Request [AnyContent ] =>
312
- // We don't allow '*' in the middle of a search term. '*' can only be at beginning or end of a word, whether exact search term or not.
313
- if (symptom.trim.matches(" .*\\ w+\\ *\\ w+.*" ) || symptom.trim.contains(" * " )) {
314
- NoContent
315
- } else {
316
- val searchTerms = new SearchTerms (symptom.trim)
317
- val cleanedUpAbbrev = mmAbbrev.replaceAll(" [^0-9A-Za-z\\ -]" , " " )
318
-
319
- // Check if user is allowed to access the resource at all (might be Private or Protected and user not logged in)
320
- if (mmDao.getMMsAndRemedies(getAuthenticatedUser(request)).find(_.mminfo.abbrev == cleanedUpAbbrev) == None ) {
321
- Logger .info(s " Get: apiLookupMM(abbrev: ${mmAbbrev}, symptom: ${symptom}, page: ${page}, remedy: ${remedyString}): user not allowed to access ressource. " )
322
- NoContent
323
- }
324
- else {
325
- // Do actual look-up and return results in case of success.
326
- mmDao.getSectionHits(cleanedUpAbbrev, searchTerms, page, Some (remedyString)) match {
327
- case Some (sectionHits) if (sectionHits.results.length > 0 || sectionHits.numberOfMatchingSectionsPerChapter.length > 0 ) =>
328
- Ok (sectionHits.asJson.toString())
329
- case _ =>
330
- Logger .info(s " Get: apiLookupMM(abbrev: ${mmAbbrev}, symptom: ${symptom}, page: ${page}, remedy: ${remedyString}): no results found " )
358
+ def apiLookupMM (mmAbbrev : String , symptom : String , page : Int , remedyString : String ): Action [AnyContent ] =
359
+ Action { request : Request [AnyContent ] =>
360
+ if (isCrossSiteRequest(request)) {
361
+ val errStr = (s " ERROR: request to ${request.uri} not authorized. Make sure your browser allows cookies. (IP: ${request.remoteAddress}) " )
362
+ Logger .error(errStr)
363
+ Unauthorized (errStr)
364
+ } else {
365
+ // We don't allow '*' in the middle of a search term. '*' can only be at beginning or end of a word, whether exact search term or not.
366
+ if (symptom.trim.matches(" .*\\ w+\\ *\\ w+.*" ) || symptom.trim.contains(" * " )) {
367
+ NoContent
368
+ } else {
369
+ val searchTerms = new SearchTerms (symptom.trim)
370
+ val cleanedUpAbbrev = mmAbbrev.replaceAll(" [^0-9A-Za-z\\ -]" , " " )
371
+
372
+ // Check if user is allowed to access the resource at all (might be Private or Protected and user not logged in)
373
+ if (mmDao.getMMsAndRemedies(getAuthenticatedUser(request)).find(_.mminfo.abbrev == cleanedUpAbbrev) == None ) {
374
+ Logger .info(s " Get: apiLookupMM(abbrev: ${mmAbbrev}, symptom: ${symptom}, page: ${page}, remedy: ${remedyString}): user not allowed to access ressource. " )
331
375
NoContent
376
+ }
377
+ else {
378
+ // Do actual look-up and return results in case of success.
379
+ mmDao.getSectionHits(cleanedUpAbbrev, searchTerms, page, Some (remedyString)) match {
380
+ case Some (sectionHits) if (sectionHits.results.length > 0 || sectionHits.numberOfMatchingSectionsPerChapter.length > 0 ) =>
381
+ Ok (sectionHits.asJson.toString())
382
+ case _ =>
383
+ Logger .info(s " Get: apiLookupMM(abbrev: ${mmAbbrev}, symptom: ${symptom}, page: ${page}, remedy: ${remedyString}): no results found " )
384
+ NoContent
385
+ }
386
+ }
332
387
}
333
388
}
334
389
}
335
- }
336
390
337
391
}
338
392
0 commit comments