all repos

onasty @ c3cd668

a one-time notes service

onasty/web/src/Api/Auth.elm(view raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
module Api.Auth exposing (forgotPassword, refreshToken, resendVerificationEmail, resetPassword, signin, signup)

import Api
import Data.Credentials as Credentials exposing (Credentials)
import Effect exposing (Effect)
import Http
import Json.Decode as Decode
import Json.Encode as Encode


signin :
    { onResponse : Result Api.Error Credentials -> msg
    , email : String
    , password : String
    }
    -> Effect msg
signin options =
    let
        body : Encode.Value
        body =
            Encode.object
                [ ( "email", Encode.string options.email )
                , ( "password", Encode.string options.password )
                ]
    in
    Effect.sendApiRequest
        { endpoint = "/api/v1/auth/signin"
        , method = "POST"
        , body = Http.jsonBody body
        , onResponse = options.onResponse
        , decoder = Credentials.decode
        }


signup :
    { onResponse : Result Api.Error () -> msg
    , email : String
    , password : String
    }
    -> Effect msg
signup options =
    let
        body : Encode.Value
        body =
            Encode.object
                [ ( "email", Encode.string options.email )
                , ( "password", Encode.string options.password )
                ]
    in
    Effect.sendApiRequest
        { endpoint = "/api/v1/auth/signup"
        , method = "POST"
        , body = Http.jsonBody body
        , onResponse = options.onResponse
        , decoder = Decode.succeed ()
        }


refreshToken :
    { onResponse : Result Api.Error Credentials -> msg
    , refreshToken : String
    }
    -> Effect msg
refreshToken options =
    let
        body =
            Encode.object [ ( "refresh_token", Encode.string options.refreshToken ) ]
    in
    Effect.sendApiRequest
        { endpoint = "/api/v1/auth/refresh-tokens"
        , method = "POST"
        , body = Http.jsonBody body
        , onResponse = options.onResponse
        , decoder = Credentials.decode
        }


forgotPassword : { onResponse : Result Api.Error () -> msg, email : String } -> Effect msg
forgotPassword options =
    Effect.sendApiRequest
        { endpoint = "/api/v1/auth/reset-password"
        , method = "POST"
        , body = Encode.object [ ( "email", Encode.string options.email ) ] |> Http.jsonBody
        , onResponse = options.onResponse
        , decoder = Decode.succeed ()
        }


resetPassword : { onResponse : Result Api.Error () -> msg, token : String, password : String } -> Effect msg
resetPassword options =
    Effect.sendApiRequest
        { endpoint = "/api/v1/auth/reset-password/" ++ options.token
        , method = "POST"
        , body = Encode.object [ ( "password", Encode.string options.password ) ] |> Http.jsonBody
        , onResponse = options.onResponse
        , decoder = Decode.succeed ()
        }


resendVerificationEmail : { onResponse : Result Api.Error () -> msg, email : String } -> Effect msg
resendVerificationEmail options =
    let
        body =
            Encode.object [ ( "email", Encode.string options.email ) ]
    in
    Effect.sendApiRequest
        { endpoint = "/api/v1/auth/resend-verification-email"
        , method = "POST"
        , body = Http.jsonBody body
        , onResponse = options.onResponse
        , decoder = Decode.succeed ()
        }