Skip to content

Commit 045e753

Browse files
committed
chore: Minor fixes
1 parent 02eca5c commit 045e753

File tree

6 files changed

+57
-50
lines changed

6 files changed

+57
-50
lines changed

src/api/controllers/authController.ts

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import Logger from '../logger';
1414
*
1515
* @returns redirects user to login process page on frontend on success, error page otherwise
1616
*/
17-
const handleCallback = async (req: Request, res: Response) => {
17+
const handleCallback = (req: Request, res: Response) => {
1818
// State validation must happen before anything else.
1919
const receivedState = req.query.state as string;
2020
const sessionState = req.session.oAuthState;
@@ -116,29 +116,35 @@ const handleLoginProcess = async (req: Request, res: Response) => {
116116
return sendErrorResponse(res, 401, 'Login failed, please try again.');
117117
}
118118

119-
req.session.regenerate(async (err) => {
119+
req.session.regenerate((err: Error | null) => {
120120
if (err) {
121121
Logger.error('Error regenerating session:', err);
122-
// Potentially send an error response here, though the user is technically logged in.
123-
// For now, we'll log the error and proceed with the success response
124-
// as the main login functionality was successful.
122+
return sendErrorResponse(res, 401, 'Session creation failed, please try again.');
125123
}
126-
// Store session data again after regeneration as regenerate creates a new session
127-
req.session.provider = provider;
128-
req.session.userId = userData.id;
129-
130-
try {
131-
const tokenSaved = await saveUserTokens(req.sessionID, userData.id, tokenResponse);
132-
if (!tokenSaved) {
133-
Logger.error('Failed to save tokens for session', req.sessionID);
124+
125+
const handleSession = async () => {
126+
// store session data again after regeneration as regenerate creates a new session
127+
req.session.provider = provider;
128+
req.session.userId = userData.id;
129+
130+
try {
131+
const tokenSaved = await saveUserTokens(req.sessionID, userData.id, tokenResponse);
132+
if (!tokenSaved) {
133+
Logger.error('Failed to save tokens for session', req.sessionID);
134+
return sendErrorResponse(res, 500, 'Login partially succeeded, but token storage failed.');
135+
}
136+
} catch (e) {
137+
Logger.error('saveUserTokens threw:', e);
134138
return sendErrorResponse(res, 500, 'Login partially succeeded, but token storage failed.');
135139
}
136-
} catch (e) {
137-
Logger.error('saveUserTokens threw:', e);
138-
return sendErrorResponse(res, 500, 'Login partially succeeded, but token storage failed.');
139-
}
140140

141-
return sendSuccessResponse(res, 200, userData, 'Login successful.');
141+
sendSuccessResponse(res, 200, userData, 'Login successful.');
142+
};
143+
144+
handleSession().catch((e) => {
145+
Logger.error('Unexpected error in session handling:', e);
146+
sendErrorResponse(res, 500, 'An unexpected error occurred.');
147+
});
142148
});
143149
};
144150

@@ -150,10 +156,10 @@ const handleLoginProcess = async (req: Request, res: Response) => {
150156
*
151157
* @returns user data on success, 401 unauthorized otherwise
152158
*/
153-
const handleLogout = async (req: Request, res: Response) => {
159+
const handleLogout = (req: Request, res: Response) => {
154160
res.clearCookie('connect.sid');
155161

156-
req.session.destroy((err) => {
162+
req.session.destroy((err: Error | null) => {
157163
if (err) {
158164
return sendErrorResponse(res, 500, err.message);
159165
}

src/api/controllers/pluginController.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ const getPlugins = async (req: Request, res: Response) => {
9696
let userFavorites = await getUserFavoritePluginsFromCache(userId);
9797
if (userFavorites === null) {
9898
userFavorites = await getUserFavoritePluginsFromDb(userId);
99-
saveUserFavoritePluginsToCache(userId, userFavorites);
99+
void saveUserFavoritePluginsToCache(userId, userFavorites);
100100
}
101101
const userFavoriteIds = new Set(userFavorites.map((item) => item.id));
102102

src/api/controllers/themeController.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ const getThemesNoAuth = async (req: Request, res: Response) => {
4646
themes = await getThemeDataFromCache(searchResult);
4747
} else {
4848
themes = await getThemeDataFromDb(searchQuery, pageNum, pageSize, sortBy, sortDirection);
49-
saveThemeSearchToCache(searchQuery, pageNum, pageSize, sortBy, sortDirection, themes);
50-
saveThemeDataToCache(themes);
49+
void saveThemeSearchToCache(searchQuery, pageNum, pageSize, sortBy, sortDirection, themes);
50+
void saveThemeDataToCache(themes);
5151
}
5252

5353
sendSuccessResponse(res, 200, themes, 'Themes fetched successfully.');
@@ -88,15 +88,15 @@ const getThemes = async (req: Request, res: Response) => {
8888
themes = await getThemeDataFromCache(searchResult);
8989
} else {
9090
themes = await getThemeDataFromDb(searchQuery, pageNum, pageSize, sortBy, sortDirection);
91-
saveThemeSearchToCache(searchQuery, pageNum, pageSize, sortBy, sortDirection, themes);
92-
saveThemeDataToCache(themes);
91+
void saveThemeSearchToCache(searchQuery, pageNum, pageSize, sortBy, sortDirection, themes);
92+
void saveThemeDataToCache(themes);
9393
}
9494

9595
// check if cache contains user favorites and return if so ; otherwise fetch from db
9696
let userFavorites = await getUserFavoriteThemesFromCache(userId);
9797
if (userFavorites === null) {
9898
userFavorites = await getUserFavoriteThemesFromDb(userId);
99-
saveUserFavoriteThemesToCache(userId, userFavorites);
99+
void saveUserFavoriteThemesToCache(userId, userFavorites);
100100
}
101101
const userFavoriteIds = new Set(userFavorites.map((item) => item.id));
102102

@@ -140,7 +140,7 @@ const getThemeById = async (req: Request, res: Response) => {
140140
let userFavorites = await getUserFavoriteThemesFromCache(userId);
141141
if (userFavorites === null) {
142142
userFavorites = await getUserFavoriteThemesFromDb(userId);
143-
saveUserFavoriteThemesToCache(userId, userFavorites);
143+
void saveUserFavoriteThemesToCache(userId, userFavorites);
144144
}
145145
const userFavoriteIds = new Set(userFavorites.map((item) => item.id));
146146
themeData.isFavorite = userFavoriteIds.has(themeId);
@@ -168,7 +168,7 @@ const getThemeVersions = async (req: Request, res: Response) => {
168168
let versions = await getThemeVersionsFromCache(themeId);
169169
if (versions === null) {
170170
versions = await getThemeVersionsFromDb(themeId);
171-
saveThemeVersionsToCache(themeId, versions);
171+
void saveThemeVersionsToCache(themeId, versions);
172172
}
173173

174174
sendSuccessResponse(res, 200, versions, 'Theme versions fetched successfully.');

src/api/controllers/userController.ts

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
import { sendErrorResponse, sendSuccessResponse } from '../utils/responseUtils';
2525
import { User } from '../databases/sql/models';
2626
import Logger from '../logger';
27+
import { UserData } from '../interfaces/UserData';
2728

2829
/**
2930
* Retrieves the user profile information (i.e. user data).
@@ -33,8 +34,8 @@ import Logger from '../logger';
3334
*
3435
* @returns user data if successful, 403 otherwise
3536
*/
36-
const getUserProfile = async (req: Request, res: Response) => {
37-
const userData = req.userData;
37+
const getUserProfile = (req: Request, res: Response) => {
38+
const userData = req.userData as UserData;
3839
const queryUserId = (req.query.userId as string) ?? userData.id;
3940
const sessionUserId = req.session.userId;
4041

@@ -60,7 +61,7 @@ const getUserProfile = async (req: Request, res: Response) => {
6061
* @returns list of user's themes if successful, 403 otherwise
6162
*/
6263
const getUserOwnedThemes = async (req: Request, res: Response) => {
63-
const userData = req.userData;
64+
const userData = req.userData as UserData;
6465
const queryUserId = (req.query.userId as string) ?? userData.id;
6566
const sessionUserId = req.session.userId;
6667

@@ -77,7 +78,7 @@ const getUserOwnedThemes = async (req: Request, res: Response) => {
7778

7879
if (userOwnedThemes === null) {
7980
userOwnedThemes = await getUserOwnedThemesFromDb(queryUserId);
80-
saveUserOwnedThemesToCache(userData.id, userOwnedThemes);
81+
void saveUserOwnedThemesToCache(userData.id, userOwnedThemes);
8182
}
8283

8384
return sendSuccessResponse(res, 200, userOwnedThemes, 'User owned themes fetched successfully.');
@@ -96,7 +97,7 @@ const getUserOwnedThemes = async (req: Request, res: Response) => {
9697
* @returns list of user's favorited themes if successful, 403 otherwise
9798
*/
9899
const getUserFavoriteThemes = async (req: Request, res: Response) => {
99-
const userData = req.userData;
100+
const userData = req.userData as UserData;
100101
const queryUserId = (req.query.userId as string) ?? userData.id;
101102
const sessionUserId = req.session.userId;
102103

@@ -112,7 +113,7 @@ const getUserFavoriteThemes = async (req: Request, res: Response) => {
112113
let userFavorites = await getUserFavoriteThemesFromCache(queryUserId);
113114
if (userFavorites === null) {
114115
userFavorites = await getUserFavoriteThemesFromDb(queryUserId);
115-
saveUserFavoriteThemesToCache(queryUserId, userFavorites);
116+
void saveUserFavoriteThemesToCache(queryUserId, userFavorites);
116117
}
117118

118119
return sendSuccessResponse(res, 200, userFavorites, 'User favorite themes fetched successfully.');
@@ -131,7 +132,7 @@ const getUserFavoriteThemes = async (req: Request, res: Response) => {
131132
* @returns 201 if successful, 404 if theme not found, 400 if already favorited, 500 otherwise
132133
*/
133134
const addUserFavoriteTheme = async (req: Request, res: Response) => {
134-
const userData = req.userData;
135+
const userData = req.userData as UserData;
135136
const { themeId } = req.body;
136137

137138
try {
@@ -152,7 +153,7 @@ const addUserFavoriteTheme = async (req: Request, res: Response) => {
152153
* @returns 200 if successful, 404 if theme not found, 500 otherwise
153154
*/
154155
const removeUserFavoriteTheme = async (req: Request, res: Response) => {
155-
const userData = req.userData;
156+
const userData = req.userData as UserData;
156157
const themeId = req.query.themeId as string;
157158

158159
try {
@@ -173,7 +174,7 @@ const removeUserFavoriteTheme = async (req: Request, res: Response) => {
173174
* @returns list of user's plugins if successful, 403 otherwise
174175
*/
175176
const getUserOwnedPlugins = async (req: Request, res: Response) => {
176-
const userData = req.userData;
177+
const userData = req.userData as UserData;
177178
const queryUserId = (req.query.userId as string) ?? userData.id;
178179
const sessionUserId = req.session.userId;
179180

@@ -189,7 +190,7 @@ const getUserOwnedPlugins = async (req: Request, res: Response) => {
189190
let userOwnedPlugins = await getUserOwnedPluginsFromCache(queryUserId);
190191
if (userOwnedPlugins === null) {
191192
userOwnedPlugins = await getUserOwnedPluginsFromDb(queryUserId);
192-
saveUserOwnedPluginsToCache(userData.id, userOwnedPlugins);
193+
void saveUserOwnedPluginsToCache(userData.id, userOwnedPlugins);
193194
}
194195

195196
return sendSuccessResponse(res, 200, userOwnedPlugins, 'User owned plugins fetched successfully.');
@@ -208,7 +209,7 @@ const getUserOwnedPlugins = async (req: Request, res: Response) => {
208209
* @returns list of user's favorited plugins if successful, 403 otherwise
209210
*/
210211
const getUserFavoritePlugins = async (req: Request, res: Response) => {
211-
const userData = req.userData;
212+
const userData = req.userData as UserData;
212213
const queryUserId = (req.query.userId as string) ?? userData.id;
213214
const sessionUserId = req.session.userId;
214215

@@ -224,7 +225,7 @@ const getUserFavoritePlugins = async (req: Request, res: Response) => {
224225
let userFavorites = await getUserFavoritePluginsFromCache(queryUserId);
225226
if (userFavorites === null) {
226227
userFavorites = await getUserFavoritePluginsFromDb(queryUserId);
227-
saveUserFavoritePluginsToCache(queryUserId, userFavorites);
228+
void saveUserFavoritePluginsToCache(queryUserId, userFavorites);
228229
}
229230

230231
return sendSuccessResponse(res, 200, userFavorites, 'User favorite plugins fetched successfully.');
@@ -243,7 +244,7 @@ const getUserFavoritePlugins = async (req: Request, res: Response) => {
243244
* @returns 201 if successful, 404 if theme not found, 400 if already favorited, 500 otherwise
244245
*/
245246
const addUserFavoritePlugin = async (req: Request, res: Response) => {
246-
const userData = req.userData;
247+
const userData = req.userData as UserData;
247248
const { pluginId } = req.body;
248249

249250
try {
@@ -264,7 +265,7 @@ const addUserFavoritePlugin = async (req: Request, res: Response) => {
264265
* @returns 200 if successful, 404 if theme not found, 500 otherwise
265266
*/
266267
const removeUserFavoritePlugin = async (req: Request, res: Response) => {
267-
const userData = req.userData;
268+
const userData = req.userData as UserData;
268269
const pluginId = req.query.pluginId as string;
269270

270271
try {
@@ -285,7 +286,7 @@ const removeUserFavoritePlugin = async (req: Request, res: Response) => {
285286
* @returns 200 if successful, 400 if invalid request body and, 500 otherwise
286287
*/
287288
const setUserAcceptAuthorAgreement = async (req: Request, res: Response) => {
288-
const userData = req.userData;
289+
const userData = req.userData as UserData;
289290
const userId = userData.id;
290291
const accept = req.body.accept;
291292

src/api/services/authentication/providers/github.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ const getUserTokensWithCode = async (key: string) => {
3535
// buffer 15 minutes from token expiry times, hence -900
3636
// multiply expiry time by 1000 since it is given in seconds
3737
const tokenResponse: TokenResponse = {
38-
accessToken: response.data.access_token,
38+
accessToken: response.data.access_token as string,
3939
accessTokenExpiry: Date.now() + response.data.expires_in * 1000 - 900,
40-
refreshToken: response.data.refresh_token,
40+
refreshToken: response.data.refresh_token as string,
4141
refreshTokenExpiry: Date.now() + response.data.refresh_token_expires_in * 1000 - 900,
4242
};
4343
return tokenResponse;

src/jobs/syncThemesFromGitHub.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ const runSyncThemesFromGitHub = async () => {
5858
const databaseThemes = await Theme.findAll({
5959
attributes: ['id'],
6060
});
61-
const databaseThemeIds = databaseThemes.map((theme) => theme.dataValues.id);
61+
const databaseThemeIds: string[] = databaseThemes.map((theme) => theme.dataValues.id);
6262

6363
// fetch all themes from github
6464
const gitHubThemes = await fetchFolders();
@@ -67,10 +67,10 @@ const runSyncThemesFromGitHub = async () => {
6767
const themeJobs = await ThemeJobQueue.findAll({
6868
attributes: ['id'],
6969
});
70-
const themeJobIds = themeJobs.map((job) => job.dataValues.id);
70+
const themeJobIds: string[] = themeJobs.map((job) => job.dataValues.id);
7171

7272
// delete themes no longer found on github, but exclude those in theme job
73-
const themesToDelete = databaseThemeIds.filter((id) => !gitHubThemes.includes(id) && !themeJobIds.includes(id));
73+
const themesToDelete: string[] = databaseThemeIds.filter((id) => !gitHubThemes.includes(id) && !themeJobIds.includes(id));
7474
if (themesToDelete.length > 0) {
7575
await Theme.destroy({
7676
where: {
@@ -110,12 +110,12 @@ const runSyncThemesFromGitHub = async () => {
110110
} else {
111111
throw new Error(`Missing meta.json data for theme: ${themeId}`);
112112
}
113-
} catch (error) {
113+
} catch (error: unknown) {
114114
await transaction.rollback();
115115
Logger.error(`Failed to create theme ${themeId}: ${error}`);
116116
}
117117
}
118-
} catch (error) {
118+
} catch (error: unknown) {
119119
Logger.error('Error fetching themes:', error);
120120
// todo: send an alert on failure since this is critical?
121121
}

0 commit comments

Comments
 (0)