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