1
0

server.lisp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. (in-package #:chatikbot)
  2. (defvar *web-path* nil "Set to externally accessible url")
  3. (defvar *web-iface* nil "Interface to listen on")
  4. (defvar *web-port* 4242 "Port to listen on")
  5. (defvar *web-acceptor* nil "Running hunchentoot acceptor")
  6. (defun web-start ()
  7. (when *web-acceptor* (hunchentoot:stop *web-acceptor*))
  8. (when *web-path*
  9. (setf *web-acceptor*
  10. (hunchentoot:start
  11. (make-instance 'hunchentoot:easy-acceptor
  12. :address *web-iface* :port *web-port*)))))
  13. (add-hook :starting #'(lambda () (web-start) (values)))
  14. (defun webhookp (request)
  15. (equal (concatenate 'string "/" *telegram-token*)
  16. (hunchentoot:script-name* request)))
  17. (hunchentoot:define-easy-handler (webhook-handler :uri #'webhookp :default-request-type :post) ()
  18. (handler-case
  19. (let ((stream (hunchentoot:raw-post-data :want-stream t)))
  20. (setf *random-state* (make-random-state t))
  21. (setf (flex:flexi-stream-external-format stream) :utf-8)
  22. (handle-update (yason:parse stream :object-as :alist))
  23. "OK")
  24. (error (e) (log:error e))))
  25. (hunchentoot:define-easy-handler (oauth-handler :uri "/oauth") (code error state)
  26. (handler-case
  27. (run-hooks :oauth code error state)
  28. (error (e)
  29. (log:error e)
  30. (hunchentoot:redirect "/error"))))
  31. (hunchentoot:define-easy-handler (error-handler :uri "/error") ()
  32. "<html>
  33. <head><title>Internal error</title></head>
  34. <body>
  35. <h1>Error :'(</h1>
  36. <p>Internal server error</p>
  37. </html>")
  38. (hunchentoot:define-easy-handler (oauth-success-handler :uri "/oauth/success") ()
  39. "<html>
  40. <head><title>Auth Success</title></head>
  41. <body>
  42. <h1>Success!</h1>
  43. <p>OAuth successfully completed. You could close this tab and go back to telegram bot</p>
  44. </html>")
  45. (hunchentoot:define-easy-handler (oauth-fail-handler :uri "/oauth/fail") ()
  46. "<html>
  47. <head><title>Auth failed</title></head>
  48. <body>
  49. <h1>Failed :(</h1>
  50. <p>OAuth failed. You probably didn't allow the access. Try again.</p>
  51. </html>")