mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 18:14:17 +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 { dsoEditMenuResolver } from '../shared/dso-page/dso-edit-menu.resolver';
|
||||||
import { LinkMenuItemModel } from '../shared/menu/menu-item/models/link.model';
|
import { LinkMenuItemModel } from '../shared/menu/menu-item/models/link.model';
|
||||||
import { MenuItemType } from '../shared/menu/menu-item-type.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 { BitstreamRequestACopyPageComponent } from './bitstreams/request-a-copy/bitstream-request-a-copy-page.component';
|
||||||
import { UploadBitstreamComponent } from './bitstreams/upload/upload-bitstream.component';
|
import { UploadBitstreamComponent } from './bitstreams/upload/upload-bitstream.component';
|
||||||
import { ThemedFullItemPageComponent } from './full/themed-full-item-page.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 { ThemedItemPageComponent } from './simple/themed-item-page.component';
|
||||||
import { versionResolver } from './version-page/version.resolver';
|
import { versionResolver } from './version-page/version.resolver';
|
||||||
import { VersionPageComponent } from './version-page/version-page/version-page.component';
|
import { VersionPageComponent } from './version-page/version-page/version-page.component';
|
||||||
|
import { accessTokenResolver } from '../core/auth/access-token.resolver';
|
||||||
|
|
||||||
export const ROUTES: Route[] = [
|
export const ROUTES: Route[] = [
|
||||||
{
|
{
|
||||||
@@ -68,7 +68,10 @@ export const ROUTES: Route[] = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: ITEM_ACCESS_BY_TOKEN_PATH,
|
path: ITEM_ACCESS_BY_TOKEN_PATH,
|
||||||
component: ItemAccessByTokenPageComponent,
|
component: ThemedFullItemPageComponent,
|
||||||
|
resolve: {
|
||||||
|
menu: accessTokenResolver,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
data: {
|
data: {
|
||||||
|
Reference in New Issue
Block a user