LogInOut.js
16 KB
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
/***************************************************
LogInOut.js
A Vrh.Web.Membership bejelentkezési logikáját támogató
metódusok és események.
----------------------
Alapítva:
2018.10.02.-10.09. Wittmann Antal
Módosult:
****************************************************/
/*##### EVENTS #####*/
$(function () { // $(document).ready(function () {
'use strict';
var thisfn = 'UserAdministration.LogInOut.js: ready event: ';
console.log(thisfn + 'PING');
//console.log(thisfn + 'END');
}); // $(document).ready END
/*##### EVENTS END #####*/
/**
* A Login/Logout kezelőfelülethez készült prototípus.
*
* @param {ExportToLogInOut} imp Paraméter objektum, cshtml-ben feltöltenő paramétereket tartalmaz.
*/
function LogInOutScripts(imp) {
'use strict';
/*##### PROTOTYPE VARIABLES #####*/
var me = this; //hogy a belső függvényekben is tudjak hivatkozni a prototype tulajdonságaira
var thispt = 'LogInOut.js: LogInOutScripts.';
var isInLogin = false;
/*##### PROTOTYPE VARIABLES END #####*/
/*##### FUNCTIONS #####*/
/** Kijelentkezéskor ez a metódus hívódik meg. */
this.PushLogout = function () {
var thisfn = thispt + 'PushLogout function: ';
console.log(thisfn + 'PING');
if (imp.Logout.UrlBeforeLogout !== '') {
$.ajax({
url: imp.Logout.UrlBeforeLogout,
cache: false,
type: "post",
success: function (response) {
if (response.ReturnValue === 0) {
console.log(thisfn + 'Nem üzent hibát a beforelogout url.');
CallLogoutJSON();// ha sikeres a before logout url, akkor jöhet a kijelentkezés
} else {
console.log(thisfn + 'Hiba jött a beforelogout url-től.');
bootbox.alert(response.ReturnMessage);
}
},
error: function (jqXHR, exception) {
console.log('Calling the "' + urlBeforeLogout + '" unsuccessful! exception=', exception);
}
});
}
else { // ha nincs before logout, akkor egyből kijelentkezik
CallLogoutJSON();
}
function CallLogoutJSON() {
var thisfn = thispt + 'CallLogoutJSON function: ';
console.log(thisfn + 'PING');
$.ajax({
url: imp.Url.LogoutJSON,
cache: false,
type: "post",
success: function (response) {
if (response.ReturnValue === 0) {
console.log(thisfn + 'LogoutJSON sucess.');
if (imp.Logout.IsReloadLogout) {
location.reload();
} else {
if (imp.BootboxId) { // ha nem volt reload, de van ablak, akkor azt csukjuk be
vrhct.bootbox.hide(imp.BootboxId);
}
}
} else {
console.log(thisfn + 'LogoutJSON error!');
bootbox.alert(response.ReturnMessage);
}
},
error: function (jqXHR, exception) {
console.log("Calling the LogoutJSON action unsuccessful! exception =", exception);
}
});
} // CallLogoutJSON function END
}; //function PushLogout() END
/**
* A bejelentkezést végrehajtó metódus.
*/
this.PushLogin = function () {
var thisfn = thispt + 'PushLogin method: ';
if (isInLogin) {
console.log(thisfn + 'Pressed too soon!');
return;
}
isInLogin = true;
imp.Login.UserName = $(imp.Id.UserName).val();
console.log(thisfn + 'START UserName="{0}"', imp.Login.UserName);
if (!imp.Login.UserName) {
MyAlert(imp.Message.PleaseEnterUsername);
return;
}
imp.Login.Password = $(imp.Id.Password).val();
imp.Login.Remember = $(imp.Id.Remember).is(':checked');
console.log('loginother', imp.LoginOther);
if (imp.LoginOther.Type !== -1 && $(imp.Id.Other).is(':checked')) {
imp.Login.Type = imp.LoginOther.Type;
imp.Login.UrlAfterLogin = imp.LoginOther.UrlAfterLogin;
imp.Login.IsReloadLogin = imp.LoginOther.IsReloadLogin;
imp.Login.IsReloadLogout = imp.LoginOther.IsReloadLogout;
} else {
imp.Login.Type = imp.LoginBase.Type;
imp.Login.UrlAfterLogin = imp.LoginBase.UrlAfterLogin;
imp.Login.IsReloadLogin = imp.LoginBase.IsReloadLogin;
imp.Login.IsReloadLogout = imp.LoginBase.IsReloadLogout;
}
//console.log(thisfn + 'imp.Login', imp.Login);
switch (imp.Login.Type) {
case imp.LoginTypes.WebReq:
var mess = imp.WebReq.RequestTemplate
.replace(imp.WebReqVars.USERNAME, imp.Login.UserName)
.replace(imp.WebReqVars.PASSWORD, imp.Login.Password);
if (imp.WebReq.IsFromServer) {
console.log(thisfn + 'FromServer mess=%s, imp.WebReq.Url=%s', mess, imp.WebReq.Url);
$.ajax({
url: imp.Url.LoginRemote,
cache: false,
type: "post",
data: { url: imp.WebReq.Url, message: mess },
success: function (response) {
if (response.ReturnValue === 0) { // sikeres volt a bejelentkezés
console.log(thisfn + 'WebReq FromServer sucess. response', response);
RemoteResponseParser(response.ReturnMessage);
} else {
console.log(thisfn + 'WebReq FromServer managed error!');
MyAlert(response.ReturnMessage);
}
},
error: function () {
console.log(thisfn + "WebReq FromServer unsuccessful!");
isInLogin = false;
}
}); // imp.Url.RemoteLogin ajax END
} else {
console.log(thisfn + 'FromClient mess=%s, imp.WebReq.Url=%s', mess, imp.WebReq.Url);
$.ajax({
url: imp.WebReq.Url,
cache: false,
type: "post",
data: mess,
dataType: 'text',
contentType: 'text/plain; charset=UTF-8',
success: function (response) {
console.log(thisfn + 'WebReq FromClient success. response', response);
RemoteResponseParser(response);
},
error: function (jqXHR, exception) {
console.log(thisfn + 'WebReq FromClient unsuccessful! exception', exception);
isInLogin = false;
}
}); // imp.WebReq.Url ajax END
}
break;
case imp.LoginTypes.AD:
imp.Login.UserName = imp.LoginTypes.ADPrefix + imp.Login.UserName;
//CallLogin(imp.Login, localRoleGroup);
isInLogin = false;
break;
default: // integrated
CallLogin(imp.Login, null); // isInLogin a funkcióban állítva
break;
} // switch (loginType) END
/**
* A távoli login akció által visszaadott válasz feldolgozása.
*
* @param {string} response A távoli login által vissza adott válasz. Ha üres, akkor az hibajelzést eredményez.
*/
function RemoteResponseParser(response) {
if (response) {
var parts = response.split('|');
if (parts.length < 2) {
MyAlert(imp.Message.ResponseIncorrect + 'Response = "' + response + '"');
} else {
var status;
var roleGroup;
var errMess;
for (var ix = 0; ix < parts.length; ix++) {
var items = parts[ix].split('=');
if (items.length < 2) {
errMess = imp.Message.ResponseIncorrect + 'Response = "' + response + '"';
break;
} else {
switch (items[0]) {
case imp.WebReqResponse.FIELD_STATUS:
status = items[1];
break;
case imp.WebReqResponse.FIELD_LEVEL:
roleGroup = items[1];
break;
case imp.WebReqResponse.FIELD_MSG:
errMess = imp.Title.Response + items[1];
break;
default:
errMess = imp.Title.Response + 'Response = "' + response + '"';
break;
}
}
}
if (errMess) { // ha van hibaüzenet, akkor az kitesszük.
console.log('WebReq response: Error message =', errMess);
MyAlert(errMess);
} else { // ha nincs hiba, akkor jöhet a login
var localRoleGroup;
for (var jx = 0; jx < imp.RoleGroups.length; jx++) {
if (imp.RoleGroups[jx][0] === roleGroup) {
localRoleGroup = imp.RoleGroups[jx][1];
break;
}
}
if (localRoleGroup) {
imp.Login.UserName = imp.LoginTypes.WebReqPrefix + imp.Login.UserName; //hozzáadjuk a típus szerinti prefixet
CallLogin(imp.Login, localRoleGroup); // a funkcióban az isInLogin állítva
} else {
MyAlert(imp.Message.RemoteRoleGroupNotTranslated + roleGroup);
}
}
}
} else {
MyAlert(remLoginIncorrect + 'Response = "' + response + '"');
}
} // RemoteResponseParser Function END
/**
* A helyi bejelentkezést végrehajtó függvény.
*
* @param {Object} lo Login adatokat tartalmazó objektum
* @param {string} lo.UserName Felhasználó neve
* @param {string} lo.Password Felhasználó megadott jelszava
* @param {Boolean} lo.Remember Bjelenkezéskor megadott "Emlékezz rám!" értéke
* @param {number} lo.Type Valamelyik LoginTypes enum integer értéke
* @param {string} lo.UrlAfterLogin Bejelentkezés után meghívandó akció URL-je, ha üres, akkor nem lesz hívás
* @param {Boolean} lo.IsReloadLogin Sikeres bejelentkezés után történjen-e weblap újratöltés
* @param {Booelan} lo.IsReloadLogout Sikeres kijelentkezés után történjen-e weblap újratöltés
* @param {string} lo.ExpireMinutes A login ennyi perc után jár le
* @param {string} roleGroup A lokális szerepkör neve, ahova majd a felhasználót fel kell venni
*
*/
function CallLogin(lo, roleGroup) {
'use strict';
var thisfn = thispt + 'CallLogin function: ';
console.log(thisfn + 'roleGroup', roleGroup);
$.ajax({
url: imp.Url.LoginJSON,
cache: false,
type: "post",
data: { username: lo.UserName, password: lo.Password, rememberme: lo.Remember, rolegroup: roleGroup, expirationseconds: lo.ExpireSeconds, },
success: function (response) {
if (response.ReturnValue === 0) { // sikeres volt a bejelentkezés
console.log(thisfn + 'LoginJSON sucess.');
if (lo.UrlAfterLogin !== '') { //jöhet az afterlogin, ha van
$.ajax({
url: lo.UrlAfterLogin,
cache: false,
type: "post",
success: function (response) {
if (response.ReturnValue === 0) {
console.log(thisfn + 'Nem üzent hibát az afterlogin url.');
if (lo.IsReloadLogin) {
location.reload(); //vagy inkább újratöltjük a lapot
} else {
if (imp.BootboxId) { // ha nem volt reload, de van ablak, akkor azt csukjuk be
vrhct.bootbox.hide(imp.BootboxId);
}
}
} else {
// most hiba esetén is becsukjuk, mert nincs értelme
bootbox.alert(response.ReturnMessage, function () { // csak, ha leokézta az üzenetet
if (lo.IsReloadLogin) {
location.reload();
} else {
if (imp.BootboxId) { // ha nem volt reload, de van ablak, akkor azt csukjuk be
vrhct.bootbox.hide(imp.BootboxId);
}
}
});
}
},
error: function (jqXHR, exception) {
var unsuccessAfter = imp.Message.AfterLoginUnsuccessful;
console.log(unsuccessAfter + ' exception =', exception);
bootbox.alert(unsuccessAfter, function () {
if (imp.BootboxId) { // hibaüzenet után, ha ablak, akkor azt csukjuk be
vrhct.bootbox.hide(imp.BootboxId);
}
});
}
});
} else { //ha nincs afterlogin
if (lo.IsReloadLogin) {
location.reload();
} else {
if (imp.BootboxId) { // // ha nem volt reload, de van ablak, akkor azt csukjuk be
vrhct.bootbox.hide(imp.BootboxId);
}
}
}
} else {
console.log(thisfn + 'LoginJSON managed error!');
bootbox.alert(response.ReturnMessage);
}
isInLogin = false;
},
error: function () {
console.log(thisfn + "Calling the LoginJSON action unsuccessful!");
isInLogin = false;
}
}); // imp.Url.LoginJSON ajax END
} // CallLogin function END
function MyAlert(message) {
bootbox.alert(message);
isInLogin = false;
}
}; // PushLogin function END
/*##### FUNCTIONS END #####*/
} // LogInOutScripts prototype END