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