webhookImpl.cls 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. /*------------------------------------------------------------------------
  2. File : webhookImpl
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : walter.riechsteiner
  7. Created : Wed May 29 21:02:53 CEST 2024
  8. Notes :
  9. ----------------------------------------------------------------------*/
  10. BLOCK-LEVEL ON ERROR UNDO, THROW.
  11. USING OpenEdge.Net.HTTP.IHttpResponse FROM PROPATH.
  12. USING OpenEdge.Net.HTTP.StatusCodeEnum FROM PROPATH.
  13. USING OpenEdge.Web.IWebRequest FROM PROPATH.
  14. USING OpenEdge.Web.WebHandler FROM PROPATH.
  15. USING OpenEdge.Web.WebResponseWriter FROM PROPATH.
  16. USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
  17. USING utilities.webhookHandler FROM PROPATH.
  18. USING src.ch.adprime.gemis.WebHandlerUtilities FROM PROPATH.
  19. CLASS webhookImpl INHERITS WebHandler:
  20. DEFINE VARIABLE cAktion AS CHARACTER NO-UNDO.
  21. DEFINE VARIABLE owebhookHandler AS webhookHandler.
  22. { ttWebhook.i }
  23. { ttSendMail.i }
  24. METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest):
  25. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  26. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  27. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  28. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  29. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  30. DEFINE VARIABLE hbttMandant AS HANDLE NO-UNDO.
  31. DEFINE VARIABLE cGetHtml AS CHARACTER NO-UNDO.
  32. DEFINE VARIABLE lcHTML AS LONGCHAR NO-UNDO.
  33. DEFINE VARIABLE cDatei AS CHARACTER NO-UNDO.
  34. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  35. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  36. DEFINE VARIABLE iMaxParam AS INTEGER NO-UNDO.
  37. DEFINE VARIABLE lAdmin AS LOGICAL NO-UNDO.
  38. DEFINE VARIABLE oInput AS JsonObject NO-UNDO.
  39. DEFINE VARIABLE cMeldung AS CHARACTER NO-UNDO.
  40. DEFINE VARIABLE lcString AS LONGCHAR NO-UNDO.
  41. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  42. DEFINE VARIABLE cDevices AS CHARACTER NO-UNDO.
  43. DEFINE VARIABLE cReplace AS CHARACTER NO-UNDO.
  44. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  45. DEFINE VARIABLE cParameter AS CHARACTER NO-UNDO EXTENT 20.
  46. MESSAGE "Entering HandlePost" VIEW-AS ALERT-BOX.
  47. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  48. oJsonData:WRITE(lcJsonString, FALSE).
  49. //
  50. // Input-Daten aus JsonObject lesen und in ttWebhook füllen
  51. //
  52. EMPTY TEMP-TABLE ttWebhook.
  53. hbttWebhook = TEMP-TABLE ttWebhook:DEFAULT-BUFFER-HANDLE.
  54. oInput = NEW JsonObject().
  55. oInput = oJsonData:GetJsonObject('ttWebhook').
  56. lRetVal = hbttWebhook:READ-JSON ('JsonObject', oInput).
  57. FIND FIRST ttWebhook.
  58. cAktion = ttWebhook.caction.
  59. owebhookHandler = NEW webhookHandler().
  60. DO WHILE lRetVal:
  61. hbttWebhook = TEMP-TABLE ttWebhook:DEFAULT-BUFFER-HANDLE.
  62. MESSAGE 'Inputdaten gelesen mit returncode ' lRetVal.
  63. IF NOT lRetVal THEN LEAVE.
  64. FIND FIRST ttWebhook.
  65. EMPTY TEMP-TABLE ttSendMail.
  66. CREATE ttSendMail.
  67. ASSIGN
  68. ttSendMail.cFrom = cMailFrom
  69. ttSendMail.cTo = (IF ttWebhook.cTo = '' THEN 'info@analytikdataprime.ch' ELSE ttWebhook.cTo)
  70. ttSendMail.cAuthUsername = cAuthUserName
  71. ttSendMail.cAuthPasswort = cAuthPasswort
  72. ttSendMail.cCC = (IF ttWebhook.cCc = '' THEN '' ELSE ttWebhook.cCc)
  73. ttSendMail.cBC = (IF ttWebhook.cBc = '' THEN '' ELSE ttWebhook.cBc)
  74. ttSendMail.cSubject = ttWebhook.cSubject
  75. ttSendMail.cBody = ttWebHook.cBody
  76. ttSendMail.cMailServer = cMailServer
  77. ttSendMail.cMailPort = cMailPort
  78. ttSendMail.cDomaine = cMailDomaine
  79. ttSendMail.lMailAuth = lMailAuth
  80. ttSendMail.cMailKonto = cMailKonto
  81. ttSendMail.cMailPassw = cMailPassw
  82. ttSendMail.lSSLEnabled = lSSLEnable
  83. .
  84. cParameter = ''.
  85. iMaxParam = NUM-ENTRIES(ttWebhook.cbody, ';').
  86. DO ii = 1 TO iMaxParam:
  87. cParameter[ii] = TRIM(ENTRY(ii, ttWebhook.cbody, ';')).
  88. END.
  89. IF ttWebhook.caction = 'SYNOLOGY' THEN
  90. DO:
  91. oJsonData:WRITE(lcJsonString, FALSE).
  92. FIND FIRST ttWebhook.
  93. IF INDEX(ttWebhook.cHerkunft, 'M365') > 0 THEN
  94. DO:
  95. // Parameter 1: Anzahl OneDrive Ordner
  96. // Parameter 2: Anzahl E-Mail Postfächer
  97. // Parameter 3: Anzahl Archive Postfäher
  98. // Parameter 4: Anzahl Kontakte
  99. // Parameter 5: Anzahl Kalender
  100. // Parameter 6: Anzahl Share-Point - Verzeichnisse
  101. // Parameter 7: Anzahl Gruppen-E-Mail Postfächer
  102. // Parameter 8: Anzahl Gruppenkalender
  103. // Parameter 9: Anzahl Teams
  104. // Parameter 10: Startzeit
  105. // Parameter 11: Endzeit
  106. // Parameter 12: Host (ADPRNAS01, ...)
  107. // Parameter 13: Taskname
  108. // Parameter 14: Texte aus Aufgaben-Regel
  109. DO:
  110. IF ttWebhook.cmeldungsart = 'success' THEN cDatei = SEARCH('M365_Success_Text.txt').
  111. IF ttWebhook.cmeldungsart = 'error' THEN cDatei = SEARCH('M365_Error_Text.txt').
  112. IF ttWebhook.cmeldungsart = 'fehler' THEN cDatei = SEARCH('M365_Error_Text.txt').
  113. IF ttWebhook.cmeldungsart = 'warning' THEN cDatei = SEARCH('M365_Warning_Text.txt').
  114. COPY-LOB FROM FILE cDatei TO lcString.
  115. lcString = REPLACE(lcString, CHR(13), '').
  116. lcString = REPLACE(lcString, CHR(10), '</br>').
  117. END.
  118. CASE ttWebhook.cmeldungsart:
  119. WHEN 'success' THEN
  120. DO:
  121. DO ii = 1 TO iMaxParam:
  122. cReplace = '&' + STRING(ii,"99").
  123. lcString = REPLACE(lcString, cReplace, cParameter[ii]).
  124. END.
  125. ASSIGN
  126. ttSendMail.cSubject = SUBSTITUTE('&1 / &2', cParameter[12], cParameter[13])
  127. ttSendMail.cBody = ttWebhook.cHerkunft + '</br></br>' + STRING(lcString).
  128. END.
  129. WHEN 'fehler' OR
  130. WHEN 'error' THEN
  131. DO:
  132. DO ii = 1 TO iMaxParam:
  133. cReplace = '&' + STRING(ii,"99").
  134. lcString = REPLACE(lcString, cReplace, cParameter[ii]).
  135. END.
  136. ASSIGN
  137. ttSendMail.cSubject = SUBSTITUTE('&1 / &2', cParameter[12], cParameter[13])
  138. ttSendMail.cBody = ttWebhook.cHerkunft + '</br></br>' + STRING(lcString).
  139. END.
  140. OTHERWISE
  141. DO:
  142. ASSIGN
  143. ttSendMail.cSubject = SUBSTITUTE('&1 / &2', cParameter[12], cParameter[13])
  144. ttSendMail.cBody = ttWebhook.cHerkunft + '</br></br>' + ttWebhook.cbody.
  145. END.
  146. END CASE.
  147. END.
  148. IF INDEX(ttWebhook.cHerkunft, 'Business') > 0 THEN
  149. DO:
  150. // Parameter 1: Startzeit
  151. // Parameter 2: Endzeit
  152. // Parameter 3: Grösse transferierter Daten
  153. // Parameter 4: Geräte
  154. // Parameter 5: Host (ADPRNAS01, ...)
  155. // Parameter 6: Taskname
  156. // Parameter 7: Texte aus Aufgaben-Regel
  157. DO:
  158. cDatei = SEARCH('VM_Success_Text.txt').
  159. IF ttWebhook.cmeldungsart = 'success' THEN cDatei = SEARCH('VM_Success_Text.txt').
  160. IF ttWebhook.cmeldungsart = 'error' THEN cDatei = SEARCH('VM_Error_Text.txt').
  161. IF ttWebhook.cmeldungsart = 'fehler' THEN cDatei = SEARCH('VM_Error_Text.txt').
  162. IF ttWebhook.cmeldungsart = 'warning' THEN cDatei = SEARCH('VM_Warning_Text.txt').
  163. IF ttWebhook.cmeldungsart = 'warnung' THEN cDatei = SEARCH('VM_Warning_Text.txt').
  164. COPY-LOB FROM FILE cDatei TO lcString.
  165. lcString = REPLACE(lcString, CHR(13), '').
  166. lcString = REPLACE(lcString, CHR(10), '</br>').
  167. END.
  168. cDevices = ''.
  169. cString = cParameter[04].
  170. cString = REPLACE(cString, ',', '').
  171. DO ii = 1 TO NUM-ENTRIES(cString, ' '):
  172. cDevices = cDevices + '</br> - ' + entry(ii, cString, ' ').
  173. END.
  174. cParameter[04] = cDevices.
  175. CASE ttWebhook.cmeldungsart:
  176. WHEN 'success' THEN
  177. DO:
  178. DO ii = 1 TO iMaxParam:
  179. cReplace = '&' + STRING(ii,"99").
  180. lcString = REPLACE(lcString, cReplace, cParameter[ii]).
  181. END.
  182. ASSIGN
  183. ttSendMail.cSubject = SUBSTITUTE('&1 / &2', cParameter[05], cParameter[06])
  184. ttSendMail.cBody = ttWebhook.cHerkunft + '</br></br>' + STRING(lcString).
  185. END.
  186. WHEN 'fehler' OR
  187. WHEN 'error' THEN
  188. DO:
  189. DO ii = 1 TO iMaxParam:
  190. cReplace = '&' + STRING(ii,"99").
  191. lcString = REPLACE(lcString, cReplace, cParameter[ii]).
  192. END.
  193. ASSIGN
  194. ttSendMail.cSubject = SUBSTITUTE('&1 / &2', cParameter[05], cParameter[06])
  195. ttSendMail.cBody = ttWebhook.cHerkunft + '</br></br>' + STRING(lcString).
  196. END.
  197. WHEN 'warnung' OR
  198. WHEN 'warning' THEN
  199. DO:
  200. DO ii = 1 TO iMaxParam:
  201. cReplace = '&' + STRING(ii,"99").
  202. lcString = REPLACE(lcString, cReplace, cParameter[ii]).
  203. END.
  204. ASSIGN
  205. ttSendMail.cSubject = SUBSTITUTE('&1 / &2', cParameter[05], cParameter[06])
  206. ttSendMail.cBody = ttWebhook.cHerkunft + '</br></br>' + STRING(lcString).
  207. END.
  208. OTHERWISE
  209. DO:
  210. ASSIGN
  211. ttSendMail.cSubject = SUBSTITUTE('&1 / &2', cParameter[05], cParameter[06])
  212. ttSendMail.cBody = ttWebhook.cHerkunft + '</br></br>' + ttWebhook.cbody.
  213. END.
  214. END CASE.
  215. END.
  216. /* ASSIGN */
  217. /* ttSendMail.cBody = ttWebhook.cHerkunft + '</br></br>' + ttWebhook.cBody.*/
  218. lcJsonString = ''.
  219. DO ii = 1 TO hbttWebhook:NUM-FIELDS:
  220. lcJsonString = lcJsonString
  221. + (IF lcJsonString = '' THEN '' ELSE ', ')
  222. + QUOTER(hbttWebhook:BUFFER-FIELD(ii):NAME)
  223. + ': '
  224. + QUOTER(hbttWebhook:BUFFER-FIELD(ii):BUFFER-VALUE).
  225. END.
  226. lcJsonString = CHR(123) + lcJsonString + chr(125).
  227. MESSAGE 'Return-Daten nach füllen aus ttWebhook ' STRING(lcJsonString).
  228. httSendMail = TEMP-TABLE ttSendMail:DEFAULT-BUFFER-HANDLE.
  229. RUN sendsmtpmail.r ( INPUT httSendMail, OUTPUT cMeldung, OUTPUT lOK ).
  230. MESSAGE 'Meldung beim Versand von Mail: ' lOk '-' cMeldung.
  231. END.
  232. LEAVE.
  233. END.
  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. oWriter:Open().
  239. MESSAGE 'lcString Rückgabe: ' + STRING(lcJsonString) VIEW-AS ALERT-BOX.
  240. oWriter:Write(lcJsonString).
  241. oWriter:Close().
  242. MESSAGE "Exiting HandlePost" VIEW-AS ALERT-BOX.
  243. CATCH e AS Progress.Lang.Error:
  244. MESSAGE "Exception occurred: " + e:GetMessage(1) VIEW-AS ALERT-BOX ERROR BUTTONS OK.
  245. RETURN -1.
  246. END CATCH.
  247. END METHOD.
  248. METHOD OVERRIDE PROTECTED INTEGER HandleNotAllowedMethod(INPUT poRequest AS IWebRequest):
  249. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  250. MESSAGE "HandleNotAllowedMethod called" VIEW-AS ALERT-BOX.
  251. RETURN result.
  252. END METHOD.
  253. METHOD OVERRIDE PROTECTED INTEGER HandleNotImplemented(INPUT poRequest AS IWebRequest):
  254. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  255. MESSAGE "HandleNotImplemented called" VIEW-AS ALERT-BOX.
  256. RETURN result.
  257. END METHOD.
  258. END CLASS.