Browse Source

Cleanup

pull/1/head
Sebastian 9 years ago
parent
commit
ef03db14d4
  1. 13
      src/Squidex/Startup.cs
  2. 2
      src/Squidex/app/polyfills.ts
  3. 14
      src/Squidex/app/shared/guards/auth.guard.ts
  4. 63
      src/Squidex/app/shared/services/auth.service.ts
  5. 31
      src/Squidex/package.json
  6. 1
      src/Squidex/project.json
  7. 77
      src/Squidex/wwwroot/scripts/oidc-client.min.js

13
src/Squidex/Startup.cs

@ -97,18 +97,7 @@ namespace Squidex
{ {
app.UseMiddleware<SingleUrlsMiddleware>(); app.UseMiddleware<SingleUrlsMiddleware>();
} }
if (Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseWebpackProxy();
app.UseDefaultFiles();
}
else
{
app.UseDefaultFiles(new DefaultFilesOptions { DefaultFileNames = new List<string> { "build/index.html" } });
}
UseIdentity(app); UseIdentity(app);
UseApi(app); UseApi(app);
UseFrontend(app); UseFrontend(app);

2
src/Squidex/app/polyfills.ts

@ -6,7 +6,7 @@
*/ */
import 'core-js/es6'; import 'core-js/es6';
import 'reflect-metadata'; import 'core-js/es7/reflect';
require('zone.js/dist/zone'); require('zone.js/dist/zone');

14
src/Squidex/app/shared/guards/auth.guard.ts

