diff options
Diffstat (limited to 'support')
-rw-r--r-- | support/doc/api/openapi.yaml | 182 | ||||
-rw-r--r-- | support/doc/api/quickstart.md | 2 | ||||
-rw-r--r-- | support/doc/development/client/code.md | 67 | ||||
-rw-r--r-- | support/doc/development/client/components-tree.png | bin | 22104 -> 0 bytes | |||
-rw-r--r-- | support/doc/development/client/components-tree.svg | 2 | ||||
-rw-r--r-- | support/doc/development/client/components-tree.xml | 1 | ||||
-rw-r--r-- | support/doc/development/server/code.md | 58 | ||||
-rw-r--r-- | support/doc/development/server/peertube-architecture-server.xml | 1 | ||||
-rw-r--r-- | support/doc/development/server/upload-video.png | bin | 34643 -> 0 bytes | |||
-rw-r--r-- | support/doc/production.md | 3 | ||||
-rw-r--r-- | support/doc/tools.md | 14 | ||||
-rw-r--r-- | support/docker/production/.env | 3 | ||||
-rw-r--r-- | support/docker/production/docker-compose.yml | 7 |
13 files changed, 161 insertions, 179 deletions
diff --git a/support/doc/api/openapi.yaml b/support/doc/api/openapi.yaml index de610893c..5a4f6fcb2 100644 --- a/support/doc/api/openapi.yaml +++ b/support/doc/api/openapi.yaml | |||
@@ -38,7 +38,7 @@ info: | |||
38 | } | 38 | } |
39 | ``` | 39 | ``` |
40 | externalDocs: | 40 | externalDocs: |
41 | url: https://docs.joinpeertube.org/api.html | 41 | url: https://docs.joinpeertube.org/#/api-rest-reference.html |
42 | tags: | 42 | tags: |
43 | - name: Accounts | 43 | - name: Accounts |
44 | description: > | 44 | description: > |
@@ -99,6 +99,7 @@ x-tagGroups: | |||
99 | - name: Videos | 99 | - name: Videos |
100 | tags: | 100 | tags: |
101 | - Video | 101 | - Video |
102 | - Video Caption | ||
102 | - Video Channel | 103 | - Video Channel |
103 | - Video Comment | 104 | - Video Comment |
104 | - Video Following | 105 | - Video Following |
@@ -152,7 +153,7 @@ paths: | |||
152 | content: | 153 | content: |
153 | application/json: | 154 | application/json: |
154 | schema: | 155 | schema: |
155 | $ref: '#/components/schemas/Video' | 156 | $ref: '#/components/schemas/VideoListResponse' |
156 | x-code-samples: | 157 | x-code-samples: |
157 | - lang: JavaScript | 158 | - lang: JavaScript |
158 | source: | | 159 | source: | |
@@ -575,9 +576,7 @@ paths: | |||
575 | content: | 576 | content: |
576 | application/json: | 577 | application/json: |
577 | schema: | 578 | schema: |
578 | type: array | 579 | $ref: '#/components/schemas/VideoListResponse' |
579 | items: | ||
580 | $ref: '#/components/schemas/Video' | ||
581 | /users/me/subscriptions: | 580 | /users/me/subscriptions: |
582 | get: | 581 | get: |
583 | summary: Get subscriptions of the current user | 582 | summary: Get subscriptions of the current user |
@@ -638,9 +637,7 @@ paths: | |||
638 | content: | 637 | content: |
639 | application/json: | 638 | application/json: |
640 | schema: | 639 | schema: |
641 | type: array | 640 | $ref: '#/components/schemas/VideoListResponse' |
642 | items: | ||
643 | $ref: '#/components/schemas/Video' | ||
644 | '/users/me/subscriptions/{uri}': | 641 | '/users/me/subscriptions/{uri}': |
645 | get: | 642 | get: |
646 | summary: Get subscription of the current user for a given uri | 643 | summary: Get subscription of the current user for a given uri |
@@ -730,9 +727,7 @@ paths: | |||
730 | content: | 727 | content: |
731 | application/json: | 728 | application/json: |
732 | schema: | 729 | schema: |
733 | type: array | 730 | $ref: '#/components/schemas/VideoListResponse' |
734 | items: | ||
735 | $ref: '#/components/schemas/Video' | ||
736 | /videos/categories: | 731 | /videos/categories: |
737 | get: | 732 | get: |
738 | summary: Get list of video licences known by the server | 733 | summary: Get list of video licences known by the server |
@@ -1025,7 +1020,7 @@ paths: | |||
1025 | description: Video preview file | 1020 | description: Video preview file |
1026 | type: string | 1021 | type: string |
1027 | privacy: | 1022 | privacy: |
1028 | $ref: '#/components/schemas/VideoPrivacy' | 1023 | $ref: '#/components/schemas/VideoPrivacySet' |
1029 | category: | 1024 | category: |
1030 | description: Video category | 1025 | description: Video category |
1031 | type: string | 1026 | type: string |
@@ -1129,7 +1124,7 @@ paths: | |||
1129 | description: Video preview file | 1124 | description: Video preview file |
1130 | type: string | 1125 | type: string |
1131 | privacy: | 1126 | privacy: |
1132 | $ref: '#/components/schemas/VideoPrivacy' | 1127 | $ref: '#/components/schemas/VideoPrivacySet' |
1133 | category: | 1128 | category: |
1134 | description: Video category | 1129 | description: Video category |
1135 | type: string | 1130 | type: string |
@@ -1247,6 +1242,58 @@ paths: | |||
1247 | type: array | 1242 | type: array |
1248 | items: | 1243 | items: |
1249 | $ref: '#/components/schemas/VideoBlacklist' | 1244 | $ref: '#/components/schemas/VideoBlacklist' |
1245 | /videos/{id}/captions: | ||
1246 | get: | ||
1247 | summary: Get list of video's captions | ||
1248 | tags: | ||
1249 | - Video Caption | ||
1250 | parameters: | ||
1251 | - $ref: '#/components/parameters/id2' | ||
1252 | responses: | ||
1253 | '200': | ||
1254 | description: successful operation | ||
1255 | content: | ||
1256 | application/json: | ||
1257 | schema: | ||
1258 | type: object | ||
1259 | properties: | ||
1260 | total: | ||
1261 | type: integer | ||
1262 | data: | ||
1263 | type: array | ||
1264 | items: | ||
1265 | $ref: '#/components/schemas/VideoCaption' | ||
1266 | /videos/{id}/captions/{captionLanguage}: | ||
1267 | put: | ||
1268 | summary: Add or replace a video caption | ||
1269 | tags: | ||
1270 | - Video Caption | ||
1271 | parameters: | ||
1272 | - $ref: '#/components/parameters/id2' | ||
1273 | - $ref: '#/components/parameters/captionLanguage' | ||
1274 | requestBody: | ||
1275 | content: | ||
1276 | multipart/form-data: | ||
1277 | schema: | ||
1278 | type: object | ||
1279 | properties: | ||
1280 | captionfile: | ||
1281 | description: The file to upload. | ||
1282 | type: string | ||
1283 | format: binary | ||
1284 | responses: | ||
1285 | '204': | ||
1286 | $ref: '#/paths/~1users~1me/put/responses/204' | ||
1287 | delete: | ||
1288 | summary: Delete a video caption | ||
1289 | tags: | ||
1290 | - Video Caption | ||
1291 | parameters: | ||
1292 | - $ref: '#/components/parameters/id2' | ||
1293 | - $ref: '#/components/parameters/captionLanguage' | ||
1294 | responses: | ||
1295 | '204': | ||
1296 | $ref: '#/paths/~1users~1me/put/responses/204' | ||
1250 | /video-channels: | 1297 | /video-channels: |
1251 | get: | 1298 | get: |
1252 | summary: Get list of video channels | 1299 | summary: Get list of video channels |
@@ -1275,7 +1322,10 @@ paths: | |||
1275 | '204': | 1322 | '204': |
1276 | $ref: '#/paths/~1users~1me/put/responses/204' | 1323 | $ref: '#/paths/~1users~1me/put/responses/204' |
1277 | requestBody: | 1324 | requestBody: |
1278 | $ref: '#/components/requestBodies/VideoChannelInput' | 1325 | content: |
1326 | application/json: | ||
1327 | schema: | ||
1328 | $ref: '#/components/schemas/VideoChannelCreate' | ||
1279 | '/video-channels/{channelHandle}': | 1329 | '/video-channels/{channelHandle}': |
1280 | get: | 1330 | get: |
1281 | summary: Get a video channel by its id | 1331 | summary: Get a video channel by its id |
@@ -1302,7 +1352,10 @@ paths: | |||
1302 | '204': | 1352 | '204': |
1303 | $ref: '#/paths/~1users~1me/put/responses/204' | 1353 | $ref: '#/paths/~1users~1me/put/responses/204' |
1304 | requestBody: | 1354 | requestBody: |
1305 | $ref: '#/components/requestBodies/VideoChannelInput' | 1355 | content: |
1356 | application/json: | ||
1357 | schema: | ||
1358 | $ref: '#/components/schemas/VideoChannelUpdate' | ||
1306 | delete: | 1359 | delete: |
1307 | summary: Delete a video channel by its id | 1360 | summary: Delete a video channel by its id |
1308 | security: | 1361 | security: |
@@ -1318,6 +1371,7 @@ paths: | |||
1318 | get: | 1371 | get: |
1319 | summary: Get videos of a video channel by its id | 1372 | summary: Get videos of a video channel by its id |
1320 | tags: | 1373 | tags: |
1374 | - Video | ||
1321 | - Video Channel | 1375 | - Video Channel |
1322 | parameters: | 1376 | parameters: |
1323 | - $ref: '#/components/parameters/channelHandle' | 1377 | - $ref: '#/components/parameters/channelHandle' |
@@ -1327,7 +1381,7 @@ paths: | |||
1327 | content: | 1381 | content: |
1328 | application/json: | 1382 | application/json: |
1329 | schema: | 1383 | schema: |
1330 | $ref: '#/components/schemas/Video' | 1384 | $ref: '#/components/schemas/VideoListResponse' |
1331 | '/accounts/{name}/video-channels': | 1385 | '/accounts/{name}/video-channels': |
1332 | get: | 1386 | get: |
1333 | summary: Get video channels of an account by its name | 1387 | summary: Get video channels of an account by its name |
@@ -1443,7 +1497,7 @@ paths: | |||
1443 | schema: | 1497 | schema: |
1444 | $ref: '#/components/schemas/CommentThreadPostResponse' | 1498 | $ref: '#/components/schemas/CommentThreadPostResponse' |
1445 | delete: | 1499 | delete: |
1446 | summary: 'Delete a comment in a comment therad by its id, of a video by its id' | 1500 | summary: 'Delete a comment in a comment thread by its id, of a video by its id' |
1447 | security: | 1501 | security: |
1448 | - OAuth2: [] | 1502 | - OAuth2: [] |
1449 | tags: | 1503 | tags: |
@@ -1487,9 +1541,7 @@ paths: | |||
1487 | content: | 1541 | content: |
1488 | application/json: | 1542 | application/json: |
1489 | schema: | 1543 | schema: |
1490 | type: array | 1544 | $ref: '#/components/schemas/VideoListResponse' |
1491 | items: | ||
1492 | $ref: '#/components/schemas/Video' | ||
1493 | servers: | 1545 | servers: |
1494 | - url: 'https://peertube.cpy.re/api/v1' | 1546 | - url: 'https://peertube.cpy.re/api/v1' |
1495 | description: Live Test Server (live data - stable version) | 1547 | description: Live Test Server (live data - stable version) |
@@ -1611,6 +1663,13 @@ components: | |||
1611 | description: The video id or uuid | 1663 | description: The video id or uuid |
1612 | schema: | 1664 | schema: |
1613 | type: string | 1665 | type: string |
1666 | captionLanguage: | ||
1667 | name: captionLanguage | ||
1668 | in: path | ||
1669 | required: true | ||
1670 | description: The caption language | ||
1671 | schema: | ||
1672 | type: string | ||
1614 | channelHandle: | 1673 | channelHandle: |
1615 | name: channelHandle | 1674 | name: channelHandle |
1616 | in: path | 1675 | in: path |
@@ -1722,12 +1781,6 @@ components: | |||
1722 | type: array | 1781 | type: array |
1723 | items: | 1782 | items: |
1724 | type: string | 1783 | type: string |
1725 | requestBodies: | ||
1726 | VideoChannelInput: | ||
1727 | content: | ||
1728 | application/json: | ||
1729 | schema: | ||
1730 | $ref: '#/components/schemas/VideoChannelInput' | ||
1731 | securitySchemes: | 1784 | securitySchemes: |
1732 | OAuth2: | 1785 | OAuth2: |
1733 | description: > | 1786 | description: > |
@@ -1739,7 +1792,7 @@ components: | |||
1739 | 1792 | ||
1740 | - Have an account with sufficient authorization levels | 1793 | - Have an account with sufficient authorization levels |
1741 | 1794 | ||
1742 | - [Generate](https://docs.joinpeertube.org/lang/en/devdocs/rest.html) a | 1795 | - [Generate](https://docs.joinpeertube.org/#/api-rest-getting-started) a |
1743 | Bearer Token | 1796 | Bearer Token |
1744 | 1797 | ||
1745 | - Make Authenticated Requests | 1798 | - Make Authenticated Requests |
@@ -1764,12 +1817,23 @@ components: | |||
1764 | type: string | 1817 | type: string |
1765 | label: | 1818 | label: |
1766 | type: string | 1819 | type: string |
1767 | VideoPrivacy: | 1820 | VideoPrivacySet: |
1768 | type: string | 1821 | type: integer |
1769 | enum: | 1822 | enum: |
1770 | - Public | 1823 | - 1 |
1771 | - Unlisted | 1824 | - 2 |
1772 | - Private | 1825 | - 3 |
1826 | description: 'The video privacy (Public = 1, Unlisted = 2, Private = 3)' | ||
1827 | VideoPrivacyConstant: | ||
1828 | properties: | ||
1829 | id: | ||
1830 | type: integer | ||
1831 | enum: | ||
1832 | - 1 | ||
1833 | - 2 | ||
1834 | - 3 | ||
1835 | label: | ||
1836 | type: string | ||
1773 | Video: | 1837 | Video: |
1774 | properties: | 1838 | properties: |
1775 | id: | 1839 | id: |
@@ -1789,7 +1853,7 @@ components: | |||
1789 | language: | 1853 | language: |
1790 | $ref: '#/components/schemas/VideoConstantString' | 1854 | $ref: '#/components/schemas/VideoConstantString' |
1791 | privacy: | 1855 | privacy: |
1792 | $ref: '#/components/schemas/VideoPrivacy' | 1856 | $ref: '#/components/schemas/VideoPrivacyConstant' |
1793 | description: | 1857 | description: |
1794 | type: string | 1858 | type: string |
1795 | duration: | 1859 | duration: |
@@ -1917,6 +1981,12 @@ components: | |||
1917 | type: array | 1981 | type: array |
1918 | items: | 1982 | items: |
1919 | $ref: '#/components/schemas/VideoCommentThreadTree' | 1983 | $ref: '#/components/schemas/VideoCommentThreadTree' |
1984 | VideoCaption: | ||
1985 | properties: | ||
1986 | language: | ||
1987 | $ref: '#/components/schemas/VideoConstantString' | ||
1988 | captionPath: | ||
1989 | type: string | ||
1920 | Avatar: | 1990 | Avatar: |
1921 | properties: | 1991 | properties: |
1922 | path: | 1992 | path: |
@@ -1966,6 +2036,13 @@ components: | |||
1966 | autoPlayVideo: | 2036 | autoPlayVideo: |
1967 | type: boolean | 2037 | type: boolean |
1968 | role: | 2038 | role: |
2039 | type: integer | ||
2040 | enum: | ||
2041 | - 0 | ||
2042 | - 1 | ||
2043 | - 2 | ||
2044 | description: 'The user role (Admin = 0, Moderator = 1, User = 2)' | ||
2045 | roleLabel: | ||
1969 | type: string | 2046 | type: string |
1970 | enum: | 2047 | enum: |
1971 | - User | 2048 | - User |
@@ -2096,6 +2173,14 @@ components: | |||
2096 | properties: | 2173 | properties: |
2097 | comment: | 2174 | comment: |
2098 | $ref: '#/components/schemas/VideoComment' | 2175 | $ref: '#/components/schemas/VideoComment' |
2176 | VideoListResponse: | ||
2177 | properties: | ||
2178 | total: | ||
2179 | type: number | ||
2180 | data: | ||
2181 | type: array | ||
2182 | items: | ||
2183 | $ref: '#/components/schemas/Video' | ||
2099 | AddUser: | 2184 | AddUser: |
2100 | properties: | 2185 | properties: |
2101 | username: | 2186 | username: |
@@ -2115,12 +2200,11 @@ components: | |||
2115 | description: 'The user daily video quota ' | 2200 | description: 'The user daily video quota ' |
2116 | role: | 2201 | role: |
2117 | type: integer | 2202 | type: integer |
2118 | format: int32 | ||
2119 | enum: | 2203 | enum: |
2120 | - 0 | 2204 | - 0 |
2121 | - 1 | 2205 | - 1 |
2122 | - 2 | 2206 | - 2 |
2123 | description: 'The user role ' | 2207 | description: 'The user role (Admin = 0, Moderator = 1, User = 2)' |
2124 | required: | 2208 | required: |
2125 | - username | 2209 | - username |
2126 | - password | 2210 | - password |
@@ -2143,8 +2227,12 @@ components: | |||
2143 | type: string | 2227 | type: string |
2144 | description: 'The updated daily video quota of the user ' | 2228 | description: 'The updated daily video quota of the user ' |
2145 | role: | 2229 | role: |
2146 | type: string | 2230 | type: integer |
2147 | description: 'The updated role of the user ' | 2231 | enum: |
2232 | - 0 | ||
2233 | - 1 | ||
2234 | - 2 | ||
2235 | description: 'The user role (Admin = 0, Moderator = 1, User = 2)' | ||
2148 | required: | 2236 | required: |
2149 | - id | 2237 | - id |
2150 | 2238 | ||
@@ -2206,10 +2294,28 @@ components: | |||
2206 | - username | 2294 | - username |
2207 | - password | 2295 | - password |
2208 | 2296 | ||
2209 | VideoChannelInput: | 2297 | VideoChannelCreate: |
2210 | properties: | 2298 | properties: |
2211 | name: | 2299 | name: |
2212 | type: string | 2300 | type: string |
2301 | displayName: | ||
2302 | type: string | ||
2303 | description: | ||
2304 | type: string | ||
2305 | support: | ||
2306 | type: string | ||
2307 | required: | ||
2308 | - name | ||
2309 | - displayName | ||
2310 | VideoChannelUpdate: | ||
2311 | properties: | ||
2312 | displayName: | ||
2313 | type: string | ||
2213 | description: | 2314 | description: |
2214 | type: string | 2315 | type: string |
2316 | support: | ||
2317 | type: string | ||
2318 | bulkVideosSupportUpdate: | ||
2319 | type: boolean | ||
2320 | description: 'Update all videos support field of this channel' | ||
2215 | 2321 | ||
diff --git a/support/doc/api/quickstart.md b/support/doc/api/quickstart.md index 00874a1c9..2222be741 100644 --- a/support/doc/api/quickstart.md +++ b/support/doc/api/quickstart.md | |||
@@ -47,7 +47,7 @@ $ curl -H 'Authorization: Bearer 90286a0bdf0f7315d9d3fe8dabf9e1d2be9c97d0' https | |||
47 | ``` | 47 | ``` |
48 | 48 | ||
49 | 49 | ||
50 | ### List videos | 50 | ## List videos |
51 | 51 | ||
52 | ```bash | 52 | ```bash |
53 | $ curl https://peertube.example.com/api/v1/videos | 53 | $ curl https://peertube.example.com/api/v1/videos |
diff --git a/support/doc/development/client/code.md b/support/doc/development/client/code.md deleted file mode 100644 index 235116e78..000000000 --- a/support/doc/development/client/code.md +++ /dev/null | |||
@@ -1,67 +0,0 @@ | |||
1 | # Client code documentation | ||
2 | |||
3 | The client is a HTML/CSS/JavaScript web application (single page application -> SPA) developed with [TypeScript](https://www.typescriptlang.org/)/[Angular](https://angular.io/). | ||
4 | |||
5 | |||
6 | ## Technologies | ||
7 | |||
8 | * [TypeScript](https://www.typescriptlang.org/) -> Language | ||
9 | * [Angular](https://angular.io) -> JavaScript framework | ||
10 | * [SASS](http://sass-lang.com/) -> CSS framework | ||
11 | * [Webpack](https://webpack.js.org/) -> Source builder (compile TypeScript, SASS files, bundle them...) | ||
12 | * [Bootstrap](http://getbootstrap.com/) -> CSS framework | ||
13 | * [WebTorrent](https://webtorrent.io/) -> JavaScript library to make P2P in the browser | ||
14 | * [VideoJS](http://videojs.com/) -> JavaScript player framework | ||
15 | |||
16 | |||
17 | ## Files | ||
18 | |||
19 | The client files are in the `client` directory. The Webpack 2 configurations files are in `client/config` and the source files in `client/src`. | ||
20 | The client modules description are in the [client/package.json](/client/package.json). There are many modules that are used to compile the web application in development or production mode. | ||
21 | Here is the description of the useful `client` files directory: | ||
22 | |||
23 | tslint.json -> TypeScript linter rules | ||
24 | tsconfig.json -> TypeScript configuration for the compilation | ||
25 | .bootstraprc -> Bootstrap configuration file (which module we need) | ||
26 | config -> Webpack configuration files | ||
27 | src | ||
28 | |__ app -> TypeScript files for Angular application | ||
29 | |__ assets -> static files (images...) | ||
30 | |__ sass -> SASS files that are global for the application | ||
31 | |__ standalone -> files outside the Angular application (embed HTML page...) | ||
32 | |__ index.html -> root HTML file for our Angular application | ||
33 | |__ main.ts -> Main TypeScript file that boostraps our Angular application | ||
34 | |__ polyfills.ts -> Polyfills imports (ES 2015...) | ||
35 | |||
36 | Details of the Angular application file structure. It tries to follow [the official Angular styleguide](https://angular.io/docs/ts/latest/guide/style-guide.html). | ||
37 | |||
38 | app | ||
39 | |__ +admin -> Admin components (followers, users...) | ||
40 | |__ account -> Account components (password change...) | ||
41 | |__ core -> Core components/services | ||
42 | |__ header -> Header components (logo, search...) | ||
43 | |__ login -> Login component | ||
44 | |__ menu -> Menu component (on the left) | ||
45 | |__ shared -> Shared components/services (search component, REST services...) | ||
46 | |__ signup -> Signup form | ||
47 | |__ videos -> Video components (list, watch, upload...) | ||
48 | |__ app.component.{html,scss,ts} -> Main application component | ||
49 | |__ app-routing.module.ts -> Main Angular routes | ||
50 | |__ app.module.ts -> Angular root module that imports all submodules we need | ||
51 | |||
52 | ## Conventions | ||
53 | |||
54 | Uses [TSLint](https://palantir.github.io/tslint/) for TypeScript linting and [Angular styleguide](https://angular.io/docs/ts/latest/guide/style-guide.html). | ||
55 | |||
56 | ## Concepts | ||
57 | |||
58 | In a Angular application, we create components that we put together. Each component is defined by an HTML structure, a TypeScript file and optionally a SASS file. | ||
59 | If you are not familiar with Angular I recommend you to read the [quickstart guide](https://angular.io/docs/ts/latest/quickstart.html). | ||
60 | |||
61 | ## Components tree | ||
62 | |||
63 | ![Components tree](/support/doc/development/client/components-tree.svg) | ||
64 | |||
65 | ## Newcomers | ||
66 | |||
67 | The main client component is `app.component.ts`. You can begin to look at this file. Then you could navigate in the different submodules to see how components are built. | ||
diff --git a/support/doc/development/client/components-tree.png b/support/doc/development/client/components-tree.png deleted file mode 100644 index 09582d742..000000000 --- a/support/doc/development/client/components-tree.png +++ /dev/null | |||
Binary files differ | |||
diff --git a/support/doc/development/client/components-tree.svg b/support/doc/development/client/components-tree.svg deleted file mode 100644 index fd6951d93..000000000 --- a/support/doc/development/client/components-tree.svg +++ /dev/null | |||
@@ -1,2 +0,0 @@ | |||
1 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | ||
2 | <svg xmlns="http://www.w3.org/2000/svg" style="background-color: rgb(255, 255, 255);" xmlns:xlink="http://www.w3.org/1999/xlink" width="1141px" height="311px" version="1.1" content="<mxfile userAgent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0" version="8.9.9" editor="www.draw.io" type="device"><diagram name="Page-1" id="8be7db5e-9885-9541-e5e4-cf9e4eb3a109">7Zpbb5swFMc/TaTtZQLMLY9d1nYP2zSp2u3RwQ54dTAypkn36WeDSSCmVdcR3FTpQwXHN/z7G59zHGZgsd5ec1hknxnCdOY5aDsDH2aeFzuB/K8M943Bd93GkHKCGlPHcEP+YG10tLUiCJe9ioIxKkjRNyYsz3EiejbIOdv0q60Y7Y9awBQbhpsEUtP6gyCRaasbzvcFHzFJMz107EVNwRImtylnVa7Hm3lgVf81xWvY9qUnWmYQsU3HBC5nYMEZE83VervAVKFtsTXtrh4o3T03x7l4SgNPT6gU9+3cMZIo9C3jImMpyyG93Fvf1/PDqgdH3mViTeWlKy/xloifyvwu0He/2pJc8PtOkbr9pTsoBeTiQqkmDTnLcWu7IpTqOjhHbY2EwrIkSWPUVdQQv7EQ93opwUowado//ifGCl1vxXKhq7nq3kSmKZas4omG4ulFCHmKdS1NTuHqNNOYrzFbYzlHWYFjCgW5668sqBdouqu3F0leaJ2GNQPOWbNnahZb08w9a/ZMzSJrmnlnzZ6pGbCmWTymZk/F9rC2gxyeRTSaiKAfvFKCPpiKYGiF4CO7yBR0/f+kq5t+ZUQO7Dk6k5jPdbCjEwm3DX7aLppn0K0ONNo9xtNkG3XreEyOl/RSTLWt6LHvIK10pxdFUWdw60K6Na1eDz6lMt1TkDcZEfimgPU8NjLh7KM+dFor6fcWjDJe9wOwiwIc1X6Ts1vcKZmHEYDhY27uDnOBt4+6MF0K/P5CbRO8TSd9bG1ZN3N0RmA76obz8Ko7hWAEmGs8tBWMtKHrOYD8Z80Ca5qN6wVe27vk29IFGP7jO0GYlTMvhGvlEPJlWewmdgQ3giCOV8mQGwmTGC9XI7mR+CDeaaOSKfyIbzC+REQFY2+qgjKIZPuqQFDgt5I6lQO/R+ROXqainnxjWvJDi2zWq3csgQIcI39IoNhbgnAkPx8c+vkofBcYEsUDCgUjKBQYCn0i5fFCp2mQ+laRhgbSH1Ak2YkzNcLRSZlGBtOLJJE+8tRXauBa3J1j891nKclPHOnu1wwbSHdBzznYa3/O6gZ77Wq3EIV70whz6pnTkGiuLdHARMcQr1A0YC3fnZuuGq2P6VUmSaNsZlHtrtlBesUoVd+knDZU9zCkBAbU+VBAGY3A1DWY1um/6nZZlfjk0Xr22AIzqfxWYn7qSA8DyyGkg/nPGEgHEqAlq15A+mPwG6D8INLQt3k4ZZ4ADpxCfVUf9nnOF6aOra7q7/Be6CnUfykRRTaVMM8JB5T4rB53l/a/Qg3mjk0NzB2mdYiLDOY5pkfcvyfB6zoTngzI2/03t823A/vvmsHlXw==</diagram></mxfile>"><defs/><g transform="translate(0.5,0.5)"><path d="M 390 80 L 390 104 L 130 104 L 130 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 130 126.88 L 126.5 119.88 L 130 121.63 L 133.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 390 80 L 390 104 L 280 104 L 280 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 280 126.88 L 276.5 119.88 L 280 121.63 L 283.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 390 80 L 390 104 L 560 104 L 560 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 560 126.88 L 556.5 119.88 L 560 121.63 L 563.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 390 80 L 390 104 L 430 104 L 430 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 430 126.88 L 426.5 119.88 L 430 121.63 L 433.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 390 80 L 390 104 L 690 104 L 690 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 690 126.88 L 686.5 119.88 L 690 121.63 L 693.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 390 80 L 390 104 L 820 104 L 820 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 820 126.88 L 816.5 119.88 L 820 121.63 L 823.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 390 80 L 390 104 L 950 104 L 950 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 950 126.88 L 946.5 119.88 L 950 121.63 L 953.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 390 80 L 390 104 L 1080 104 L 1080 121.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 1080 126.88 L 1076.5 119.88 L 1080 121.63 L 1083.5 119.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><ellipse cx="390" cy="40" rx="60" ry="40" fill="#e1d5e7" stroke="#9673a6" pointer-events="none"/><g transform="translate(345.5,34.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="88" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 89px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">App component</div></div></foreignObject><text x="44" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">App component</text></switch></g><path d="M 430 208 L 430 232 L 370 232 L 370 250.13" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 370 255.38 L 366.5 248.38 L 370 250.13 L 373.5 248.38 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 430 208 L 430 232 L 470 232 L 470 250.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 470 255.88 L 466.5 248.88 L 470 250.63 L 473.5 248.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 430 208 L 430 232 L 570 232 L 570 250.13" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 570 255.38 L 566.5 248.38 L 570 250.13 L 573.5 248.38 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><ellipse cx="430" cy="168" rx="60" ry="40" fill="#dae8fc" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(408.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="43" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 44px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">VideosĀ </div></div></foreignObject><text x="22" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">VideosĀ </text></switch></g><ellipse cx="570" cy="282" rx="40" ry="25" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(524.5,262.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="91" height="38" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 91px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Edit (upload/update)<div><br /></div></div></div></foreignObject><text x="46" y="25" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Edit (upload/update)<div><br></div></text></switch></g><ellipse cx="470" cy="282" rx="40" ry="25" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(459.5,275.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="21" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 22px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">List</div></div></foreignObject><text x="11" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">List</text></switch></g><ellipse cx="370" cy="282" rx="40" ry="25" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(352.5,275.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="34" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 35px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Watch</div></div></foreignObject><text x="17" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Watch</text></switch></g><ellipse cx="560" cy="168" rx="60" ry="40" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(537.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="45" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 46px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Account</div></div></foreignObject><text x="23" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Account</text></switch></g><ellipse cx="280" cy="168" rx="60" ry="40" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(263.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="32" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 33px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Login</div></div></foreignObject><text x="16" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Login</text></switch></g><path d="M 130 208 L 130 231 L 45 231 L 45 246.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 45 251.88 L 41.5 244.88 L 45 246.63 L 48.5 244.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 130 208 L 130 231 L 155 231 L 155 246.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 155 251.88 L 151.5 244.88 L 155 246.63 L 158.5 244.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 130 208 L 130 231 L 260 231 L 260 246.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 260 251.88 L 256.5 244.88 L 260 246.63 L 263.5 244.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><ellipse cx="130" cy="168" rx="60" ry="40" fill="#dae8fc" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(111.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="36" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 37px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Admin</div></div></foreignObject><text x="18" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Admin</text></switch></g><ellipse cx="45" cy="282" rx="45" ry="28.5" fill="#dae8fc" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(22.5,275.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="44" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 45px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Follows</div></div></foreignObject><text x="22" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Follows</text></switch></g><ellipse cx="155" cy="282" rx="45" ry="28.5" fill="#dae8fc" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(116.5,275.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="77" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 78px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Video abuses</div></div></foreignObject><text x="39" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Video abuses</text></switch></g><ellipse cx="260" cy="282" rx="40" ry="28.5" fill="#dae8fc" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(243.5,275.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="33" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 34px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Users</div></div></foreignObject><text x="17" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Users</text></switch></g><ellipse cx="690" cy="168" rx="60" ry="40" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(673.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="33" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 34px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">About</div></div></foreignObject><text x="17" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">About</text></switch></g><ellipse cx="820" cy="168" rx="60" ry="40" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(773.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="92" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 93px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div>Page Not Found</div></div></div></foreignObject><text x="46" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica"><div>Page Not Found</div></text></switch></g><ellipse cx="950" cy="168" rx="60" ry="40" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(916.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="66" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 67px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div>My Account</div></div></div></foreignObject><text x="33" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica"><div>My Account</div></text></switch></g><ellipse cx="1080" cy="168" rx="60" ry="40" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(1034.5,162.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="90" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 91px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Video Channels</div></div></foreignObject><text x="45" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Video Channels</text></switch></g></g></svg> \ No newline at end of file | ||
diff --git a/support/doc/development/client/components-tree.xml b/support/doc/development/client/components-tree.xml deleted file mode 100644 index 5a37c48bc..000000000 --- a/support/doc/development/client/components-tree.xml +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | <mxfile userAgent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0" version="8.9.9" editor="www.draw.io" type="device"><diagram name="Page-1" id="8be7db5e-9885-9541-e5e4-cf9e4eb3a109">7Zpbb5swFMc/TaTtZQLMLY9d1nYP2zSp2u3RwQ54dTAypkn36WeDSSCmVdcR3FTpQwXHN/z7G59zHGZgsd5ec1hknxnCdOY5aDsDH2aeFzuB/K8M943Bd93GkHKCGlPHcEP+YG10tLUiCJe9ioIxKkjRNyYsz3EiejbIOdv0q60Y7Y9awBQbhpsEUtP6gyCRaasbzvcFHzFJMz107EVNwRImtylnVa7Hm3lgVf81xWvY9qUnWmYQsU3HBC5nYMEZE83VervAVKFtsTXtrh4o3T03x7l4SgNPT6gU9+3cMZIo9C3jImMpyyG93Fvf1/PDqgdH3mViTeWlKy/xloifyvwu0He/2pJc8PtOkbr9pTsoBeTiQqkmDTnLcWu7IpTqOjhHbY2EwrIkSWPUVdQQv7EQ93opwUowado//ifGCl1vxXKhq7nq3kSmKZas4omG4ulFCHmKdS1NTuHqNNOYrzFbYzlHWYFjCgW5668sqBdouqu3F0leaJ2GNQPOWbNnahZb08w9a/ZMzSJrmnlnzZ6pGbCmWTymZk/F9rC2gxyeRTSaiKAfvFKCPpiKYGiF4CO7yBR0/f+kq5t+ZUQO7Dk6k5jPdbCjEwm3DX7aLppn0K0ONNo9xtNkG3XreEyOl/RSTLWt6LHvIK10pxdFUWdw60K6Na1eDz6lMt1TkDcZEfimgPU8NjLh7KM+dFor6fcWjDJe9wOwiwIc1X6Ts1vcKZmHEYDhY27uDnOBt4+6MF0K/P5CbRO8TSd9bG1ZN3N0RmA76obz8Ko7hWAEmGs8tBWMtKHrOYD8Z80Ca5qN6wVe27vk29IFGP7jO0GYlTMvhGvlEPJlWewmdgQ3giCOV8mQGwmTGC9XI7mR+CDeaaOSKfyIbzC+REQFY2+qgjKIZPuqQFDgt5I6lQO/R+ROXqainnxjWvJDi2zWq3csgQIcI39IoNhbgnAkPx8c+vkofBcYEsUDCgUjKBQYCn0i5fFCp2mQ+laRhgbSH1Ak2YkzNcLRSZlGBtOLJJE+8tRXauBa3J1j891nKclPHOnu1wwbSHdBzznYa3/O6gZ77Wq3EIV70whz6pnTkGiuLdHARMcQr1A0YC3fnZuuGq2P6VUmSaNsZlHtrtlBesUoVd+knDZU9zCkBAbU+VBAGY3A1DWY1um/6nZZlfjk0Xr22AIzqfxWYn7qSA8DyyGkg/nPGEgHEqAlq15A+mPwG6D8INLQt3k4ZZ4ADpxCfVUf9nnOF6aOra7q7/Be6CnUfykRRTaVMM8JB5T4rB53l/a/Qg3mjk0NzB2mdYiLDOY5pkfcvyfB6zoTngzI2/03t823A/vvmsHlXw==</diagram></mxfile> \ No newline at end of file | ||
diff --git a/support/doc/development/server/code.md b/support/doc/development/server/code.md deleted file mode 100644 index 3894c2542..000000000 --- a/support/doc/development/server/code.md +++ /dev/null | |||
@@ -1,58 +0,0 @@ | |||
1 | # Server code documentation | ||
2 | |||
3 | The server is a web server developed with [TypeScript](https://www.typescriptlang.org/)/[Express](http://expressjs.com). | ||
4 | |||
5 | |||
6 | ## Technologies | ||
7 | |||
8 | * [TypeScript](https://www.typescriptlang.org/) -> Language | ||
9 | * [PostgreSQL](https://www.postgresql.org/) -> Database | ||
10 | * [Redis](https://redis.io/) -> Job queue/cache | ||
11 | * [Express](http://expressjs.com) -> Web server framework | ||
12 | * [Sequelize](http://docs.sequelizejs.com/en/v3/) -> SQL ORM | ||
13 | * [WebTorrent](https://webtorrent.io/) -> BitTorrent tracker and torrent creation | ||
14 | * [Mocha](https://mochajs.org/) -> Test framework | ||
15 | |||
16 | |||
17 | ## Files | ||
18 | |||
19 | The server main file is [server.ts](/server.ts). | ||
20 | The server modules description are in the [package.json](/package.json) at the project root. | ||
21 | All other server files are in the [server](/server) directory: | ||
22 | |||
23 | server.ts -> app initialization, main routes configuration (static routes...) | ||
24 | config -> server YAML configurations (for tests, production...) | ||
25 | scripts -> Scripts files for npm run | ||
26 | server | ||
27 | |__ controllers -> API routes/controllers files | ||
28 | |__ helpers -> functions used by different part of the project (logger, utils...) | ||
29 | |__ initializers -> functions used at the server startup (installer, database, constants...) | ||
30 | |__ lib -> library function (WebTorrent, OAuth2, ActivityPub...) | ||
31 | |__ middlewares -> middlewares for controllers (requests validators, requests pagination...) | ||
32 | |__ models -> Sequelize models for each SQL tables (videos, users, accounts...) | ||
33 | |__ tests -> API tests and real world simulations (to test the decentralized feature...) | ||
34 | |||
35 | |||
36 | ## Conventions | ||
37 | |||
38 | Uses [JavaScript Standard Style](http://standardjs.com/). | ||
39 | |||
40 | ## Architecture | ||
41 | |||
42 | The server is composed by: | ||
43 | |||
44 | * a REST API (relying on the Express framework) documented on http://docs.joinpeertube.org/api.html | ||
45 | * a WebTorrent Tracker (slightly custom version of [webtorrent/bittorrent-tracker](https://github.com/webtorrent/bittorrent-tracker#server)) | ||
46 | |||
47 | A video is seeded by the server with the [WebSeed](http://www.bittorrent.org/beps/bep_0019.html) protocol (HTTP). | ||
48 | |||
49 | ![Architecture scheme](/support/doc/development/server/upload-video.png) | ||
50 | |||
51 | When a user uploads a video, the REST API creates the torrent file and then adds it to its database. | ||
52 | |||
53 | If a user wants to watch the video, the tracker will indicate all other users that are watching the video + the HTTP url for the WebSeed. | ||
54 | |||
55 | ## Newcomers | ||
56 | |||
57 | The server entrypoint is [server.ts](/server.ts). Looking at this file is a good start. | ||
58 | Then you can try to understand the [controllers](/server/controllers): they are the entrypoints of each API request. | ||
diff --git a/support/doc/development/server/peertube-architecture-server.xml b/support/doc/development/server/peertube-architecture-server.xml deleted file mode 100644 index 3299307a1..000000000 --- a/support/doc/development/server/peertube-architecture-server.xml +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | <mxfile userAgent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" version="7.9.7" editor="www.draw.io" type="device"><diagram id="033390a3-e8de-cf4f-5be1-41b3d99c78ae" name="Page-1">3VpRc5s4EP41nmkekgGEwH6M3aS9md5Mpnbby6MA2dBgxIHs2P31J4EECGGbxLhNzu1MYLXC0re7364Wj8BsvfuUoTT8mwQ4HllGsBuBjyPLMm3LGvH/RrAvJeOxWQpWWRQIpVowj35hITSEdBMFOFcUKSExjVJV6JMkwT5VZCjLyLOqtiSx+q0pWmFNMPdRrEt/RAENxS4sp5Z/xtEqlN9sOpNyxEP+0yojm0R838gCy+JTDq+RfJbYaB6igDw3ROBuBGYZIbS8Wu9mOObYStjKefcHRqt1ZzihfSaAcsIWxRssV1ysi+4lFsVuMNc3R2D6HEYUz1Pk89FnZn0mC+k6FsPLKI5nJCZZMVfuHUxzmpEn3Bgxig8b0VcsNrHFGcW7hkjs4BMma0yzPVMRo7YAUzgbELfPteVcqRI2rGZPhBAJb1lVT64RYxcCtG4AbQ3AbznOmMQcFsixj32/C0hvDG04EJCmpSLpmjqUlU4TSmcAJOEhJAd2yd+CJJzAP4ckGGuI4YDxm7glGQ3JiiQovqul0xpTQ8UP7yL6DxffQHH3KJQYPNm+HLKgvH8U03KKMnrLuZgJEpJgKbuP+MLFAwKp4ccozyO/FAoV/pifmNK9SBBoQwkT1ev/QkgqrUwSKtRM85gNc7LJfIGKIG22qhWWWsJuHLCjhs5wjGi0VRPGWUwinawOgFmGEWV5kC0xxEUOzIr9sIwWMaNZTsxWPQ2iLbtc8cvbIKi1tyyHkmIWz8SIIg/l1SS2msY8zV+Ym1PVDTKcR7+QVyhw26UkSmixXTgdwY9MguJolXBTsiWywAVTHi4RS6q3YmAdBUHhazHycDytUmVXwjhtT+nlWlBWZYFYrZJau4LVuDEhtJR4vRa83tvK4uEPHJWGClkuc+ZabTeo1tDLMyaaY3y9my+Y5PbhL81yL2PDAOJxYHex4djygOMMw4aTsZqg3Q4ydOCFyNC5PBmaKhm6ChkabTKsqa7Jh+Yb4EOZpJqEODgfFlPZNtG+oSDYRA+kncyfjuJCjtuqa1v6zhge02cX5QpeG5J2V+Gs03H+lBfHD17GpBhn/O7DD+x9Xcyuupl4GtFFxfJpRnwSv0tydoYi52vGzsBUCcR6Q+QsY6bhCczAlQ01n1hkDFpe1/bKwy9jc2wyPne72HziuAANxOaOc5rOJ5dic0ODaBA2tw7SeXXzWNH+eyhtTdk2aVC5/SaoHMDW0cgelpqBXkffY+qHVV3sx1FJryhNY0aBNCLJu+RYyTwDFMAGtNQEe+2Y55GsXJB0xL28b7HAICQM9B7BILTgHq7y/j+08MdOvGbHiVfGJgOOhY446eYdefRDYTCLfYnxMy//0nCz9hIUxfnNzc2B+urMDMti0+ruHgWO58CBMixo9eE6D0zuhbpHpt7SlFB6NYqlgPugAqfz74bIgeu88M5bpmDZ6a4elE+Z42yrVELl49SvYGLvBW0K1S4iCptGFKL+XN3lIIRpL+MijEOmh5OB7A5PdrJNo8PscIjKytXM/rChdTdpk8YEcbqsG0v8JDPHOLjqCE9lrl/0sfhUqtbFJ2LzMhz+Lnga6jwN+tZvjZMTdCdqWpcvQi5b40G3dWBzjtR42uzW+xz7EhWDqb9u4PUYM3GHM38hK56LLpFPIP/XlU+c4jMMr1iGWnJXJNIgFjDpIBZzkITiaFB/K8iEP7emk3bsd0XgS19LaG8legWfrcfepGfoNQCFR4j63KJaDZC2kcq9iDnHmmTqY9qVebl/7TGvCDaJ6KV7sH0puZcXgA4G7ukFQ5HrOSci+Hsgfw/JFHQE9Ntoa7fz5Mm2NrxwW9vSqLrunTDv4ERmGaLs4xXg58Xi4UrztPfQPJH5f5AG9dh1Fbtcn9k8GbY5oh/ovosK/vQpuyrYZzJTc9VLHa6xc+Bw7U68oX4tBEGPw3XXKesVtRC7rX/LVZqu/sEcuPsP</diagram></mxfile> \ No newline at end of file | ||
diff --git a/support/doc/development/server/upload-video.png b/support/doc/development/server/upload-video.png deleted file mode 100644 index 7edc06792..000000000 --- a/support/doc/development/server/upload-video.png +++ /dev/null | |||
Binary files differ | |||
diff --git a/support/doc/production.md b/support/doc/production.md index 2eba6e6a3..4f20cf140 100644 --- a/support/doc/production.md +++ b/support/doc/production.md | |||
@@ -204,6 +204,9 @@ logs. You can set another password with: | |||
204 | $ cd /var/www/peertube/peertube-latest && NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u root | 204 | $ cd /var/www/peertube/peertube-latest && NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u root |
205 | ``` | 205 | ``` |
206 | 206 | ||
207 | Alternatively you can set the environment variable `PT_INITIAL_ROOT_PASSWORD`, | ||
208 | to your own administrator password, although it must be 6 characters or more. | ||
209 | |||
207 | ### What now? | 210 | ### What now? |
208 | 211 | ||
209 | Now your instance is up you can: | 212 | Now your instance is up you can: |
diff --git a/support/doc/tools.md b/support/doc/tools.md index 086cd5cff..c0f0b4ba1 100644 --- a/support/doc/tools.md +++ b/support/doc/tools.md | |||
@@ -35,7 +35,7 @@ You need to follow all the following steps even if you are on a PeerTube server | |||
35 | 35 | ||
36 | ### Dependencies | 36 | ### Dependencies |
37 | 37 | ||
38 | Install the [PeerTube dependencies](dependencies.md). | 38 | Install the [PeerTube dependencies](dependencies.md) except PostgreSQL and Redis. |
39 | 39 | ||
40 | ### Installation | 40 | ### Installation |
41 | 41 | ||
@@ -44,18 +44,14 @@ Clone the PeerTube repo to get the latest version (even if you are on your PeerT | |||
44 | ``` | 44 | ``` |
45 | $ git clone https://github.com/Chocobozzz/PeerTube.git | 45 | $ git clone https://github.com/Chocobozzz/PeerTube.git |
46 | $ CLONE="$(pwd)/PeerTube" | 46 | $ CLONE="$(pwd)/PeerTube" |
47 | ``` | ||
48 | |||
49 | Run ``yarn install --pure-lockfile`` | ||
50 | ``` | ||
51 | $ cd ${CLONE} | 47 | $ cd ${CLONE} |
52 | $ yarn install --pure-lockfile | ||
53 | ``` | 48 | ``` |
54 | 49 | ||
55 | Build server tools: | 50 | Install dependencies and build CLI tools: |
51 | |||
56 | ``` | 52 | ``` |
57 | $ cd ${CLONE} | 53 | $ NOCLIENT=1 yarn install --pure-lockfile |
58 | $ npm run build:server | 54 | $ npm run setup:cli |
59 | ``` | 55 | ``` |
60 | 56 | ||
61 | ### CLI wrapper | 57 | ### CLI wrapper |
diff --git a/support/docker/production/.env b/support/docker/production/.env index 7b9092642..c8393d0ce 100644 --- a/support/docker/production/.env +++ b/support/docker/production/.env | |||
@@ -5,8 +5,7 @@ PEERTUBE_WEBSERVER_PORT=443 | |||
5 | PEERTUBE_WEBSERVER_HTTPS=true | 5 | PEERTUBE_WEBSERVER_HTTPS=true |
6 | # If you need more than one IP as trust_proxy | 6 | # If you need more than one IP as trust_proxy |
7 | # pass them as a comma separated array: | 7 | # pass them as a comma separated array: |
8 | PEERTUBE_TRUST_PROXY=["127.0.0.1"] | 8 | PEERTUBE_TRUST_PROXY=["127.0.0.1", "loopback", "172.18.0.0/16"] |
9 | #PEERTUBE_TRUST_PROXY=["127.0.0.1", "loopback", "192.168.1.0/24"] | ||
10 | #PEERTUBE_SMTP_USERNAME= | 9 | #PEERTUBE_SMTP_USERNAME= |
11 | #PEERTUBE_SMTP_PASSWORD= | 10 | #PEERTUBE_SMTP_PASSWORD= |
12 | PEERTUBE_SMTP_HOSTNAME=postfix | 11 | PEERTUBE_SMTP_HOSTNAME=postfix |
diff --git a/support/docker/production/docker-compose.yml b/support/docker/production/docker-compose.yml index df21a14d4..263fb6e95 100644 --- a/support/docker/production/docker-compose.yml +++ b/support/docker/production/docker-compose.yml | |||
@@ -72,3 +72,10 @@ services: | |||
72 | labels: | 72 | labels: |
73 | traefik.enable: "false" | 73 | traefik.enable: "false" |
74 | restart: "always" | 74 | restart: "always" |
75 | |||
76 | networks: | ||
77 | default: | ||
78 | ipam: | ||
79 | driver: default | ||
80 | config: | ||
81 | - subnet: 172.18.0.0/16 | ||