root / snf-cyclades-app / synnefo / ui / static / snf / js / auth.js @ 628fa84b
History | View | Annotate | Download (5.8 kB)
1 | 85f1cd1e | Kostas Papadimitriou | // Copyright 2012 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | 85f1cd1e | Kostas Papadimitriou | //
|
3 | 85f1cd1e | Kostas Papadimitriou | // Redistribution and use in source and binary forms, with or
|
4 | 85f1cd1e | Kostas Papadimitriou | // without modification, are permitted provided that the following
|
5 | 85f1cd1e | Kostas Papadimitriou | // conditions are met:
|
6 | 85f1cd1e | Kostas Papadimitriou | //
|
7 | 85f1cd1e | Kostas Papadimitriou | // 1. Redistributions of source code must retain the above
|
8 | 85f1cd1e | Kostas Papadimitriou | // copyright notice, this list of conditions and the following
|
9 | 85f1cd1e | Kostas Papadimitriou | // disclaimer.
|
10 | 85f1cd1e | Kostas Papadimitriou | //
|
11 | 85f1cd1e | Kostas Papadimitriou | // 2. Redistributions in binary form must reproduce the above
|
12 | 85f1cd1e | Kostas Papadimitriou | // copyright notice, this list of conditions and the following
|
13 | 85f1cd1e | Kostas Papadimitriou | // disclaimer in the documentation and/or other materials
|
14 | 85f1cd1e | Kostas Papadimitriou | // provided with the distribution.
|
15 | 85f1cd1e | Kostas Papadimitriou | //
|
16 | 85f1cd1e | Kostas Papadimitriou | // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | 85f1cd1e | Kostas Papadimitriou | // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | 85f1cd1e | Kostas Papadimitriou | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | 85f1cd1e | Kostas Papadimitriou | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | 85f1cd1e | Kostas Papadimitriou | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | 85f1cd1e | Kostas Papadimitriou | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | 85f1cd1e | Kostas Papadimitriou | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | 85f1cd1e | Kostas Papadimitriou | // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | 85f1cd1e | Kostas Papadimitriou | // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | 85f1cd1e | Kostas Papadimitriou | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | 85f1cd1e | Kostas Papadimitriou | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | 85f1cd1e | Kostas Papadimitriou | // POSSIBILITY OF SUCH DAMAGE.
|
28 | 85f1cd1e | Kostas Papadimitriou | //
|
29 | 85f1cd1e | Kostas Papadimitriou | // The views and conclusions contained in the software and
|
30 | 85f1cd1e | Kostas Papadimitriou | // documentation are those of the authors and should not be
|
31 | 85f1cd1e | Kostas Papadimitriou | // interpreted as representing official policies, either expressed
|
32 | 85f1cd1e | Kostas Papadimitriou | // or implied, of GRNET S.A.
|
33 | 85f1cd1e | Kostas Papadimitriou | //
|
34 | 85f1cd1e | Kostas Papadimitriou | |
35 | 85f1cd1e | Kostas Papadimitriou | ;(function(root){
|
36 | 85f1cd1e | Kostas Papadimitriou | |
37 | 85f1cd1e | Kostas Papadimitriou | // Astakos client javascript lib
|
38 | 85f1cd1e | Kostas Papadimitriou | // Requires jquery and jquery.cookie javascript libs
|
39 | 85f1cd1e | Kostas Papadimitriou | //
|
40 | 85f1cd1e | Kostas Papadimitriou | // Usage
|
41 | 85f1cd1e | Kostas Papadimitriou | // -----
|
42 | 85f1cd1e | Kostas Papadimitriou | // <script src="jquery.js"></script>
|
43 | 85f1cd1e | Kostas Papadimitriou | // <script src="jquery.cookie.js"></script>
|
44 | 85f1cd1e | Kostas Papadimitriou | // <script src="snf/auth.js"></script>
|
45 | 85f1cd1e | Kostas Papadimitriou | //
|
46 | 85f1cd1e | Kostas Papadimitriou | // var astakos_config = {
|
47 | 85f1cd1e | Kostas Papadimitriou | // 'login_url': '/im/login',
|
48 | 85f1cd1e | Kostas Papadimitriou | // 'auth_url': '/im/authenticate',
|
49 | 85f1cd1e | Kostas Papadimitriou | // 'cookie_name': '_pithos2_a',
|
50 | 85f1cd1e | Kostas Papadimitriou | // 'logout_callback': function(client) {
|
51 | 85f1cd1e | Kostas Papadimitriou | // console.log("logging out");
|
52 | 85f1cd1e | Kostas Papadimitriou | // client.redirect_to_logout();
|
53 | 85f1cd1e | Kostas Papadimitriou | // }
|
54 | 85f1cd1e | Kostas Papadimitriou | //
|
55 | afe9ca75 | Kostas Papadimitriou | // var user = new snf.auth.AstakosClient(astakos_config);
|
56 | afe9ca75 | Kostas Papadimitriou | // if (!user.get_token() { user.redirect_to_login() };
|
57 | afe9ca75 | Kostas Papadimitriou | // console.log(user.get_username(), user.get_token());
|
58 | 85f1cd1e | Kostas Papadimitriou | //
|
59 | 85f1cd1e | Kostas Papadimitriou | |
60 | 85f1cd1e | Kostas Papadimitriou | var root = root;
|
61 | 85f1cd1e | Kostas Papadimitriou | var snf = root.synnefo = root.synnefo || {};
|
62 | 85f1cd1e | Kostas Papadimitriou | |
63 | 85f1cd1e | Kostas Papadimitriou | // init auth namespace
|
64 | 85f1cd1e | Kostas Papadimitriou | snf.auth = {}; |
65 | 85f1cd1e | Kostas Papadimitriou | |
66 | 85f1cd1e | Kostas Papadimitriou | snf.auth.AstakosClient = function(config) { |
67 | 85f1cd1e | Kostas Papadimitriou | this.config = $.extend(this.default_config, config); |
68 | afe9ca75 | Kostas Papadimitriou | this.current_token = undefined; |
69 | afe9ca75 | Kostas Papadimitriou | this.current_username = undefined; |
70 | acb284f7 | Kostas Papadimitriou | this.skip_redirects = config.skip_redirects === undefined ? false : |
71 | acb284f7 | Kostas Papadimitriou | config.skip_redirects; |
72 | afe9ca75 | Kostas Papadimitriou | |
73 | afe9ca75 | Kostas Papadimitriou | var self = this; |
74 | afe9ca75 | Kostas Papadimitriou | this.updater = window.setInterval(function(){ |
75 | afe9ca75 | Kostas Papadimitriou | self.get_token(); |
76 | afe9ca75 | Kostas Papadimitriou | self.get_username(); |
77 | afe9ca75 | Kostas Papadimitriou | }, 10000);
|
78 | 85f1cd1e | Kostas Papadimitriou | } |
79 | 85f1cd1e | Kostas Papadimitriou | |
80 | 85f1cd1e | Kostas Papadimitriou | snf.auth.AstakosClient.prototype.default_config = { |
81 | 85f1cd1e | Kostas Papadimitriou | 'logout_url': '/im/logout', |
82 | 85f1cd1e | Kostas Papadimitriou | 'login_url': '/im/login', |
83 | 85f1cd1e | Kostas Papadimitriou | 'cookie_name': '_pithos2_a', |
84 | 85f1cd1e | Kostas Papadimitriou | 'logout_callback': function(client) { |
85 | 85f1cd1e | Kostas Papadimitriou | client.redirect_to_logout(); |
86 | 85f1cd1e | Kostas Papadimitriou | } |
87 | 85f1cd1e | Kostas Papadimitriou | } |
88 | 85f1cd1e | Kostas Papadimitriou | |
89 | 85f1cd1e | Kostas Papadimitriou | snf.auth.AstakosClient.prototype.delete_cookie = function() { |
90 | acb284f7 | Kostas Papadimitriou | if (!this.skip_redirects) { |
91 | 85f1cd1e | Kostas Papadimitriou | $.cookie(this.config.cookie_name, null); |
92 | acb284f7 | Kostas Papadimitriou | } |
93 | 85f1cd1e | Kostas Papadimitriou | } |
94 | 85f1cd1e | Kostas Papadimitriou | |
95 | 85f1cd1e | Kostas Papadimitriou | snf.auth.AstakosClient.prototype.redirect_to_logout = function() { |
96 | acb284f7 | Kostas Papadimitriou | if (!this.skip_redirects) { |
97 | 4ef604a6 | Kostas Papadimitriou | window.location = this.config.logout_url + "?next="; |
98 | acb284f7 | Kostas Papadimitriou | } |
99 | 85f1cd1e | Kostas Papadimitriou | } |
100 | 85f1cd1e | Kostas Papadimitriou | |
101 | 85f1cd1e | Kostas Papadimitriou | snf.auth.AstakosClient.prototype.redirect_to_login = function() { |
102 | acb284f7 | Kostas Papadimitriou | if (!this.skip_redirects) { |
103 | 85f1cd1e | Kostas Papadimitriou | window.location = this.config.login_url + "?next=" + window.location.toString(); |
104 | acb284f7 | Kostas Papadimitriou | } |
105 | 85f1cd1e | Kostas Papadimitriou | } |
106 | 85f1cd1e | Kostas Papadimitriou | |
107 | 85f1cd1e | Kostas Papadimitriou | // delete cookie and redirect to logout
|
108 | 85f1cd1e | Kostas Papadimitriou | // cookie removal can be forced by passing true as delete_cookie parameter
|
109 | 85f1cd1e | Kostas Papadimitriou | snf.auth.AstakosClient.prototype.logout = function(delete_cookie) { |
110 | 85f1cd1e | Kostas Papadimitriou | var delete_cookie = delete_cookie == undefined ? false : delete_cookie; |
111 | 85f1cd1e | Kostas Papadimitriou | if (delete_cookie) {
|
112 | 85f1cd1e | Kostas Papadimitriou | this.delete_cookie();
|
113 | 85f1cd1e | Kostas Papadimitriou | } |
114 | 85f1cd1e | Kostas Papadimitriou | this.config.logout_callback(this); |
115 | 85f1cd1e | Kostas Papadimitriou | } |
116 | 85f1cd1e | Kostas Papadimitriou | |
117 | 85f1cd1e | Kostas Papadimitriou | snf.auth.AstakosClient.prototype.get_cookie_data = function() { |
118 | 85f1cd1e | Kostas Papadimitriou | var data = $.cookie(this.config.cookie_name); |
119 | 85f1cd1e | Kostas Papadimitriou | |
120 | 85f1cd1e | Kostas Papadimitriou | // remove " characters
|
121 | 85f1cd1e | Kostas Papadimitriou | if (data) { return data.replace(/\"/g, "") } |
122 | 85f1cd1e | Kostas Papadimitriou | return data;
|
123 | 85f1cd1e | Kostas Papadimitriou | } |
124 | 85f1cd1e | Kostas Papadimitriou | |
125 | 85f1cd1e | Kostas Papadimitriou | |
126 | 85f1cd1e | Kostas Papadimitriou | snf.auth.AstakosClient.prototype.logged_in = function() { |
127 | 85f1cd1e | Kostas Papadimitriou | return this.get_cookie_data() == null |
128 | 85f1cd1e | Kostas Papadimitriou | } |
129 | 85f1cd1e | Kostas Papadimitriou | |
130 | 85f1cd1e | Kostas Papadimitriou | // parse cookie data
|
131 | 85f1cd1e | Kostas Papadimitriou | // astakos sets cookie data using the following pattern: <username>|<token>
|
132 | 85f1cd1e | Kostas Papadimitriou | snf.auth.AstakosClient.prototype.parse_cookie_data = function(data) { |
133 | 85f1cd1e | Kostas Papadimitriou | return {
|
134 | 85f1cd1e | Kostas Papadimitriou | 'username': data.split("|")[0], |
135 | 85f1cd1e | Kostas Papadimitriou | 'token': data.split("|")[1] |
136 | 85f1cd1e | Kostas Papadimitriou | } |
137 | 85f1cd1e | Kostas Papadimitriou | } |
138 | 85f1cd1e | Kostas Papadimitriou | |
139 | afe9ca75 | Kostas Papadimitriou | snf.auth.AstakosClient.prototype.extract_cookie_contents = function() { |
140 | 85f1cd1e | Kostas Papadimitriou | var data = this.get_cookie_data(); |
141 | 85f1cd1e | Kostas Papadimitriou | if (!data) {
|
142 | afe9ca75 | Kostas Papadimitriou | return {};
|
143 | 85f1cd1e | Kostas Papadimitriou | } |
144 | afe9ca75 | Kostas Papadimitriou | return this.parse_cookie_data(data); |
145 | afe9ca75 | Kostas Papadimitriou | } |
146 | afe9ca75 | Kostas Papadimitriou | |
147 | afe9ca75 | Kostas Papadimitriou | snf.auth.AstakosClient.prototype.get_token = function() { |
148 | afe9ca75 | Kostas Papadimitriou | var newtoken;
|
149 | afe9ca75 | Kostas Papadimitriou | newtoken = this.extract_cookie_contents().token;
|
150 | afe9ca75 | Kostas Papadimitriou | if (newtoken === undefined || (newtoken != this.current_token && |
151 | afe9ca75 | Kostas Papadimitriou | this.current_token != undefined)) { |
152 | afe9ca75 | Kostas Papadimitriou | this.redirect_to_login();
|
153 | afe9ca75 | Kostas Papadimitriou | } |
154 | afe9ca75 | Kostas Papadimitriou | this.current_token = newtoken;
|
155 | afe9ca75 | Kostas Papadimitriou | return this.current_token; |
156 | afe9ca75 | Kostas Papadimitriou | } |
157 | afe9ca75 | Kostas Papadimitriou | |
158 | afe9ca75 | Kostas Papadimitriou | snf.auth.AstakosClient.prototype.get_username = function() { |
159 | afe9ca75 | Kostas Papadimitriou | var newusername;
|
160 | afe9ca75 | Kostas Papadimitriou | newusername = this.extract_cookie_contents().username;
|
161 | afe9ca75 | Kostas Papadimitriou | if (newusername === undefined || (newusername != this.current_username && |
162 | afe9ca75 | Kostas Papadimitriou | this.current_username != undefined)) { |
163 | afe9ca75 | Kostas Papadimitriou | this.redirect_to_login();
|
164 | afe9ca75 | Kostas Papadimitriou | } |
165 | afe9ca75 | Kostas Papadimitriou | this.current_username = newusername;
|
166 | e3c026e7 | Kostas Papadimitriou | return this.current_username; |
167 | 85f1cd1e | Kostas Papadimitriou | } |
168 | 85f1cd1e | Kostas Papadimitriou | |
169 | 85f1cd1e | Kostas Papadimitriou | })(this); |