123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- import { HttpStatusCode, PeerTubeProblemDocument } from '@shared/models'
- import { unwrapBody } from '../requests'
- import { AbstractCommand, OverrideCommandOptions } from '../shared'
- export class LoginCommand extends AbstractCommand {
- login (options: OverrideCommandOptions & {
- client?: { id?: string, secret?: string }
- user?: { username: string, password?: string }
- } = {}) {
- const { client = this.server.store.client, user = this.server.store.user } = options
- const path = '/api/v1/users/token'
- const body = {
- client_id: client.id,
- client_secret: client.secret,
- username: user.username,
- password: user.password ?? 'password',
- response_type: 'code',
- grant_type: 'password',
- scope: 'upload'
- }
- return unwrapBody<{ access_token: string, refresh_token: string } & PeerTubeProblemDocument>(this.postBodyRequest({
- ...options,
- path,
- requestType: 'form',
- fields: body,
- implicitToken: false,
- defaultExpectedStatus: HttpStatusCode.OK_200
- }))
- }
- getAccessToken (arg1?: { username: string, password?: string }): Promise<string>
- getAccessToken (arg1: string, password?: string): Promise<string>
- async getAccessToken (arg1?: { username: string, password?: string } | string, password?: string) {
- let user: { username: string, password?: string }
- if (!arg1) user = this.server.store.user
- else if (typeof arg1 === 'object') user = arg1
- else user = { username: arg1, password }
- try {
- const body = await this.login({ user })
- return body.access_token
- } catch (err) {
- throw new Error(`Cannot authenticate. Please check your username/password. (${err})`)
- }
- }
- loginUsingExternalToken (options: OverrideCommandOptions & {
- username: string
- externalAuthToken: string
- }) {
- const { username, externalAuthToken } = options
- const path = '/api/v1/users/token'
- const body = {
- client_id: this.server.store.client.id,
- client_secret: this.server.store.client.secret,
- username,
- response_type: 'code',
- grant_type: 'password',
- scope: 'upload',
- externalAuthToken
- }
- return this.postBodyRequest({
- ...options,
- path,
- requestType: 'form',
- fields: body,
- implicitToken: false,
- defaultExpectedStatus: HttpStatusCode.OK_200
- })
- }
- logout (options: OverrideCommandOptions & {
- token: string
- }) {
- const path = '/api/v1/users/revoke-token'
- return unwrapBody<{ redirectUrl: string }>(this.postBodyRequest({
- ...options,
- path,
- requestType: 'form',
- implicitToken: false,
- defaultExpectedStatus: HttpStatusCode.OK_200
- }))
- }
- refreshToken (options: OverrideCommandOptions & {
- refreshToken: string
- }) {
- const path = '/api/v1/users/token'
- const body = {
- client_id: this.server.store.client.id,
- client_secret: this.server.store.client.secret,
- refresh_token: options.refreshToken,
- response_type: 'code',
- grant_type: 'refresh_token'
- }
- return this.postBodyRequest({
- ...options,
- path,
- requestType: 'form',
- fields: body,
- implicitToken: false,
- defaultExpectedStatus: HttpStatusCode.OK_200
- })
- }
- getClient (options: OverrideCommandOptions = {}) {
- const path = '/api/v1/oauth-clients/local'
- return this.getRequestBody<{ client_id: string, client_secret: string }>({
- ...options,
- path,
- host: this.server.host,
- implicitToken: false,
- defaultExpectedStatus: HttpStatusCode.OK_200
- })
- }
- }
|