bfdotcom-theme 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,93 @@
1
+ function startLogin() {
2
+ myWindow=window.open(auth_url + '/login?response_type=token&client_id=' + user_pool_client_id + '&redirect_uri=https://' + window.location.hostname + '/assets/auth/signin.html','','width=600,height=600')
3
+ myWindow.focus()
4
+ }
5
+
6
+ function refreshLogin(id_token) {
7
+ localStorage.setItem("id_token", credentials.accessKeyId)
8
+
9
+ AWS.config.credentials = new AWS.CognitoIdentityCredentials({
10
+ IdentityPoolId: identity_pool_id,
11
+ Logins: {
12
+ ['cognito-idp.' + aws_region + '.amazonaws.com/' + user_pool_id]: id_token
13
+ }
14
+ })
15
+ AWS.config.update({region: 'ap-southeast-2'})
16
+
17
+ AWS.config.credentials.refresh((error) => {
18
+ if (error) {
19
+ console.error(error)
20
+ signOut()
21
+ } else {
22
+ localStorage.setItem("accessKeyId", credentials.accessKeyId)
23
+ localStorage.setItem("secretAccessKey", credentials.secretAccessKey)
24
+ localStorage.setItem("sessionToken", credentials.sessionToken)
25
+ var now = Date.now()
26
+ localStorage.setItem("expiresAt", addMinutes(now, 60))
27
+ refreshSignedInStatus()
28
+ }
29
+ })
30
+ }
31
+
32
+ function getUserInfo() {
33
+ var jwt = localStorage.getItem("id_token")
34
+ var jwt_segments = jwt.split('.')
35
+ var payload = JSON.parse(atob(jwt_segments[1]))
36
+ return payload
37
+ }
38
+
39
+ function setDisplayElements() {
40
+ var userInfo = getUserInfo()
41
+ $('#currentUserName').innerText(userInfo.email)
42
+ }
43
+
44
+ function refreshSignedInStatus() {
45
+ var accessKeyId = localStorage.getItem("accessKeyId")
46
+ var secretAccessKey = localStorage.getItem("secretAccessKey")
47
+ var sessionToken = localStorage.getItem("sessionToken")
48
+ var expiresAt = localStorage.getItem("expiresAt")
49
+
50
+ var now = Date.now()
51
+ if (expiresAt !== null && expiresAt < now) {
52
+ // session was there, but has expired, so force a sign out
53
+ signOut()
54
+ return
55
+ } else if (accessKeyId === null || secretAccessKey === null || sessionToken === null) {
56
+ // user is not signed in
57
+ setSignInDisplay(false)
58
+ } else if (accessKeyId !== null && secretAccessKey !== null && sessionToken !== null) {
59
+ // user is signed in
60
+ setSignInDisplay(true)
61
+ }
62
+
63
+ // if we get to here, we just don't know, so force a signed out state
64
+ signOut()
65
+ }
66
+
67
+ function setSignInDisplay(signedIn) {
68
+ if (signedIn) {
69
+ setDisplayElements()
70
+ $('.showSignedIn').show()
71
+ $('.showSignedOut').hide()
72
+ } else {
73
+ $('.showSignedIn').hide()
74
+ $('.showSignedOut').show()
75
+ }
76
+ }
77
+
78
+ function signOut() {
79
+ localStorage.removeItem("accessKeyId")
80
+ localStorage.removeItem("secretAccessKey")
81
+ localStorage.removeItem("sessionToken")
82
+ localStorage.removeItem("expiresAt")
83
+ localStorage.removeItem("id_token")
84
+ refreshSignedInStatus()
85
+ }
86
+
87
+ function addMinutes(date, minutes) {
88
+ return new Date(date + minutes*60000)
89
+ }
90
+
91
+ $(document).onload(function() {
92
+ refreshSignedInStatus()
93
+ })
@@ -0,0 +1,16 @@
1
+ function getQueryVariable(variable) {
2
+ var query = window.location.hash.substring(1);
3
+ var vars = query.split('&');
4
+ for (var i = 0; i < vars.length; i++) {
5
+ var pair = vars[i].split('=');
6
+ if (decodeURIComponent(pair[0]) == variable) {
7
+ return decodeURIComponent(pair[1]);
8
+ }
9
+ }
10
+ console.log('Query variable %s not found', variable);
11
+ }
12
+
13
+ var id_token = getQueryVariable('id_token')
14
+
15
+ window.opener.refreshLogin(id_token)
16
+ window.close()
@@ -0,0 +1,438 @@
1
+ /*
2
+ UriTemplates Template Processor - Version: @VERSION - Dated: @DATE
3
+ (c) marc.portier@gmail.com - 2011-2012
4
+ Licensed under APLv2 (http://opensource.org/licenses/Apache-2.0)
5
+ */
6
+
7
+ ;
8
+ var uritemplate = (function() {
9
+
10
+ // Below are the functions we originally used from jQuery.
11
+ // The implementations below are often more naive then what is inside jquery, but they suffice for our needs.
12
+
13
+ function isFunction(fn) {
14
+ return typeof fn == 'function';
15
+ }
16
+
17
+ function isEmptyObject (obj) {
18
+ for(var name in obj){
19
+ return false;
20
+ }
21
+ return true;
22
+ }
23
+
24
+ function extend(base, newprops) {
25
+ for (var name in newprops) {
26
+ base[name] = newprops[name];
27
+ }
28
+ return base;
29
+ }
30
+
31
+ /**
32
+ * Create a runtime cache around retrieved values from the context.
33
+ * This allows for dynamic (function) results to be kept the same for multiple
34
+ * occuring expansions within one template.
35
+ * Note: Uses key-value tupples to be able to cache null values as well.
36
+ */
37
+ //TODO move this into prep-processing
38
+ function CachingContext(context) {
39
+ this.raw = context;
40
+ this.cache = {};
41
+ }
42
+ CachingContext.prototype.get = function(key) {
43
+ var val = this.lookupRaw(key);
44
+ var result = val;
45
+
46
+ if (isFunction(val)) { // check function-result-cache
47
+ var tupple = this.cache[key];
48
+ if (tupple !== null && tupple !== undefined) {
49
+ result = tupple.val;
50
+ } else {
51
+ result = val(this.raw);
52
+ this.cache[key] = {key: key, val: result};
53
+ // NOTE: by storing tupples we make sure a null return is validly consistent too in expansions
54
+ }
55
+ }
56
+ return result;
57
+ };
58
+
59
+ CachingContext.prototype.lookupRaw = function(key) {
60
+ return CachingContext.lookup(this, this.raw, key);
61
+ };
62
+
63
+ CachingContext.lookup = function(me, context, key) {
64
+ var result = context[key];
65
+ if (result !== undefined) {
66
+ return result;
67
+ } else {
68
+ var keyparts = key.split('.');
69
+ var i = 0, keysplits = keyparts.length - 1;
70
+ for (i = 0; i<keysplits; i++) {
71
+ var leadKey = keyparts.slice(0, keysplits - i).join('.');
72
+ var trailKey = keyparts.slice(-i-1).join('.');
73
+ var leadContext = context[leadKey];
74
+ if (leadContext !== undefined) {
75
+ return CachingContext.lookup(me, leadContext, trailKey);
76
+ }
77
+ }
78
+ return undefined;
79
+ }
80
+ };
81
+
82
+
83
+ function UriTemplate(set) {
84
+ this.set = set;
85
+ }
86
+
87
+ UriTemplate.prototype.expand = function(context) {
88
+ var cache = new CachingContext(context);
89
+ var res = "";
90
+ var i = 0, cnt = this.set.length;
91
+ for (i = 0; i<cnt; i++ ) {
92
+ res += this.set[i].expand(cache);
93
+ }
94
+ return res;
95
+ };
96
+
97
+ //TODO: change since draft-0.6 about characters in literals
98
+ /* extract:
99
+ The characters outside of expressions in a URI Template string are intended to be copied literally to the URI-reference if the character is allowed in a URI (reserved / unreserved / pct-encoded) or, if not allowed, copied to the URI-reference in its UTF-8 pct-encoded form.
100
+ */
101
+ function Literal(txt ) {
102
+ this.txt = txt;
103
+ }
104
+
105
+ Literal.prototype.expand = function() {
106
+ return this.txt;
107
+ };
108
+
109
+
110
+
111
+ var RESERVEDCHARS_RE = new RegExp("[:/?#\\[\\]@!$&()*+,;=']","g");
112
+ function encodeNormal(val) {
113
+ return encodeURIComponent(val).replace(RESERVEDCHARS_RE, function(s) {return escape(s);} );
114
+ }
115
+
116
+ //var SELECTEDCHARS_RE = new RegExp("[]","g");
117
+ function encodeReserved(val) {
118
+ //return encodeURI(val).replace(SELECTEDCHARS_RE, function(s) {return escape(s)} );
119
+ return encodeURI(val); // no need for additional replace if selected-chars is empty
120
+ }
121
+
122
+
123
+ function addUnNamed(name, key, val) {
124
+ return key + (key.length > 0 ? "=" : "") + val;
125
+ }
126
+
127
+ function addNamed(name, key, val, noName) {
128
+ noName = noName || false;
129
+ if (noName) { name = ""; }
130
+
131
+ if (!key || key.length === 0) {
132
+ key = name;
133
+ }
134
+ return key + (key.length > 0 ? "=" : "") + val;
135
+ }
136
+
137
+ function addLabeled(name, key, val, noName) {
138
+ noName = noName || false;
139
+ if (noName) { name = ""; }
140
+
141
+ if (!key || key.length === 0) {
142
+ key = name;
143
+ }
144
+ return key + (key.length > 0 && val ? "=" : "") + val;
145
+ }
146
+
147
+
148
+ var simpleConf = {
149
+ prefix : "", joiner : ",", encode : encodeNormal, builder : addUnNamed
150
+ };
151
+ var reservedConf = {
152
+ prefix : "", joiner : ",", encode : encodeReserved, builder : addUnNamed
153
+ };
154
+ var fragmentConf = {
155
+ prefix : "#", joiner : ",", encode : encodeReserved, builder : addUnNamed
156
+ };
157
+ var pathParamConf = {
158
+ prefix : ";", joiner : ";", encode : encodeNormal, builder : addLabeled
159
+ };
160
+ var formParamConf = {
161
+ prefix : "?", joiner : "&", encode : encodeNormal, builder : addNamed
162
+ };
163
+ var formContinueConf = {
164
+ prefix : "&", joiner : "&", encode : encodeNormal, builder : addNamed
165
+ };
166
+ var pathHierarchyConf = {
167
+ prefix : "/", joiner : "/", encode : encodeNormal, builder : addUnNamed
168
+ };
169
+ var labelConf = {
170
+ prefix : ".", joiner : ".", encode : encodeNormal, builder : addUnNamed
171
+ };
172
+
173
+
174
+ function Expression(conf, vars ) {
175
+ extend(this, conf);
176
+ this.vars = vars;
177
+ }
178
+
179
+ Expression.build = function(ops, vars) {
180
+ var conf;
181
+ switch(ops) {
182
+ case '' : conf = simpleConf; break;
183
+ case '+' : conf = reservedConf; break;
184
+ case '#' : conf = fragmentConf; break;
185
+ case ';' : conf = pathParamConf; break;
186
+ case '?' : conf = formParamConf; break;
187
+ case '&' : conf = formContinueConf; break;
188
+ case '/' : conf = pathHierarchyConf; break;
189
+ case '.' : conf = labelConf; break;
190
+ default : throw "Unexpected operator: '"+ops+"'";
191
+ }
192
+ return new Expression(conf, vars);
193
+ };
194
+
195
+ Expression.prototype.expand = function(context) {
196
+ var joiner = this.prefix;
197
+ var nextjoiner = this.joiner;
198
+ var buildSegment = this.builder;
199
+ var res = "";
200
+ var i = 0, cnt = this.vars.length;
201
+
202
+ for (i = 0 ; i< cnt; i++) {
203
+ var varspec = this.vars[i];
204
+ varspec.addValues(context, this.encode, function(key, val, noName) {
205
+ var segm = buildSegment(varspec.name, key, val, noName);
206
+ if (segm !== null && segm !== undefined) {
207
+ res += joiner + segm;
208
+ joiner = nextjoiner;
209
+ }
210
+ });
211
+ }
212
+ return res;
213
+ };
214
+
215
+
216
+
217
+ var UNBOUND = {};
218
+
219
+ /**
220
+ * Helper class to help grow a string of (possibly encoded) parts until limit is reached
221
+ */
222
+ function Buffer(limit) {
223
+ this.str = "";
224
+ if (limit === UNBOUND) {
225
+ this.appender = Buffer.UnboundAppend;
226
+ } else {
227
+ this.len = 0;
228
+ this.limit = limit;
229
+ this.appender = Buffer.BoundAppend;
230
+ }
231
+ }
232
+
233
+ Buffer.prototype.append = function(part, encoder) {
234
+ return this.appender(this, part, encoder);
235
+ };
236
+
237
+ Buffer.UnboundAppend = function(me, part, encoder) {
238
+ part = encoder ? encoder(part) : part;
239
+ me.str += part;
240
+ return me;
241
+ };
242
+
243
+ Buffer.BoundAppend = function(me, part, encoder) {
244
+ part = part.substring(0, me.limit - me.len);
245
+ me.len += part.length;
246
+
247
+ part = encoder ? encoder(part) : part;
248
+ me.str += part;
249
+ return me;
250
+ };
251
+
252
+
253
+ function arrayToString(arr, encoder, maxLength) {
254
+ var buffer = new Buffer(maxLength);
255
+ var joiner = "";
256
+
257
+ var i = 0, cnt = arr.length;
258
+ for (i=0; i<cnt; i++) {
259
+ if (arr[i] !== null && arr[i] !== undefined) {
260
+ buffer.append(joiner).append(arr[i], encoder);
261
+ joiner = ",";
262
+ }
263
+ }
264
+ return buffer.str;
265
+ }
266
+
267
+ function objectToString(obj, encoder, maxLength) {
268
+ var buffer = new Buffer(maxLength);
269
+ var joiner = "";
270
+ var k;
271
+
272
+ for (k in obj) {
273
+ if (obj.hasOwnProperty(k) ) {
274
+ if (obj[k] !== null && obj[k] !== undefined) {
275
+ buffer.append(joiner + k + ',').append(obj[k], encoder);
276
+ joiner = ",";
277
+ }
278
+ }
279
+ }
280
+ return buffer.str;
281
+ }
282
+
283
+
284
+ function simpleValueHandler(me, val, valprops, encoder, adder) {
285
+ var result;
286
+
287
+ if (valprops.isArr) {
288
+ result = arrayToString(val, encoder, me.maxLength);
289
+ } else if (valprops.isObj) {
290
+ result = objectToString(val, encoder, me.maxLength);
291
+ } else {
292
+ var buffer = new Buffer(me.maxLength);
293
+ result = buffer.append(val, encoder).str;
294
+ }
295
+
296
+ adder("", result);
297
+ }
298
+
299
+ function explodeValueHandler(me, val, valprops, encoder, adder) {
300
+ if (valprops.isArr) {
301
+ var i = 0, cnt = val.length;
302
+ for (i = 0; i<cnt; i++) {
303
+ adder("", encoder(val[i]) );
304
+ }
305
+ } else if (valprops.isObj) {
306
+ var k;
307
+ for (k in val) {
308
+ if (val.hasOwnProperty(k)) {
309
+ adder(k, encoder(val[k]) );
310
+ }
311
+ }
312
+ } else { // explode-requested, but single value
313
+ adder("", encoder(val));
314
+ }
315
+ }
316
+
317
+ function valueProperties(val) {
318
+ var isArr = false;
319
+ var isObj = false;
320
+ var isUndef = true; //note: "" is empty but not undef
321
+
322
+ if (val !== null && val !== undefined) {
323
+ isArr = (val.constructor === Array);
324
+ isObj = (val.constructor === Object);
325
+ isUndef = (isArr && val.length === 0) || (isObj && isEmptyObject(val));
326
+ }
327
+
328
+ return {isArr: isArr, isObj: isObj, isUndef: isUndef};
329
+ }
330
+
331
+
332
+ function VarSpec (name, vhfn, nums) {
333
+ this.name = unescape(name);
334
+ this.valueHandler = vhfn;
335
+ this.maxLength = nums;
336
+ }
337
+
338
+
339
+ VarSpec.build = function(name, expl, part, nums) {
340
+ var valueHandler, valueModifier;
341
+
342
+ if (!!expl) { //interprete as boolean
343
+ valueHandler = explodeValueHandler;
344
+ } else {
345
+ valueHandler = simpleValueHandler;
346
+ }
347
+
348
+ if (!part) {
349
+ nums = UNBOUND;
350
+ }
351
+
352
+ return new VarSpec(name, valueHandler, nums);
353
+ };
354
+
355
+
356
+ VarSpec.prototype.addValues = function(context, encoder, adder) {
357
+ var val = context.get(this.name);
358
+ var valprops = valueProperties(val);
359
+ if (valprops.isUndef) { return; } // ignore empty values
360
+ this.valueHandler(this, val, valprops, encoder, adder);
361
+ };
362
+
363
+
364
+
365
+ //----------------------------------------------parsing logic
366
+ // How each varspec should look like
367
+ var VARSPEC_RE=/([^*:]*)((\*)|(:)([0-9]+))?/;
368
+
369
+ var match2varspec = function(m) {
370
+ var name = m[1];
371
+ var expl = m[3];
372
+ var part = m[4];
373
+ var nums = parseInt(m[5], 10);
374
+
375
+ return VarSpec.build(name, expl, part, nums);
376
+ };
377
+
378
+
379
+ // Splitting varspecs in list with:
380
+ var LISTSEP=",";
381
+
382
+ // How each template should look like
383
+ var TEMPL_RE=/(\{([+#.;?&\/])?(([^.*:,{}|@!=$()][^*:,{}$()]*)(\*|:([0-9]+))?(,([^.*:,{}][^*:,{}]*)(\*|:([0-9]+))?)*)\})/g;
384
+ // Note: reserved operators: |!@ are left out of the regexp in order to make those templates degrade into literals
385
+ // (as expected by the spec - see tests.html "reserved operators")
386
+
387
+
388
+ var match2expression = function(m) {
389
+ var expr = m[0];
390
+ var ops = m[2] || '';
391
+ var vars = m[3].split(LISTSEP);
392
+ var i = 0, len = vars.length;
393
+ for (i = 0; i<len; i++) {
394
+ var match;
395
+ if ( (match = vars[i].match(VARSPEC_RE)) === null) {
396
+ throw "unexpected parse error in varspec: " + vars[i];
397
+ }
398
+ vars[i] = match2varspec(match);
399
+ }
400
+
401
+ return Expression.build(ops, vars);
402
+ };
403
+
404
+
405
+ var pushLiteralSubstr = function(set, src, from, to) {
406
+ if (from < to) {
407
+ var literal = src.substr(from, to - from);
408
+ set.push(new Literal(literal));
409
+ }
410
+ };
411
+
412
+ var parse = function(str) {
413
+ var lastpos = 0;
414
+ var comp = [];
415
+
416
+ var match;
417
+ var pattern = TEMPL_RE;
418
+ pattern.lastIndex = 0; // just to be sure
419
+ while ((match = pattern.exec(str)) !== null) {
420
+ var newpos = match.index;
421
+ pushLiteralSubstr(comp, str, lastpos, newpos);
422
+
423
+ comp.push(match2expression(match));
424
+ lastpos = pattern.lastIndex;
425
+ }
426
+ pushLiteralSubstr(comp, str, lastpos, str.length);
427
+
428
+ return new UriTemplate(comp);
429
+ };
430
+
431
+
432
+ //-------------------------------------------comments and ideas
433
+
434
+ //TODO: consider building cache of previously parsed uris or even parsed expressions?
435
+
436
+ return parse;
437
+
438
+ }());