|
1 | 1 | // import gleam/string_tree |
| 2 | +import gleam/dynamic/decode |
| 3 | +import gleam/http.{Get, Post} |
| 4 | +import gleam/json |
| 5 | +import gleam/result |
2 | 6 | import safepup/web |
3 | 7 | import wisp.{type Request, type Response} |
4 | 8 |
|
5 | 9 | pub fn handle_request(req: Request) -> Response { |
6 | 10 | use req <- web.middleware(req) |
7 | 11 |
|
8 | 12 | case req |> wisp.path_segments { |
| 13 | + ["auth", "register"] -> req |> register |
9 | 14 | _ -> wisp.not_found() |
10 | 15 | } |
11 | 16 | } |
| 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