aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-04-10 19:03:11 +0100
committerChristopher Baines <mail@cbaines.net>2020-04-10 20:34:47 +0100
commit4c11476163b0ee891d23c4d6eb35420e9d087e40 (patch)
treed660a1d0b511ac4c9d2907cd04afbbf3311d6290
parente7a9fa03988d8e866478162c0afab5020475405d (diff)
downloadbuild-coordinator-4c11476163b0ee891d23c4d6eb35420e9d087e40.tar
build-coordinator-4c11476163b0ee891d23c4d6eb35420e9d087e40.tar.gz
Add datastore-agent-password-exists?
-rw-r--r--guix-build-coordinator/datastore.scm3
-rw-r--r--guix-build-coordinator/datastore/abstract.scm4
-rw-r--r--guix-build-coordinator/datastore/sqlite.scm30
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)