add zeusid column, link zeus oauth to local accounts
This commit is contained in:
parent
f636248dc2
commit
4082fd0a36
8 changed files with 149 additions and 16 deletions
|
@ -92,10 +92,72 @@
|
|||
<section class="section">
|
||||
<div class="container">
|
||||
<div id="view">
|
||||
<div style="width: 400px; height: 300px"></div>
|
||||
<div class="loader-container">
|
||||
<div class="loader"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% if user %}
|
||||
<section class="section">
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<h3 class="title is-3">Your cuddles</h3>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Person 1</th>
|
||||
<th>Person 2</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for relation in user-relations %}
|
||||
<tr>
|
||||
<td>{{relation.name}}</td>
|
||||
<td>{{relation.name_2}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="column">
|
||||
<h3 class="title is-3">Request cuddles!</h3>
|
||||
<form action="/request_relation" method="post">
|
||||
{% csrf-field %}
|
||||
<div class="field">
|
||||
<label for="to_id">Person to</label>
|
||||
<div class="control">
|
||||
<div class="select">
|
||||
<select name="to_id" id="to_id">
|
||||
{% for user in other_users %}
|
||||
<option value="{{user.id}}">{{user.name}}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
<input class="button is-link" type="submit" value="Submit">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Outgoing requests</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for rel_req in user-relation-requests %}
|
||||
<tr>
|
||||
<td>{{rel_req.name}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% endif %}
|
||||
{% if user.admin.enabled %}
|
||||
<section class="section">
|
||||
<div class="columns">
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
ALTER TABLE users
|
||||
DROP COLUMN zeusid;
|
|
@ -0,0 +1,2 @@
|
|||
ALTER TABLE users
|
||||
ADD zeusid INTEGER;
|
|
@ -7,3 +7,26 @@ body {
|
|||
table {
|
||||
margin-top: 2em;
|
||||
}
|
||||
|
||||
.loader-container {
|
||||
width: 700px;
|
||||
height: 425px;
|
||||
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.loader {
|
||||
border: 4px solid #f3f3f3; /* Light grey */
|
||||
border-top: 4px solid #3498db; /* Blue */
|
||||
border-radius: 50%; /*to make it a circle*/
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
animation: spin 2s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); }
|
||||
}
|
|
@ -39,7 +39,7 @@
|
|||
},
|
||||
{
|
||||
"name": "nodeRadius",
|
||||
"value": 8,
|
||||
"value": 10,
|
||||
"bind": {
|
||||
"input": "range",
|
||||
"min": 1,
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
-- :name create-user! :! :n
|
||||
-- :name create-user! :insert
|
||||
-- :doc creates a new user record
|
||||
INSERT INTO users
|
||||
(name, gender)
|
||||
VALUES (:name, :gender)
|
||||
(name, gender, zeusid)
|
||||
VALUES (:name, :gender, :zeusid)
|
||||
|
||||
-- :name update-user! :! :n
|
||||
-- :doc updates an existing user record
|
||||
|
@ -10,6 +10,11 @@ VALUES (:name, :gender)
|
|||
--SET first_name = :first_name, last_name = :last_name, email = :email
|
||||
--WHERE id = :id
|
||||
|
||||
-- :name get-zeus-user :? :1
|
||||
-- :doc retrieve a user on their zeuswpi id
|
||||
SELECT * FROM users
|
||||
WHERE zeusid = :zeusid
|
||||
|
||||
-- :name get-users :? :*
|
||||
-- :doc retrieves a user record given the id
|
||||
SELECT * FROM users
|
||||
|
|
|
@ -3,12 +3,8 @@
|
|||
[cat.db.core :refer [*db*] :as db]
|
||||
[compojure.core :refer [defroutes GET POST]]
|
||||
[ring.util.http-response :as response]
|
||||
[clojure.java.io :as io]
|
||||
[struct.core :as st]
|
||||
[clojure.edn :as edn]
|
||||
[clojure.tools.logging :as log]
|
||||
[clojure.data.json :as json]
|
||||
[oauth.client :as oauth]))
|
||||
[clojure.tools.logging :as log]))
|
||||
|
||||
(def user-schema
|
||||
[[:name st/required st/string]
|
||||
|
@ -18,6 +14,9 @@
|
|||
[[:from_id st/required st/integer-str]
|
||||
[:to_id st/required st/integer-str]])
|
||||
|
||||
(def request_relation-schema
|
||||
[[:to_id st/required st/integer-str]])
|
||||
|
||||
(defn home-page [params]
|
||||
(layout/render "home.html" params))
|
||||
|
||||
|
@ -32,9 +31,25 @@
|
|||
(defroutes home-routes
|
||||
(GET "/" req
|
||||
(let [users (get-users)
|
||||
relations (get-relations)]
|
||||
relations (get-relations)
|
||||
user (-> (get-in req [:session :user]))
|
||||
user-relations (when user
|
||||
(seq (filter (fn [rel]
|
||||
(or
|
||||
(= (:name rel) (:username user))
|
||||
(= (:name_2 rel) (:username user))))
|
||||
relations)))
|
||||
other_users (when user
|
||||
(seq (filter (fn [usr] (not (= (:id usr) (:id user))))
|
||||
users)))]
|
||||
(log/info (str "Session: " (:session req)))
|
||||
(home-page {:relations relations :users users :user (get-in req [:session :user])})))
|
||||
;(log/info (str "User relations: " user-relations))
|
||||
;(log/info (str "Other Users: " other_users))
|
||||
(home-page {:relations relations
|
||||
:users users
|
||||
:user user
|
||||
:user-relations user-relations
|
||||
:other_users other_users})))
|
||||
;(GET "/docs" []
|
||||
; (-> (response/ok (-> "docs/docs.md" io/resource slurp))
|
||||
; (response/header "Content-Type" "text/plain; charset=utf-8")))
|
||||
|
@ -64,6 +79,19 @@
|
|||
(assoc :group (rand-int 5))))))]
|
||||
(response/ok {:nodes nodes-indexed
|
||||
:links rels-indexed})))
|
||||
(POST "/request_relation" req
|
||||
(let [data (:params req) [err result] (st/validate data request_relation-schema)]
|
||||
(log/info "Post to " (:uri req) "\n with data " result)
|
||||
(if (nil? err)
|
||||
(do
|
||||
()
|
||||
(response/no-content)
|
||||
;TODO add a request to the db
|
||||
)
|
||||
(do
|
||||
(response/bad-request "Incorrect input")))))
|
||||
|
||||
; TODO make bottom 2 protected
|
||||
(POST "/relations" req
|
||||
(let [data (:params req) [err result] (st/validate data relation-schema)]
|
||||
(log/info "Post to " (:uri req))
|
||||
|
|
|
@ -4,9 +4,10 @@
|
|||
[clojure.java.io :as io]
|
||||
[cat.oauth :as oauth]
|
||||
[clojure.tools.logging :as log]
|
||||
[cat.moauth :as mo]))
|
||||
[cat.moauth :as mo]
|
||||
[cat.db.core :refer [*db*] :as db]))
|
||||
|
||||
(def admins #{117 ;flynn
|
||||
(def admins #{31 ;flynn
|
||||
})
|
||||
|
||||
(defn set-user! [user session redirect-url]
|
||||
|
@ -34,7 +35,9 @@
|
|||
found))
|
||||
|
||||
(defn oauth-callback
|
||||
"Handles the callback from adams."
|
||||
"Handles the callback from adams with the access_token
|
||||
Fetches the user from the database, creating a new one if not found
|
||||
Sets the user in the session and redirects back to origin \"/\" "
|
||||
[req_token {:keys [params session]}]
|
||||
; oauth request was denied by user
|
||||
(if (:denied params)
|
||||
|
@ -46,7 +49,15 @@
|
|||
(log/info "Fetching user info")
|
||||
(let [user (mo/get-user-info access_token)]
|
||||
(log/info "User info: " user)
|
||||
(set-user! user session "/")))))
|
||||
(let [zeususer (db/get-zeus-user {:zeusid (:id user)})]
|
||||
(println "Zeus user from db: " zeususer)
|
||||
(if zeususer
|
||||
(set-user! zeususer session "/")
|
||||
(-> {:name (:username user)
|
||||
:gender nil
|
||||
:zeusid (:id user)}
|
||||
(db/create-user!,,,)
|
||||
(set-user!,,, session "/"))))))))
|
||||
|
||||
;(catch [:status 401] _
|
||||
; (error-page {:status 401
|
||||
|
|
Loading…
Reference in a new issue