Add 403 $location redirect to http interceptor service

This is a temporary solution to redirect any 403 responses to
a dedicated 403 'Unauthorized' page. This could occur on inital
navigation to a page or while attempting an operation.

Once permission role mapping is defined, the code should be updated
to handle 403 responses in context of user attempted actions.

Signed-off-by: Yoshie Muranaka <yoshiemuranaka@gmail.com>
Change-Id: Ia207f2bcdd87fb20888fe6a1588d0ccd310e484c
diff --git a/app/403.html b/app/403.html
new file mode 100644
index 0000000..a0ef50f
--- /dev/null
+++ b/app/403.html
@@ -0,0 +1,8 @@
+<div class="column row">
+  <div class="column small-12">
+    <h1>Unauthorized</h1>
+    <div class="message-container">
+      <p>The attempted action is not accessible from the logged in account. Contact your system administrator to check your privilege role.</p>
+    </div>
+  </div>
+</div>
\ No newline at end of file
diff --git a/app/common/services/apiInterceptor.js b/app/common/services/apiInterceptor.js
index ce47b67..8033f74 100644
--- a/app/common/services/apiInterceptor.js
+++ b/app/common/services/apiInterceptor.js
@@ -11,8 +11,8 @@
   'use strict';
 
   angular.module('app.common.services').service('apiInterceptor', [
-    '$q', '$rootScope', 'dataService',
-    function($q, $rootScope, dataService) {
+    '$q', '$rootScope', 'dataService', '$location',
+    function($q, $rootScope, dataService, $location) {
       return {
         'request': function(config) {
           dataService.loading = true;
@@ -51,6 +51,13 @@
               if (dataService.path != '/login') {
                 $rootScope.$emit('timedout-user', {});
               }
+            } else if (rejection.status == 403) {
+              // TODO: when permission role mapping ready, remove
+              // this global redirect and handle forbidden
+              // requests in context of user action
+              if (dataService.path != '/login') {
+                $location.url('/unauthorized');
+              }
             } else if (rejection.status == -1) {
               dataService.server_unreachable = true;
             }
diff --git a/app/common/styles/elements/alerts.scss b/app/common/styles/elements/alerts.scss
index 70fc247..947320c 100644
--- a/app/common/styles/elements/alerts.scss
+++ b/app/common/styles/elements/alerts.scss
@@ -13,3 +13,12 @@
   color: $primary-dark;
   text-align: left;
 }
+
+.message-container {
+  background-color: $background-02;
+  padding: 1em 1.5em;
+  display: inline-block;
+  >*:last-child {
+    margin-bottom: 0;
+  }
+}
diff --git a/app/index.js b/app/index.js
index 5997457..cbc763b 100644
--- a/app/index.js
+++ b/app/index.js
@@ -116,6 +116,8 @@
         '$routeProvider', '$locationProvider',
         function($routeProvider, $locationProvider) {
           $locationProvider.hashPrefix('');
+          $routeProvider.when(
+              '/unauthorized', {'template': require('./403.html')})
           $routeProvider.otherwise({'redirectTo': '/login'});
         }
       ])