79 lines
1.5 KiB
JavaScript
79 lines
1.5 KiB
JavaScript
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/v3/logout`, {
|
|
method: "POST",
|
|
headers: {
|
|
Authorization: r.access_token
|
|
}
|
|
});
|
|
if(r2.statusCode == 200){
|
|
return res(
|
|
options.id,
|
|
`${options.id}@0ut0f.space`
|
|
)
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|