diff --git a/src/main/db/account.ts b/src/main/db/account.ts index de41a919..61932144 100644 --- a/src/main/db/account.ts +++ b/src/main/db/account.ts @@ -11,7 +11,7 @@ export const insertAccount = ( clientSecret: string, accessToken: string, refreshToken: string | null, - server: LocalServer + serverId: number ): Promise => { return new Promise((resolve, reject) => { db.serialize(() => { @@ -34,13 +34,12 @@ export const insertAccount = ( } const id = this.lastID - db.run('UPDATE servers SET account_id = ? WHERE id = ?', [id, server.id], err => { + db.run('UPDATE servers SET account_id = ? WHERE id = ?', [id, serverId], err => { if (err) { reject(err) } db.run('COMMIT') - resolve({ id, username, @@ -164,22 +163,30 @@ FROM accounts INNER JOIN servers ON servers.account_id = accounts.id WHERE accou export const removeAccount = (db: sqlite3.Database, id: number): Promise => { return new Promise((resolve, reject) => { - db.run('DELETE FROM accounts WHERE id = ?', id, err => { - if (err) { - reject(err) - } - resolve(null) + db.serialize(() => { + db.run('PRAGMA foreign_keys = ON') + + db.run('DELETE FROM accounts WHERE id = ?', id, err => { + if (err) { + reject(err) + } + resolve(null) + }) }) }) } export const removeAllAccounts = (db: sqlite3.Database): Promise => { return new Promise((resolve, reject) => { - db.run('DELETE FROM accounts', err => { - if (err) { - reject(err) - } - resolve(null) + db.serialize(() => { + db.run('PRAGMA foreign_keys = ON') + + db.run('DELETE FROM accounts', err => { + if (err) { + reject(err) + } + resolve(null) + }) }) }) } diff --git a/src/main/db/hashtags.ts b/src/main/db/hashtags.ts index 6d4b96fd..2e7727d8 100644 --- a/src/main/db/hashtags.ts +++ b/src/main/db/hashtags.ts @@ -53,11 +53,15 @@ export const insertTag = (db: sqlite3.Database, accountId: number, tag: string): export const removeTag = (db: sqlite3.Database, tag: LocalTag): Promise => { return new Promise((resolve, reject) => { - db.run('DELETE FROM hashtags WHERE id = ?', tag.id, err => { - if (err) { - reject(err) - } - resolve(null) + db.serialize(() => { + db.run('PRAGMA foreign_keys = ON') + + db.run('DELETE FROM hashtags WHERE id = ?', tag.id, err => { + if (err) { + reject(err) + } + resolve(null) + }) }) }) } diff --git a/src/main/index.ts b/src/main/index.ts index 2127f7ea..57f9ff6c 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -463,26 +463,28 @@ ipcMain.handle('add-app', async (_: IpcMainInvokeEvent, url: string) => { }) type AuthorizeRequest = { - server: LocalServer - appData: OAuth.AppData + serverID: number + baseURL: string + clientID: string + clientSecret: string code: string } ipcMain.handle('authorize', async (_: IpcMainInvokeEvent, req: AuthorizeRequest) => { const proxy = await proxyConfiguration.forMastodon() - const sns = await detector(req.server.baseURL, proxy) - const client = generator(sns, req.server.baseURL, null, 'Whalebird', proxy) - const tokenData = await client.fetchAccessToken(req.appData.client_id, req.appData.client_secret, req.code, 'urn:ietf:wg:oauth:2.0:oob') + const sns = await detector(req.baseURL, proxy) + const client = generator(sns, req.baseURL, null, 'Whalebird', proxy) + const tokenData = await client.fetchAccessToken(req.clientID, req.clientSecret, req.code, 'urn:ietf:wg:oauth:2.0:oob') let accessToken = tokenData.access_token if (sns === 'misskey') { // In misskey, access token is sha256(userToken + clientSecret) accessToken = crypto .createHash('sha256') - .update(tokenData.access_token + req.appData.client_secret, 'utf8') + .update(tokenData.access_token + req.clientSecret, 'utf8') .digest('hex') } - const authorizedClient = generator(sns, req.server.baseURL, accessToken, 'Whalebird', proxy) + const authorizedClient = generator(sns, req.baseURL, accessToken, 'Whalebird', proxy) const credentials = await authorizedClient.verifyAccountCredentials() const account = await insertAccount( @@ -490,11 +492,11 @@ ipcMain.handle('authorize', async (_: IpcMainInvokeEvent, req: AuthorizeRequest) credentials.data.username, credentials.data.id, credentials.data.avatar, - req.appData.client_id, - req.appData.client_secret, + req.clientID, + req.clientSecret, accessToken, tokenData.refresh_token, - req.server + req.serverID ) return account }) diff --git a/src/renderer/components/GlobalHeader.vue b/src/renderer/components/GlobalHeader.vue index f144942f..4aee3705 100644 --- a/src/renderer/components/GlobalHeader.vue +++ b/src/renderer/components/GlobalHeader.vue @@ -24,7 +24,7 @@ {{ server.domain }} -