X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=support%2Fdoc%2Fplugins%2Fguide.md;h=a90f8e72b2e35c96a1aae4fee4cc4e6b28be17d5;hb=096231d00e766c5d45e8975f4cec21c41a50ec2e;hp=17c681afd74e81710dc58fb402b0ada34f88764c;hpb=b044cb188d1aac57fbb589e1627e400439cda10f;p=github%2FChocobozzz%2FPeerTube.git diff --git a/support/doc/plugins/guide.md b/support/doc/plugins/guide.md index 17c681afd..a90f8e72b 100644 --- a/support/doc/plugins/guide.md +++ b/support/doc/plugins/guide.md @@ -20,6 +20,7 @@ - [Plugin static route](#plugin-static-route) - [Notifier](#notifier) - [Markdown Renderer](#markdown-renderer) + - [Auth header](#auth-header) - [Custom Modal](#custom-modal) - [Translate](#translate) - [Get public settings](#get-public-settings) @@ -195,12 +196,30 @@ Plugins can store/load JSON data, that PeerTube will store in its database (so d Example: ```js -function register (...) { +function register ({ + storageManager +}) { const value = await storageManager.getData('mykey') await storageManager.storeData('mykey', { subkey: 'value' }) } ``` +You can also store files in the plugin data directory (`/{plugins-directory}/data/{npm-plugin-name}`) **in PeerTube >= 3.2**. +This directory and its content won't be deleted when your plugin is uninstalled/upgraded. + +```js +function register ({ + storageManager, + peertubeHelpers +}) { + const basePath = peertubeHelpers.plugin.getDataDirectoryPath() + + fs.writeFile(path.join(basePath, 'filename.txt'), 'content of my file', function (err) { + ... + }) +} +``` + #### Update video constants You can add/delete video categories, licences or languages using the appropriate managers: @@ -226,9 +245,27 @@ function register (...) { You can create custom routes using an [express Router](https://expressjs.com/en/4x/api.html#router) for your plugin: ```js -function register (...) { +function register ({ + router +}) { const router = getRouter() router.get('/ping', (req, res) => res.json({ message: 'pong' })) + + // Users are automatically authenticated + router.get('/auth', (res, res) => { + const user = peertubeHelpers.user.getAuthUser(res) + + const isAdmin = user.role === 0 + const isModerator = user.role === 1 + const isUser = user.role === 2 + + res.json({ + username: user.username, + isAdmin, + isModerator, + isUser + }) + }) } ``` @@ -490,6 +527,30 @@ function register (...) { } ``` +#### Auth header + +**PeerTube >= 3.2** + +To make your own HTTP requests using the current authenticated user, use an helper to automatically set appropriate headers: + +```js +function register (...) { + registerHook({ + target: 'action:auth-user.information-loaded', + handler: ({ user }) => { + + // Useless because we have the same info in the ({ user }) parameter + // It's just an example + fetch('/api/v1/users/me', { + method: 'GET', + headers: peertubeHelpers.getAuthHeader() + }).then(res => res.json()) + .then(data => console.log('Hi %s.', data.username)) + } + }) +} +``` + #### Custom Modal To show a custom modal: @@ -744,7 +805,7 @@ If you want to translate strings of your plugin (like labels of your registered { ..., "translations": { - "fr-FR": "./languages/fr.json", + "fr": "./languages/fr.json", "pt-BR": "./languages/pt-BR.json" }, ... @@ -752,7 +813,6 @@ If you want to translate strings of your plugin (like labels of your registered ``` The key should be one of the locales defined in [i18n.ts](https://github.com/Chocobozzz/PeerTube/blob/develop/shared/models/i18n/i18n.ts). -You **must** use the complete locales (`fr-FR` instead of `fr`). Translation files are just objects, with the english sentence as the key and the translation as the value. `fr.json` could contain for example: