diff options
Diffstat (limited to 'src/app')
-rw-r--r-- | src/app/api.clj | 20 | ||||
-rw-r--r-- | src/app/rpc.cljs | 13 |
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) |