const fs = require('fs/promises') async function register ({ registerIdAndPassAuth, registerSetting, settingsManager, peertubeHelpers }) { registerSetting({ name: 'url', label: 'Domain', type: 'input', descriptionHTML: 'domain of matrix server', private: true }) registerIdAndPassAuth({ authName: 'matrix', getWeight: () => 500, login: options => login(peertubeHelpers, settingsManager, options) }) setWeight(500) } async function unregister () { return } module.exports = { register, unregister } async function login (peertubeHelpers, settingsManager, options) { const logger = peertubeHelpers.logger const settings = await settingsManager.getSettings([ 'url', ]) // options.id, options.password const r = await fetch(`https://${settings.url}/_matrix/client/v3/login`, { method: "POST", headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ type: "m.login.password", identifier: { type: "m.id.user", user: options.id, }, password: options.password, initial_display_name: "PeerTube" })}).then(f => f.json()) if(r.access_token){ const r2 = fetch(`https://${settings.url}/_matrix/client/logout`, { method: "POST", headers: { Authorization: r.access_token } }); if(r2.statusCode == 200){ return res( options.id, `${options.id}@0ut0f.space` ) } } }