Test if reopening PR works

This commit is contained in:
Julius Gruber
2019-09-04 14:14:12 +02:00
parent 093ad47a3d
commit c428b1deef
10 changed files with 120 additions and 38 deletions

View File

@@ -11,6 +11,7 @@ import { AuthMethodModel } from './models/auth-method.model';
export const AuthActionTypes = {
AUTHENTICATE: type('dspace/auth/AUTHENTICATE'),
START_SHIBBOLETH_AUTHENTICATION: type('dspace/auth/START_SHIBBOLETH_AUTHENTICATION'),
GET_JWT_AFTER_SHIBB_LOGIN: type('dspace/auth/GET_JWT_AFTER_SHIBB_LOGIN'),
AUTHENTICATE_ERROR: type('dspace/auth/AUTHENTICATE_ERROR'),
AUTHENTICATE_SUCCESS: type('dspace/auth/AUTHENTICATE_SUCCESS'),
@@ -57,6 +58,20 @@ export class AuthenticateAction implements Action {
}
}
/**
* Authenticate.
* @class StartShibbolethAuthenticationAction
* @implements {Action}
*/
export class StartShibbolethAuthenticationAction implements Action {
public type: string = AuthActionTypes.START_SHIBBOLETH_AUTHENTICATION;
payload: AuthMethodModel;
constructor(authMethodModel: AuthMethodModel) {
this.payload = authMethodModel;
}
}
/**
* GetJWTafterShibbLoginAction.
* @class GetJWTafterShibbLoginAction

View File

@@ -30,7 +30,7 @@ import {
RetrieveAuthMethodsAction,
RetrieveAuthMethodsErrorAction,
RetrieveAuthMethodsSuccessAction,
GetJWTafterShibbLoginAction
GetJWTafterShibbLoginAction, StartShibbolethAuthenticationAction
} from './auth.actions';
import { EPerson } from '../eperson/models/eperson.model';
import { AuthStatus } from './models/auth-status.model';
@@ -48,15 +48,31 @@ export class AuthEffects {
*/
@Effect()
public authenticate$: Observable<Action> = this.actions$.pipe(
ofType(AuthActionTypes.AUTHENTICATE),
switchMap((action: AuthenticateAction) => {
return this.authService.authenticate(action.payload.email, action.payload.password).pipe(
take(1),
map((response: AuthStatus) => new AuthenticationSuccessAction(response.token)),
catchError((error) => observableOf(new AuthenticationErrorAction(error)))
);
})
);
ofType(AuthActionTypes.AUTHENTICATE),
switchMap((action: AuthenticateAction) => {
return this.authService.authenticate(action.payload.email, action.payload.password).pipe(
take(1),
map((response: AuthStatus) => new AuthenticationSuccessAction(response.token)),
catchError((error) => observableOf(new AuthenticationErrorAction(error)))
);
})
);
/**
* Authenticate user.
* @method authenticate
*/
/* @Effect()
public shibbolethAuthenticate$: Observable<Action> = this.actions$.pipe(
ofType(AuthActionTypes.START_SHIBBOLETH_AUTHENTICATION),
switchMap((action: StartShibbolethAuthenticationAction) => {
return this.authService.authenticate(action.payload.location).pipe(
take(1),
map((response: AuthStatus) => new AuthenticationSuccessAction(response.token)),
catchError((error) => observableOf(new AuthenticationErrorAction(error)))
);
})
);*/
/**
* Shib Login.

View File

@@ -80,6 +80,13 @@ export function authReducer(state: any = initialState, action: AuthActions): Aut
info: undefined
});
case AuthActionTypes.START_SHIBBOLETH_AUTHENTICATION:
return Object.assign({}, state, {
error: undefined,
loading: true,
info: undefined
});
case AuthActionTypes.GET_JWT_AFTER_SHIBB_LOGIN:
return Object.assign({}, state, {
error: undefined,

View File

@@ -1,3 +1,4 @@
<ds-loading *ngIf="(loading | async) || (isAuthenticated | async)" class="m-5"></ds-loading>
<ng-container *ngFor="let authMethodModel of (authMethodData | async)">
<ds-login-container [authMethodModel]="authMethodModel"></ds-login-container>
</ng-container>

View File

@@ -1,9 +1,9 @@
import { Component, Injector, Input, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { AuthMethodModel } from '../../core/auth/models/auth-method.model';
import { Store } from '@ngrx/store';
import { AuthState } from '../../core/auth/auth.reducer';
import { getAuthenticationMethods } from '../../core/auth/selectors';
import { select, Store } from '@ngrx/store';
import { getAuthenticationMethods, isAuthenticated, isAuthenticationLoading } from '../../core/auth/selectors';
import { CoreState } from '../../core/core.reducers';
@Component({
selector: 'ds-auth-methods',
@@ -17,11 +17,29 @@ export class AuthMethodsComponent implements OnInit {
*/
@Input() authMethodData: Observable<AuthMethodModel[]>;
constructor( private store: Store<AuthState>) {
/**
* Whether user is authenticated.
* @type {Observable<string>}
*/
public isAuthenticated: Observable<boolean>;
/**
* True if the authentication is loading.
* @type {boolean}
*/
public loading: Observable<boolean>;
constructor( private store: Store<CoreState>) {
}
ngOnInit(): void {
this.authMethodData = this.authMethodData = this.store.select(getAuthenticationMethods);
// set loading
this.loading = this.store.pipe(select(isAuthenticationLoading));
// set isAuthenticated
this.isAuthenticated = this.store.pipe(select(isAuthenticated));
}
}

View File

