incomplete v1
This commit is contained in:
commit
ee896cd1de
3
Dockerfile
Normal file
3
Dockerfile
Normal file
@ -0,0 +1,3 @@
|
||||
FROM guard13007/docker-lapis:latest
|
||||
|
||||
RUN luarocks install bcrypt
|
37
app.moon
Normal file
37
app.moon
Normal file
@ -0,0 +1,37 @@
|
||||
lapis = require "lapis"
|
||||
bcrypt = require "bcrypt"
|
||||
config = require("lapis.config").get!
|
||||
|
||||
import Users from require "models"
|
||||
import api, abort, assert_model from require "helpers"
|
||||
|
||||
class extends lapis.Application
|
||||
[authenticate: "/0/auth"]: api {
|
||||
POST: =>
|
||||
local user
|
||||
if @params.name
|
||||
user = Users\find name: @params.name
|
||||
elseif @params.id
|
||||
user = Users\find id: @params.id
|
||||
abort "No such user." unless user
|
||||
|
||||
if user
|
||||
unless bcrypt.verify(@params.password, user.digest)
|
||||
abort "Incorrect password."
|
||||
elseif @params.password
|
||||
-- TODO create user with specified password
|
||||
-- TODO constraints on password for security purposes
|
||||
user = assert_model Users\create {
|
||||
name: @params.name
|
||||
digest: bcrypt.digest(@params.password, config.digest_rounds)
|
||||
}
|
||||
|
||||
return name: user.name, id: user.id
|
||||
}
|
||||
[name: "/0/:id[%d]"]: api {
|
||||
GET: =>
|
||||
if user = Users\find id: @params.id
|
||||
return name: user.name
|
||||
else
|
||||
abort "No such user."
|
||||
}
|
14
config.moon
Normal file
14
config.moon
Normal file
@ -0,0 +1,14 @@
|
||||
config = require "lapis.config"
|
||||
|
||||
postgres_password = os.getenv "POSTGRES_PASSWORD"
|
||||
|
||||
config "development", ->
|
||||
postgres ->
|
||||
host "passwd-db"
|
||||
user "postgres"
|
||||
database "postgres"
|
||||
password postgres_password
|
||||
num_workers 2
|
||||
code_cache "on"
|
||||
|
||||
digest_rounds 12
|
8
create
Executable file
8
create
Executable file
@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
docker build -t passwd0 .
|
||||
docker network create passwd-db
|
||||
docker run -d --restart always --name passwd-db --network passwd-db \
|
||||
-v "$PWD/db":/var/lib/postgresql/data postgres:10.5-alpine
|
||||
docker run -d --restart always --name passwd0 --network passwd-db \
|
||||
passwd0:latest
|
||||
docker network connect passwd0 web
|
34
helpers.moon
Normal file
34
helpers.moon
Normal file
@ -0,0 +1,34 @@
|
||||
import json_params, capture_errors, yield_error, respond_to from require "lapis.application"
|
||||
import insert from table
|
||||
import max from math
|
||||
|
||||
api = (tab) ->
|
||||
json_params capture_errors {
|
||||
respond_to(tab),
|
||||
on_error: =>
|
||||
status = 400
|
||||
errors = {}
|
||||
for err in *@errors
|
||||
if "table" == type err
|
||||
status = max status, err[1]
|
||||
insert errors, err[2]
|
||||
else
|
||||
insert errors, err
|
||||
return(:status, json: { success: false, :errors })
|
||||
}
|
||||
|
||||
abort = (status, message) ->
|
||||
if message
|
||||
yield_error {status, message}
|
||||
else
|
||||
yield_error status
|
||||
|
||||
assert_model = (result, err) ->
|
||||
abort 500, err if err
|
||||
return result
|
||||
|
||||
{
|
||||
:api
|
||||
:abort
|
||||
:assert_model
|
||||
}
|
10
migrations.moon
Normal file
10
migrations.moon
Normal file
@ -0,0 +1,10 @@
|
||||
import create_table, types from require "lapis.db.schema"
|
||||
|
||||
{
|
||||
[1535780489]: =>
|
||||
create_table "users", {
|
||||
{"id", types.serial primary_key: true}
|
||||
{"name", types.varchar unique: true}
|
||||
{"digest", types.text}
|
||||
}
|
||||
}
|
4
models/Users.moon
Normal file
4
models/Users.moon
Normal file
@ -0,0 +1,4 @@
|
||||
import Model from require "lapis.db.model"
|
||||
|
||||
class Users extends Model
|
||||
-- TODO constraints on usernames under 256 bytes, alphanumerics only
|
Loading…
Reference in New Issue
Block a user