diff options
author | Christopher Baines <mail@cbaines.net> | 2020-04-10 19:03:11 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2020-04-10 20:34:47 +0100 |
commit | 4c11476163b0ee891d23c4d6eb35420e9d087e40 (patch) | |
tree | d660a1d0b511ac4c9d2907cd04afbbf3311d6290 | |
parent | e7a9fa03988d8e866478162c0afab5020475405d (diff) | |
download | build-coordinator-4c11476163b0ee891d23c4d6eb35420e9d087e40.tar build-coordinator-4c11476163b0ee891d23c4d6eb35420e9d087e40.tar.gz |
Add datastore-agent-password-exists?
-rw-r--r-- | guix-build-coordinator/datastore.scm | 3 | ||||
-rw-r--r-- | guix-build-coordinator/datastore/abstract.scm | 4 | ||||
-rw-r--r-- | guix-build-coordinator/datastore/sqlite.scm | 30 |
3 files changed, 34 insertions, 3 deletions
diff --git a/guix-build-coordinator/datastore.scm b/guix-build-coordinator/datastore.scm index ab806b6..417cd41 100644 --- a/guix-build-coordinator/datastore.scm +++ b/guix-build-coordinator/datastore.scm @@ -9,7 +9,8 @@ datastore-new-agent datastore-list-agents datastore-find-agent - datastore-new-agent-password) + datastore-new-agent-password + datastore-agent-password-exists?) #:export (database-uri->datastore)) (define (database-uri->datastore database) diff --git a/guix-build-coordinator/datastore/abstract.scm b/guix-build-coordinator/datastore/abstract.scm index 91f87da..24b677d 100644 --- a/guix-build-coordinator/datastore/abstract.scm +++ b/guix-build-coordinator/datastore/abstract.scm @@ -7,7 +7,8 @@ datastore-list-agents datastore-find-agent datastore-new-agent - datastore-new-agent-password)) + datastore-new-agent-password + datastore-agent-password-exists?)) (define-class <abstract-datastore> ()) @@ -18,3 +19,4 @@ (define-generic datastore-find-agent) (define-generic datastore-new-agent-password) (define-generic datastore-update) +(define-generic datastore-agent-password-exists?) diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm index 19e0f3e..1415af9 100644 --- a/guix-build-coordinator/datastore/sqlite.scm +++ b/guix-build-coordinator/datastore/sqlite.scm @@ -15,7 +15,8 @@ datastore-new-agent datastore-list-agents datastore-find-agent - datastore-new-agent-password)) + datastore-new-agent-password + datastore-agent-password-exists?)) (define-class <sqlite-datastore> (<abstract-datastore>) database-file @@ -112,6 +113,33 @@ SELECT id, description FROM agents ORDER BY id"))) (insert-agent-password db agent-uuid password))) #t) +(define-method (datastore-agent-password-exists? + (datastore <sqlite-datastore>) + uuid + password) + (call-with-worker-thread + (slot-ref datastore 'worker-thread-channel) + (lambda (db) + (let ((statement + (sqlite-prepare + db + " +SELECT 1 FROM agent_passwords \ +WHERE agent_id = :agent_id AND password = :password"))) + + (sqlite-bind-arguments + statement + #:agent_id uuid + #:password password) + + (let ((result + (match (sqlite-step statement) + (#f #f) + (#(1) #t)))) + (sqlite-reset statement) + + result))))) + (define-method (datastore-store-derivation (datastore <sqlite-datastore>) derivation) |