@ -20,10 +20,16 @@ export class AuthGuard implements Ng2Router.CanActivate {
) { ) {
} }
public canActivate(route: Ng2Router.ActivatedRouteSnapshot, state: Ng2Router.RouterStateSnapshot): boolean { public canActivate(route: Ng2Router.ActivatedRouteSnapshot, state: Ng2Router.RouterStateSnapshot): Promise<boolean> | boolean {
if (state.url !== LOGIN_URL && !this.authService.isAuthenticated) { if (state.url !== LOGIN_URL) {
this.router.navigate([LOGIN_URL]); return this.authService.checkLogin().then(isAuthenticated => {
return false; if (!isAuthenticated) {
this.router.navigate([LOGIN_URL]);
return false;
}
return true;
});
} }
return true; return true;

63
src/Squidex/app/shared/services/auth.service.ts

@ -22,13 +22,30 @@ import { ApiUrlConfig } from './../../framework';
export class AuthService { export class AuthService {
private readonly userManager: UserManager; private readonly userManager: UserManager;
private currentUser: User | null = null; private currentUser: User | null = null;
private checkLoginPromise: Promise<boolean>;
public get user(): User | null { public get user(): User | null {
return this.currentUser; return this.currentUser;
} }
public get isAuthenticated() { public get isAuthenticated(): boolean {
return this.currentUser; return !!this.currentUser;
}
public checkLogin(): Promise<boolean> {
if (this.checkLoginPromise) {
return this.checkLoginPromise;
} else if (this.currentUser) {
return Promise.resolve(true);
} else {
this.checkLoginPromise =
this.checkState(this.userManager.getUser())
.then(result => {
return result || this.checkState(this.userManager.signinSilent());
});
return this.checkLoginPromise;
}
} }
constructor(apiUrl: ApiUrlConfig, constructor(apiUrl: ApiUrlConfig,
@ -42,39 +59,47 @@ export class AuthService {
response_type: 'id_token token', response_type: 'id_token token',
silent_redirect_uri: apiUrl.buildUrl('identity-server/client-callback-silent/'), silent_redirect_uri: apiUrl.buildUrl('identity-server/client-callback-silent/'),
popup_redirect_uri: apiUrl.buildUrl('identity-server/client-callback-popup/'), popup_redirect_uri: apiUrl.buildUrl('identity-server/client-callback-popup/'),
authority: apiUrl.buildUrl('identity-server/'), authority: apiUrl.buildUrl('identity-server/')
}); });
this.userManager.getUser() this.userManager.events.addUserLoaded(user => {
.then((user) => { this.currentUser = user;
this.currentUser = user; });
})
.catch((err) => {
this.currentUser = null;
});
this.userManager.events.addUserUnloaded(() => { this.userManager.events.addUserUnloaded(() => {
this.currentUser = null; this.currentUser = null;
}); });
this.checkLogin();
} }
public logout(): Observable<any> { public logout(): Observable<any> {
return Observable.fromPromise(this.userManager.signoutRedirectCallback()); return Observable.fromPromise(this.userManager.signoutRedirectCallback());
} }
public login(): Observable<User> { public login(): Observable<boolean> {
let userPromise = const userPromise =
this.userManager.signinSilent() this.checkState(this.userManager.signinSilent())
.then(result => {
return result || this.checkState(this.userManager.signinPopup());
});
return Observable.fromPromise(userPromise);
}
private checkState(promise: Promise<User>): Promise<boolean> {
const resultPromise =
promise
.then(user => { .then(user => {
if (user) { if (user) {
return user; this.currentUser = user;
} else {
return this.userManager.signinPopup();
} }
}) return !!this.currentUser;
.catch(() => this.userManager.signinPopup()); }).catch((err) => {
return false;
});
return Observable.fromPromise(userPromise); return resultPromise;
} }
public authGet(url: string, options?: Ng2Http.RequestOptions): Observable<Ng2Http.Response> { public authGet(url: string, options?: Ng2Http.RequestOptions): Observable<Ng2Http.Response> {

31
src/Squidex/package.json

@ -8,28 +8,28 @@
"test": "karma start", "test": "karma start",
"test:coverage": "karma start karma.coverage.conf.js", "test:coverage": "karma start karma.coverage.conf.js",
"test:clean": "rimraf _test-output", "test:clean": "rimraf _test-output",
"dev": "webpack-dev-server --inline --hot --port 3000", "dev": "cpx node_modules/oidc-client/dist/oidc-client.min.js wwwroot/scripts/ & webpack-dev-server --inline --hot --port 3000",
"build": "webpack --config app-config/webpack.prod.js --bail", "build": "webpack --config app-config/webpack.prod.js --bail",
"build:copy": "cpx node_modules/oidc-client/dist/oidc-client.min.js",
"build:clean": "rimraf wwwroot/build" "build:clean": "rimraf wwwroot/build"
}, },
"dependencies": { "dependencies": {
"@angular/common": "2.1.0", "@angular/common": "2.1.1",
"@angular/compiler": "2.1.0", "@angular/compiler": "2.1.1",
"@angular/core": "2.1.0", "@angular/core": "2.1.1",
"@angular/forms": "2.1.0", "@angular/forms": "2.1.1",
"@angular/http": "2.1.0", "@angular/http": "2.1.1",
"@angular/platform-browser": "2.1.0", "@angular/platform-browser": "2.1.1",
"@angular/platform-browser-dynamic": "2.1.0", "@angular/platform-browser-dynamic": "2.1.1",
"@angular/router": "3.1.0", "@angular/router": "3.1.1",
"bootstrap": "^4.0.0-alpha.2", "bootstrap": "^4.0.0-alpha.2",
"core-js": "^2.4.1", "core-js": "^2.4.1",
"font-awesome": "^4.6.3", "font-awesome": "^4.7.0",
"immutable": "^3.8.1", "immutable": "^3.8.1",
"mousetrap": "^1.6.0", "mousetrap": "^1.6.0",
"oidc-client": "^1.2.0", "oidc-client": "^1.2.1-beta.3",
"reflect-metadata": "^0.1.3", "reflect-metadata": "^0.1.3",
"rxjs": "5.0.0-beta.12", "rxjs": "5.0.0-beta.12",
"systemjs": "0.19.38",
"zone.js": "^0.6.23" "zone.js": "^0.6.23"
}, },
"devDependencies": { "devDependencies": {
@ -39,6 +39,7 @@
"@types/mousetrap": "^1.5.26-alpha", "@types/mousetrap": "^1.5.26-alpha",
"@types/node": "^6.0.33", "@types/node": "^6.0.33",
"awesome-typescript-loader": "^2.2.4", "awesome-typescript-loader": "^2.2.4",
"cpx": "^1.5.0",
"css-loader": "^0.25.0", "css-loader": "^0.25.0",
"exports-loader": "^0.6.3", "exports-loader": "^0.6.3",
"extract-text-webpack-plugin": "^1.0.1", "extract-text-webpack-plugin": "^1.0.1",
@ -69,10 +70,10 @@
"tslint": "^3.13.0-dev.0", "tslint": "^3.13.0-dev.0",
"tslint-loader": "^2.1.5", "tslint-loader": "^2.1.5",
"typemoq": "^0.3.2", "typemoq": "^0.3.2",
"typescript": "^2.0.0-dev.20160711", "typescript": "^2.0.6",
"underscore": "^1.8.3", "underscore": "^1.8.3",
"webpack": "^1.13.1", "webpack": "^1.13.3",
"webpack-dev-server": "^1.14.1", "webpack-dev-server": "^1.14.1",
"webpack-merge": "^0.14.0" "webpack-merge": "^0.15.0"
} }
} }

1
src/Squidex/project.json

@ -83,6 +83,7 @@
"scripts": { "scripts": {
"prepublish": [ "prepublish": [
"npm install", "npm install",
"npm run-script build:copy",
"npm run-script build" "npm run-script build"
], ],
"postpublish": [ "postpublish": [

77
src/Squidex/wwwroot/scripts/oidc-client.min.js

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save