loginImpl.cls 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. /*------------------------------------------------------------------------
  2. File : adresse_dict
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : walter.riechsteiner
  7. Created : Thu Jun 26 13:56:20 CEST 2025
  8. Notes :
  9. ----------------------------------------------------------------------*/
  10. BLOCK-LEVEL ON ERROR UNDO, THROW.
  11. USING OpenEdge.Core.String FROM PROPATH.
  12. USING OpenEdge.Net.HTTP.IHttpResponse FROM PROPATH.
  13. USING OpenEdge.Net.HTTP.StatusCodeEnum FROM PROPATH.
  14. USING OpenEdge.Web.IWebRequest FROM PROPATH.
  15. USING OpenEdge.Web.WebHandler FROM PROPATH.
  16. USING OpenEdge.Web.WebResponseWriter FROM PROPATH.
  17. USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
  18. USING Progress.Json.ObjectModel.JsonArray FROM PROPATH.
  19. USING Progress.Json.ObjectModel.ObjectModelParser FROM PROPATH.
  20. USING src.ch.adprime.gemis.WebHandlerUtilities FROM PROPATH.
  21. USING utilities.utilitiesHandler FROM PROPATH.
  22. USING OpenEdge.Net.HTTP.HttpHeader FROM PROPATH.
  23. CLASS auth.loginImpl INHERITS WebHandler:
  24. DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
  25. DEFINE TEMP-TABLE tcompanies
  26. SERIALIZE-NAME 'companies'
  27. FIELD company AS CHARACTER SERIALIZE-NAME 'company'
  28. FIELD company_Name AS CHARACTER SERIALIZE-NAME 'company_name'
  29. FIELD lselected AS LOGICAL SERIALIZE-NAME 'selected'
  30. .
  31. /*------------------------------------------------------------------------------
  32. Purpose:
  33. Notes:
  34. ------------------------------------------------------------------------------*/
  35. METHOD OVERRIDE PROTECTED INTEGER HandleGet (INPUT poRequest AS IWebRequest ):
  36. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  37. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  38. DEFINE VARIABLE oBody AS String NO-UNDO.
  39. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  40. DEFINE VARIABLE oJsoncompanies AS JsonObject NO-UNDO.
  41. DEFINE VARIABLE oJsonArray AS JsonArray NO-UNDO.
  42. DEFINE VARIABLE cDefautlCharSet AS CHARACTER NO-UNDO INIT 'UTF-8'.
  43. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  44. DEFINE VARIABLE cCorralationID AS CHARACTER NO-UNDO.
  45. DEFINE VARIABLE cContent-Type AS CHARACTER NO-UNDO.
  46. DEFINE VARIABLE htcompanies AS HANDLE NO-UNDO.
  47. DEFINE VARIABLE lcJsonInhalt AS LONGCHAR NO-UNDO.
  48. DEFINE VARIABLE lOk AS LOGICAL NO-UNDO.
  49. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  50. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  51. cuser_name = poRequest:URI:GetQueryValue("user_name").
  52. ii = 0.
  53. EMPTY TEMP-TABLE tcompanies.
  54. FOR EACH companies NO-LOCK
  55. WHERE companies.active = TRUE:
  56. ii = ii + 1.
  57. CREATE tcompanies.
  58. ASSIGN
  59. tcompanies.company = companies.company
  60. tcompanies.company_Name = companies.company_name
  61. tcompanies.lselected = (IF ii = 1 THEN TRUE ELSE FALSE).
  62. END.
  63. outilitiesHandler = NEW utilitiesHandler().
  64. // Ist dem Benutzer ein company zugeteilt ?
  65. FIND FIRST users NO-LOCK
  66. WHERE users.user_name = cuser_name NO-ERROR.
  67. IF AVAILABLE users THEN
  68. DO:
  69. FOR EACH tcompanies:
  70. tcompanies.lselected = (IF tcompanies.company = users.company THEN TRUE ELSE FALSE).
  71. END.
  72. END.
  73. htcompanies = TEMP-TABLE tcompanies:DEFAULT-BUFFER-HANDLE.
  74. cContent-Type = "application/json".
  75. cDefautlCharSet = 'utf-8'.
  76. oJsonResponse = NEW JsonObject().
  77. oParser = NEW ObjectModelParser().
  78. oJsonResponse:ADD('user_name', cuser_name).
  79. oJsoncompanies = NEW JsonObject().
  80. htcompanies:WRITE-JSON('JsonObject', oJsoncompanies).
  81. lcJsonInhalt = oJsoncompanies:GetJsonText('companies').
  82. oJsonArray = CAST(oParser:Parse(lcJsonInhalt), JsonArray) NO-ERROR.
  83. oJsonResponse:ADD('companies', oJsonArray) NO-ERROR.
  84. oJsonResponse:WRITE(lcJsonInhalt, FALSE).
  85. oBody = NEW STRING(lcJsonInhalt).
  86. WebHandlerUtilities:createHttpResponse(INPUT INTEGER(StatusCodeEnum:OK), INPUT oBody, INPUT cContent-Type, INPUT cDefautlCharSet, INPUT cCorralationID, OUTPUT oResponse).
  87. oWriter = NEW WebResponseWriter(oResponse).
  88. oWriter:Open().
  89. oWriter:Close().
  90. RETURN 0.
  91. CATCH e AS Progress.Lang.Error:
  92. END CATCH.
  93. FINALLY:
  94. END FINALLY.
  95. END METHOD.
  96. METHOD OVERRIDE PROTECTED INTEGER HandleNotAllowedMethod(INPUT poRequest AS IWebRequest):
  97. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  98. MESSAGE "HandleNotAllowedMethod called" VIEW-AS ALERT-BOX.
  99. RETURN result.
  100. END METHOD.
  101. METHOD OVERRIDE PROTECTED INTEGER HandleNotImplemented(INPUT poRequest AS IWebRequest):
  102. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  103. MESSAGE "HandleNotImplemented called" VIEW-AS ALERT-BOX.
  104. RETURN result.
  105. END METHOD.
  106. /*------------------------------------------------------------------------------
  107. Purpose:
  108. Notes:
  109. ------------------------------------------------------------------------------*/
  110. METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest):
  111. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  112. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  113. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  114. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  115. DEFINE VARIABLE oJsonSession AS JsonObject NO-UNDO.
  116. DEFINE VARIABLE oJsonLabels AS JsonObject NO-UNDO.
  117. DEFINE VARIABLE oMessage AS JsonObject NO-UNDO.
  118. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  119. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  120. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  121. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  122. DEFINE VARIABLE cPasswort AS CHARACTER NO-UNDO.
  123. DEFINE VARIABLE cpassword AS CHARACTER NO-UNDO.
  124. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  125. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  126. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  127. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  128. DEFINE VARIABLE lcErrorMessage AS LONGCHAR NO-UNDO.
  129. DEFINE VARIABLE lError AS LOGICAL NO-UNDO.
  130. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  131. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  132. DEFINE VARIABLE csession_token AS CHARACTER NO-UNDO.
  133. DEFINE VARIABLE rUsers AS RECID NO-UNDO.
  134. DEFINE VARIABLE poHeaders AS HttpHeader NO-UNDO EXTENT.
  135. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  136. DEFINE VARIABLE lcRetVal AS LONGCHAR NO-UNDO.
  137. DEFINE VARIABLE oHeader AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
  138. MESSAGE 'start post'.
  139. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  140. MESSAGE 'getJsonFromRequest = ' lRetVal.
  141. oJsonData:WRITE(lcJsonString, FALSE).
  142. MESSAGE 'ganzer Eingangsstring = ' STRING(lcJsonString).
  143. ccompany = oJsonData:GetCharacter('company' ).
  144. cuser_name = oJsonData:GetCharacter('user_name' ).
  145. cpassword = oJsonData:GetCharacter('password').
  146. MESSAGE ccompany '-' cuser_name '-' cpassword.
  147. lcErrorMessage = ''.
  148. lError = FALSE.
  149. outilitiesHandler = NEW utilitiesHandler().
  150. DO WHILE TRUE:
  151. FIND FIRST users NO-LOCK
  152. WHERE users.user_name = cuser_name
  153. AND users.active = TRUE NO-ERROR.
  154. IF NOT AVAILABLE users THEN
  155. DO:
  156. lError = TRUE.
  157. outilitiesHandler:getErrorMessage (
  158. INPUT '1990',
  159. INPUT 1 , /* Sprcd*/
  160. INPUT '' , /* Parameter */
  161. OUTPUT lcMessage
  162. ).
  163. LEAVE.
  164. END.
  165. ilanguage_id = users.language_id.
  166. rUsers = RECID(users).
  167. IF users.password <> cpassword THEN
  168. DO:
  169. lError = TRUE.
  170. outilitiesHandler:getErrorMessage (
  171. INPUT '1992' ,
  172. INPUT ilanguage_id, /* Sprcd*/
  173. INPUT '' , /* Parameter */
  174. OUTPUT lcMessage
  175. ).
  176. LEAVE.
  177. END.
  178. FIND FIRST userauthorization NO-LOCK
  179. WHERE userauthorization.company = ccompany
  180. AND userauthorization.user_name = cuser_name NO-ERROR.
  181. IF NOT AVAILABLE userauthorization THEN
  182. DO:
  183. lError = TRUE.
  184. outilitiesHandler:getErrorMessage (
  185. INPUT '1991' ,
  186. INPUT ilanguage_id, /* Sprcd*/
  187. INPUT '' , /* Parameter */
  188. OUTPUT lcMessage
  189. ).
  190. LEAVE.
  191. END.
  192. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  193. csession_token = users.sha_password.
  194. IF users.sha_password <> '' THEN LEAVE.
  195. IF users.password = '' THEN cPasswort = users.user_name.
  196. ELSE cPasswort = users.password.
  197. outilitiesHandler:generateHash (
  198. INPUT 'SHA-512',
  199. INPUT SUBSTITUTE('&1:&2', cPasswort, STRING(TIME,'99999999')),
  200. INPUT 'Passw0rd',
  201. OUTPUT lError,
  202. OUTPUT cMessage,
  203. OUTPUT csession_token
  204. ).
  205. FIND users EXCLUSIVE-LOCK WHERE RECID(users) = rUsers.
  206. ASSIGN
  207. users.sha_password = csession_token.
  208. RELEASE users.
  209. LEAVE.
  210. END.
  211. FIND users NO-LOCK WHERE RECID(users) = rUsers.
  212. oResponse = NEW OpenEdge.Web.WebResponse().
  213. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  214. oResponse:ContentType = "application/json;charset=utf-8".
  215. oWriter = NEW WebResponseWriter(oResponse).
  216. FIND FIRST users NO-LOCK
  217. WHERE users.user_name = cuser_name NO-ERROR.
  218. oJsonSession = NEW JsonObject().
  219. oJsonLabels = NEW JsonObject().
  220. oJsonResponse = NEW JsonObject().
  221. oJsonResponse:ADD('success' , TRUE ).
  222. oJsonSession:ADD ('session_token', csession_token ).
  223. oJsonSession:ADD ('company' , ccompany ).
  224. oJsonSession:ADD ('user_name' , cuser_name ).
  225. oJsonSession:ADD ('display_name' , users.display_name).
  226. oJsonSession:ADD ('language_id' , ilanguage_id ).
  227. oJsonResponse:ADD('session' , oJsonSession ).
  228. FOR EACH labeltext NO-LOCK
  229. WHERE labeltexte.company = ccompany
  230. AND labeltexte.table_name = 'table'
  231. AND labeltexte.program = 'buttons'
  232. AND labeltexte.language_id = ilanguage_id:
  233. oJsonLabels:ADD(CAPS(labeltexte.field_name), labeltexte.sidelabel).
  234. END.
  235. FOR EACH labeltext NO-LOCK
  236. WHERE labeltexte.company = ccompany
  237. AND labeltexte.table_name = 'table'
  238. AND labeltexte.program = 'MsgBox'
  239. AND labeltexte.language_id = ilanguage_id:
  240. oJsonLabels:ADD(CAPS(labeltexte.field_name), labeltexte.sidelabel).
  241. END.
  242. FOR EACH labeltext NO-LOCK
  243. WHERE labeltexte.company = ccompany
  244. AND labeltexte.table_name = 'table'
  245. AND labeltexte.program = 'Labels'
  246. AND labeltexte.language_id = ilanguage_id:
  247. oJsonLabels:ADD(CAPS(labeltexte.field_name), labeltexte.sidelabel).
  248. END.
  249. oJsonResponse:ADD('labels', oJsonLabels).
  250. oJsonResponse:WRITE(lcJsonString, FALSE).
  251. MESSAGE 'Rueckmeldung' STRING(lcJsonString).
  252. oWriter:Open().
  253. oWriter:Write(lcJsonString).
  254. oWriter:Close().
  255. RETURN 0.
  256. END.
  257. MESSAGE 'Meldung von getErrorMessage ' STRING(lcMessage).
  258. oResponse = NEW OpenEdge.Web.WebResponse().
  259. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  260. oResponse:ContentType = "application/json;charset=utf-8".
  261. oWriter = NEW WebResponseWriter(oResponse).
  262. oJsonResponse = NEW JsonObject().
  263. oJsonResponse:ADD('success', FALSE).
  264. oJsonResponse:ADD('message', lcMessage) NO-ERROR.
  265. oJsonResponse:WRITE(lcJsonString, FALSE).
  266. MESSAGE 'R�ckmeldung ' STRING(lcJsonString).
  267. oWriter:Open().
  268. oWriter:Write(lcJsonString).
  269. oWriter:Close().
  270. RETURN 0.
  271. CATCH e AS Progress.Lang.Error:
  272. END CATCH.
  273. FINALLY:
  274. DELETE OBJECT oParser NO-ERROR.
  275. END FINALLY.
  276. END METHOD.
  277. END CLASS.