Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / ui / static / snf / js / auth.js @ abcdf501

History | View | Annotate | Download (4.6 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 85f1cd1e Kostas Papadimitriou
    //  var astakos_client = new snf.auth.AstakosClient(astakos_config);
56 85f1cd1e Kostas Papadimitriou
    //  var user = astakos_client.get_user();
57 85f1cd1e Kostas Papadimitriou
    //  if (!user) { astakos_client.redirect_to_login() };
58 85f1cd1e Kostas Papadimitriou
    //  console.log(user.username, user.token);
59 85f1cd1e Kostas Papadimitriou
    //
60 85f1cd1e Kostas Papadimitriou
61 85f1cd1e Kostas Papadimitriou
    var root = root;
62 85f1cd1e Kostas Papadimitriou
    var snf = root.synnefo = root.synnefo || {};
63 85f1cd1e Kostas Papadimitriou
    
64 85f1cd1e Kostas Papadimitriou
    // init auth namespace
65 85f1cd1e Kostas Papadimitriou
    snf.auth = {};
66 85f1cd1e Kostas Papadimitriou
    
67 85f1cd1e Kostas Papadimitriou
    snf.auth.AstakosClient = function(config) {
68 85f1cd1e Kostas Papadimitriou
        this.config = $.extend(this.default_config, config);
69 85f1cd1e Kostas Papadimitriou
    }
70 85f1cd1e Kostas Papadimitriou
71 85f1cd1e Kostas Papadimitriou
    snf.auth.AstakosClient.prototype.default_config = {
72 85f1cd1e Kostas Papadimitriou
            'logout_url': '/im/logout',
73 85f1cd1e Kostas Papadimitriou
            'login_url': '/im/login',
74 85f1cd1e Kostas Papadimitriou
            'cookie_name': '_pithos2_a',
75 85f1cd1e Kostas Papadimitriou
            'logout_callback': function(client) {
76 85f1cd1e Kostas Papadimitriou
                client.redirect_to_logout();
77 85f1cd1e Kostas Papadimitriou
            }
78 85f1cd1e Kostas Papadimitriou
    }
79 85f1cd1e Kostas Papadimitriou
80 85f1cd1e Kostas Papadimitriou
    snf.auth.AstakosClient.prototype.delete_cookie = function() {
81 85f1cd1e Kostas Papadimitriou
        $.cookie(this.config.cookie_name, null);
82 85f1cd1e Kostas Papadimitriou
    }
83 85f1cd1e Kostas Papadimitriou
84 85f1cd1e Kostas Papadimitriou
    snf.auth.AstakosClient.prototype.redirect_to_logout = function() {
85 4ef604a6 Kostas Papadimitriou
        window.location = this.config.logout_url + "?next=";
86 85f1cd1e Kostas Papadimitriou
    }
87 85f1cd1e Kostas Papadimitriou
    
88 85f1cd1e Kostas Papadimitriou
    snf.auth.AstakosClient.prototype.redirect_to_login = function() {
89 85f1cd1e Kostas Papadimitriou
        window.location = this.config.login_url + "?next=" + window.location.toString();
90 85f1cd1e Kostas Papadimitriou
    }
91 85f1cd1e Kostas Papadimitriou
92 85f1cd1e Kostas Papadimitriou
    // delete cookie and redirect to logout
93 85f1cd1e Kostas Papadimitriou
    // cookie removal can be forced by passing true as delete_cookie parameter
94 85f1cd1e Kostas Papadimitriou
    snf.auth.AstakosClient.prototype.logout = function(delete_cookie) {
95 85f1cd1e Kostas Papadimitriou
        var delete_cookie = delete_cookie == undefined ? false : delete_cookie;
96 85f1cd1e Kostas Papadimitriou
        if (delete_cookie) {
97 85f1cd1e Kostas Papadimitriou
            this.delete_cookie();
98 85f1cd1e Kostas Papadimitriou
        }
99 85f1cd1e Kostas Papadimitriou
        this.config.logout_callback(this);
100 85f1cd1e Kostas Papadimitriou
    }
101 85f1cd1e Kostas Papadimitriou
102 85f1cd1e Kostas Papadimitriou
    snf.auth.AstakosClient.prototype.get_cookie_data = function() {
103 85f1cd1e Kostas Papadimitriou
        var data = $.cookie(this.config.cookie_name);
104 85f1cd1e Kostas Papadimitriou
        
105 85f1cd1e Kostas Papadimitriou
        // remove " characters
106 85f1cd1e Kostas Papadimitriou
        if (data) { return data.replace(/\"/g, "") }
107 85f1cd1e Kostas Papadimitriou
        return data;
108 85f1cd1e Kostas Papadimitriou
    }
109 85f1cd1e Kostas Papadimitriou
110 85f1cd1e Kostas Papadimitriou
111 85f1cd1e Kostas Papadimitriou
    snf.auth.AstakosClient.prototype.logged_in = function() {
112 85f1cd1e Kostas Papadimitriou
        return this.get_cookie_data() == null
113 85f1cd1e Kostas Papadimitriou
    }
114 85f1cd1e Kostas Papadimitriou
115 85f1cd1e Kostas Papadimitriou
    // parse cookie data
116 85f1cd1e Kostas Papadimitriou
    // astakos sets cookie data using the following pattern: <username>|<token>
117 85f1cd1e Kostas Papadimitriou
    snf.auth.AstakosClient.prototype.parse_cookie_data = function(data) {
118 85f1cd1e Kostas Papadimitriou
        return {
119 85f1cd1e Kostas Papadimitriou
            'username': data.split("|")[0],
120 85f1cd1e Kostas Papadimitriou
            'token': data.split("|")[1]
121 85f1cd1e Kostas Papadimitriou
        }
122 85f1cd1e Kostas Papadimitriou
    }
123 85f1cd1e Kostas Papadimitriou
    
124 85f1cd1e Kostas Papadimitriou
    // set username and token
125 85f1cd1e Kostas Papadimitriou
    snf.auth.AstakosClient.prototype.get_user = function() {
126 85f1cd1e Kostas Papadimitriou
        var data = this.get_cookie_data();
127 85f1cd1e Kostas Papadimitriou
        if (!data) {
128 85f1cd1e Kostas Papadimitriou
            return false;
129 85f1cd1e Kostas Papadimitriou
        }
130 85f1cd1e Kostas Papadimitriou
        var parsed_data = this.parse_cookie_data(data);
131 85f1cd1e Kostas Papadimitriou
        return parsed_data;
132 85f1cd1e Kostas Papadimitriou
    }
133 85f1cd1e Kostas Papadimitriou
    
134 85f1cd1e Kostas Papadimitriou
})(this);