Skip to content

Commit 9a5afd3

Browse files
committed
Add auth/register endpoint
1 parent cbe229b commit 9a5afd3

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

src/safepup/router.gleam

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,75 @@
11
// import gleam/string_tree
2+
import gleam/dynamic/decode
3+
import gleam/http.{Get, Post}
4+
import gleam/json
5+
import gleam/result
26
import safepup/web
37
import wisp.{type Request, type Response}
48

59
pub fn handle_request(req: Request) -> Response {
610
use req <- web.middleware(req)
711

812
case req |> wisp.path_segments {
13+
["auth", "register"] -> req |> register
914
_ -> wisp.not_found()
1015
}
1116
}
17+
18+
fn register(req: Request) -> Response {
19+
use <- wisp.require_method(req, Post)
20+
use json <- wisp.require_json(req)
21+
22+
let result = {
23+
use register_request <- result.try(decode.run(
24+
json,
25+
register_request_decoder(),
26+
))
27+
28+
echo register_request
29+
30+
Ok(
31+
json.to_string_tree(
32+
json.object([
33+
#("user_id", json.string("550e8400-e29b-41d4-a716-446655440000")),
34+
]),
35+
),
36+
)
37+
}
38+
39+
case result {
40+
Ok(json) -> wisp.json_response(json, 201)
41+
Error(_) -> wisp.unprocessable_entity()
42+
}
43+
}
44+
45+
pub type RegisterRequest {
46+
RegisterRequest(
47+
email: String,
48+
auth_hash: String,
49+
auth_salt: String,
50+
key_salt: String,
51+
recovery_salt: String,
52+
encrypted_master_key: String,
53+
)
54+
}
55+
56+
fn register_request_decoder() -> decode.Decoder(RegisterRequest) {
57+
use email <- decode.field("email", decode.string)
58+
use auth_hash <- decode.field("auth_hash", decode.string)
59+
use auth_salt <- decode.field("auth_salt", decode.string)
60+
use key_salt <- decode.field("key_salt", decode.string)
61+
use recovery_salt <- decode.field("recovery_salt", decode.string)
62+
use encrypted_master_key <- decode.field(
63+
"encrypted_master_key",
64+
decode.string,
65+
)
66+
67+
decode.success(RegisterRequest(
68+
email:,
69+
auth_hash:,
70+
auth_salt:,
71+
key_salt:,
72+
recovery_salt:,
73+
encrypted_master_key:,
74+
))
75+
}

0 commit comments

Comments
 (0)