mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 01:54:15 +00:00
72541: EndUserAgreementCurrentUserGuard and EndUserAgreementCookieGuard
This commit is contained in:
@@ -3,7 +3,6 @@ import { RouterModule } from '@angular/router';
|
||||
import { EditBitstreamPageComponent } from './edit-bitstream-page/edit-bitstream-page.component';
|
||||
import { AuthenticatedGuard } from '../core/auth/authenticated.guard';
|
||||
import { BitstreamPageResolver } from './bitstream-page.resolver';
|
||||
import { EndUserAgreementGuard } from '../core/end-user-agreement/end-user-agreement.guard';
|
||||
|
||||
const EDIT_BITSTREAM_PATH = ':id/edit';
|
||||
|
||||
@@ -19,7 +18,7 @@ const EDIT_BITSTREAM_PATH = ':id/edit';
|
||||
resolve: {
|
||||
bitstream: BitstreamPageResolver
|
||||
},
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard]
|
||||
canActivate: [AuthenticatedGuard]
|
||||
}
|
||||
])
|
||||
],
|
||||
|
@@ -14,7 +14,6 @@ import { CollectionBreadcrumbResolver } from '../core/breadcrumbs/collection-bre
|
||||
import { DSOBreadcrumbsService } from '../core/breadcrumbs/dso-breadcrumbs.service';
|
||||
import { LinkService } from '../core/cache/builders/link.service';
|
||||
import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver';
|
||||
import { EndUserAgreementGuard } from '../core/end-user-agreement/end-user-agreement.guard';
|
||||
import {
|
||||
ITEMTEMPLATE_PATH,
|
||||
COLLECTION_EDIT_PATH,
|
||||
@@ -27,7 +26,7 @@ import {
|
||||
{
|
||||
path: COLLECTION_CREATE_PATH,
|
||||
component: CreateCollectionPageComponent,
|
||||
canActivate: [AuthenticatedGuard, CreateCollectionPageGuard, EndUserAgreementGuard]
|
||||
canActivate: [AuthenticatedGuard, CreateCollectionPageGuard]
|
||||
},
|
||||
{
|
||||
path: ':id',
|
||||
@@ -40,18 +39,18 @@ import {
|
||||
{
|
||||
path: COLLECTION_EDIT_PATH,
|
||||
loadChildren: './edit-collection-page/edit-collection-page.module#EditCollectionPageModule',
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard]
|
||||
canActivate: [AuthenticatedGuard]
|
||||
},
|
||||
{
|
||||
path: 'delete',
|
||||
pathMatch: 'full',
|
||||
component: DeleteCollectionPageComponent,
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard],
|
||||
canActivate: [AuthenticatedGuard],
|
||||
},
|
||||
{
|
||||
path: ITEMTEMPLATE_PATH,
|
||||
component: EditItemTemplatePageComponent,
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard],
|
||||
canActivate: [AuthenticatedGuard],
|
||||
resolve: {
|
||||
item: ItemTemplatePageResolver,
|
||||
breadcrumb: I18nBreadcrumbResolver
|
||||
@@ -67,7 +66,7 @@ import {
|
||||
path: '/edit/mapper',
|
||||
component: CollectionItemMapperComponent,
|
||||
pathMatch: 'full',
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard]
|
||||
canActivate: [AuthenticatedGuard]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@@ -10,7 +10,6 @@ import { DeleteCommunityPageComponent } from './delete-community-page/delete-com
|
||||
import { CommunityBreadcrumbResolver } from '../core/breadcrumbs/community-breadcrumb.resolver';
|
||||
import { DSOBreadcrumbsService } from '../core/breadcrumbs/dso-breadcrumbs.service';
|
||||
import { LinkService } from '../core/cache/builders/link.service';
|
||||
import { EndUserAgreementGuard } from '../core/end-user-agreement/end-user-agreement.guard';
|
||||
import { COMMUNITY_EDIT_PATH, COMMUNITY_CREATE_PATH } from './community-page-routing-paths';
|
||||
|
||||
@NgModule({
|
||||
@@ -19,7 +18,7 @@ import { COMMUNITY_EDIT_PATH, COMMUNITY_CREATE_PATH } from './community-page-rou
|
||||
{
|
||||
path: COMMUNITY_CREATE_PATH,
|
||||
component: CreateCommunityPageComponent,
|
||||
canActivate: [AuthenticatedGuard, CreateCommunityPageGuard, EndUserAgreementGuard]
|
||||
canActivate: [AuthenticatedGuard, CreateCommunityPageGuard]
|
||||
},
|
||||
{
|
||||
path: ':id',
|
||||
@@ -32,13 +31,13 @@ import { COMMUNITY_EDIT_PATH, COMMUNITY_CREATE_PATH } from './community-page-rou
|
||||
{
|
||||
path: COMMUNITY_EDIT_PATH,
|
||||
loadChildren: './edit-community-page/edit-community-page.module#EditCommunityPageModule',
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard]
|
||||
canActivate: [AuthenticatedGuard]
|
||||
},
|
||||
{
|
||||
path: 'delete',
|
||||
pathMatch: 'full',
|
||||
component: DeleteCommunityPageComponent,
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard],
|
||||
canActivate: [AuthenticatedGuard],
|
||||
},
|
||||
{
|
||||
path: '',
|
||||
|
@@ -9,7 +9,6 @@ import { ItemBreadcrumbResolver } from '../core/breadcrumbs/item-breadcrumb.reso
|
||||
import { DSOBreadcrumbsService } from '../core/breadcrumbs/dso-breadcrumbs.service';
|
||||
import { LinkService } from '../core/cache/builders/link.service';
|
||||
import { UploadBitstreamComponent } from './bitstreams/upload/upload-bitstream.component';
|
||||
import { EndUserAgreementGuard } from '../core/end-user-agreement/end-user-agreement.guard';
|
||||
import { UPLOAD_BITSTREAM_PATH, ITEM_EDIT_PATH } from './item-page-routing-paths';
|
||||
|
||||
@NgModule({
|
||||
@@ -35,12 +34,12 @@ import { UPLOAD_BITSTREAM_PATH, ITEM_EDIT_PATH } from './item-page-routing-paths
|
||||
{
|
||||
path: ITEM_EDIT_PATH,
|
||||
loadChildren: './edit-item-page/edit-item-page.module#EditItemPageModule',
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard]
|
||||
canActivate: [AuthenticatedGuard]
|
||||
},
|
||||
{
|
||||
path: UPLOAD_BITSTREAM_PATH,
|
||||
component: UploadBitstreamComponent,
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard]
|
||||
canActivate: [AuthenticatedGuard]
|
||||
}
|
||||
],
|
||||
}
|
||||
|
@@ -3,13 +3,12 @@ import { RouterModule } from '@angular/router';
|
||||
|
||||
import { AuthenticatedGuard } from '../core/auth/authenticated.guard';
|
||||
import { SubmissionSubmitComponent } from '../submission/submit/submission-submit.component';
|
||||
import { EndUserAgreementGuard } from '../core/end-user-agreement/end-user-agreement.guard';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard],
|
||||
canActivate: [AuthenticatedGuard],
|
||||
path: '',
|
||||
pathMatch: 'full',
|
||||
component: SubmissionSubmitComponent,
|
||||
|
@@ -6,7 +6,6 @@ import { SubmissionEditComponent } from '../submission/edit/submission-edit.comp
|
||||
import { WorkflowItemDeleteComponent } from './workflow-item-delete/workflow-item-delete.component';
|
||||
import { WorkflowItemPageResolver } from './workflow-item-page.resolver';
|
||||
import { WorkflowItemSendBackComponent } from './workflow-item-send-back/workflow-item-send-back.component';
|
||||
import { EndUserAgreementGuard } from '../core/end-user-agreement/end-user-agreement.guard';
|
||||
import {
|
||||
WORKFLOW_ITEM_SEND_BACK_PATH,
|
||||
WORKFLOW_ITEM_DELETE_PATH,
|
||||
@@ -21,19 +20,19 @@ import {
|
||||
resolve: { wfi: WorkflowItemPageResolver },
|
||||
children: [
|
||||
{
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard],
|
||||
canActivate: [AuthenticatedGuard],
|
||||
path: WORKFLOW_ITEM_EDIT_PATH,
|
||||
component: SubmissionEditComponent,
|
||||
data: { title: 'submission.edit.title' }
|
||||
},
|
||||
{
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard],
|
||||
canActivate: [AuthenticatedGuard],
|
||||
path: WORKFLOW_ITEM_DELETE_PATH,
|
||||
component: WorkflowItemDeleteComponent,
|
||||
data: { title: 'workflow-item.delete.title' }
|
||||
},
|
||||
{
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard],
|
||||
canActivate: [AuthenticatedGuard],
|
||||
path: WORKFLOW_ITEM_SEND_BACK_PATH,
|
||||
component: WorkflowItemSendBackComponent,
|
||||
data: { title: 'workflow-item.send-back.title' }
|
||||
|
@@ -3,14 +3,13 @@ import { RouterModule } from '@angular/router';
|
||||
|
||||
import { AuthenticatedGuard } from '../core/auth/authenticated.guard';
|
||||
import { SubmissionEditComponent } from '../submission/edit/submission-edit.component';
|
||||
import { EndUserAgreementGuard } from '../core/end-user-agreement/end-user-agreement.guard';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', redirectTo: '/home', pathMatch: 'full' },
|
||||
{
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard],
|
||||
canActivate: [AuthenticatedGuard],
|
||||
path: ':id/edit',
|
||||
component: SubmissionEditComponent,
|
||||
data: { title: 'submission.edit.title' }
|
||||
|
@@ -20,7 +20,7 @@ import { COLLECTION_MODULE_PATH } from './+collection-page/collection-page-routi
|
||||
import { COMMUNITY_MODULE_PATH } from './+community-page/community-page-routing-paths';
|
||||
import { ITEM_MODULE_PATH } from './+item-page/item-page-routing-paths';
|
||||
import { ReloadGuard } from './core/reload/reload.guard';
|
||||
import { EndUserAgreementGuard } from './core/end-user-agreement/end-user-agreement.guard';
|
||||
import { EndUserAgreementCurrentUserGuard } from './core/end-user-agreement/end-user-agreement-current-user.guard';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
@@ -29,40 +29,42 @@ import { EndUserAgreementGuard } from './core/end-user-agreement/end-user-agreem
|
||||
children: [
|
||||
{ path: '', redirectTo: '/home', pathMatch: 'full' },
|
||||
{ path: 'reload/:rnd', component: PageNotFoundComponent, pathMatch: 'full', canActivate: [ReloadGuard] },
|
||||
{ path: 'home', loadChildren: './+home-page/home-page.module#HomePageModule', data: { showBreadcrumbs: false } },
|
||||
{ path: 'community-list', loadChildren: './community-list-page/community-list-page.module#CommunityListPageModule' },
|
||||
{ path: 'id', loadChildren: './+lookup-by-id/lookup-by-id.module#LookupIdModule' },
|
||||
{ path: 'handle', loadChildren: './+lookup-by-id/lookup-by-id.module#LookupIdModule' },
|
||||
{ path: 'home', loadChildren: './+home-page/home-page.module#HomePageModule', data: { showBreadcrumbs: false }, canActivate: [EndUserAgreementCurrentUserGuard] },
|
||||
{ path: 'community-list', loadChildren: './community-list-page/community-list-page.module#CommunityListPageModule', canActivate: [EndUserAgreementCurrentUserGuard] },
|
||||
{ path: 'id', loadChildren: './+lookup-by-id/lookup-by-id.module#LookupIdModule', canActivate: [EndUserAgreementCurrentUserGuard] },
|
||||
{ path: 'handle', loadChildren: './+lookup-by-id/lookup-by-id.module#LookupIdModule', canActivate: [EndUserAgreementCurrentUserGuard] },
|
||||
{ path: REGISTER_PATH, loadChildren: './register-page/register-page.module#RegisterPageModule' },
|
||||
{ path: FORGOT_PASSWORD_PATH, loadChildren: './forgot-password/forgot-password.module#ForgotPasswordModule' },
|
||||
{ path: COMMUNITY_MODULE_PATH, loadChildren: './+community-page/community-page.module#CommunityPageModule' },
|
||||
{ path: COLLECTION_MODULE_PATH, loadChildren: './+collection-page/collection-page.module#CollectionPageModule' },
|
||||
{ path: ITEM_MODULE_PATH, loadChildren: './+item-page/item-page.module#ItemPageModule' },
|
||||
{ path: BITSTREAM_MODULE_PATH, loadChildren: './+bitstream-page/bitstream-page.module#BitstreamPageModule' },
|
||||
{ path: FORGOT_PASSWORD_PATH, loadChildren: './forgot-password/forgot-password.module#ForgotPasswordModule', canActivate: [EndUserAgreementCurrentUserGuard] },
|
||||
{ path: COMMUNITY_MODULE_PATH, loadChildren: './+community-page/community-page.module#CommunityPageModule', canActivate: [EndUserAgreementCurrentUserGuard] },
|
||||
{ path: COLLECTION_MODULE_PATH, loadChildren: './+collection-page/collection-page.module#CollectionPageModule', canActivate: [EndUserAgreementCurrentUserGuard] },
|
||||
{ path: ITEM_MODULE_PATH, loadChildren: './+item-page/item-page.module#ItemPageModule', canActivate: [EndUserAgreementCurrentUserGuard] },
|
||||
{ path: BITSTREAM_MODULE_PATH, loadChildren: './+bitstream-page/bitstream-page.module#BitstreamPageModule', canActivate: [EndUserAgreementCurrentUserGuard] },
|
||||
{
|
||||
path: 'mydspace',
|
||||
loadChildren: './+my-dspace-page/my-dspace-page.module#MyDSpacePageModule',
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard]
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementCurrentUserGuard]
|
||||
},
|
||||
{ path: 'search', loadChildren: './+search-page/search-page-routing.module#SearchPageRoutingModule' },
|
||||
{ path: 'browse', loadChildren: './+browse-by/browse-by.module#BrowseByModule'},
|
||||
{ path: ADMIN_MODULE_PATH, loadChildren: './+admin/admin.module#AdminModule', canActivate: [SiteAdministratorGuard, EndUserAgreementGuard] },
|
||||
{ path: 'search', loadChildren: './+search-page/search-page-routing.module#SearchPageRoutingModule', canActivate: [EndUserAgreementCurrentUserGuard] },
|
||||
{ path: 'browse', loadChildren: './+browse-by/browse-by.module#BrowseByModule', canActivate: [EndUserAgreementCurrentUserGuard] },
|
||||
{ path: ADMIN_MODULE_PATH, loadChildren: './+admin/admin.module#AdminModule', canActivate: [SiteAdministratorGuard, EndUserAgreementCurrentUserGuard] },
|
||||
{ path: 'login', loadChildren: './+login-page/login-page.module#LoginPageModule' },
|
||||
{ path: 'logout', loadChildren: './+logout-page/logout-page.module#LogoutPageModule' },
|
||||
{ path: 'submit', loadChildren: './+submit-page/submit-page.module#SubmitPageModule' },
|
||||
{ path: 'submit', loadChildren: './+submit-page/submit-page.module#SubmitPageModule', canActivate: [EndUserAgreementCurrentUserGuard] },
|
||||
{
|
||||
path: 'workspaceitems',
|
||||
loadChildren: './+workspaceitems-edit-page/workspaceitems-edit-page.module#WorkspaceitemsEditPageModule'
|
||||
loadChildren: './+workspaceitems-edit-page/workspaceitems-edit-page.module#WorkspaceitemsEditPageModule',
|
||||
canActivate: [EndUserAgreementCurrentUserGuard]
|
||||
},
|
||||
{
|
||||
path: WORKFLOW_ITEM_MODULE_PATH,
|
||||
loadChildren: './+workflowitems-edit-page/workflowitems-edit-page.module#WorkflowItemsEditPageModule'
|
||||
loadChildren: './+workflowitems-edit-page/workflowitems-edit-page.module#WorkflowItemsEditPageModule',
|
||||
canActivate: [EndUserAgreementCurrentUserGuard]
|
||||
},
|
||||
{
|
||||
path: PROFILE_MODULE_PATH,
|
||||
loadChildren: './profile-page/profile-page.module#ProfilePageModule', canActivate: [AuthenticatedGuard, EndUserAgreementGuard]
|
||||
loadChildren: './profile-page/profile-page.module#ProfilePageModule', canActivate: [AuthenticatedGuard, EndUserAgreementCurrentUserGuard]
|
||||
},
|
||||
{ path: 'processes', loadChildren: './process-page/process-page.module#ProcessPageModule', canActivate: [AuthenticatedGuard, EndUserAgreementGuard] },
|
||||
{ path: 'processes', loadChildren: './process-page/process-page.module#ProcessPageModule', canActivate: [AuthenticatedGuard, EndUserAgreementCurrentUserGuard] },
|
||||
{ path: INFO_MODULE_PATH, loadChildren: './info/info.module#InfoModule' },
|
||||
{ path: UNAUTHORIZED_PATH, component: UnauthorizedComponent },
|
||||
{ path: '**', pathMatch: 'full', component: PageNotFoundComponent },
|
||||
|
@@ -163,7 +163,8 @@ import { SubmissionCcLicenseUrlDataService } from './submission/submission-cc-li
|
||||
import { ConfigurationDataService } from './data/configuration-data.service';
|
||||
import { ConfigurationProperty } from './shared/configuration-property.model';
|
||||
import { ReloadGuard } from './reload/reload.guard';
|
||||
import { EndUserAgreementGuard } from './end-user-agreement/end-user-agreement.guard';
|
||||
import { EndUserAgreementCurrentUserGuard } from './end-user-agreement/end-user-agreement-current-user.guard';
|
||||
import { EndUserAgreementCookieGuard } from './end-user-agreement/end-user-agreement-cookie.guard';
|
||||
import { EndUserAgreementService } from './end-user-agreement/end-user-agreement.service';
|
||||
|
||||
/**
|
||||
@@ -293,7 +294,8 @@ const PROVIDERS = [
|
||||
MetadataFieldDataService,
|
||||
TokenResponseParsingService,
|
||||
ReloadGuard,
|
||||
EndUserAgreementGuard,
|
||||
EndUserAgreementCurrentUserGuard,
|
||||
EndUserAgreementCookieGuard,
|
||||
EndUserAgreementService,
|
||||
// register AuthInterceptor as HttpInterceptor
|
||||
{
|
||||
|
@@ -1,30 +1,27 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router';
|
||||
import { Observable } from 'rxjs/internal/Observable';
|
||||
import { returnEndUserAgreementUrlTreeOnFalse } from '../shared/operators';
|
||||
import { EndUserAgreementService } from './end-user-agreement.service';
|
||||
import { tap } from 'rxjs/operators';
|
||||
import { AuthService } from '../auth/auth.service';
|
||||
import { returnEndUserAgreementUrlTreeOnFalse } from '../shared/operators';
|
||||
import { tap } from 'rxjs/operators';
|
||||
|
||||
/**
|
||||
* A guard redirecting users to the end agreement page when they haven't accepted the latest user agreement
|
||||
* An abstract guard for redirecting users to the user agreement page if a certain condition is met
|
||||
* That condition is defined by abstract method hasAccepted
|
||||
*/
|
||||
@Injectable()
|
||||
export class EndUserAgreementGuard implements CanActivate {
|
||||
export abstract class AbstractEndUserAgreementGuard implements CanActivate {
|
||||
|
||||
constructor(protected endUserAgreementService: EndUserAgreementService,
|
||||
protected authService: AuthService,
|
||||
constructor(protected authService: AuthService,
|
||||
protected router: Router) {
|
||||
}
|
||||
|
||||
/**
|
||||
* True when the user has accepted the agreements
|
||||
* True when the user agreement has been accepted
|
||||
* The user will be redirected to the End User Agreement page if they haven't accepted it before
|
||||
* A redirect URL will be provided with the navigation so the component can redirect the user back to the blocked route
|
||||
* when they're finished accepting the agreement
|
||||
*/
|
||||
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> {
|
||||
return this.endUserAgreementService.hasCurrentUserAcceptedAgreement().pipe(
|
||||
return this.hasAccepted().pipe(
|
||||
returnEndUserAgreementUrlTreeOnFalse(this.router),
|
||||
tap((result) => {
|
||||
if (result instanceof UrlTree) {
|
||||
@@ -34,4 +31,11 @@ export class EndUserAgreementGuard implements CanActivate {
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* This abstract method determines how the User Agreement has to be accepted before the user is allowed to visit
|
||||
* the desired route
|
||||
*/
|
||||
abstract hasAccepted(): Observable<boolean>;
|
||||
|
||||
}
|
@@ -0,0 +1,28 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { AbstractEndUserAgreementGuard } from './abstract-end-user-agreement.guard';
|
||||
import { Observable } from 'rxjs/internal/Observable';
|
||||
import { of as observableOf } from 'rxjs';
|
||||
import { EndUserAgreementService } from './end-user-agreement.service';
|
||||
import { AuthService } from '../auth/auth.service';
|
||||
import { Router } from '@angular/router';
|
||||
|
||||
/**
|
||||
* A guard redirecting users to the end agreement page when the user agreement cookie hasn't been accepted
|
||||
*/
|
||||
@Injectable()
|
||||
export class EndUserAgreementCookieGuard extends AbstractEndUserAgreementGuard {
|
||||
|
||||
constructor(protected endUserAgreementService: EndUserAgreementService,
|
||||
protected authService: AuthService,
|
||||
protected router: Router) {
|
||||
super(authService, router);
|
||||
}
|
||||
|
||||
/**
|
||||
* True when the user agreement cookie has been accepted
|
||||
*/
|
||||
hasAccepted(): Observable<boolean> {
|
||||
return observableOf(this.endUserAgreementService.isCookieAccepted());
|
||||
}
|
||||
|
||||
}
|
@@ -1,11 +1,11 @@
|
||||
import { EndUserAgreementGuard } from './end-user-agreement.guard';
|
||||
import { EndUserAgreementCurrentUserGuard } from './end-user-agreement-current-user.guard';
|
||||
import { EndUserAgreementService } from './end-user-agreement.service';
|
||||
import { Router, UrlTree } from '@angular/router';
|
||||
import { of as observableOf } from 'rxjs';
|
||||
import { AuthService } from '../auth/auth.service';
|
||||
|
||||
describe('EndUserAgreementGuard', () => {
|
||||
let guard: EndUserAgreementGuard;
|
||||
let guard: EndUserAgreementCurrentUserGuard;
|
||||
|
||||
let endUserAgreementService: EndUserAgreementService;
|
||||
let authService: AuthService;
|
||||
@@ -21,7 +21,7 @@ describe('EndUserAgreementGuard', () => {
|
||||
parseUrl: new UrlTree()
|
||||
});
|
||||
|
||||
guard = new EndUserAgreementGuard(endUserAgreementService, authService, router);
|
||||
guard = new EndUserAgreementCurrentUserGuard(endUserAgreementService, authService, router);
|
||||
});
|
||||
|
||||
describe('canActivate', () => {
|
@@ -0,0 +1,27 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable } from 'rxjs/internal/Observable';
|
||||
import { AbstractEndUserAgreementGuard } from './abstract-end-user-agreement.guard';
|
||||
import { EndUserAgreementService } from './end-user-agreement.service';
|
||||
import { AuthService } from '../auth/auth.service';
|
||||
import { Router } from '@angular/router';
|
||||
|
||||
/**
|
||||
* A guard redirecting logged in users to the end agreement page when they haven't accepted the latest user agreement
|
||||
*/
|
||||
@Injectable()
|
||||
export class EndUserAgreementCurrentUserGuard extends AbstractEndUserAgreementGuard {
|
||||
|
||||
constructor(protected endUserAgreementService: EndUserAgreementService,
|
||||
protected authService: AuthService,
|
||||
protected router: Router) {
|
||||
super(authService, router);
|
||||
}
|
||||
|
||||
/**
|
||||
* True when the currently logged in user has accepted the agreements or when the user is not currently authenticated
|
||||
*/
|
||||
hasAccepted(): Observable<boolean> {
|
||||
return this.endUserAgreementService.hasCurrentUserAcceptedAgreement(true);
|
||||
}
|
||||
|
||||
}
|
@@ -25,12 +25,24 @@ export class EndUserAgreementService {
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether or not the current user has accepted the End User Agreement
|
||||
* Whether or not either the cookie was accepted or the current user has accepted the End User Agreement
|
||||
* @param acceptedWhenAnonymous Whether or not the user agreement should be considered accepted if the user is
|
||||
* currently not authenticated (anonymous)
|
||||
*/
|
||||
hasCurrentUserAcceptedAgreement(): Observable<boolean> {
|
||||
hasCurrentUserOrCookieAcceptedAgreement(acceptedWhenAnonymous: boolean): Observable<boolean> {
|
||||
if (this.isCookieAccepted()) {
|
||||
return observableOf(true);
|
||||
} else {
|
||||
return this.hasCurrentUserAcceptedAgreement(acceptedWhenAnonymous);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether or not the current user has accepted the End User Agreement
|
||||
* @param acceptedWhenAnonymous Whether or not the user agreement should be considered accepted if the user is
|
||||
* currently not authenticated (anonymous)
|
||||
*/
|
||||
hasCurrentUserAcceptedAgreement(acceptedWhenAnonymous: boolean): Observable<boolean> {
|
||||
return this.authService.isAuthenticated().pipe(
|
||||
switchMap((authenticated) => {
|
||||
if (authenticated) {
|
||||
@@ -38,12 +50,11 @@ export class EndUserAgreementService {
|
||||
map((user) => hasValue(user) && user.hasMetadata(END_USER_AGREEMENT_METADATA_FIELD) && user.firstMetadata(END_USER_AGREEMENT_METADATA_FIELD).value === 'true')
|
||||
);
|
||||
} else {
|
||||
return observableOf(false);
|
||||
return observableOf(acceptedWhenAnonymous);
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the current user's accepted agreement status
|
||||
|
@@ -45,7 +45,7 @@ export class EndUserAgreementComponent implements OnInit {
|
||||
* Initialize the "accepted" property of this component by checking if the current user has accepted it before
|
||||
*/
|
||||
initAccepted() {
|
||||
this.endUserAgreementService.hasCurrentUserAcceptedAgreement().subscribe((accepted) => {
|
||||
this.endUserAgreementService.hasCurrentUserOrCookieAcceptedAgreement(false).subscribe((accepted) => {
|
||||
this.accepted = accepted;
|
||||
});
|
||||
}
|
||||
|
@@ -7,7 +7,6 @@ import { ProcessDetailComponent } from './detail/process-detail.component';
|
||||
import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver';
|
||||
import { ProcessBreadcrumbResolver } from './process-breadcrumb.resolver';
|
||||
import { AuthenticatedGuard } from '../core/auth/authenticated.guard';
|
||||
import { EndUserAgreementGuard } from '../core/end-user-agreement/end-user-agreement.guard';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
@@ -16,7 +15,7 @@ import { EndUserAgreementGuard } from '../core/end-user-agreement/end-user-agree
|
||||
path: '',
|
||||
resolve: { breadcrumb: I18nBreadcrumbResolver },
|
||||
data: { breadcrumbKey: 'process.overview' },
|
||||
canActivate: [AuthenticatedGuard, EndUserAgreementGuard],
|
||||
canActivate: [AuthenticatedGuard],
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
|
@@ -4,7 +4,7 @@ import { RegisterEmailComponent } from './register-email/register-email.componen
|
||||
import { CreateProfileComponent } from './create-profile/create-profile.component';
|
||||
import { ItemPageResolver } from '../+item-page/item-page.resolver';
|
||||
import { RegistrationResolver } from '../register-email-form/registration.resolver';
|
||||
import { EndUserAgreementGuard } from '../core/end-user-agreement/end-user-agreement.guard';
|
||||
import { EndUserAgreementCookieGuard } from '../core/end-user-agreement/end-user-agreement-cookie.guard';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
@@ -18,7 +18,7 @@ import { EndUserAgreementGuard } from '../core/end-user-agreement/end-user-agree
|
||||
path: ':token',
|
||||
component: CreateProfileComponent,
|
||||
resolve: {registration: RegistrationResolver},
|
||||
canActivate: [EndUserAgreementGuard]
|
||||
canActivate: [EndUserAgreementCookieGuard]
|
||||
}
|
||||
])
|
||||
],
|
||||
|
Reference in New Issue
Block a user