parent
a928449c90
commit
f096fcec4f
@ -1,177 +0,0 @@ |
||||
bulma = require "./bulma.ls" |
||||
h = require 'maquette' .h |
||||
|
||||
|
||||
module.exports = { |
||||
create-socket: (socket-url) -> |
||||
self = {} |
||||
|
||||
self.token = "" |
||||
|
||||
request-types = { |
||||
"get-token": 0 |
||||
"add-user": 1 |
||||
"get-user": 2 |
||||
"get-user-by-credentials": 3 |
||||
"mod-user": 4 |
||||
|
||||
# TODO: code these messages |
||||
"register": 5 |
||||
"get-extra": 6 |
||||
"set-extra": 7 |
||||
"update-password": 8 |
||||
|
||||
"list-users": 9 |
||||
"set-permissions": 10 |
||||
} |
||||
|
||||
response-types = { |
||||
"error": 0 |
||||
"token": 1 |
||||
"user": 2 |
||||
"user-added": 3 |
||||
"user-edited": 4 |
||||
"extra": 5 |
||||
"extra-updated": 6 |
||||
"users-list": 7 |
||||
} |
||||
|
||||
# TODO: naming convention |
||||
# users can record functions to run on events |
||||
self.user-on-socket-error = [] |
||||
self.user-on-socket-close = [] |
||||
|
||||
self.callbacks = {} |
||||
for key, value of response-types |
||||
self.callbacks[value] = [] |
||||
|
||||
# self.user-on-message = [] |
||||
|
||||
self.add-event-listener = (type, callback) -> |
||||
type = response-types[type] |
||||
|
||||
self.callbacks[type] ++= [callback] |
||||
|
||||
self.open-socket = -> |
||||
console.log "Opening socket to #{socket-url}" |
||||
self.socket := new WebSocket socket-url |
||||
|
||||
self.socket.onerror = (event) -> |
||||
for f in self.user-on-socket-error |
||||
f event |
||||
self.socket.close! |
||||
|
||||
self.socket.onclose = (event) -> |
||||
for f in self.user-on-socket-close |
||||
f event |
||||
|
||||
self.socket.onmessage = (event) -> |
||||
message = JSON.parse(event.data) |
||||
|
||||
for f in self.callbacks[message.mtype] |
||||
f JSON.parse(message.payload) |
||||
|
||||
self.reopen = -> |
||||
self.socket.close! |
||||
self.open-socket! |
||||
|
||||
self.open-socket! |
||||
|
||||
self.send = (type, opts) -> |
||||
self.socket.send JSON.stringify { mtype: type, payload: opts } |
||||
|
||||
self.get-token = (login, password) -> |
||||
self.send request-types[\get-token], JSON.stringify { |
||||
login: login |
||||
password: password |
||||
} |
||||
|
||||
self.get-user-by-credentials = (login, password) -> |
||||
self.send request-types[\get-user-by-credentials], JSON.stringify { |
||||
login: login |
||||
password: password |
||||
} |
||||
|
||||
self.login = (login, password) -> |
||||
self.get-token login, password |
||||
self.get-user-by-credentials login, password |
||||
|
||||
|
||||
self.get-user = (uid) -> |
||||
self.send request-types[\get-user], JSON.stringify { |
||||
uid: uid |
||||
} |
||||
|
||||
self.list-users = -> |
||||
self.send request-types[\list-users], JSON.stringify { |
||||
token: self.token |
||||
# FIXME: this will be removed once the authd program will accept |
||||
# any list-users requests from any user |
||||
# which is the only logical choice since any user can create projects and assign people to it |
||||
key: "nico-nico-nii" |
||||
} |
||||
|
||||
self.set-permissions = (list-id, user-id, permission) -> |
||||
self.send request-types[\set-permissions], JSON.stringify { |
||||
token: self.token |
||||
list: list-id |
||||
uid: user-id |
||||
permission: permission |
||||
} |
||||
|
||||
# TODO: authd overhaul |
||||
#self.add-user = (login, password) -> |
||||
# self.send request-types[\add-user], JSON.stringify { |
||||
# login: login |
||||
# password: password |
||||
# } |
||||
|
||||
# TODO: authd overhaul |
||||
#self.mod-user = (uid) -> |
||||
# self.send request-types[\mod-user], JSON.stringify { |
||||
# uid: uid |
||||
# } |
||||
|
||||
self |
||||
|
||||
login-page: (model) -> |
||||
# XXX: container = marge |
||||
# XXX: box = dessiner un contour |
||||
h \div.container [ |
||||
h \div.box [ |
||||
if model.login-error |
||||
h \div.notification.is-danger [ |
||||
model.login-error |
||||
] |
||||
h \form [ |
||||
bulma.field [ |
||||
bulma.label "Login" |
||||
bulma.input { |
||||
oninput: (e) -> |
||||
model.login = e.target.value |
||||
name: \login |
||||
id: \login-input |
||||
} |
||||
] |
||||
bulma.field [ |
||||
bulma.label "Password" |
||||
bulma.input { |
||||
oninput: (e) -> |
||||
model.password = e.target.value |
||||
name: \password |
||||
type: \password |
||||
id: \password-input |
||||
} |
||||
] |
||||
|
||||
h \button.button.is-fullwidth.is-primary { |
||||
onclick: (e) -> |
||||
# not to refresh the page since it's a form button |
||||
e.prevent-default! |
||||
|
||||
model.authd-ws.get-token model.login, model.password |
||||
} [ "Connexion" ] |
||||
] |
||||
] |
||||
] |
||||
} |
@ -0,0 +1,136 @@ |
||||
bulma = require "./bulma.ls" |
||||
h = require 'maquette' .h |
||||
|
||||
AuthWS = (socket-url) -> |
||||
self = {} |
||||
|
||||
request-types = { |
||||
"get-token": 0 |
||||
"add-user": 1 |
||||
"get-user": 2 |
||||
"get-user-by-credentials": 3 |
||||
"mod-user": 4 |
||||
"register": 5 |
||||
"update-password": 6 |
||||
"list-users": 7 |
||||
"check-permission": 8 |
||||
"set-permission": 9 |
||||
} |
||||
|
||||
response-types = { |
||||
"error": 0 |
||||
"token": 1 |
||||
"user": 2 |
||||
"user-added": 3 |
||||
"user-edited": 4 |
||||
"users-list": 5 |
||||
"permission-check": 6 |
||||
"permission-set": 7 |
||||
} |
||||
|
||||
# TODO: naming convention |
||||
# users can record functions to run on events |
||||
self.user-on-socket-error = [] |
||||
self.user-on-socket-close = [] |
||||
|
||||
self.callbacks = {} |
||||
for key, value of response-types |
||||
self.callbacks[value] = [] |
||||
|
||||
self.add-event-listener = (type, callback) -> |
||||
type = response-types[type] |
||||
|
||||
self.callbacks[type] ++= [callback] |
||||
|
||||
self.open-socket = -> |
||||
self.socket := new WebSocket socket-url |
||||
|
||||
self.socket.onerror = (event) -> |
||||
for f in self.user-on-socket-error |
||||
f event |
||||
self.socket.close! |
||||
|
||||
self.socket.onclose = (event) -> |
||||
for f in self.user-on-socket-close |
||||
f event |
||||
|
||||
self.socket.onmessage = (event) -> |
||||
message = JSON.parse(event.data) |
||||
|
||||
for f in self.callbacks[message.mtype] |
||||
f JSON.parse(message.payload) |
||||
|
||||
self.reopen = -> |
||||
self.socket.close! |
||||
self.open-socket! |
||||
|
||||
self.open-socket! |
||||
|
||||
self.send = (type, opts) -> |
||||
self.socket.send JSON.stringify { mtype: type, payload: opts } |
||||
|
||||
self.get-token = (login, password) -> |
||||
self.send request-types[\get-token], JSON.stringify { |
||||
login: login |
||||
password: password |
||||
} |
||||
|
||||
self.get-user-by-credentials = (login, password) -> |
||||
self.send request-types[\get-user-by-credentials], JSON.stringify { |
||||
login: login |
||||
password: password |
||||
} |
||||
|
||||
self.login = (login, password) -> |
||||
self.get-token login, password |
||||
self.get-user-by-credentials login, password |
||||
|
||||
|
||||
self.get-user = (uid) -> |
||||
self.send request-types[\get-user], JSON.stringify { |
||||
uid: uid |
||||
} |
||||
|
||||
self.register = (login, password) -> |
||||
self.send request-types[\register], JSON.stringify { |
||||
login: login |
||||
password: password |
||||
} |
||||
|
||||
self.get-extra = (token, name) -> |
||||
console.warn "get-extra: deprecated" |
||||
|
||||
self.set-extra = (token, name, extra) -> |
||||
console.warn "set-extra: deprecated" |
||||
|
||||
self.update-password = (login, old-password, new-password) -> |
||||
self.send request-types[\update-password], JSON.stringify { |
||||
login: login |
||||
old_password: old-password |
||||
new_password: new-password |
||||
} |
||||
|
||||
self.list-users = (token) -> |
||||
console.warn "list-users: unstable API" |
||||
|
||||
self.send request-types[\list-users], JSON.stringify { |
||||
token: token |
||||
} |
||||
|
||||
# TODO: authd overhaul required |
||||
#self.add-user = (login, password) -> |
||||
# self.send request-types[\add-user], JSON.stringify { |
||||
# login: login |
||||
# password: password |
||||
# } |
||||
|
||||
# TODO: authd overhaul required |
||||
#self.mod-user = (uid) -> |
||||
# self.send request-types[\mod-user], JSON.stringify { |
||||
# uid: uid |
||||
# } |
||||
|
||||
self |
||||
|
||||
module.exports = AuthWS |
||||
|
@ -0,0 +1,44 @@ |
||||
{h} = require "maquette" |
||||
|
||||
{field, control, input, label} = require "./bulma.ls" |
||||
|
||||
Modal = require "./modal.ls" |
||||
|
||||
deep-copy = (object) -> |
||||
JSON.parse JSON.stringify object |
||||
|
||||
ColumnEditModal = (project, column, args) -> |
||||
self = { |
||||
column: deep-copy column |
||||
|
||||
on-validation: args.on-validation || (column) -> |
||||
} |
||||
|
||||
modal = Modal { |
||||
+visible |
||||
|
||||
content: [ |
||||
field [ |
||||
label "Column title" |
||||
|
||||
control [ |
||||
input { |
||||
value: self.column.title |
||||
oninput: (e) -> |
||||
self.column.title = e.target.value |
||||
} |
||||
] |
||||
] |
||||
] |
||||
|
||||
on-validation: -> |
||||
self.on-validation self.column |
||||
} |
||||
|
||||
self.render = -> |
||||
modal.render! |
||||
|
||||
self |
||||
|
||||
module.exports = ColumnEditModal |
||||
|
@ -0,0 +1,13 @@ |
||||
{h} = require "maquette" |
||||
|
||||
module.exports = { |
||||
icon: (selector, icon) -> |
||||
unless icon |
||||
icon = selector |
||||
selector = "" |
||||
|
||||
h (\span.icon + selector), [ |
||||
h "span.fas.fa-#{icon}" |
||||
] |
||||
} |
||||
|
Loading…
Reference in new issue