aboutsummaryrefslogtreecommitdiff
path: root/src/app
diff options
context:
space:
mode:
Diffstat (limited to 'src/app')
-rw-r--r--src/app/api.clj20
-rw-r--r--src/app/rpc.cljs13
2 files changed, 32 insertions, 1 deletions
diff --git a/src/app/api.clj b/src/app/api.clj
index e83f187..27ed9a4 100644
--- a/src/app/api.clj
+++ b/src/app/api.clj
@@ -4,3 +4,23 @@
(defrpc get-scoreboard []
(db/get :scoreboard))
+
+(defrpc check-token [token]
+ {:rpc/pre (contains? (db/get :tokens) token)}
+ true)
+
+(defrpc set-name! [token name]
+ {:rpc/pre (contains? (db/get :tokens) token)}
+ (db/update! :scoreboard
+ assoc-in
+ [(first (.split token "-")) :name]
+ (apply str (take 32 name))))
+
+(defrpc submit-flag! [token flag]
+ {:rpc/pre (and (contains? (db/get :tokens) token)
+ (contains? (db/get :flags) flag))}
+ (let [problem (db/get-in :flags [flag])]
+ (db/update! :scoreboard
+ assoc-in
+ [(first (.split token "-")) :scores problem]
+ :solved)))
diff --git a/src/app/rpc.cljs b/src/app/rpc.cljs
index 464809c..3698ae2 100644
--- a/src/app/rpc.cljs
+++ b/src/app/rpc.cljs
@@ -6,11 +6,22 @@
[castra.core :refer [mkremote]]))
(defc scoreboard nil)
+(defc scoreboard-error nil)
(defc error nil)
(defc loading [])
+(defc token-ok false)
(def get-scoreboard
- (mkremote 'app.api/get-scoreboard scoreboard error loading))
+ (mkremote 'app.api/get-scoreboard scoreboard scoreboard-error loading))
+
+(def check-token
+ (mkremote 'app.api/check-token token-ok error loading))
+
+(def set-name!
+ (mkremote 'app.api/set-name! scoreboard error loading))
+
+(def submit-flag!
+ (mkremote 'app.api/submit-flag! scoreboard error loading))
(defn init []
(get-scoreboard)