~openteachermaintainers/openteacher/3.x

« back to all changes in this revision

Viewing changes to node_modules/ot-web/src/login.js

  • Committer: Marten de Vries
  • Date: 2017-06-28 18:05:48 UTC
  • Revision ID: git-v1:b4c406307aa345c58b9904b76580f15c5bff2a4e
Move JS into npm modules

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
var session = require('./main').session;
 
2
var util = require('./util');
 
3
var hasher = require('hasher');
 
4
var crossroads = require('crossroads');
 
5
 
 
6
var username, password;
 
7
 
 
8
session.languageChanged.handle(function () {
 
9
        //login part
 
10
        $("#login-part .subheader").text(_("Log in"));
 
11
 
 
12
        $("#register-link").text(_("New? Click here to sign up."));
 
13
        $("#register-success").text(_("You registered succesfully. You can now log in."));
 
14
        $("#register-failure").text(_("You cancelled the registration."));
 
15
 
 
16
        $("#username-label").text(_("Username:"));
 
17
        $("#password-label").text(_("Password:"));
 
18
        $("#login-button").val(_("Log in!"));
 
19
 
 
20
        $("#login-anonymously-link").text(_("Login anonymously"));
 
21
        $("#login-anonymously-link").attr("title", _("All data will only be available locally, and will be gone when your browser's local storage is cleared."));
 
22
 
 
23
        //session box
 
24
        $("#logout-link").text(_("Log out"));
 
25
        $("#deregister-link").text(_("Unsubscribe"));
 
26
 
 
27
        //share part
 
28
        $("#share-part .subheader").text(_("Or view a shared list"));
 
29
});
 
30
 
 
31
function redirectAfterLogin() {
 
32
        hasher.setHash(session.next || "lists");
 
33
        delete session.next;
 
34
}
 
35
 
 
36
function onLoginRequested() {
 
37
        auth = {
 
38
                username: $("#username").val(),
 
39
                password: $("#password").val()
 
40
        };
 
41
        $("#login-form")[0].reset();
 
42
 
 
43
        //FIXME: handle login failing.
 
44
        util.sync.start("private_" + auth.username, auth);
 
45
        util.sync.start("shared_lists_" + auth.username, auth);
 
46
 
 
47
        session.userDbs = {};
 
48
        session.onUserDbChanges = {};
 
49
        $(["private", "shared_lists"]).each(function (i, dbName) {
 
50
                var fullName = dbName + "_" + auth.username;
 
51
                session.userDbs[dbName] = new PouchDB(fullName);
 
52
                session.onUserDbChanges[dbName] = function (callback) {
 
53
                        return util.sync.onChangesFor(fullName, callback);
 
54
                };
 
55
        });
 
56
 
 
57
        session.username = auth.username;
 
58
        session.password = auth.password;
 
59
        session.loggedIn = true;
 
60
 
 
61
        redirectAfterLogin();
 
62
 
 
63
        $("#session-box").fadeIn();
 
64
        if (session.username === "anonymous") {
 
65
                $("#deregister-part").hide();
 
66
        } else {
 
67
                $("#deregister-part").show();
 
68
        }
 
69
 
 
70
        return false;
 
71
}
 
72
 
 
73
crossroads.addRoute("register", function () {
 
74
        var pn = document.location.pathname;
 
75
        var emptyFilePath = pn.slice(0, pn.lastIndexOf("/")) + "/empty.html";
 
76
        var registerUrl = SERVICES_HOST + "/register?" + $.param({
 
77
                redirect: document.location.origin + emptyFilePath,
 
78
                language: (navigator.language || "").replace("_", "-") || "C"
 
79
        });
 
80
        $("#register-iframe")
 
81
                .attr("src", registerUrl)
 
82
                .slideDown("slow")
 
83
                .load(function () {
 
84
                        try {
 
85
                                if (this.contentDocument.location.pathname.indexOf("empty.html") === -1) {
 
86
                                        //not yet at the redirect path
 
87
                                        return;
 
88
                                }
 
89
                        } catch(e) {
 
90
                                if (e.name === "TypeError") {
 
91
                                        //Single-origin violation means we're not yet
 
92
                                        //at the redirect path -> ignore.
 
93
                                        return;
 
94
                                }
 
95
                                throw(e);
 
96
                        }
 
97
                        var iframeQuery = this.contentDocument.location.search;
 
98
                        //if here, the register page is 'done'.
 
99
                        if (iframeQuery === "?status=ok") {
 
100
                                $("#register-success").fadeIn();
 
101
                                $("#register-failure").fadeOut();
 
102
                        }
 
103
                        if (iframeQuery === "?status=cancel") {
 
104
                                $("#register-failure").show();
 
105
                                $("#register-success").fadeOut();
 
106
                        }
 
107
                        //set the src back to the registerUrl, it makes the
 
108
                        //slideUp animation look better.
 
109
                        $(this)
 
110
                                .attr("src", registerUrl + "&screenshotonly=true")
 
111
                                .slideUp("slow");
 
112
                        hasher.setHash("login");
 
113
        });
 
114
});
 
115
 
 
116
crossroads.addRoute("deregister", function () {
 
117
        if (!session.loggedIn) {
 
118
                session.next = "deregister";
 
119
                hasher.replaceHash("login");
 
120
                return;
 
121
        }
 
122
        var sure = window.confirm(_("Are you sure you want to unsubscribe? This will remove your account and all data associated with it. Keep in mind that there's no recovery procedure!"));
 
123
        if (sure) {
 
124
                util.servicesRequest({
 
125
                        url: "/deregister",
 
126
                        type: "POST",
 
127
                        success: function () {
 
128
                                crossroads.parse("logout");
 
129
                        }
 
130
                });
 
131
        } else {
 
132
                history.back();
 
133
        }
 
134
});
 
135
 
 
136
crossroads.addRoute("login", function () {
 
137
        if (session.loggedIn) {
 
138
                redirectAfterLogin();
 
139
                return;
 
140
        }
 
141
        util.show("#login-page");
 
142
        $("#username").focus();
 
143
});
 
144
 
 
145
crossroads.addRoute("login-anonymously", function () {
 
146
        $("#username").val("anonymous");
 
147
        $("#password").val("anonymous");
 
148
        onLoginRequested();
 
149
});
 
150
 
 
151
crossroads.addRoute("logout", function () {
 
152
        $("#session-box").fadeOut();
 
153
 
 
154
        util.sync.stop("private_" + session.username);
 
155
        util.sync.stop("shared_lists_" + session.username);
 
156
 
 
157
        delete session.username;
 
158
        delete session.password;
 
159
        delete session.userDbs;
 
160
        delete session.onUserDbChanges;
 
161
        session.loggedIn = false;
 
162
 
 
163
        hasher.replaceHash("login");
 
164
});
 
165
 
 
166
$(function () {
 
167
        $("#login-form").submit(onLoginRequested);
 
168
});