Commit a3ed80cfd14bf446aff0a3ae4c2f7241aa0096d0

Authored by Victor Costa
1 parent d671b9dc

Store session cookie

FIXME: should return server side (httponly) cookie.
Showing 3 changed files with 129 additions and 0 deletions   Show diff stats
index.html
... ... @@ -5,6 +5,7 @@
5 5 <link rel="stylesheet" type="text/css" href="style.css" />
6 6 <script src='js/jquery-2.1.3.min.js'></script>
7 7 <script src='js/jquery-ui-1.11.4.custom/jquery-ui.min.js'></script>
  8 + <script src='js/jquery.cookie.js'></script>
8 9 <script src='js/handlebars-v3.0.1.js'></script>
9 10 <script src='js/handlebars-helpers.js'></script>
10 11 <script src='js/jquery.dotdotdot.min.js'></script>
... ...
js/jquery.cookie.js 0 → 100644
... ... @@ -0,0 +1,114 @@
  1 +/*!
  2 + * jQuery Cookie Plugin v1.4.1
  3 + * https://github.com/carhartl/jquery-cookie
  4 + *
  5 + * Copyright 2006, 2014 Klaus Hartl
  6 + * Released under the MIT license
  7 + */
  8 +(function (factory) {
  9 + if (typeof define === 'function' && define.amd) {
  10 + // AMD (Register as an anonymous module)
  11 + define(['jquery'], factory);
  12 + } else if (typeof exports === 'object') {
  13 + // Node/CommonJS
  14 + module.exports = factory(require('jquery'));
  15 + } else {
  16 + // Browser globals
  17 + factory(jQuery);
  18 + }
  19 +}(function ($) {
  20 +
  21 + var pluses = /\+/g;
  22 +
  23 + function encode(s) {
  24 + return config.raw ? s : encodeURIComponent(s);
  25 + }
  26 +
  27 + function decode(s) {
  28 + return config.raw ? s : decodeURIComponent(s);
  29 + }
  30 +
  31 + function stringifyCookieValue(value) {
  32 + return encode(config.json ? JSON.stringify(value) : String(value));
  33 + }
  34 +
  35 + function parseCookieValue(s) {
  36 + if (s.indexOf('"') === 0) {
  37 + // This is a quoted cookie as according to RFC2068, unescape...
  38 + s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
  39 + }
  40 +
  41 + try {
  42 + // Replace server-side written pluses with spaces.
  43 + // If we can't decode the cookie, ignore it, it's unusable.
  44 + // If we can't parse the cookie, ignore it, it's unusable.
  45 + s = decodeURIComponent(s.replace(pluses, ' '));
  46 + return config.json ? JSON.parse(s) : s;
  47 + } catch(e) {}
  48 + }
  49 +
  50 + function read(s, converter) {
  51 + var value = config.raw ? s : parseCookieValue(s);
  52 + return $.isFunction(converter) ? converter(value) : value;
  53 + }
  54 +
  55 + var config = $.cookie = function (key, value, options) {
  56 +
  57 + // Write
  58 +
  59 + if (arguments.length > 1 && !$.isFunction(value)) {
  60 + options = $.extend({}, config.defaults, options);
  61 +
  62 + if (typeof options.expires === 'number') {
  63 + var days = options.expires, t = options.expires = new Date();
  64 + t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
  65 + }
  66 +
  67 + return (document.cookie = [
  68 + encode(key), '=', stringifyCookieValue(value),
  69 + options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
  70 + options.path ? '; path=' + options.path : '',
  71 + options.domain ? '; domain=' + options.domain : '',
  72 + options.secure ? '; secure' : ''
  73 + ].join(''));
  74 + }
  75 +
  76 + // Read
  77 +
  78 + var result = key ? undefined : {},
  79 + // To prevent the for loop in the first place assign an empty array
  80 + // in case there are no cookies at all. Also prevents odd result when
  81 + // calling $.cookie().
  82 + cookies = document.cookie ? document.cookie.split('; ') : [],
  83 + i = 0,
  84 + l = cookies.length;
  85 +
  86 + for (; i < l; i++) {
  87 + var parts = cookies[i].split('='),
  88 + name = decode(parts.shift()),
  89 + cookie = parts.join('=');
  90 +
  91 + if (key === name) {
  92 + // If second argument (value) is a function it's a converter...
  93 + result = read(cookie, value);
  94 + break;
  95 + }
  96 +
  97 + // Prevent storing a cookie that we couldn't decode.
  98 + if (!key && (cookie = read(cookie)) !== undefined) {
  99 + result[name] = cookie;
  100 + }
  101 + }
  102 +
  103 + return result;
  104 + };
  105 +
  106 + config.defaults = {};
  107 +
  108 + $.removeCookie = function (key, options) {
  109 + // Must not alter options, thus extending a fresh object...
  110 + $.cookie(key, '', $.extend({}, options, { expires: -1 }));
  111 + return !$.cookie(key);
  112 + };
  113 +
  114 +}));
... ...
js/main.js
... ... @@ -204,6 +204,16 @@ function loadRandomProposal(topic_id, private_token) {
204 204 });
205 205 }
206 206  
  207 +jQuery(document).ready(function($) {
  208 + if($.cookie('_dialoga_session')) {
  209 + var url = host + '/api/v1/users/me?private_token=' + $.cookie('_dialoga_session');
  210 + $.getJSON(url).done(function( data ) {
  211 + logged_in = true;
  212 + private_token = $.cookie('_dialoga_session');
  213 + });
  214 + }
  215 +});
  216 +
207 217 function loginCallback(loggedIn, token) {
208 218 logged_in = loggedIn;
209 219 $('.login .message').text('');
... ... @@ -213,6 +223,7 @@ function loginCallback(loggedIn, token) {
213 223 loginButton.siblings('.save-article-form').show();
214 224 loginButton.siblings('.save-article-form .message').show();
215 225 loginButton.siblings('.login-container').hide();
  226 + $.cookie('_dialoga_session', private_token);
216 227 } else {
217 228 loginButton.siblings('.save-article-form').hide();
218 229 loginButton.siblings('.login-container').show();
... ... @@ -229,6 +240,9 @@ jQuery(document).ready(function($) {
229 240 type: 'post',
230 241 url: host + '/api/v1/login',
231 242 data: $(this).parents('.login').serialize(),
  243 + xhrFields: {
  244 + //withCredentials: true
  245 + }
232 246 }).done(function(data) {
233 247 loginCallback(true, data.private_token);
234 248 }).fail(function(data) {
... ...