Actually test backblaze connection in wizard.
This commit is contained in:
@@ -14,6 +14,8 @@
|
|||||||
;; You should have received a copy of the GNU Affero General Public License
|
;; You should have received a copy of the GNU Affero General Public License
|
||||||
;; along with Nassella. If not, see <https://www.gnu.org/licenses/>.
|
;; along with Nassella. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
;; (import (chicken platform))
|
||||||
|
;; (register-feature! 'dev)
|
||||||
;; (load "src/db.scm")
|
;; (load "src/db.scm")
|
||||||
;; (load "src/mocks.scm")
|
;; (load "src/mocks.scm")
|
||||||
(include "db")
|
(include "db")
|
||||||
@@ -716,8 +718,63 @@ h1, h2, h3, h4, h5, h6 {
|
|||||||
`((success . #f)
|
`((success . #f)
|
||||||
(errors ((message . ,(alist-ref 'message res)))))))))
|
(errors ((message . ,(alist-ref 'message res)))))))))
|
||||||
|
|
||||||
;; (define (test-backblaze-connection key-id application-key bucket-url)
|
(define (test-backblaze-connection user-id instance-id key-id application-key bucket-url)
|
||||||
;; )
|
(let* ((password-path (conc "restic-password-" user-id "-" instance-id))
|
||||||
|
(restic-password
|
||||||
|
(with-db/transaction
|
||||||
|
(lambda (db)
|
||||||
|
(get-instance-restic-password db user-id instance-id)))))
|
||||||
|
(dynamic-wind
|
||||||
|
(lambda ()
|
||||||
|
(with-output-to-file password-path (lambda () (display restic-password))))
|
||||||
|
(lambda ()
|
||||||
|
;; restic retries (indefinitely?) if the connection can't be made so
|
||||||
|
;; we pass it through timeout to ensure it does not hang
|
||||||
|
(receive (in-port out-port pid err-port)
|
||||||
|
(cond-expand
|
||||||
|
(dev
|
||||||
|
(process* "timeout" `("--preserve-status" "8s" "docker" "run" "--rm" "--volume"
|
||||||
|
,(conc (current-directory) "/" password-path ":/restic-password")
|
||||||
|
"-e" ,(conc "AWS_ACCESS_KEY_ID=" key-id)
|
||||||
|
"-e" ,(conc "AWS_SECRET_ACCESS_KEY=" application-key)
|
||||||
|
"-i" "restic/restic:0.18.0" "cat" "config"
|
||||||
|
"--repo" ,(conc "s3:" bucket-url)
|
||||||
|
"--password-file" "/restic-password"
|
||||||
|
"--json")))
|
||||||
|
(else
|
||||||
|
(process* "timeout"
|
||||||
|
`("--preserve-status" "8s" "restic" "cat" "config"
|
||||||
|
"--repo" ,(conc "s3:" bucket-url)
|
||||||
|
"--password-file" password-path
|
||||||
|
"--json")
|
||||||
|
`(("AWS_ACCESS_KEY_ID" . ,key-id)
|
||||||
|
("AWS_SECRET_ACCESS_KEY" . ,application-key)))))
|
||||||
|
(let ((thread
|
||||||
|
(thread-start!
|
||||||
|
(lambda ()
|
||||||
|
(let loop ((i 0))
|
||||||
|
(thread-sleep! 1)
|
||||||
|
;; We do a non-blocking wait here so that we don't
|
||||||
|
;; block the entire web process.
|
||||||
|
(receive (wait-pid exit-normal status) (process-wait pid #t)
|
||||||
|
(if (= wait-pid 0) ;; wait-pid is 0 until the process has finished
|
||||||
|
(if (< i 12) ;; 12s timeout
|
||||||
|
(loop (+ i 1))
|
||||||
|
(error "timeout trying to connect to to backblaze"))
|
||||||
|
(if exit-normal
|
||||||
|
(let ((res (with-input-from-port in-port read-json))
|
||||||
|
(err (with-input-from-port err-port read-json)))
|
||||||
|
(if res
|
||||||
|
`((success . #t)
|
||||||
|
(result . ,res))
|
||||||
|
`((success . #f)
|
||||||
|
(errors ((message . "abnormal exit - check Key ID, Application ID, and Bucket URL"))))))
|
||||||
|
`((success . #f)
|
||||||
|
(errors ((message . "abnormal exit - check Key ID, Application ID, and Bucket URL"))))
|
||||||
|
))))))))
|
||||||
|
(thread-join! thread))))
|
||||||
|
(lambda ()
|
||||||
|
(delete-file password-path)))))
|
||||||
|
|
||||||
(define (deployment-directory user-id instance-id)
|
(define (deployment-directory user-id instance-id)
|
||||||
(string-append "deploy-" (number->string user-id) "-" (->string instance-id)))
|
(string-append "deploy-" (number->string user-id) "-" (->string instance-id)))
|
||||||
@@ -1042,7 +1099,11 @@ chmod -R 777 /opt/keys")))
|
|||||||
(cloudflare-result (test-cloudflare-connection (alist-ref 'cloudflare-api-token service-config)
|
(cloudflare-result (test-cloudflare-connection (alist-ref 'cloudflare-api-token service-config)
|
||||||
(alist-ref 'cloudflare-zone-id service-config)
|
(alist-ref 'cloudflare-zone-id service-config)
|
||||||
(alist-ref 'cloudflare-account-id service-config)))
|
(alist-ref 'cloudflare-account-id service-config)))
|
||||||
(digitalocean-result (test-digitalocean-connection (alist-ref 'digitalocean-api-token service-config))))
|
(digitalocean-result (test-digitalocean-connection (alist-ref 'digitalocean-api-token service-config)))
|
||||||
|
(backblaze-result (test-backblaze-connection (session-user-id) instance-id
|
||||||
|
(alist-ref 'backblaze-key-id service-config)
|
||||||
|
(alist-ref 'backblaze-application-key service-config)
|
||||||
|
(alist-ref 'backblaze-bucket-url service-config))))
|
||||||
`(App
|
`(App
|
||||||
(Configuration-Wizard
|
(Configuration-Wizard
|
||||||
(@ (step "Services"))
|
(@ (step "Services"))
|
||||||
@@ -1077,11 +1138,21 @@ chmod -R 777 /opt/keys")))
|
|||||||
"\""))))
|
"\""))))
|
||||||
(Fieldset
|
(Fieldset
|
||||||
(@ (title "Backblaze"))
|
(@ (title "Backblaze"))
|
||||||
(h3 "Connected")
|
,@(if (alist-ref 'success backblaze-result)
|
||||||
|
`((h3 "Connected")
|
||||||
(p "Your Backblaze account was successfully connected!"))
|
(p "Your Backblaze account was successfully connected!"))
|
||||||
|
`((h3 "Connection Failed")
|
||||||
|
(p "Unable to make a connection via Backblaze S3 API. Message is: \""
|
||||||
|
,(string-intersperse
|
||||||
|
(map (lambda (err)
|
||||||
|
(alist-ref 'message err))
|
||||||
|
(alist-ref 'errors backblaze-result))
|
||||||
|
"\" & \"")
|
||||||
|
"\""))))
|
||||||
(Form-Nav (@ (back-to ,(conc "/config/wizard/services/" instance-id))
|
(Form-Nav (@ (back-to ,(conc "/config/wizard/services/" instance-id))
|
||||||
(submit-enabled ,(and (alist-ref 'success cloudflare-result)
|
(submit-enabled ,(and (alist-ref 'success cloudflare-result)
|
||||||
(alist-ref 'success digitalocean-result)))))))))))
|
(alist-ref 'success digitalocean-result)
|
||||||
|
(alist-ref 'success backblaze-result)))))))))))
|
||||||
|
|
||||||
(get/widgets
|
(get/widgets
|
||||||
("/config/wizard/apps/:id")
|
("/config/wizard/apps/:id")
|
||||||
|
|||||||
Reference in New Issue
Block a user