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