···4848pub fn check_authorization(
4949 request request: wisp.Request,
5050 authorized roles: List(role.Role),
5151-) -> Result(role.Role, AccessControlError) {
5151+) -> Result(Nil, AccessControlError) {
5252 use token <- result.try(
5353 session.extract(request)
5454 |> result.map_error(Session),
5555 )
56565757- // Check if that role has authorization
5858- list.find(roles, fn(role) { token.user_role == role })
5959- |> result.replace_error(NotAuthorized(
6060- user_uuid: token.user_id,
6161- user_role: token.user_role,
6262- authorized: roles,
6363- ))
5757+ let not_authorized =
5858+ NotAuthorized(
5959+ user_uuid: token.user_id,
6060+ user_role: token.user_role,
6161+ authorized: roles,
6262+ )
6363+6464+ // Check if the given role is authorized
6565+ fn(role) { token.user_role == role }
6666+ |> list.find(roles, _)
6767+ |> result.replace_error(not_authorized)
6868+ |> result.replace(Nil)
6469}
65706671pub fn handle_access_control_error(err: AccessControlError) -> wisp.Response {
+9
src/app/web.gleam
···2626import gleam/string
2727import pog
2828import wisp
2929+import youid/uuid
29303031/// Middleware that runs before every request.
3132/// It sets up the request, and then calls the next handler.
···136137 pog.UnexpectedResultType(err) -> handle_decode_error(err)
137138 }
138139}
140140+141141+pub fn uuid_decoder(expected: String) -> decode.Decoder(uuid.Uuid) {
142142+ use field <- decode.then(decode.string)
143143+ case uuid.from_string(field) {
144144+ Error(_) -> decode.failure(uuid.v7(), expected:)
145145+ Ok(value) -> decode.success(value)
146146+ }
147147+}