X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=shared%2Fextra-utils%2Fshared%2Fabstract-command.ts;h=be368376f75d305560a9b95d01477d8134065a40;hb=57f879a540551c3b958b0991c8e1e3657a4481d8;hp=a572222161ac0c4f05f2e77fa8eda49549be7985;hpb=a92ddacb38a4a17e117ca9ed41680a03580fb81d;p=github%2FChocobozzz%2FPeerTube.git diff --git a/shared/extra-utils/shared/abstract-command.ts b/shared/extra-utils/shared/abstract-command.ts index a57222216..be368376f 100644 --- a/shared/extra-utils/shared/abstract-command.ts +++ b/shared/extra-utils/shared/abstract-command.ts @@ -1,5 +1,13 @@ import { HttpStatusCode } from '@shared/core-utils' -import { makeGetRequest, makePostBodyRequest, makePutBodyRequest, unwrapBody, unwrapText } from '../requests/requests' +import { + makeDeleteRequest, + makeGetRequest, + makePostBodyRequest, + makePutBodyRequest, + makeUploadRequest, + unwrapBody, + unwrapText +} from '../requests/requests' import { ServerInfo } from '../server/servers' export interface OverrideCommandOptions { @@ -7,15 +15,22 @@ export interface OverrideCommandOptions { expectedStatus?: number } -interface CommonCommandOptions extends OverrideCommandOptions { +interface InternalCommonCommandOptions extends OverrideCommandOptions { + // Default to server.url + url?: string + path: string + // If we automatically send the server token if the token is not provided + implicitToken: boolean defaultExpectedStatus: number } -interface GetCommandOptions extends CommonCommandOptions { +interface InternalGetCommandOptions extends InternalCommonCommandOptions { query?: { [ id: string ]: any } contentType?: string accept?: string + redirects?: number + range?: string } abstract class AbstractCommand { @@ -36,15 +51,48 @@ abstract class AbstractCommand { this.expectedStatus = status } - protected getRequestBody (options: GetCommandOptions) { + protected getRequestBody (options: InternalGetCommandOptions) { return unwrapBody(this.getRequest(options)) } - protected getRequestText (options: GetCommandOptions) { + protected getRequestText (options: InternalGetCommandOptions) { return unwrapText(this.getRequest(options)) } - protected putBodyRequest (options: CommonCommandOptions & { + protected getRawRequest (options: Omit) { + const { url, range } = options + const { host, protocol, pathname } = new URL(url) + + return this.getRequest({ + ...options, + + token: this.buildCommonRequestToken(options), + defaultExpectedStatus: this.buildStatusCodeExpected(options), + + url: `${protocol}//${host}`, + path: pathname, + range + }) + } + + protected getRequest (options: InternalGetCommandOptions) { + const { redirects, query, contentType, accept } = options + + return makeGetRequest({ + ...this.buildCommonRequestOptions(options), + + redirects, + query, + contentType, + accept + }) + } + + protected deleteRequest (options: InternalCommonCommandOptions) { + return makeDeleteRequest(this.buildCommonRequestOptions(options)) + } + + protected putBodyRequest (options: InternalCommonCommandOptions & { fields?: { [ fieldName: string ]: any } }) { const { fields } = options @@ -56,7 +104,7 @@ abstract class AbstractCommand { }) } - protected postBodyRequest (options: CommonCommandOptions & { + protected postBodyRequest (options: InternalCommonCommandOptions & { fields?: { [ fieldName: string ]: any } }) { const { fields } = options @@ -68,27 +116,62 @@ abstract class AbstractCommand { }) } - private buildCommonRequestOptions (options: CommonCommandOptions) { - const { token, expectedStatus, defaultExpectedStatus, path } = options + protected postUploadRequest (options: InternalCommonCommandOptions & { + fields?: { [ fieldName: string ]: any } + attaches?: any + }) { + const { fields, attaches } = options + + return makeUploadRequest({ + ...this.buildCommonRequestOptions(options), + + method: 'POST', + fields, + attaches + }) + } + + protected putUploadRequest (options: InternalCommonCommandOptions & { + fields?: { [ fieldName: string ]: any } + attaches?: any + }) { + const { fields, attaches } = options + + return makeUploadRequest({ + ...this.buildCommonRequestOptions(options), + + method: 'PUT', + fields, + attaches + }) + } + + private buildCommonRequestOptions (options: InternalCommonCommandOptions) { + const { path } = options return { url: this.server.url, path, - token: token ?? this.server.accessToken, - statusCodeExpected: expectedStatus ?? this.expectedStatus ?? defaultExpectedStatus + + token: this.buildCommonRequestToken(options), + statusCodeExpected: this.buildStatusCodeExpected(options) } } - private getRequest (options: GetCommandOptions) { - const { query, contentType, accept } = options + private buildCommonRequestToken (options: Pick) { + const { token } = options - return makeGetRequest({ - ...this.buildCommonRequestOptions(options), + const fallbackToken = options.implicitToken + ? this.server.accessToken + : undefined - query, - contentType, - accept - }) + return token !== undefined ? token : fallbackToken + } + + private buildStatusCodeExpected (options: Pick) { + const { expectedStatus, defaultExpectedStatus } = options + + return expectedStatus ?? this.expectedStatus ?? defaultExpectedStatus } }