Change the name/server loading method of Actor to take the address directly

This commit is contained in:
Feufochmar 2020-03-26 12:50:22 +01:00
parent 3c24c61e1e
commit cb7ed42f9b
3 changed files with 26 additions and 30 deletions

View File

@ -100,21 +100,11 @@ var UI = {
}
})
},
// Get the username + servername from an address "user@server"
getUserAndServer: function(address) {
var names = address.split('@')
return {
user: names[0],
server: names[1]
}
},
// When the user enter its address, load the actor representing the user
selectUser: function() {
// Get the user name and server name
var names = UI.getUserAndServer(Elem('connect-username').value)
// Load the actor and go to the ask-password page
ConnectedUser.actor.loadFromNameAndServer(
names.user, names.server,
ConnectedUser.actor.loadFromNameServerAddress(
Elem('connect-username').value,
function(load_ok, failure_message) {
if (load_ok) {
UI.showPage('ask-password')
@ -167,10 +157,9 @@ var UI = {
},
// Add to recipient lists
addToRecipient: function() {
var names = UI.getUserAndServer(Elem('send-message-to-recipient').value)
var actor = new Actor()
actor.loadFromNameAndServer(
names.user, names.server,
actor.loadFromNameServerAddress(
Elem('send-message-to-recipient').value,
function(load_ok, failure_message) {
if (load_ok) {
UI.composed_message.addToRecipient(actor)
@ -181,10 +170,9 @@ var UI = {
})
},
addCcRecipient: function() {
var names = UI.getUserAndServer(Elem('send-message-cc-recipient').value)
var actor = new Actor()
actor.loadFromNameAndServer(
names.user, names.server,
actor.loadFromNameServerAddress(
Elem('send-message-cc-recipient').value,
function(load_ok, failure_message) {
if (load_ok) {
UI.composed_message.addCcRecipient(actor)
@ -343,10 +331,9 @@ var UI = {
Elem('lookup-user-timeline').innerHTML = ''
Elem('lookup-user-error').innerHTML = ''
Elem('lookup-user-timeline-error').innerHTML = ''
var names = UI.getUserAndServer(Elem('lookup-user').value)
var actor = new Actor()
actor.loadFromNameAndServer(
names.user, names.server,
actor.loadFromNameServerAddress(
Elem('lookup-user').value,
function(load_ok, failure_message) {
if (load_ok) {
Elem('lookup-user-info').innerHTML = UI.renderActor(actor)

View File

@ -45,13 +45,22 @@ Actor.prototype = {
address: function() {
return this.name + '@' + this.server
},
// Load from name@server.
// Load from a "name@server" address.
// Callback is a function accepting two arguments:
// - a boolean indicating if the loading is complete or in failure,
// - a string indicating the failure
loadFromNameAndServer: function(name, server, callback) {
this.name = name
this.server = server
loadFromNameServerAddress: function(address, callback) {
var names = address.split('@')
if (names.length < 2) {
// Invalid data, return
callback(false, 'Invalid address format.')
return
}
this.server = names.splice(names.length - 1, 1)
this.name = names.splice(0, 1)
for (const elem of names) {
this.name = this.name + '@' + elem
}
// Use Webfinger to find the profile URL
var request = new XMLHttpRequest()
request.onreadystatechange = function() {
@ -76,7 +85,7 @@ Actor.prototype = {
callback(false, 'webfinger: server error')
}
}.bind(this)
request.open('GET', 'https://' + server + '/.well-known/webfinger' + '?resource=acct:' + name + '@' + server, true)
request.open('GET', 'https://' + this.server + '/.well-known/webfinger' + '?resource=acct:' + address, true)
request.send()
},
// Indicate if the type is compatible with an actor

View File

@ -1,7 +1,7 @@
const {Actor} = require('./actor.js')
// Connected user structure
var ConnectedUser = {
const ConnectedUser = {
// Data
actor: new Actor(),
tokens: {
@ -18,15 +18,15 @@ var ConnectedUser = {
// Load data from local storage if possible
// Callback is used to get the status of the loading
loadFromLocalStorage: function (callback) {
var server_name = window.localStorage.getItem('last:server.name')
var user_name = window.localStorage.getItem('last:user.name')
const server_name = window.localStorage.getItem('last:server.name')
const user_name = window.localStorage.getItem('last:user.name')
if (server_name && user_name) {
ConnectedUser.tokens.server.client_id = window.localStorage.getItem('client_id:' + server_name)
ConnectedUser.tokens.server.client_secret = window.localStorage.getItem('client_secret:' + server_name)
ConnectedUser.tokens.user.refresh_token = window.localStorage.getItem('refresh_token:' + user_name + '@' + server_name)
ConnectedUser.tokens.user.access_token = window.localStorage.getItem('access_token:' + user_name + '@' + server_name)
// Load the rest with webfinger / activity pub requests
ConnectedUser.actor.loadFromNameAndServer(user_name, server_name, callback)
ConnectedUser.actor.loadFromNameServerAddress(user_name + '@' + server_name, callback)
} else {
callback(false, 'local storage: no data')
}