From 7ed3448e13847f3ba807be1354e90c912fbefd9a Mon Sep 17 00:00:00 2001 From: syuilo Date: Sat, 1 Feb 2020 07:16:52 +0900 Subject: Resolve #1669 --- src/server/api/service/discord.ts | 58 +++++++++++++++++++++------------------ src/server/api/service/github.ts | 31 ++++++++++++--------- src/server/api/service/twitter.ts | 34 +++++++++++++---------- 3 files changed, 69 insertions(+), 54 deletions(-) (limited to 'src/server/api/service') diff --git a/src/server/api/service/discord.ts b/src/server/api/service/discord.ts index d5ca05577c..f9f3026aa8 100644 --- a/src/server/api/service/discord.ts +++ b/src/server/api/service/discord.ts @@ -46,16 +46,12 @@ router.get('/disconnect/discord', async ctx => { token: userToken }).then(ensure); - await UserProfiles.update({ - userId: user.id - }, { - discord: false, - discordAccessToken: null, - discordRefreshToken: null, - discordExpiresDate: null, - discordId: null, - discordUsername: null, - discordDiscriminator: null, + const profile = await UserProfiles.findOne(user.id).then(ensure); + + delete profile.integrations.discord; + + await UserProfiles.update(user.id, { + integrations: profile.integrations, }); ctx.body = `Discordの連携を解除しました :v:`; @@ -203,7 +199,7 @@ router.get('/dc/cb', async ctx => { } const profile = await UserProfiles.createQueryBuilder() - .where('"discordId" = :id', { id: id }) + .where('"integrations"->"discord"->"id" = :id', { id: id }) .andWhere('"userHost" IS NULL') .getOne(); @@ -212,13 +208,17 @@ router.get('/dc/cb', async ctx => { return; } - await UserProfiles.update({ userId: profile.userId }, { - discord: true, - discordAccessToken: accessToken, - discordRefreshToken: refreshToken, - discordExpiresDate: expiresDate, - discordUsername: username, - discordDiscriminator: discriminator + await UserProfiles.update(profile.userId, { + integrations: { + ...profile.integrations, + discord: { + accessToken: accessToken, + refreshToken: refreshToken, + expiresDate: expiresDate, + username: username, + discriminator: discriminator + } + }, }); signin(ctx, await Users.findOne(profile.userId) as ILocalUser, true); @@ -284,14 +284,20 @@ router.get('/dc/cb', async ctx => { token: userToken }).then(ensure); - await UserProfiles.update({ userId: user.id }, { - discord: true, - discordAccessToken: accessToken, - discordRefreshToken: refreshToken, - discordExpiresDate: expiresDate, - discordId: id, - discordUsername: username, - discordDiscriminator: discriminator + const profile = await UserProfiles.findOne(user.id).then(ensure); + + await UserProfiles.update(user.id, { + integrations: { + ...profile.integrations, + discord: { + accessToken: accessToken, + refreshToken: refreshToken, + expiresDate: expiresDate, + id: id, + username: username, + discriminator: discriminator + } + } }); ctx.body = `Discord: @${username}#${discriminator} を、Misskey: @${user.username} に接続しました!`; diff --git a/src/server/api/service/github.ts b/src/server/api/service/github.ts index 071b4a96d1..ec9cce7ad8 100644 --- a/src/server/api/service/github.ts +++ b/src/server/api/service/github.ts @@ -46,13 +46,12 @@ router.get('/disconnect/github', async ctx => { token: userToken }).then(ensure); - await UserProfiles.update({ - userId: user.id - }, { - github: false, - githubAccessToken: null, - githubId: null, - githubLogin: null, + const profile = await UserProfiles.findOne(user.id).then(ensure); + + delete profile.integrations.github; + + await UserProfiles.update(user.id, { + integrations: profile.integrations, }); ctx.body = `GitHubの連携を解除しました :v:`; @@ -193,7 +192,7 @@ router.get('/gh/cb', async ctx => { } const link = await UserProfiles.createQueryBuilder() - .where('"githubId" = :id', { id: id }) + .where('"integrations"->"github"->"id" = :id', { id: id }) .andWhere('"userHost" IS NULL') .getOne(); @@ -260,11 +259,17 @@ router.get('/gh/cb', async ctx => { token: userToken }).then(ensure); - await UserProfiles.update({ userId: user.id }, { - github: true, - githubAccessToken: accessToken, - githubId: id, - githubLogin: login, + const profile = await UserProfiles.findOne(user.id).then(ensure); + + await UserProfiles.update(user.id, { + integrations: { + ...profile.integrations, + github: { + accessToken: accessToken, + id: id, + login: login, + } + } }); ctx.body = `GitHub: @${login} を、Misskey: @${user.username} に接続しました!`; diff --git a/src/server/api/service/twitter.ts b/src/server/api/service/twitter.ts index dc6c593201..881915b58f 100644 --- a/src/server/api/service/twitter.ts +++ b/src/server/api/service/twitter.ts @@ -45,14 +45,12 @@ router.get('/disconnect/twitter', async ctx => { token: userToken }).then(ensure); - await UserProfiles.update({ - userId: user.id - }, { - twitter: false, - twitterAccessToken: null, - twitterAccessTokenSecret: null, - twitterUserId: null, - twitterScreenName: null, + const profile = await UserProfiles.findOne(user.id).then(ensure); + + delete profile.integrations.twitter; + + await UserProfiles.update(user.id, { + integrations: profile.integrations, }); ctx.body = `Twitterの連携を解除しました :v:`; @@ -141,7 +139,7 @@ router.get('/tw/cb', async ctx => { const result = await twAuth!.done(JSON.parse(twCtx), ctx.query.oauth_verifier); const link = await UserProfiles.createQueryBuilder() - .where('"twitterUserId" = :id', { id: result.userId }) + .where('"integrations"->"twitter"->"userId" = :id', { id: result.userId }) .andWhere('"userHost" IS NULL') .getOne(); @@ -174,12 +172,18 @@ router.get('/tw/cb', async ctx => { token: userToken }).then(ensure); - await UserProfiles.update({ userId: user.id }, { - twitter: true, - twitterAccessToken: result.accessToken, - twitterAccessTokenSecret: result.accessTokenSecret, - twitterUserId: result.userId, - twitterScreenName: result.screenName, + const profile = await UserProfiles.findOne(user.id).then(ensure); + + await UserProfiles.update(user.id, { + integrations: { + ...profile.integrations, + twitter: { + accessToken: result.accessToken, + accessTokenSecret: result.accessTokenSecret, + userId: result.userId, + screenName: result.screenName, + } + }, }); ctx.body = `Twitter: @${result.screenName} を、Misskey: @${user.username} に接続しました!`; -- cgit v1.2.3-freya