@@ -2,8 +2,8 @@ import { Observable } from 'rxjs';
22import { distinctUntilChanged , filter , map , mergeMap , switchMap , tap } from 'rxjs/operators' ;
33import { HALEndpointService } from '../shared/hal-endpoint.service' ;
44import { RequestService } from '../data/request.service' ;
5- import { isNotEmpty } from '../../shared/empty.util' ;
6- import { GetRequest , PostRequest , } from '../data/request.models' ;
5+ import { isNotEmpty , isNotEmptyOperator } from '../../shared/empty.util' ;
6+ import { DeleteRequest , GetRequest , PostRequest } from '../data/request.models' ;
77import { HttpOptions } from '../dspace-rest/dspace-rest.service' ;
88import { getFirstCompletedRemoteData } from '../shared/operators' ;
99import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service' ;
@@ -13,13 +13,17 @@ import { ShortLivedToken } from './models/short-lived-token.model';
1313import { URLCombiner } from '../url-combiner/url-combiner' ;
1414import { RestRequest } from '../data/rest-request.model' ;
1515import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model' ;
16+ import { MachineToken } from './models/machine-token.model' ;
17+ import { NoContent } from '../shared/NoContent.model' ;
18+ import { sendRequest } from '../shared/request.operators' ;
1619
1720/**
1821 * Abstract service to send authentication requests
1922 */
2023export abstract class AuthRequestService {
2124 protected linkName = 'authn' ;
2225 protected shortlivedtokensEndpoint = 'shortlivedtokens' ;
26+ protected machinetokenEndpoint = 'machinetokens' ;
2327
2428 constructor ( protected halService : HALEndpointService ,
2529 protected requestService : RequestService ,
@@ -97,4 +101,32 @@ export abstract class AuthRequestService {
97101 } )
98102 ) ;
99103 }
104+
105+ /**
106+ * Send a post request to create a machine token
107+ */
108+ public postToMachineTokenEndpoint ( ) : Observable < RemoteData < MachineToken > > {
109+ return this . halService . getEndpoint ( this . linkName ) . pipe (
110+ isNotEmptyOperator ( ) ,
111+ distinctUntilChanged ( ) ,
112+ map ( ( href : string ) => new URLCombiner ( href , this . machinetokenEndpoint ) . toString ( ) ) ,
113+ map ( ( endpointURL : string ) => new PostRequest ( this . requestService . generateRequestId ( ) , endpointURL ) ) ,
114+ tap ( ( request : RestRequest ) => this . requestService . send ( request ) ) ,
115+ switchMap ( ( request : RestRequest ) => this . rdbService . buildFromRequestUUID < MachineToken > ( request . uuid ) )
116+ ) ;
117+ }
118+
119+ /**
120+ * Send a delete request to destroy a machine token
121+ */
122+ public deleteToMachineTokenEndpoint ( ) : Observable < RemoteData < NoContent > > {
123+ return this . halService . getEndpoint ( this . linkName ) . pipe (
124+ isNotEmptyOperator ( ) ,
125+ distinctUntilChanged ( ) ,
126+ map ( ( href : string ) => new URLCombiner ( href , this . machinetokenEndpoint ) . toString ( ) ) ,
127+ map ( ( endpointURL : string ) => new DeleteRequest ( this . requestService . generateRequestId ( ) , endpointURL ) ) ,
128+ sendRequest ( this . requestService ) ,
129+ switchMap ( ( request : RestRequest ) => this . rdbService . buildFromRequestUUID < MachineToken > ( request . uuid ) ) ,
130+ ) ;
131+ }
100132}
0 commit comments