@@ -3,11 +3,9 @@ module WebRow.Applets.Auth
3
3
, localRouter
4
4
, router
5
5
, withUserRequired
6
- )
7
- where
6
+ ) where
8
7
9
8
import Prelude
10
-
11
9
import Data.Maybe (Maybe (..))
12
10
import Data.Tuple (Tuple (..))
13
11
import Data.Variant (Variant , inj , on )
@@ -32,79 +30,83 @@ import WebRow.Routing (printRoute) as Routing
32
30
import WebRow.Session (delete , fetch , modify ) as Session
33
31
import WebRow.Types (WebRow )
34
32
35
- type AuthRow messages routes session user eff =
36
- ( WebRow
37
- ( authFailed ∷ AuthPayload
38
- , invalidEmailFormat ∷ String
39
- , missingValue ∷ Unit
40
- | messages
33
+ type AuthRow messages routes session user eff
34
+ = ( WebRow
35
+ ( authFailed ∷ AuthPayload
36
+ , invalidEmailFormat ∷ String
37
+ , missingValue ∷ Unit
38
+ | messages
39
+ )
40
+ { user ∷ Maybe (User user ) | session }
41
+ (RouteRow + routes )
42
+ + Auth user
43
+ + eff
41
44
)
42
- { user ∷ Maybe (User user ) | session }
43
- (RouteRow + routes )
44
- + Auth user
45
- + eff
46
- )
47
45
48
- router
49
- :: ∀ eff messages responses routes routes' session user
50
- . ( Variant routes
51
- → Run
46
+ router ::
47
+ ∀ eff messages responses routes routes' session user .
48
+ ( Variant routes →
49
+ Run
52
50
(AuthRow messages routes' session user + eff )
53
51
(Variant (ResponseRow + responses ))
54
- )
55
- → Variant (RouteRow + routes )
56
- → Run
52
+ ) →
53
+ Variant (RouteRow + routes ) →
54
+ Run
57
55
(AuthRow messages routes' session user + eff )
58
56
(Variant (ResponseRow + responses ))
59
57
router = on _auth (map (inj _auth) <$> localRouter)
60
58
61
- localRouter
62
- ∷ ∀ eff messages routes session user
63
- . Route
64
- → Run (AuthRow messages routes session user eff ) Response
59
+ localRouter ∷
60
+ ∀ eff messages routes session user .
61
+ Route →
62
+ Run (AuthRow messages routes session user eff ) Response
65
63
localRouter = case _ of
66
64
Routes.Login → login
67
65
Routes.Logout → logout
68
66
69
- login
70
- ∷ ∀ eff messages routes session user
71
- . Run (AuthRow messages routes session user + eff ) Response
72
- login = method >>= case _ of
73
- HTTPure.Post → do
74
- body ← fromBody
75
- Forms.Uni .validate loginForm body >>= case _ of
76
- Tuple Nothing formLayout → do
77
- pure $ LoginResponse (LoginFormValidationFailed formLayout)
78
- Tuple (Just user) formLayout → do
79
- Session .modify _{ user = Just user }
80
- pure $ LoginResponse LoginSuccess
81
- HTTPure.Get → do
82
- form ← Forms.Uni .default loginForm
83
- pure $ LoginResponse (InitialEmailPassordForm form)
84
- method → methodNotAllowed'
67
+ login ∷
68
+ ∀ eff messages routes session user .
69
+ Run (AuthRow messages routes session user + eff ) Response
70
+ login =
71
+ method
72
+ >>= case _ of
73
+ HTTPure.Post → do
74
+ body ← fromBody
75
+ Forms.Uni .validate loginForm body
76
+ >>= case _ of
77
+ Tuple Nothing formLayout → do
78
+ pure $ LoginResponse (LoginFormValidationFailed formLayout)
79
+ Tuple (Just user) formLayout → do
80
+ Session .modify _ { user = Just user }
81
+ pure $ LoginResponse LoginSuccess
82
+ HTTPure.Get → do
83
+ form ← Forms.Uni .default loginForm
84
+ pure $ LoginResponse (InitialEmailPassordForm form)
85
+ method → methodNotAllowed'
85
86
86
- logout
87
- ∷ ∀ eff messages routes session user
88
- . Run
87
+ logout ∷
88
+ ∀ eff messages routes session user .
89
+ Run
89
90
( AuthRow
90
- messages
91
- routes
92
- session
93
- user
94
- + eff
91
+ messages
92
+ routes
93
+ session
94
+ user
95
+ + eff
95
96
)
96
97
Response
97
98
logout = do
98
99
void $ Session .delete
99
100
pure $ LogoutResponse
100
101
101
- withUserRequired ∷ ∀ a eff messages routes session user
102
- . (User user → Run (AuthRow messages routes session user + eff ) a )
103
- → Run (AuthRow messages routes session user + eff ) a
104
- withUserRequired f = Session .fetch >>= _.user >>> case _ of
105
- Just user → f user
106
- Nothing → do
107
- relativeUrl ← Routing .printRoute (namespace Routes.Login )
108
- redirect (fromRelativeUrl relativeUrl)
109
-
110
-
102
+ withUserRequired ∷
103
+ ∀ a eff messages routes session user .
104
+ (User user → Run (AuthRow messages routes session user + eff ) a ) →
105
+ Run (AuthRow messages routes session user + eff ) a
106
+ withUserRequired f =
107
+ Session .fetch >>= _.user
108
+ >>> case _ of
109
+ Just user → f user
110
+ Nothing → do
111
+ relativeUrl ← Routing .printRoute (namespace Routes.Login )
112
+ redirect (fromRelativeUrl relativeUrl)
0 commit comments