1:- module(login_register, []).
6:- use_module(library(http/http_dispatch)). 7:- use_module(library(http/html_write)). 8:- use_module(library(identity/login_page)). 9:- use_module(library(http/http_client)). 10:- use_module(library(http/http_path)). 11:- use_module(library(identity/login_crypto)). 12:- use_module(library(identity/login_database)). 13:- use_module(library(identity/customize)). 14:- use_module(library(identity/login_validate)). 15
16:- http_handler(login(register), register_form_handler, [id(register), priority(-100)]). 17
18
19register_form_handler(_Request) :-
20 setting(identity:style, Style),
21 reply_html_page(
22 Style,
23 title(\local('Register')),
24 \register_body).
25
26register_body -->
27 html(div([
28 h1(\local('Register')),
29 div(\register_form)
30 ])).
31
32register_form -->
33 html(
34 form([method('POST'), action(location_by_id(doregister))],
35 [
36 div(\login_warning),
37 \login_hidden_referer,
38 div([id(emailwarn), class(warning)], &(nbsp)),
39 div([label(for(email), \local('Email:')), \login_email]),
40 div([id(unamewarn), class(warning)], &(nbsp)),
41 div([label(for(uname), \local('User name:')),
42 \register_user_name_field]),
43 div([id(passwdwarn), class(warning)], &(nbsp)),
44 div([label(for(passwd), \local('Password:')),
45 \register_password_field]),
46 div([id(passwd2warn), class(warning)], \local('Field below must match password')),
47 div([label(for(passwd2), \local('Repeat Password:')),
48 \register_password2_field]),
49 \login_submit_register,
50 \validate_js
51 ])).
52
53login_submit_register -->
54 html(input([type(submit),
55 name(submit),
56 value('Register')])).
57
58register_user_name_field -->
59 html(input([type(text),
60 name(uname),
61 placeholder('User Name'),
62 oninput('doValidation(this)'),
63 required])).
64
65register_password_field -->
66 { local('Password', Placeholder) },
67 html(input([type(password),
68 name(passwd),
69 id(passwd),
70 placeholder(Placeholder),
71 oninput('doValidation(this)'),
72 required])).
73
74login_email -->
75 { local('Email', Email) },
76 html(input([type(email),
77 name(email),
78 placeholder(Email),
79 oninput('doValidation(this)'),
80 required])).
81
82register_password2_field -->
83 { local('Repeat Password', RP) },
84 html(input([type(password),
85 name(passwd2),
86 id(passwd2),
87 placeholder(RP),
88 oninput('doValidation(this)'),
89 required])).
90
91
92 96
97:- http_handler(login(doregister), doregister_handler, [id(doregister), identity(guest), priority(-100)]). 98
99
100doregister_handler(Request) :-
101 member(method(post), Request),
102 http_read_data(Request, Data, []),
103 member(uname=UserName, Data),
104 member(passwd=Password, Data),
105 member(passwd2=Password2, Data),
106 member(email=Email, Data),
107 validate(ok, [uname=UserName,
108 passwd=Password,
109 passwd2=[Password, Password2],
110 email=Email],
111 Status),
112 ( member(referer=SendUserTo, Data) ;
113 http_location_by_id(home, SendUserTo) 114 ),
115 ( Status == ok
116 ->
117 add_user(UserName,
118 Password,
119 Email
120 ),
121 do_actual_login(ok, SendUserTo, UserName, Request)
122 ;
123 www_form_encode(Status, URLStatus),
124 http_location_by_id(register, RegisterPage),
125 format('Status: 302 Found~n'),
126 format('Location: ~w?warn=~w~n', [RegisterPage, URLStatus]),
127 format('Content-type: text/plain~n~n')
128 ).
129
130validate(MyStatus, [passwd2=[P,P] | Rest], Status) :-
131 validate(MyStatus, Rest, Status).
132validate(MyStatus, [passwd2=[P1,P2] | Rest], Status) :-
133 P1 \= P2,
134 atom_concat(MyStatus, 'Passwords Differ~n', NewStatus),
135 validate(NewStatus, Rest, Status).
136
137validate(Status, [], Status).
138validate(ok, [FieldName=Value | Rest], Status) :-
139 valid(FieldName=Value, MyStatus),
140 validate(MyStatus, Rest, Status).
141validate(OldStatus, [FieldName=Value | Rest], Status) :-
142 valid(FieldName=Value, ok),
143 validate(OldStatus, Rest, Status).
144validate(OldStatus, [FieldName=Value | Rest], Status) :-
145 valid(FieldName=Value, ThisStatus),
146 atomic_list_concat([OldStatus, ' ', ThisStatus], NewStatus),
147 validate(NewStatus, Rest, Status).
148
Registration module for identity
/