@@ -1,2 +1,3 @@
<ng-container *ngComponentOutlet="getAuthMethodContent(); injector: objectInjector;"></ng-container>
<ng-container *ngComponentOutlet="getAuthMethodContent(); injector: objectInjector;">
</ng-container>

View File

@@ -1,11 +1,13 @@
import { Component, Injector, Input, OnInit, ViewChild } from '@angular/core';
import { Component, ContentChild, Injector, Input, OnInit, ViewChild, ViewChildren } from '@angular/core';
import { rendersAuthMethodType } from '../authMethods-decorator';
import { AuthMethodModel } from '../../../core/auth/models/auth-method.model';
import { getAuthenticationMethods } from '../../../core/auth/selectors';
import { Store } from '@ngrx/store';
import { getAuthenticationMethods, isAuthenticated, isAuthenticationLoading } from '../../../core/auth/selectors';
import { select, Store } from '@ngrx/store';
import { AppState } from '../../../app.reducer';
import { Observable } from 'rxjs';
import { AuthMethodType } from '../authMethods-type';
import { CoreState } from '../../../core/core.reducers';
import { ShibbolethComponent } from '../../../+login-page/shibbolethTargetPage/shibboleth.component';
/**
* This component represents a section that contains the submission license form.
@@ -30,7 +32,7 @@ export class LoginContainerComponent implements OnInit {
*
* @param {Injector} injector
*/
constructor(private injector: Injector) {
constructor(private injector: Injector, private store: Store<CoreState>) {
}
/**
@@ -44,12 +46,20 @@ export class LoginContainerComponent implements OnInit {
parent: this.injector
});
}
}
/**
* Find the correct component based on the authMethod's type
* Find the correct component based on the AuthMethod's type
*/
getAuthMethodContent(): string {
return rendersAuthMethodType(this.authMethodModel.authMethodType)
}
startShibbolethAuthentication($event) {
console.log('startShibbolethAuthentication() was called with event: ', $event);
// this.store.dispatch(new ShibbolethAuthenticateAction());
}
}

View File

@@ -1,4 +1,3 @@
<ds-loading *ngIf="(loading | async) || (isAuthenticated | async)" class="m-5"></ds-loading>
<form *ngIf="!(loading | async) && !(isAuthenticated | async)" class="form-login px-4 py-3" (ngSubmit)="submit()"
[formGroup]="form" novalidate>
<label for="inputEmail" class="sr-only">{{"login.form.email" | translate}}</label>

View File

@@ -1,13 +1,4 @@
<div>
<a class="btn btn-lg btn-primary btn-block mt-3" type="submit"
[href]="buttonHref"
role="button"
>{{"login.shibboleth" | translate}}</a>
</div>
<!--<form *ngIf="!(loading | async) && !(isAuthenticated | async)" class="form-login px-4 py-3" (ngSubmit)="submit()"-->
<form class="form-login px-4 py-3" (ngSubmit)="submit()"
<form *ngIf="!(loading | async) && !(isAuthenticated | async)"class="form-login px-4 py-3" (ngSubmit)="submit()"
[formGroup]="shibbForm" novalidate>
<button class="btn btn-lg btn-primary btn-block mt-3" type="submit"
[disabled]="!shibbForm.valid">{{"login.shibbForm.submit" | translate}}</button>

View File

@@ -1,8 +1,13 @@
import { Component, Inject, Input, OnInit } from '@angular/core';
import { Component, EventEmitter, Inject, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core';
import { renderAuthMethodFor } from '../../authMethods-decorator';
import { AuthMethodType } from '../../authMethods-type';
import { AuthMethodModel } from '../../../../core/auth/models/auth-method.model';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { FormBuilder, FormGroup } from '@angular/forms';
import { select, Store } from '@ngrx/store';
import { CoreState } from '../../../../core/core.reducers';
import { StartShibbolethAuthenticationAction } from '../../../../core/auth/auth.actions';
import { Observable } from 'rxjs';
import { isAuthenticated, isAuthenticationLoading } from '../../../../core/auth/selectors';
@Component({
selector: 'ds-dynamic-shibboleth',
@@ -15,7 +20,17 @@ export class DynamicShibbolethComponent implements OnInit {
@Input() authMethodModel: AuthMethodModel;
buttonHref: string;
/**
* True if the authentication is loading.
* @type {boolean}
*/
public loading: Observable<boolean>;
/**
* Whether user is authenticated.
* @type {Observable<string>}
*/
public isAuthenticated: Observable<boolean> ;
/**
* The authentication form.
@@ -27,9 +42,10 @@ export class DynamicShibbolethComponent implements OnInit {
* @constructor
*/
constructor(@Inject('authMethodModelProvider') public injectedAuthMethodModel: AuthMethodModel,
private formBuilder: FormBuilder) {
private formBuilder: FormBuilder,
private store: Store<CoreState>) {
this.authMethodModel = injectedAuthMethodModel;
this.buttonHref = ('https://fis.tiss.tuwien.ac.at' + this.authMethodModel.location + '/shibboleth')
// this.buttonHref = ('https://fis.tiss.tuwien.ac.at' + this.authMethodModel.location + '/shibboleth')
}
ngOnInit(): void {
@@ -38,9 +54,17 @@ export class DynamicShibbolethComponent implements OnInit {
this.shibbForm = this.formBuilder.group({
shibbButton: [''],
});
// set isAuthenticated
this.isAuthenticated = this.store.pipe(select(isAuthenticated));
// set loading
this.loading = this.store.pipe(select(isAuthenticationLoading));
}
submit() {
console.log('submit() was callled');
console.log('submit() was called');
this.store.dispatch(new StartShibbolethAuthenticationAction(this.authMethodModel))
}
}