mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
Request-a-copy: Using a resolver to grab the RequestItem
This commit is contained in:
46
src/app/core/auth/access-token.resolver.ts
Normal file
46
src/app/core/auth/access-token.resolver.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import { inject } from '@angular/core';
|
||||
import {
|
||||
ResolveFn,
|
||||
Router,
|
||||
} from '@angular/router';
|
||||
import { Observable } from 'rxjs';
|
||||
import { tap } from 'rxjs/operators';
|
||||
|
||||
import { getForbiddenRoute } from '../../app-routing-paths';
|
||||
import { hasValue } from '../../shared/empty.util';
|
||||
import { ItemRequestDataService } from '../data/item-request-data.service';
|
||||
import { redirectOn4xx } from '../shared/authorized.operators';
|
||||
import { ItemRequest } from '../shared/item-request.model';
|
||||
import {
|
||||
getFirstCompletedRemoteData,
|
||||
getFirstSucceededRemoteDataPayload,
|
||||
} from '../shared/operators';
|
||||
import { AuthService } from './auth.service';
|
||||
|
||||
export const accessTokenResolver: ResolveFn<ItemRequest> = (
|
||||
route,
|
||||
state,
|
||||
router: Router = inject(Router),
|
||||
authService: AuthService = inject(AuthService),
|
||||
itemRequestDataService: ItemRequestDataService = inject(ItemRequestDataService),
|
||||
): Observable<ItemRequest> => {
|
||||
const accessToken = route.queryParams.accessToken;
|
||||
if ( !hasValue(accessToken) ) {
|
||||
return null;
|
||||
}
|
||||
// Get
|
||||
return itemRequestDataService.getSanitizedRequestByAccessToken(accessToken).pipe(
|
||||
getFirstCompletedRemoteData(),
|
||||
redirectOn4xx(router, authService),
|
||||
getFirstSucceededRemoteDataPayload(),
|
||||
tap(request => {
|
||||
if (!hasValue(request)) {
|
||||
console.dir('no request found for access token', accessToken);
|
||||
router.navigateByUrl(getForbiddenRoute());
|
||||
}
|
||||
console.dir('found request: ', request);
|
||||
console.dir(request);
|
||||
return request;
|
||||
}),
|
||||
);
|
||||
};
|
@@ -6,7 +6,6 @@ import { itemBreadcrumbResolver } from '../core/breadcrumbs/item-breadcrumb.reso
|
||||
import { dsoEditMenuResolver } from '../shared/dso-page/dso-edit-menu.resolver';
|
||||
import { LinkMenuItemModel } from '../shared/menu/menu-item/models/link.model';
|
||||
import { MenuItemType } from '../shared/menu/menu-item-type.model';
|
||||
import { ItemAccessByTokenPageComponent } from './access-by-token/item-access-by-token-page.component';
|
||||
import { BitstreamRequestACopyPageComponent } from './bitstreams/request-a-copy/bitstream-request-a-copy-page.component';
|
||||
import { UploadBitstreamComponent } from './bitstreams/upload/upload-bitstream.component';
|
||||
import { ThemedFullItemPageComponent } from './full/themed-full-item-page.component';
|
||||
@@ -22,6 +21,7 @@ import { orcidPageGuard } from './orcid-page/orcid-page.guard';
|
||||
import { ThemedItemPageComponent } from './simple/themed-item-page.component';
|
||||
import { versionResolver } from './version-page/version.resolver';
|
||||
import { VersionPageComponent } from './version-page/version-page/version-page.component';
|
||||
import { accessTokenResolver } from '../core/auth/access-token.resolver';
|
||||
|
||||
export const ROUTES: Route[] = [
|
||||
{
|
||||
@@ -68,7 +68,10 @@ export const ROUTES: Route[] = [
|
||||
},
|
||||
{
|
||||
path: ITEM_ACCESS_BY_TOKEN_PATH,
|
||||
component: ItemAccessByTokenPageComponent,
|
||||
component: ThemedFullItemPageComponent,
|
||||
resolve: {
|
||||
menu: accessTokenResolver,
|
||||
},
|
||||
},
|
||||
],
|
||||
data: {
|
||||
|
Reference in New Issue
Block a user