]> gitweb @ CieloNegro.org - Rakka.git/blob - js/login.js
95b1f00d370b95acadc5961d571208b70b8ba459
[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     };
81
82     var currentUserID;
83     var currentPassword;
84
85     var updateLoginState = function () {
86         currentUserID   = null;
87         currentPassword = null;
88         
89         var cookies = document.cookie.split(/;\s*/);
90         $.each(cookies, function () {
91             var m = this.match(/^([^=]*)=(.*)$/);
92             if (m) {
93                 var key   = m[1];
94                 var value = m[2];
95
96                 if (key == "rakkaLoginInfo") {
97                     m = Rakka.decodeBase64(value).match(/^([^:]*):(.*)$/);
98                     if (m) {
99                         currentUserID   = m[1];
100                         currentPassword = m[2];
101                     }
102                 }
103             }
104         });
105
106         if (currentUserID != null) {
107             /* ログイン中 */
108             $("input.loginButton")
109                 .val("Logout [" + currentUserID + "]")
110                 .unbind("click")
111                 .click(function () {
112                     logout();
113                 });
114         }
115         else {
116             /* ログインしてゐない */
117             $("input.loginButton")
118                 .val("Login")
119                 .unbind("click")
120                 .click(Rakka.showLoginPanel);
121         }
122     };
123
124     $(document).ready(function () {
125         updateLoginState();
126     });
127
128 })();