loginImpl.cls 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  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. MESSAGE 'start get'.
  52. cuser_name = poRequest:URI:GetQueryValue("user_name").
  53. ii = 0.
  54. EMPTY TEMP-TABLE tcompanies.
  55. FOR EACH companies NO-LOCK
  56. WHERE companies.active = TRUE:
  57. ii = ii + 1.
  58. CREATE tcompanies.
  59. ASSIGN
  60. tcompanies.company = companies.company
  61. tcompanies.company_Name = companies.company_name
  62. tcompanies.lselected = (IF ii = 1 THEN TRUE ELSE FALSE).
  63. END.
  64. outilitiesHandler = NEW utilitiesHandler().
  65. // Ist dem Benutzer ein company zugeteilt ?
  66. FIND FIRST users NO-LOCK
  67. WHERE users.user_name = cuser_name NO-ERROR.
  68. IF AVAILABLE users THEN
  69. DO:
  70. FOR EACH tcompanies:
  71. tcompanies.lselected = (IF tcompanies.company = users.company THEN TRUE ELSE FALSE).
  72. END.
  73. END.
  74. htcompanies = TEMP-TABLE tcompanies:DEFAULT-BUFFER-HANDLE.
  75. cContent-Type = "application/json".
  76. cDefautlCharSet = 'utf-8'.
  77. oJsonResponse = NEW JsonObject().
  78. oParser = NEW ObjectModelParser().
  79. oJsonResponse:ADD('user_name', cuser_name).
  80. oJsoncompanies = NEW JsonObject().
  81. htcompanies:WRITE-JSON('JsonObject', oJsoncompanies).
  82. lcJsonInhalt = oJsoncompanies:GetJsonText('companies').
  83. oJsonArray = CAST(oParser:Parse(lcJsonInhalt), JsonArray) NO-ERROR.
  84. oJsonResponse:ADD('companies', oJsonArray) NO-ERROR.
  85. oJsonResponse:WRITE(lcJsonInhalt, TRUE).
  86. MESSAGE STRING(lcJsonInhalt).
  87. oBody = NEW STRING(oJsonResponse:GetJsonText()).
  88. WebHandlerUtilities:createHttpResponse(INPUT INTEGER(StatusCodeEnum:OK), INPUT oBody, INPUT cContent-Type, INPUT cDefautlCharSet, INPUT cCorralationID, OUTPUT oResponse).
  89. // oResponse:SetHeader(HttpHeaderBuilder:Build(cHeaderCorralationID):Value(cCorralationID):Header).
  90. oWriter = NEW WebResponseWriter(oResponse).
  91. oWriter:Open().
  92. oWriter:Close().
  93. RETURN 0.
  94. CATCH e AS Progress.Lang.Error:
  95. END CATCH.
  96. FINALLY:
  97. END FINALLY.
  98. END METHOD.
  99. METHOD OVERRIDE PROTECTED INTEGER HandleNotAllowedMethod(INPUT poRequest AS IWebRequest):
  100. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  101. MESSAGE "HandleNotAllowedMethod called" VIEW-AS ALERT-BOX.
  102. RETURN result.
  103. END METHOD.
  104. METHOD OVERRIDE PROTECTED INTEGER HandleNotImplemented(INPUT poRequest AS IWebRequest):
  105. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  106. MESSAGE "HandleNotImplemented called" VIEW-AS ALERT-BOX.
  107. RETURN result.
  108. END METHOD.
  109. /*------------------------------------------------------------------------------
  110. Purpose:
  111. Notes:
  112. ------------------------------------------------------------------------------*/
  113. METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest):
  114. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  115. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  116. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  117. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  118. DEFINE VARIABLE oMessage AS JsonObject NO-UNDO.
  119. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  120. DEFINE VARIABLE oJsonButtons AS JsonObject NO-UNDO.
  121. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  122. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  123. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  124. DEFINE VARIABLE cPasswort AS CHARACTER NO-UNDO.
  125. DEFINE VARIABLE cpassword AS CHARACTER NO-UNDO.
  126. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  127. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  128. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  129. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  130. DEFINE VARIABLE lcErrorMessage AS LONGCHAR NO-UNDO.
  131. DEFINE VARIABLE lError AS LOGICAL NO-UNDO.
  132. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  133. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  134. DEFINE VARIABLE csession_token AS CHARACTER NO-UNDO.
  135. DEFINE VARIABLE rUsers AS RECID NO-UNDO.
  136. DEFINE VARIABLE poHeaders AS HttpHeader NO-UNDO EXTENT.
  137. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  138. DEFINE VARIABLE lcRetVal AS LONGCHAR NO-UNDO.
  139. DEFINE VARIABLE oHeader AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
  140. MESSAGE 'start post'.
  141. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  142. MESSAGE 'getJsonFromRequest = ' lRetVal.
  143. oJsonData:WRITE(lcJsonString, FALSE).
  144. MESSAGE 'ganzer Eingangsstring = ' STRING(lcJsonString).
  145. ccompany = oJsonData:GetCharacter('company' ).
  146. cuser_name = oJsonData:GetCharacter('user_name' ).
  147. cpassword = oJsonData:GetCharacter('password').
  148. MESSAGE ccompany '-' cuser_name '-' cpassword.
  149. lcErrorMessage = ''.
  150. lError = FALSE.
  151. outilitiesHandler = NEW utilitiesHandler().
  152. DO WHILE TRUE:
  153. FIND FIRST users NO-LOCK
  154. WHERE users.user_name = cuser_name
  155. AND users.active = TRUE NO-ERROR.
  156. IF NOT AVAILABLE users THEN
  157. DO:
  158. lError = TRUE.
  159. outilitiesHandler:getErrorMessage (
  160. INPUT '1990',
  161. INPUT 1 , /* Sprcd*/
  162. INPUT '' , /* Parameter */
  163. OUTPUT lcMessage
  164. ).
  165. LEAVE.
  166. END.
  167. ilanguage_id = users.language_id.
  168. rUsers = RECID(users).
  169. IF users.password <> cpassword THEN
  170. DO:
  171. lError = TRUE.
  172. outilitiesHandler:getErrorMessage (
  173. INPUT '1992' ,
  174. INPUT ilanguage_id, /* Sprcd*/
  175. INPUT '' , /* Parameter */
  176. OUTPUT lcMessage
  177. ).
  178. LEAVE.
  179. END.
  180. FIND FIRST userauthorization NO-LOCK
  181. WHERE userauthorization.company = ccompany
  182. AND userauthorization.user_name = cuser_name NO-ERROR.
  183. IF NOT AVAILABLE userauthorization THEN
  184. DO:
  185. lError = TRUE.
  186. outilitiesHandler:getErrorMessage (
  187. INPUT '1991' ,
  188. INPUT ilanguage_id, /* Sprcd*/
  189. INPUT '' , /* Parameter */
  190. OUTPUT lcMessage
  191. ).
  192. LEAVE.
  193. END.
  194. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  195. csession_token = users.sha_password.
  196. IF users.sha_password <> '' THEN LEAVE.
  197. IF users.password = '' THEN cPasswort = users.user_name.
  198. ELSE cPasswort = users.password.
  199. outilitiesHandler:generateHash (
  200. INPUT 'SHA-512',
  201. INPUT SUBSTITUTE('&1:&2', cPasswort, STRING(TIME,'99999999')),
  202. INPUT 'Passw0rd',
  203. OUTPUT lError,
  204. OUTPUT cMessage,
  205. OUTPUT csession_token
  206. ).
  207. FIND users EXCLUSIVE-LOCK WHERE RECID(users) = rUsers.
  208. ASSIGN
  209. users.sha_password = csession_token.
  210. RELEASE users.
  211. LEAVE.
  212. END.
  213. FIND users NO-LOCK WHERE RECID(users) = rUsers.
  214. /* FIND FIRST userdata */
  215. /* WHERE userdata.user_name = cuser_name */
  216. /* AND userdata.company = ccompany */
  217. /* AND userdata.record_type = 'LOGIN' */
  218. /* AND userdata.section = 'company' NO-ERROR.*/
  219. /* IF NOT AVAILABLE userdata THEN */
  220. /* DO: */
  221. /* CREATE userdata. */
  222. /* ASSIGN */
  223. /* userdata.user_name = cuser_name */
  224. /* userdata.company = ccompany */
  225. /* userdata.record_type = 'LOGIN' */
  226. /* userdata.section = 'company'. */
  227. /* END. */
  228. /* ASSIGN */
  229. /* userdata.cfield_1 = ccompany */
  230. /* userdata.cfield_2 = cuser_name */
  231. /* userdata.cfield_3 = csession_token. */
  232. /* */
  233. /* RELEASE userdata. */
  234. oResponse = NEW OpenEdge.Web.WebResponse().
  235. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  236. oResponse:ContentType = "application/json;charset=utf-8".
  237. oWriter = NEW WebResponseWriter(oResponse).
  238. FIND FIRST users NO-LOCK
  239. WHERE users.user_name = cuser_name NO-ERROR.
  240. oJsonResponse = NEW JsonObject().
  241. oJsonResponse:ADD('success' , TRUE ).
  242. oJsonResponse:ADD('session_token', csession_token ).
  243. oJsonResponse:ADD('company' , ccompany ).
  244. oJsonResponse:ADD('user_name' , cuser_name ).
  245. oJsonResponse:ADD('display_name' , users.display_name).
  246. oJsonResponse:ADD('language_id' , ilanguage_id ).
  247. oJsonButtons = NEW JsonObject().
  248. FOR EACH labeltext NO-LOCK
  249. WHERE labeltexte.company = ccompany
  250. AND labeltexte.program = 'buttons'
  251. AND labeltexte.language_id = ilanguage_id:
  252. oJsonButtons:ADD(labeltexte.field_name, labeltexte.sidelabel).
  253. END.
  254. oJsonResponse:ADD('labels', oJsonButtons).
  255. oJsonResponse:WRITE(lcJsonString, FALSE).
  256. MESSAGE 'Rückmeldung ' STRING(lcJsonString).
  257. oWriter:Open().
  258. oWriter:Write(lcJsonString).
  259. oWriter:Close().
  260. RETURN 0.
  261. END.
  262. MESSAGE 'Meldung von getErrorMessage ' STRING(lcMessage).
  263. oResponse = NEW OpenEdge.Web.WebResponse().
  264. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  265. oResponse:ContentType = "application/json;charset=utf-8".
  266. oWriter = NEW WebResponseWriter(oResponse).
  267. oJsonResponse = NEW JsonObject().
  268. oJsonResponse:ADD('success', FALSE).
  269. oJsonResponse:ADD('message', lcMessage) NO-ERROR.
  270. oJsonResponse:WRITE(lcJsonString, FALSE).
  271. MESSAGE 'Rückmeldung ' STRING(lcJsonString).
  272. oWriter:Open().
  273. oWriter:Write(lcJsonString).
  274. oWriter:Close().
  275. RETURN 0.
  276. CATCH e AS Progress.Lang.Error:
  277. END CATCH.
  278. FINALLY:
  279. DELETE OBJECT oParser NO-ERROR.
  280. END FINALLY.
  281. END METHOD.
  282. END CLASS.