diff --git a/src/app/app-routing-paths.ts b/src/app/app-routing-paths.ts index 7d202f16e9..3f0b806a2c 100644 --- a/src/app/app-routing-paths.ts +++ b/src/app/app-routing-paths.ts @@ -34,6 +34,48 @@ export function getBitstreamRequestACopyRoute(item, bitstream): { routerLink: st }, }; } +export function getBitstreamDownloadWithAccessTokenRoute(bitstream, accessToken): { routerLink: string, queryParams: any } { + const url = new URLCombiner(getBitstreamModuleRoute(), bitstream.uuid, 'download').toString(); + const options = { + routerLink: url, + queryParams: {}, + }; + if (hasValue(accessToken)) { + options.queryParams = { accessToken: accessToken }; + } + return options; +} +/** + * Get an access token request route for a user to access approved bitstreams using a supplied access token + * @param item_uuid item UUID + * @param accessToken access token (generated by backend) + */ +export function getAccessTokenRequestRoute(item_uuid, accessToken): { routerLink: string, queryParams: any } { + const url = new URLCombiner(getItemModuleRoute(), item_uuid, getAccessByTokenModulePath()).toString(); + const options = { + routerLink: url, + queryParams: { + accessToken: (hasValue(accessToken) ? accessToken : undefined), + }, + }; + return options; +} +/** + * Get an access token request route for a user to access approved bitstreams using a supplied access token + * @param item_uuid item UUID + * @param accessToken access token (generated by backend) + */ +export function getAccessTokenRequestFileRoute(item_uuid, accessToken): { routerLink: string, queryParams: any } { + const url = new URLCombiner(getItemModuleRoute(), item_uuid, ACCESS_BY_TOKEN_MODULE_PATH).toString(); + const options = { + routerLink: url, + queryParams: { + accessToken: (hasValue(accessToken) ? accessToken : undefined), + }, + }; + return options; +} +export const COAR_NOTIFY_SUPPORT = 'coar-notify-support'; export const HOME_PAGE_PATH = 'home'; @@ -128,6 +170,11 @@ export function getRequestCopyModulePath() { return `/${REQUEST_COPY_MODULE_PATH}`; } +export const ACCESS_BY_TOKEN_MODULE_PATH = 'access-by-token'; +export function getAccessByTokenModulePath() { + return `/${ACCESS_BY_TOKEN_MODULE_PATH}`; +} + export const HEALTH_PAGE_PATH = 'health'; export const SUBSCRIPTIONS_MODULE_PATH = 'subscriptions'; diff --git a/src/app/item-page/item-page-routes.ts b/src/app/item-page/item-page-routes.ts index 854d66fabe..e6d9979786 100644 --- a/src/app/item-page/item-page-routes.ts +++ b/src/app/item-page/item-page-routes.ts @@ -6,11 +6,13 @@ 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'; import { itemPageResolver } from './item-page.resolver'; import { + ITEM_ACCESS_BY_TOKEN_PATH, ITEM_EDIT_PATH, ORCID_PATH, UPLOAD_BITSTREAM_PATH, @@ -64,6 +66,10 @@ export const ROUTES: Route[] = [ component: OrcidPageComponent, canActivate: [authenticatedGuard, orcidPageGuard], }, + { + path: ITEM_ACCESS_BY_TOKEN_PATH, + component: ItemAccessByTokenPageComponent, + }, ], data: { menu: { diff --git a/src/app/item-page/item-page-routing-paths.ts b/src/app/item-page/item-page-routing-paths.ts index cded1dd74e..7f414b9c1a 100644 --- a/src/app/item-page/item-page-routing-paths.ts +++ b/src/app/item-page/item-page-routing-paths.ts @@ -51,3 +51,5 @@ export const ITEM_EDIT_VERSIONHISTORY_PATH = 'versionhistory'; export const ITEM_VERSION_PATH = 'version'; export const UPLOAD_BITSTREAM_PATH = 'bitstreams/new'; export const ORCID_PATH = 'orcid'; + +export const ITEM_ACCESS_BY_TOKEN_PATH = 'access-by-token'; diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index cd677847ce..2a66d22235 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -14,6 +14,9 @@ import { StoreModule } from '@ngrx/store'; import { TranslateModule } from '@ngx-translate/core'; import { ScrollToModule } from '@nicky-lenaers/ngx-scroll-to'; +import { ItemSecureFileDownloadLinkComponent } from '../../app/item-page/access-by-token/field-components/file-download-link/item-secure-file-download-link.component'; +import { ItemSecureFileSectionComponent } from '../../app/item-page/access-by-token/field-components/file-section/item-secure-file-section.component'; +import { ItemAccessByTokenPageComponent } from '../../app/item-page/access-by-token/item-access-by-token-page.component'; import { RootModule } from '../../app/root.module'; import { SearchResultsSkeletonComponent } from '../../app/shared/search/search-results/search-results-skeleton/search-results-skeleton.component'; import { MetadataImportPageComponent } from './app/admin/admin-import-metadata-page/metadata-import-page.component'; @@ -133,6 +136,9 @@ const DECLARATIONS = [ CollectionPageComponent, ItemPageComponent, FullItemPageComponent, + ItemAccessByTokenPageComponent, + ItemSecureFileSectionComponent, + ItemSecureFileDownloadLinkComponent, LoginPageComponent, LogoutPageComponent, CreateProfileComponent,