2 import { HttpStatusCode } from '@shared/models'
3 import { makePostBodyRequest } from '../requests'
4 import { AbstractCommand } from '../shared'
6 export class ObjectStorageCommand extends AbstractCommand {
7 static readonly DEFAULT_PLAYLIST_MOCK_BUCKET = 'streaming-playlists'
8 static readonly DEFAULT_WEBTORRENT_MOCK_BUCKET = 'videos'
10 static readonly DEFAULT_SCALEWAY_BUCKET = 'peertube-ci-test'
12 // ---------------------------------------------------------------------------
14 static getDefaultMockConfig () {
18 endpoint: 'http://' + this.getMockEndpointHost(),
19 region: this.getMockRegion(),
21 credentials: this.getMockCredentialsConfig(),
23 streaming_playlists: {
24 bucket_name: this.DEFAULT_PLAYLIST_MOCK_BUCKET
28 bucket_name: this.DEFAULT_WEBTORRENT_MOCK_BUCKET
34 static getMockCredentialsConfig () {
36 access_key_id: 'AKIAIOSFODNN7EXAMPLE',
37 secret_access_key: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
41 static getMockEndpointHost () {
42 return 'localhost:9444'
45 static getMockRegion () {
49 static getMockWebTorrentBaseUrl () {
50 return `http://${this.DEFAULT_WEBTORRENT_MOCK_BUCKET}.${this.getMockEndpointHost()}/`
53 static getMockPlaylistBaseUrl () {
54 return `http://${this.DEFAULT_PLAYLIST_MOCK_BUCKET}.${this.getMockEndpointHost()}/`
57 static async prepareDefaultMockBuckets () {
58 await this.createMockBucket(this.DEFAULT_PLAYLIST_MOCK_BUCKET)
59 await this.createMockBucket(this.DEFAULT_WEBTORRENT_MOCK_BUCKET)
62 static async createMockBucket (name: string) {
63 await makePostBodyRequest({
64 url: this.getMockEndpointHost(),
65 path: '/ui/' + name + '?delete',
66 expectedStatus: HttpStatusCode.TEMPORARY_REDIRECT_307
69 await makePostBodyRequest({
70 url: this.getMockEndpointHost(),
71 path: '/ui/' + name + '?create',
72 expectedStatus: HttpStatusCode.TEMPORARY_REDIRECT_307
75 await makePostBodyRequest({
76 url: this.getMockEndpointHost(),
77 path: '/ui/' + name + '?make-public',
78 expectedStatus: HttpStatusCode.TEMPORARY_REDIRECT_307
82 // ---------------------------------------------------------------------------
84 static getDefaultScalewayConfig (options: {
86 enablePrivateProxy?: boolean // default true
87 privateACL?: 'private' | 'public-read' // default 'private'
89 const { serverNumber, enablePrivateProxy = true, privateACL = 'private' } = options
94 endpoint: this.getScalewayEndpointHost(),
95 region: this.getScalewayRegion(),
97 credentials: this.getScalewayCredentialsConfig(),
104 proxify_private_files: enablePrivateProxy
107 streaming_playlists: {
108 bucket_name: this.DEFAULT_SCALEWAY_BUCKET,
109 prefix: `test:server-${serverNumber}-streaming-playlists:`
113 bucket_name: this.DEFAULT_SCALEWAY_BUCKET,
114 prefix: `test:server-${serverNumber}-videos:`
120 static getScalewayCredentialsConfig () {
122 access_key_id: process.env.OBJECT_STORAGE_SCALEWAY_KEY_ID,
123 secret_access_key: process.env.OBJECT_STORAGE_SCALEWAY_ACCESS_KEY
127 static getScalewayEndpointHost () {
128 return 's3.fr-par.scw.cloud'
131 static getScalewayRegion () {
135 static getScalewayBaseUrl () {
136 return `https://${this.DEFAULT_SCALEWAY_BUCKET}.${this.getScalewayEndpointHost()}/`