summaryrefslogtreecommitdiff
path: root/lisp/webapps/dns-admin/site.lisp
blob: 996eeea43442d7049ae4690c325911dcca8f2076 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
(declaim (optimize (speed 0) (safety 3) (debug 3)))

(in-package #:dns-admin)

(defmacro .base (&optional (onload-fn "goto_location('/dns')"))
  `(html5
    `(html
      (head
       ((meta :name "viewport" :content "width=device-width, initial-scale=1"))
       ((meta :charset "utf-8"))
       ((title) ,(title *webapp*))
       ,@(mapcar (lambda (css)
                   `((link :rel "stylesheet" :href ,(getf css :href) :integrity ,(getf css :integrity) :crossorigin ,(getf css :crossorigin))))
                 '((:href "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" :integrity "sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" :crossorigin "anonymous")))
       ,@(mapcar (lambda (js)
                   `((script :type "text/javascript" :src ,(getf js :src) :integrity ,(getf js :integrity) :crossorigin ,(getf js :crossorigin))))
                 '((:src "https://code.jquery.com/jquery-3.2.1.slim.min.js" :integrity "sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" :crossorigin "anonymous")
                   (:src "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" :integrity "sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" :crossorigin "anonymous")
                   (:src "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" :integrity "sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" :crossorigin "anonymous")))
       ((script :type "text/javascript" :src "/static/js/cljs/main.js")))
      ((body :onload ,(format nil "dnsadmin.core.~a" ,onload-fn))
       ((div :class "container-fluid")
        ((div :class "row" :style "padding: 20px")
         ((div :class "col")
          ((div :class "page-header")
           ((h2 :align "center") ,(title *webapp*))))))
       ((div :id "location" :style "display: none"))
       ((div :id "authmsg"))
       ((div :id "errormsg"))
       ((div :id "message"))
       ((div :id "body"))
       ((div :id "infoblox-creds" :class "modal fade" :role "dialog")
        ((div :class "modal-dialog modal-lg")
         ((div :class "modal-content")
          ((div :class "modal-header")
           ((h5 :class "modal-title") "Infoblox - Connection Parameters")
           ((button :type "button" :class "close" :data-dismiss "modal") "×"))
          ((div :id "infoblox-creds-body" :class "modal-body" :style "height: 460px;"))
          ((div :class "modal-footer")
           ((button :type "submit" :class "btn btn-danger btn-default" :data-dismiss "modal")
            ((span :class "glyphicon glyphicon-remove") "Cancel"))))))))))

(defmacro .location ()
  `(handle-location location))

(defmacro .dns ()
  `(handle-dns))

(defmacro .dns-headers ()
  `(handle-dns-headers recordtype))

(defmacro .dns-login-get ()
  `(handle-dns-login-get))

(defmacro .dns-login-post ()
  `(handle-dns-login-post username pwd keypath))

(defmacro .dns-api-search-get ()
  `(handle-dns-api-search-get recordtype))

(defmacro .dns-api-search-post ()
  `(handle-dns-api-search-post recordtype ref name ipv4addr ipv6addr canonical ptrdname))

(defmacro .dns-api-add-get ()
  `(handle-dns-api-add-get recordtype))

(defmacro .dns-api-add-post ()
  `(handle-dns-api-add-post recordtype name ipv4addr ipv6addr canonical ptrdname))

(defmacro .dns-api-modify-get ()
  `(handle-dns-api-modify-get recordtype ref name ipv4addr ipv6addr canonical ptrdname))

(defmacro .dns-api-modify-post ()
  `(handle-dns-api-modify-post recordtype ref name ipv4addr ipv6addr canonical ptrdname))

(defmacro .dns-api-delete-post ()
  `(handle-dns-api-delete-post recordtype ref))

(defmacro .dns-api-ttl-get ()
  `(handle-dns-api-ttl-get recordtype ref name))

(defmacro .dns-api-ttl-post ()
  `(handle-dns-api-ttl-post recordtype ref ttl))

;; hunchentoot fails to differentiate between :get and :post to the
;; same URL. So we work around it in the URLs but fix it in the
;; downstream macro and function names.
(define-endpoint :get "/" () .base)
(define-endpoint :post "/location" ((location :parameter-type 'string)) .location)
(define-endpoint :get "/dns" () .dns)
(define-endpoint :post "/dns/headers" ((recordtype :parameter-type 'string)) .dns-headers)
(define-endpoint :get "/dns/login" () .dns-login-get)
(define-endpoint :post "/dns/login/post" ((username :parameter-type 'string) (pwd :parameter-type 'string) (keypath :parameter-type 'string)) .dns-login-post)
(define-endpoint :post "/dns/api/search" ((recordtype :parameter-type 'string)) .dns-api-search-get)
(define-endpoint :post "/dns/api/search/post" ((recordtype :parameter-type 'string) (ref :parameter-type 'string) (name :parameter-type 'string) (ipv4addr :parameter-type 'string) (ipv6addr :parameter-type 'string) (canonical :parameter-type 'string) (ptrdname :parameter-type 'string)) .dns-api-search-post)
(define-endpoint :post "/dns/api/add" ((recordtype :parameter-type 'string)) .dns-api-add-get)
(define-endpoint :post "/dns/api/add/post" ((recordtype :parameter-type 'string) (name :parameter-type 'string) (ipv4addr :parameter-type 'string) (ipv6addr :parameter-type 'string) (canonical :parameter-type 'string) (ptrdname :parameter-type 'string)) .dns-api-add-post)
(define-endpoint :post "/dns/api/modify" ((recordtype :parameter-type 'string) (ref :parameter-type 'string) (name :parameter-type 'string) (ipv4addr :parameter-type 'string) (ipv6addr :parameter-type 'string) (canonical :parameter-type 'string) (ptrdname :parameter-type 'string)) .dns-api-modify-get)
(define-endpoint :post "/dns/api/modify/post" ((recordtype :parameter-type 'string) (ref :parameter-type 'string) (name :parameter-type 'string) (ipv4addr :parameter-type 'string) (ipv6addr :parameter-type 'string) (canonical :parameter-type 'string) (ptrdname :parameter-type 'string)) .dns-api-modify-post)
(define-endpoint :post "/dns/api/delete/post" ((recordtype :parameter-type 'string) (ref :parameter-type 'string)) .dns-api-delete-post)
(define-endpoint :post "/dns/api/ttl" ((recordtype :parameter-type 'string) (ref :parameter-type 'string) (name :parameter-type 'string)) .dns-api-ttl-get)
(define-endpoint :post "/dns/api/ttl/post" ((recordtype :parameter-type 'string) (ref :parameter-type 'string) (ttl :parameter-type 'string)) .dns-api-ttl-post)