]> gitweb @ CieloNegro.org - Rakka.git/blob - js/login.js
started implementing systemConfig
[Rakka.git] / js / login.js
1 (function () {
2
3     Rakka.showLoginPanel = function () {
4         var $area = Rakka.switchScreen();
5
6         $area.append($.H1({}, "Login"));
7
8         var fldUserID
9             = $.INPUT({type: "text"});
10
11         var fldPassword
12             = $.INPUT({type: "password"});
13
14         var btnLogin
15             = $.INPUT({type: "button", value: "Login"});
16
17         $(btnLogin)
18             .click(function () {
19                        login(fldUserID.value, fldPassword.value);
20                    });
21
22         var fldHandler = function (ev) {
23                              if (ev.keyCode == 27) { // ESC
24                                  Rakka.restoreScreen();
25                                  return false;
26                              }
27                              else if (ev.keyCode == 13) { // CR
28                                  login(fldUserID.value, fldPassword.value);
29                                  return false;
30                              }
31                              else {
32                                  return true;
33                              }
34         };
35         $(fldUserID).keypress(fldHandler);
36         $(fldPassword).keypress(fldHandler);
37
38         var btnCancel
39             = $.INPUT({type: "button", value: "Cancel"});
40
41         $(btnCancel).click(function () {
42             Rakka.restoreScreen();
43         });
44
45         var loginPanel
46             = $.TABLE({className: "loginPanel"},
47                       $.TBODY({},
48                               $.TR({},
49                                    $.TH({}, "User ID"),
50                                    $.TD({}, fldUserID)
51                                   ),
52                               $.TR({},
53                                    $.TH({}, "Password"),
54                                    $.TD({}, fldPassword)
55                                   ),
56                               $.TR({},
57                                    $.TH({}),
58                                    $.TD({}, btnLogin, btnCancel)
59                                   )
60                              )
61                      );
62
63         $area.append(loginPanel);
64         $(fldUserID).focus();
65     };
66
67     var login = function (userID, password) {
68         $.ajax({
69             type      : "GET",
70             url       : Rakka.baseURI + "checkAuth",
71             beforeSend: function (req) {
72                 req.setRequestHeader(
73                     "Authorization",
74                     "Basic " + Rakka.encodeBase64(userID + ":" + password));
75             },
76             success   : function () {
77                 document.cookie
78                     = "rakkaLoginInfo="
79                     + Rakka.encodeBase64(userID + ":" + password)
80                     + ";max-age=31536000";
81                 updateLoginState();
82                 Rakka.restoreScreen();
83             },
84             error     : function (req) {
85                 if (req.status == 403) {
86                     alert("Login failed: wrong ID or password");
87                 }
88                 else {
89                     alert("Error: " + req.status + " " + req.statusText);
90                 }
91             }
92         });
93     };
94
95     var logout = function () {
96         document.cookie = "rakkaLoginInfo=;max-age=0";
97         updateLoginState();
98         Rakka.restoreScreen();
99     };
100
101     var currentUserID;
102     var currentPassword;
103
104     var updateLoginState = function () {
105         currentUserID   = null;
106         currentPassword = null;
107
108         var cookies = document.cookie.split(/;\s*/);
109         $.each(cookies, function () {
110             var m = this.match(/^([^=]*)=(.*)$/);
111             if (m) {
112                 var key   = m[1];
113                 var value = m[2];
114
115                 if (key == "rakkaLoginInfo") {
116                     m = Rakka.decodeBase64(value).match(/^([^:]*):(.*)$/);
117                     if (m) {
118                         currentUserID   = m[1];
119                         currentPassword = m[2];
120                     }
121                 }
122             }
123         });
124
125         if (currentUserID != null) {
126             /* ログイン中 */
127             $("input.loginButton")
128                 .val("Logout [" + currentUserID + "]")
129                 .unbind("click")
130                 .click(function () {
131                     logout();
132                 });
133
134             $("input.newButton").attr({disabled: ""});
135
136             $("input.editButton").attr({
137                 disabled: (Rakka.isSpecialPage ? "disabled" : "")
138             });
139
140             $("input.configButton").attr({
141               disabled: ""
142             });
143         }
144         else {
145             /* ログインしてゐない */
146             $("input.loginButton")
147                 .val("Login")
148                 .unbind("click")
149                 .click(Rakka.showLoginPanel);
150
151             $("input.newButton").attr({
152                 disabled: (Rakka.isGlobalLocked ? "disabled" : "")
153             });
154
155             $("input.editButton").attr({
156                 disabled: (Rakka.isLocked || Rakka.isGlobalLocked || Rakka.isSpecialPage ? "disabled" : "")
157             });
158
159             $("input.configButton").attr({
160                 disabled: "disabled"
161             });
162         }
163     };
164
165     Rakka.setAuthorization = function (req) {
166         if (Rakka.isLoggedIn()) {
167             req.setRequestHeader(
168                 "Authorization",
169                     "Basic " + Rakka.encodeBase64(currentUserID + ":" + currentPassword));
170         }
171     };
172
173     Rakka.isLoggedIn = function () {
174         return currentUserID != null;
175     };
176
177     $(document).ready(function () {
178         updateLoginState();
179     });
180
181 })();