From 52979ac9e25ccdeeccc466e9a7e438e7c6ecd1c9 Mon Sep 17 00:00:00 2001
From: Matthew Dillon <matthewrdillon@gmail.com>
Date: Tue, 20 Oct 2015 15:04:14 -0700
Subject: [PATCH] Setup authorizer and custom session for account

---
 app/authorizers/application.js  |  3 +++
 app/pods/application/adapter.js |  5 ++++-
 app/services/session-account.js | 22 ++++++++++++++++++++++
 3 files changed, 29 insertions(+), 1 deletion(-)
 create mode 100644 app/authorizers/application.js
 create mode 100644 app/services/session-account.js

diff --git a/app/authorizers/application.js b/app/authorizers/application.js
new file mode 100644
index 0000000..68755e3
--- /dev/null
+++ b/app/authorizers/application.js
@@ -0,0 +1,3 @@
+import OAuth2Bearer from 'ember-simple-auth/authorizers/oauth2-bearer';
+
+export default OAuth2Bearer.extend({});
diff --git a/app/pods/application/adapter.js b/app/pods/application/adapter.js
index 11498d0..96daa1a 100644
--- a/app/pods/application/adapter.js
+++ b/app/pods/application/adapter.js
@@ -1,6 +1,9 @@
 import DS from 'ember-data';
+import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin';
+
+export default DS.RESTAdapter.extend(DataAdapterMixin, {
+  authorizer: 'authorizer:application',
 
-export default DS.RESTAdapter.extend({
   namespace: function() {
     return 'api/' + this.get('globals.genus');
   }.property(),
diff --git a/app/services/session-account.js b/app/services/session-account.js
new file mode 100644
index 0000000..1b34554
--- /dev/null
+++ b/app/services/session-account.js
@@ -0,0 +1,22 @@
+import Ember from 'ember';
+import DS from 'ember-data';
+import parseBase64 from '../utils/parse-base64';
+
+const { service } = Ember.inject;
+
+export default Ember.Service.extend({
+  session: service('session'),
+  store: service(),
+
+  account: Ember.computed('session.data.authenticated.access_token', function() {
+    const token = this.get('session.data.authenticated.access_token');
+    const claims = parseBase64(token);
+    const id = claims['sub'];
+
+    if (!Ember.isEmpty(id)) {
+      return DS.PromiseObject.create({
+        promise: this.get('store').findRecord('user', id),
+      });
+    }
+  })
+});