PeerTube/shared/extra-utils/users/login.ts

133 lines
3.2 KiB
TypeScript
Raw Normal View History

2017-09-04 21:21:47 +02:00
import * as request from 'supertest'
2017-12-28 13:59:22 +01:00
import { ServerInfo } from '../server/servers'
import { getClient } from '../server/clients'
2017-09-04 21:21:47 +02:00
type Client = { id: string, secret: string }
type User = { username: string, password: string }
type Server = { url: string, client: Client, user: User }
function login (url: string, client: Client, user: User, expectedStatus = 200) {
const path = '/api/v1/users/token'
const body = {
client_id: client.id,
client_secret: client.secret,
username: user.username,
password: user.password,
response_type: 'code',
grant_type: 'password',
scope: 'upload'
}
return request(url)
.post(path)
.type('form')
.send(body)
.expect(expectedStatus)
}
2020-04-22 16:07:04 +02:00
function logout (url: string, token: string, expectedStatus = 200) {
const path = '/api/v1/users/revoke-token'
return request(url)
.post(path)
.set('Authorization', 'Bearer ' + token)
.type('form')
.expect(expectedStatus)
}
2017-12-28 14:29:57 +01:00
async function serverLogin (server: Server) {
2017-09-04 21:21:47 +02:00
const res = await login(server.url, server.client, server.user, 200)
return res.body.access_token as string
}
function refreshToken (server: ServerInfo, refreshToken: string, expectedStatus = 200) {
const path = '/api/v1/users/token'
const body = {
client_id: server.client.id,
client_secret: server.client.secret,
refresh_token: refreshToken,
response_type: 'code',
grant_type: 'refresh_token'
}
return request(server.url)
.post(path)
.type('form')
.send(body)
.expect(expectedStatus)
}
async function userLogin (server: Server, user: User, expectedStatus = 200) {
const res = await login(server.url, server.client, user, expectedStatus)
2017-09-04 21:21:47 +02:00
return res.body.access_token as string
}
async function getAccessToken (url: string, username: string, password: string) {
const resClient = await getClient(url)
const client = {
id: resClient.body.client_id,
secret: resClient.body.client_secret
}
const user = { username, password }
try {
const res = await login(url, client, user)
return res.body.access_token
} catch (err) {
throw new Error('Cannot authenticate. Please check your username/password.')
}
}
2017-09-04 21:21:47 +02:00
function setAccessTokensToServers (servers: ServerInfo[]) {
const tasks: Promise<any>[] = []
for (const server of servers) {
2020-01-31 16:56:52 +01:00
const p = serverLogin(server).then(t => { server.accessToken = t })
2017-09-04 21:21:47 +02:00
tasks.push(p)
}
return Promise.all(tasks)
}
2020-04-29 09:04:42 +02:00
function loginUsingExternalToken (server: Server, username: string, externalAuthToken: string, expectedStatus = 200) {
const path = '/api/v1/users/token'
const body = {
client_id: server.client.id,
client_secret: server.client.secret,
username: username,
response_type: 'code',
grant_type: 'password',
scope: 'upload',
externalAuthToken
}
return request(server.url)
.post(path)
.type('form')
.send(body)
.expect(expectedStatus)
}
2017-09-04 21:21:47 +02:00
// ---------------------------------------------------------------------------
export {
login,
2020-04-22 16:07:04 +02:00
logout,
2017-12-28 14:29:57 +01:00
serverLogin,
refreshToken,
2017-12-28 14:29:57 +01:00
userLogin,
getAccessToken,
setAccessTokensToServers,
Server,
Client,
2020-04-29 09:04:42 +02:00
User,
loginUsingExternalToken
2017-09-04 21:21:47 +02:00
}