From abfb2f62f455f0f7ae6a7a583dabe66beb677ec8 Mon Sep 17 00:00:00 2001 From: Namekuji Date: Fri, 27 Jan 2023 01:11:37 -0500 Subject: [PATCH] fix an issue that remote accounts cannot be added as cohosts --- audon-fe/src/assets/utils.js | 2 +- audon-fe/src/views/CreateView.vue | 5 ++--- audon-fe/src/views/RoomView.vue | 2 +- auth.go | 9 +++++---- room.go | 2 +- schema.go | 11 +++-------- user.go | 2 +- 7 files changed, 14 insertions(+), 19 deletions(-) diff --git a/audon-fe/src/assets/utils.js b/audon-fe/src/assets/utils.js index 5a3d4e9..83bfbfe 100644 --- a/audon-fe/src/assets/utils.js +++ b/audon-fe/src/assets/utils.js @@ -10,7 +10,7 @@ export const validators = { export function webfinger(user) { if (!user) return ""; const url = new URL(user.url); - const finger = user.acct.split("@"); + const finger = user.username.split("@"); return `${finger[0]}@${url.host}`; } diff --git a/audon-fe/src/views/CreateView.vue b/audon-fe/src/views/CreateView.vue index 7d215e9..1c897f1 100644 --- a/audon-fe/src/views/CreateView.vue +++ b/audon-fe/src/views/CreateView.vue @@ -176,8 +176,7 @@ export default { title: this.title, description: this.description, cohosts: map(this.cohosts, (u) => ({ - remote_id: u.id, - remote_url: u.url, + webfinger: webfinger(u), })), restriction: this.relationship, advertise: @@ -333,7 +332,7 @@ export default { diff --git a/audon-fe/src/views/RoomView.vue b/audon-fe/src/views/RoomView.vue index 6883c86..fe85c7c 100644 --- a/audon-fe/src/views/RoomView.vue +++ b/audon-fe/src/views/RoomView.vue @@ -562,7 +562,7 @@ export default { const resp = await axios.get(`/app/user/${identity}`); const account = this.roomInfo.accounts[identity]; const info = { - acct: account.acct, + username: account.username, displayName: account.displayName, avatar: account.avatar, url: account.url, diff --git a/auth.go b/auth.go index 9bba66f..b1b715d 100644 --- a/auth.go +++ b/auth.go @@ -138,7 +138,10 @@ func oauthHandler(c echo.Context) (err error) { } coll := mainDB.Collection(COLLECTION_USER) - if result, dbErr := findUserByRemote(c.Request().Context(), string(acc.ID), acc.URL); dbErr == mongo.ErrNoDocuments { + acctUrl, _ := url.Parse(acc.URL) + finger := strings.Split(acc.Username, "@") + webfinger := fmt.Sprintf("%s@%s", finger[0], acctUrl.Host) + if result, dbErr := findUserByWebfinger(c.Request().Context(), webfinger); dbErr == mongo.ErrNoDocuments { entropy := ulid.Monotonic(rand.Reader, 0) id, err := ulid.New(ulid.Timestamp(time.Now().UTC()), entropy) if err != nil { @@ -146,13 +149,11 @@ func oauthHandler(c echo.Context) (err error) { return echo.NewHTTPError(http.StatusInternalServerError) } data.AudonID = id.String() - acctUrl, _ := url.Parse(acc.URL) - finger := strings.Split(acc.Username, "@") newUser := AudonUser{ AudonID: data.AudonID, RemoteID: string(acc.ID), RemoteURL: acc.URL, - Webfinger: fmt.Sprintf("%s@%s", finger[0], acctUrl.Host), + Webfinger: webfinger, CreatedAt: time.Now().UTC(), } if _, insertErr := coll.InsertOne(c.Request().Context(), newUser); insertErr != nil { diff --git a/room.go b/room.go index b87a34a..4e74ef0 100644 --- a/room.go +++ b/room.go @@ -103,7 +103,7 @@ func createRoomHandler(c echo.Context) error { // if cohosts are already registered, retrieve their data from DB for i, cohost := range room.CoHosts { - cohostUser, err := findUserByRemote(c.Request().Context(), cohost.RemoteID, cohost.RemoteURL) + cohostUser, err := findUserByWebfinger(c.Request().Context(), cohost.Webfinger) if err == nil { room.CoHosts[i] = cohostUser } diff --git a/schema.go b/schema.go index 77e929d..8299c3f 100644 --- a/schema.go +++ b/schema.go @@ -187,20 +187,15 @@ func createIndexes(ctx context.Context) error { return err } - if len(userIndexes) < 3 { + if len(userIndexes) < 4 { _, err := userColl.Indexes().CreateMany(ctx, []mongo.IndexModel{ { Keys: bson.D{{Key: "audon_id", Value: 1}}, Options: options.Index().SetUnique(true), }, { - Keys: bson.D{ - {Key: "remote_url", Value: 1}, - {Key: "remote_id", Value: 1}, - }, - }, - { - Keys: bson.D{{Key: "webfinger", Value: 1}}, + Keys: bson.D{{Key: "webfinger", Value: 1}}, + Options: options.Index().SetUnique(true), }, }) if err != nil { diff --git a/user.go b/user.go index 8f88aa8..cab96a2 100644 --- a/user.go +++ b/user.go @@ -105,7 +105,7 @@ func (a *AudonUser) Equal(u *AudonUser) bool { return false } - return a.AudonID == u.AudonID || (a.RemoteID == u.RemoteID && a.RemoteURL == u.RemoteURL) + return a.AudonID == u.AudonID || a.Webfinger == u.Webfinger } func (a *AudonUser) InLivekit(ctx context.Context) (bool, error) {