diff --git a/client/app.ts b/client/app.ts
index 73b4439..e04dcd5 100644
--- a/client/app.ts
+++ b/client/app.ts
@@ -8,11 +8,10 @@ import MenuCmp from './components/menu';
import HeaderCmp from './components/header';
import FooterCmp from './components/footer';
import SubDetailCmp from './components/sub-detail';
-import LoggedInRouterOutlet from './logged-in-router-outlet';
@Component({
selector: 'sb-app',
- directives: [ROUTER_DIRECTIVES, LoggedInRouterOutlet, HeaderCmp, FooterCmp],
+ directives: [ROUTER_DIRECTIVES, HeaderCmp, FooterCmp],
template: `
diff --git a/client/bootstrap.ts b/client/bootstrap.ts
index 3cd875b..cc55dc4 100644
--- a/client/bootstrap.ts
+++ b/client/bootstrap.ts
@@ -5,6 +5,7 @@ import {provide} from 'angular2/core';
import {HTTP_PROVIDERS, BrowserXhr} from 'angular2/http';
import {ROUTER_PROVIDERS} from 'angular2/router';
import App from './app';
+import Context from './context';
import BrowserXhrWithCredentials from './services/browser-xhr-with-credentials';
import AuthenticationService from './services/authentication';
import SubsService from './services/subs';
@@ -16,4 +17,5 @@ bootstrap(App, [
provide(AuthenticationService, {useClass: AuthenticationService}),
provide(SubsService, {useClass: SubsService}),
provide(BrowserXhr, {useClass: BrowserXhrWithCredentials})
-]).catch((err: any) => console.log(err));
+]).then((app: any) => { Context.injector = app.injector; })
+ .catch((err: any) => console.log(err));
diff --git a/client/components/home.ts b/client/components/home.ts
index bc3dbf7..1a7749d 100644
--- a/client/components/home.ts
+++ b/client/components/home.ts
@@ -1,7 +1,9 @@
import {Component} from 'angular2/core';
import {ROUTER_DIRECTIVES} from 'angular2/router';
import AuthenticationService from '../services/authentication';
+import Auth from './util/auth';
+@Auth
@Component({
selector: 'sb-home',
directives: [ROUTER_DIRECTIVES],
diff --git a/client/components/logout.ts b/client/components/logout.ts
index dc5fd73..6a48c34 100644
--- a/client/components/logout.ts
+++ b/client/components/logout.ts
@@ -1,7 +1,9 @@
import {Component} from 'angular2/core';
import {Router, ROUTER_DIRECTIVES} from 'angular2/router';
import AuthenticationService from '../services/authentication';
+import Auth from './util/auth';
+@Auth
@Component({
selector: 'sb-logout',
directives: [ROUTER_DIRECTIVES],
diff --git a/client/components/menu.ts b/client/components/menu.ts
index 1791944..2232efe 100644
--- a/client/components/menu.ts
+++ b/client/components/menu.ts
@@ -1,6 +1,8 @@
import {Component} from 'angular2/core';
import SubListCmp from './util/sub-list';
+import Auth from './util/auth';
+@Auth
@Component({
selector: 'sb-menu',
directives: [SubListCmp],
diff --git a/client/components/sub-detail.ts b/client/components/sub-detail.ts
index fe900b8..1948966 100644
--- a/client/components/sub-detail.ts
+++ b/client/components/sub-detail.ts
@@ -3,7 +3,9 @@ import {RouteParams, ROUTER_DIRECTIVES} from 'angular2/router';
import SubPriceCmp from './util/sub-price';
import SubsService from '../services/subs';
import Sub from '../models/sub';
+import Auth from './util/auth';
+@Auth
@Component({
selector: 'sb-subdetail',
directives: [SubPriceCmp, ROUTER_DIRECTIVES],
diff --git a/client/components/util/auth.ts b/client/components/util/auth.ts
new file mode 100644
index 0000000..fa3c4ed
--- /dev/null
+++ b/client/components/util/auth.ts
@@ -0,0 +1,14 @@
+import {Router, CanActivate} from 'angular2/router';
+import AuthenticationService from '../../services/authentication';
+import Context from '../../context';
+
+export default function (constr: Function): any {
+ return CanActivate(() => {
+ if (Context.injector.get(AuthenticationService).authenticated) {
+ return true;
+ } else {
+ Context.injector.get(Router).navigate(['Login']);
+ return false;
+ }
+ })(constr);
+}
diff --git a/client/context.ts b/client/context.ts
new file mode 100644
index 0000000..488960d
--- /dev/null
+++ b/client/context.ts
@@ -0,0 +1,13 @@
+import {Injector} from 'angular2/core';
+
+export default class Context {
+ private static _injector: Injector;
+
+ static get injector (): Injector {
+ return this._injector;
+ }
+
+ static set injector (value: Injector) {
+ this._injector = value;
+ }
+}
diff --git a/client/logged-in-router-outlet.ts b/client/logged-in-router-outlet.ts
deleted file mode 100644
index 5c28167..0000000
--- a/client/logged-in-router-outlet.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import {Directive, Attribute, ElementRef, DynamicComponentLoader} from 'angular2/core';
-import {Router, RouterOutlet, ComponentInstruction} from 'angular2/router';
-import AuthenticationService from './services/authentication';
-
-@Directive({
- selector: 'router-outlet'
-})
-export default class LoggedInRouterOutlet extends RouterOutlet {
- private _publicRoutes: any;
- private _parentRouter0: Router;
- private _authenticationService: AuthenticationService;
-
- constructor(elementRef: ElementRef, loader: DynamicComponentLoader,
- parentRouter: Router, @Attribute('name') nameAttr: string,
- authenticationService: AuthenticationService) {
- super(elementRef, loader, parentRouter, nameAttr);
- this._parentRouter0 = parentRouter;
- this._authenticationService = authenticationService;
- this._publicRoutes = {
- '/login': true,
- '/identify': true
- };
- }
-
- activate (instruction: ComponentInstruction): Promise {
- let url: string = this._parentRouter0.lastNavigationAttempt;
- const pos: number = url.indexOf('?');
- if (pos >= 0) {
- url = url.substr(0, pos);
- }
- if (!this._publicRoutes[url] && !this._authenticationService.authenticated) {
- this._parentRouter0.navigate(['Login']);
- }
- return super.activate(instruction);
- }
-}