Browse Source

refactor: cleaned up some soundcloud action comments and permissions

Kristian Vos 1 year ago
parent
commit
6da5dc49ad
2 changed files with 14 additions and 438 deletions
  1. 3 438
      backend/logic/actions/soundcloud.js
  2. 11 0
      backend/logic/hooks/hasPermission.js

+ 3 - 438
backend/logic/actions/soundcloud.js

@@ -15,7 +15,7 @@ export default {
 	 *
 	 * @returns {{status: string, data: object}}
 	 */
-	fetchNewApiKey: useHasPermission("admin.view.soundcloud", function fetchNewApiKey(session, cb) {
+	fetchNewApiKey: useHasPermission("soundcloud.fetchNewApiKey", function fetchNewApiKey(session, cb) {
 		SoundcloudModule.runJob("GENERATE_SOUNDCLOUD_API_KEY", {}, this)
 			.then(response => {
 				this.log("SUCCESS", "SOUNDCLOUD_FETCH_NEW_API_KEY", `Fetching new API key was successful.`);
@@ -33,7 +33,7 @@ export default {
 	 *
 	 * @returns {{status: string, data: object}}
 	 */
-	testApiKey: useHasPermission("admin.view.soundcloud", function testApiKey(session, cb) {
+	testApiKey: useHasPermission("soundcloud.testApiKey", function testApiKey(session, cb) {
 		SoundcloudModule.runJob("TEST_SOUNDCLOUD_API_KEY", {}, this)
 			.then(response => {
 				this.log(
@@ -55,7 +55,7 @@ export default {
 	 *
 	 * @returns {{status: string, data: object}}
 	 */
-	getArtist: useHasPermission("youtube.removeVideos", function getArtist(session, userPermalink, cb) {
+	getArtist: useHasPermission("soundcloud.getArtist", function getArtist(session, userPermalink, cb) {
 		return SoundcloudModule.runJob("GET_ARTISTS_FROM_PERMALINKS", { userPermalinks: [userPermalink] }, this)
 			.then(res => {
 				if (res.artists.length === 0) {
@@ -77,226 +77,6 @@ export default {
 			});
 	}),
 
-	// /**
-	//  * Returns details about the YouTube quota usage
-	//  *
-	//  * @returns {{status: string, data: object}}
-	//  */
-	// getQuotaStatus: useHasPermission("admin.view.youtube", function getQuotaStatus(session, fromDate, cb) {
-	// 	YouTubeModule.runJob("GET_QUOTA_STATUS", { fromDate }, this)
-	// 		.then(response => {
-	// 			this.log("SUCCESS", "YOUTUBE_GET_QUOTA_STATUS", `Getting quota status was successful.`);
-	// 			return cb({ status: "success", data: { status: response.status } });
-	// 		})
-	// 		.catch(async err => {
-	// 			err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 			this.log("ERROR", "YOUTUBE_GET_QUOTA_STATUS", `Getting quota status failed. "${err}"`);
-	// 			return cb({ status: "error", message: err });
-	// 		});
-	// }),
-
-	// /**
-	//  * Returns YouTube quota chart data
-	//  *
-	//  * @param {object} session - the session object automatically added by the websocket
-	//  * @param timePeriod - either hours or days
-	//  * @param startDate - beginning date
-	//  * @param endDate - end date
-	//  * @param dataType - either usage or count
-	//  * @returns {{status: string, data: object}}
-	//  */
-	// getQuotaChartData: useHasPermission(
-	// 	"admin.view.youtube",
-	// 	function getQuotaChartData(session, timePeriod, startDate, endDate, dataType, cb) {
-	// 		YouTubeModule.runJob(
-	// 			"GET_QUOTA_CHART_DATA",
-	// 			{ timePeriod, startDate: new Date(startDate), endDate: new Date(endDate), dataType },
-	// 			this
-	// 		)
-	// 			.then(data => {
-	// 				this.log("SUCCESS", "YOUTUBE_GET_QUOTA_CHART_DATA", `Getting quota chart data was successful.`);
-	// 				return cb({ status: "success", data });
-	// 			})
-	// 			.catch(async err => {
-	// 				err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 				this.log("ERROR", "YOUTUBE_GET_QUOTA_CHART_DATA", `Getting quota chart data failed. "${err}"`);
-	// 				return cb({ status: "error", message: err });
-	// 			});
-	// 	}
-	// ),
-
-	// /**
-	//  * Gets api requests, used in the admin youtube page by the AdvancedTable component
-	//  *
-	//  * @param {object} session - the session object automatically added by the websocket
-	//  * @param page - the page
-	//  * @param pageSize - the size per page
-	//  * @param properties - the properties to return for each news item
-	//  * @param sort - the sort object
-	//  * @param queries - the queries array
-	//  * @param operator - the operator for queries
-	//  * @param cb
-	//  */
-	// getApiRequests: useHasPermission(
-	// 	"admin.view.youtube",
-	// 	async function getApiRequests(session, page, pageSize, properties, sort, queries, operator, cb) {
-	// 		async.waterfall(
-	// 			[
-	// 				next => {
-	// 					DBModule.runJob(
-	// 						"GET_DATA",
-	// 						{
-	// 							page,
-	// 							pageSize,
-	// 							properties,
-	// 							sort,
-	// 							queries,
-	// 							operator,
-	// 							modelName: "youtubeApiRequest",
-	// 							blacklistedProperties: [],
-	// 							specialProperties: {},
-	// 							specialQueries: {}
-	// 						},
-	// 						this
-	// 					)
-	// 						.then(response => {
-	// 							next(null, response);
-	// 						})
-	// 						.catch(err => {
-	// 							next(err);
-	// 						});
-	// 				}
-	// 			],
-	// 			async (err, response) => {
-	// 				if (err && err !== true) {
-	// 					err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 					this.log("ERROR", "YOUTUBE_GET_API_REQUESTS", `Failed to get YouTube api requests. "${err}"`);
-	// 					return cb({ status: "error", message: err });
-	// 				}
-	// 				this.log("SUCCESS", "YOUTUBE_GET_API_REQUESTS", `Fetched YouTube api requests successfully.`);
-	// 				return cb({
-	// 					status: "success",
-	// 					message: "Successfully fetched YouTube api requests.",
-	// 					data: response
-	// 				});
-	// 			}
-	// 		);
-	// 	}
-	// ),
-
-	// /**
-	//  * Returns a specific api request
-	//  *
-	//  * @returns {{status: string, data: object}}
-	//  */
-	// getApiRequest: useHasPermission("youtube.getApiRequest", function getApiRequest(session, apiRequestId, cb) {
-	// 	if (!mongoose.Types.ObjectId.isValid(apiRequestId))
-	// 		return cb({ status: "error", message: "Api request id is not a valid ObjectId." });
-
-	// 	return YouTubeModule.runJob("GET_API_REQUEST", { apiRequestId }, this)
-	// 		.then(response => {
-	// 			this.log(
-	// 				"SUCCESS",
-	// 				"YOUTUBE_GET_API_REQUEST",
-	// 				`Getting api request with id ${apiRequestId} was successful.`
-	// 			);
-	// 			return cb({ status: "success", data: { apiRequest: response.apiRequest } });
-	// 		})
-	// 		.catch(async err => {
-	// 			err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 			this.log(
-	// 				"ERROR",
-	// 				"YOUTUBE_GET_API_REQUEST",
-	// 				`Getting api request with id ${apiRequestId} failed. "${err}"`
-	// 			);
-	// 			return cb({ status: "error", message: err });
-	// 		});
-	// }),
-
-	// /**
-	//  * Reset stored API requests
-	//  *
-	//  * @returns {{status: string, data: object}}
-	//  */
-	// resetStoredApiRequests: useHasPermission(
-	// 	"youtube.resetStoredApiRequests",
-	// 	async function resetStoredApiRequests(session, cb) {
-	// 		this.keepLongJob();
-	// 		this.publishProgress({
-	// 			status: "started",
-	// 			title: "Reset stored API requests",
-	// 			message: "Resetting stored API requests.",
-	// 			id: this.toString()
-	// 		});
-	// 		await CacheModule.runJob("RPUSH", { key: `longJobs.${session.userId}`, value: this.toString() }, this);
-	// 		await CacheModule.runJob(
-	// 			"PUB",
-	// 			{
-	// 				channel: "longJob.added",
-	// 				value: { jobId: this.toString(), userId: session.userId }
-	// 			},
-	// 			this
-	// 		);
-
-	// 		YouTubeModule.runJob("RESET_STORED_API_REQUESTS", {}, this)
-	// 			.then(() => {
-	// 				this.log(
-	// 					"SUCCESS",
-	// 					"YOUTUBE_RESET_STORED_API_REQUESTS",
-	// 					`Resetting stored API requests was successful.`
-	// 				);
-	// 				this.publishProgress({
-	// 					status: "success",
-	// 					message: "Successfully reset stored YouTube API requests."
-	// 				});
-	// 				return cb({ status: "success", message: "Successfully reset stored YouTube API requests" });
-	// 			})
-	// 			.catch(async err => {
-	// 				err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 				this.log(
-	// 					"ERROR",
-	// 					"YOUTUBE_RESET_STORED_API_REQUESTS",
-	// 					`Resetting stored API requests failed. "${err}"`
-	// 				);
-	// 				this.publishProgress({
-	// 					status: "error",
-	// 					message: err
-	// 				});
-	// 				return cb({ status: "error", message: err });
-	// 			});
-	// 	}
-	// ),
-
-	// /**
-	//  * Remove stored API requests
-	//  *
-	//  * @returns {{status: string, data: object}}
-	//  */
-	// removeStoredApiRequest: useHasPermission(
-	// 	"youtube.removeStoredApiRequest",
-	// 	function removeStoredApiRequest(session, requestId, cb) {
-	// 		YouTubeModule.runJob("REMOVE_STORED_API_REQUEST", { requestId }, this)
-	// 			.then(() => {
-	// 				this.log(
-	// 					"SUCCESS",
-	// 					"YOUTUBE_REMOVE_STORED_API_REQUEST",
-	// 					`Removing stored API request "${requestId}" was successful.`
-	// 				);
-
-	// 				return cb({ status: "success", message: "Successfully removed stored YouTube API request" });
-	// 			})
-	// 			.catch(async err => {
-	// 				err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 				this.log(
-	// 					"ERROR",
-	// 					"YOUTUBE_REMOVE_STORED_API_REQUEST",
-	// 					`Removing stored API request "${requestId}" failed. "${err}"`
-	// 				);
-	// 				return cb({ status: "error", message: err });
-	// 			});
-	// 	}
-	// ),
-
 	/**
 	 * Gets videos, used in the admin youtube page by the AdvancedTable component
 	 *
@@ -432,219 +212,4 @@ export default {
 			);
 		}
 	)
-
-	// /**
-	//  * Get a YouTube video
-	//  *
-	//  * @returns {{status: string, data: object}}
-	//  */
-	// getVideo: isLoginRequired(function getVideo(session, identifier, createMissing, cb) {
-	// 	return YouTubeModule.runJob("GET_VIDEO", { identifier, createMissing }, this)
-	// 		.then(res => {
-	// 			this.log("SUCCESS", "YOUTUBE_GET_VIDEO", `Fetching video was successful.`);
-
-	// 			return cb({ status: "success", message: "Successfully fetched YouTube video", data: res.video });
-	// 		})
-	// 		.catch(async err => {
-	// 			err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 			this.log("ERROR", "YOUTUBE_GET_VIDEO", `Fetching video failed. "${err}"`);
-	// 			return cb({ status: "error", message: err });
-	// 		});
-	// }),
-
-	// /**
-	//  * Remove YouTube videos
-	//  *
-	//  * @returns {{status: string, data: object}}
-	//  */
-	// removeVideos: useHasPermission("youtube.removeVideos", async function removeVideos(session, videoIds, cb) {
-	// 	this.keepLongJob();
-	// 	this.publishProgress({
-	// 		status: "started",
-	// 		title: "Bulk remove YouTube videos",
-	// 		message: "Bulk removing YouTube videos.",
-	// 		id: this.toString()
-	// 	});
-	// 	await CacheModule.runJob("RPUSH", { key: `longJobs.${session.userId}`, value: this.toString() }, this);
-	// 	await CacheModule.runJob(
-	// 		"PUB",
-	// 		{
-	// 			channel: "longJob.added",
-	// 			value: { jobId: this.toString(), userId: session.userId }
-	// 		},
-	// 		this
-	// 	);
-
-	// 	YouTubeModule.runJob("REMOVE_VIDEOS", { videoIds }, this)
-	// 		.then(() => {
-	// 			this.log("SUCCESS", "YOUTUBE_REMOVE_VIDEOS", `Removing videos was successful.`);
-	// 			this.publishProgress({
-	// 				status: "success",
-	// 				message: "Successfully removed YouTube videos."
-	// 			});
-	// 			return cb({ status: "success", message: "Successfully removed YouTube videos" });
-	// 		})
-	// 		.catch(async err => {
-	// 			err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 			this.log("ERROR", "YOUTUBE_REMOVE_VIDEOS", `Removing videos failed. "${err}"`);
-	// 			this.publishProgress({
-	// 				status: "error",
-	// 				message: err
-	// 			});
-	// 			return cb({ status: "error", message: err });
-	// 		});
-	// }),
-
-	// /**
-	//  * Requests a set of YouTube videos
-	//  *
-	//  * @param {object} session - the session object automatically added by the websocket
-	//  * @param {string} url - the url of the the YouTube playlist
-	//  * @param {boolean} musicOnly - whether to only get music from the playlist
-	//  * @param {boolean} musicOnly - whether to return videos
-	//  * @param {Function} cb - gets called with the result
-	//  */
-	// requestSet: isLoginRequired(function requestSet(session, url, musicOnly, returnVideos, cb) {
-	// 	YouTubeModule.runJob("REQUEST_SET", { url, musicOnly, returnVideos }, this)
-	// 		.then(response => {
-	// 			this.log(
-	// 				"SUCCESS",
-	// 				"REQUEST_SET",
-	// 				`Successfully imported a YouTube playlist to be requested for user "${session.userId}".`
-	// 			);
-	// 			return cb({
-	// 				status: "success",
-	// 				message: `Playlist is done importing. ${response.successful} were added succesfully, ${response.failed} failed (${response.alreadyInDatabase} were already in database)`,
-	// 				videos: returnVideos ? response.videos : null
-	// 			});
-	// 		})
-	// 		.catch(async err => {
-	// 			err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 			this.log(
-	// 				"ERROR",
-	// 				"REQUEST_SET",
-	// 				`Importing a YouTube playlist to be requested failed for user "${session.userId}". "${err}"`
-	// 			);
-	// 			return cb({ status: "error", message: err });
-	// 		});
-	// }),
-
-	// /**
-	//  * Requests a set of YouTube videos as an admin
-	//  *
-	//  * @param {object} session - the session object automatically added by the websocket
-	//  * @param {string} url - the url of the the YouTube playlist
-	//  * @param {boolean} musicOnly - whether to only get music from the playlist
-	//  * @param {boolean} musicOnly - whether to return videos
-	//  * @param {Function} cb - gets called with the result
-	//  */
-	// requestSetAdmin: useHasPermission(
-	// 	"youtube.requestSetAdmin",
-	// 	async function requestSetAdmin(session, url, musicOnly, returnVideos, cb) {
-	// 		const importJobModel = await DBModule.runJob("GET_MODEL", { modelName: "importJob" }, this);
-
-	// 		this.keepLongJob();
-	// 		this.publishProgress({
-	// 			status: "started",
-	// 			title: "Import playlist",
-	// 			message: "Importing playlist.",
-	// 			id: this.toString()
-	// 		});
-	// 		await CacheModule.runJob("RPUSH", { key: `longJobs.${session.userId}`, value: this.toString() }, this);
-	// 		await CacheModule.runJob(
-	// 			"PUB",
-	// 			{
-	// 				channel: "longJob.added",
-	// 				value: { jobId: this.toString(), userId: session.userId }
-	// 			},
-	// 			this
-	// 		);
-
-	// 		async.waterfall(
-	// 			[
-	// 				next => {
-	// 					importJobModel.create(
-	// 						{
-	// 							type: "youtube",
-	// 							query: {
-	// 								url,
-	// 								musicOnly
-	// 							},
-	// 							status: "in-progress",
-	// 							response: {},
-	// 							requestedBy: session.userId,
-	// 							requestedAt: Date.now()
-	// 						},
-	// 						next
-	// 					);
-	// 				},
-
-	// 				(importJob, next) => {
-	// 					YouTubeModule.runJob("REQUEST_SET", { url, musicOnly, returnVideos }, this)
-	// 						.then(response => {
-	// 							next(null, importJob, response);
-	// 						})
-	// 						.catch(err => {
-	// 							next(err, importJob);
-	// 						});
-	// 				},
-
-	// 				(importJob, response, next) => {
-	// 					importJobModel.updateOne(
-	// 						{ _id: importJob._id },
-	// 						{
-	// 							$set: {
-	// 								status: "success",
-	// 								response: {
-	// 									failed: response.failed,
-	// 									successful: response.successful,
-	// 									alreadyInDatabase: response.alreadyInDatabase,
-	// 									successfulVideoIds: response.successfulVideoIds,
-	// 									failedVideoIds: response.failedVideoIds
-	// 								}
-	// 							}
-	// 						},
-	// 						err => {
-	// 							if (err) next(err, importJob);
-	// 							else
-	// 								MediaModule.runJob("UPDATE_IMPORT_JOBS", { jobIds: importJob._id })
-	// 									.then(() => next(null, importJob, response))
-	// 									.catch(error => next(error, importJob));
-	// 						}
-	// 					);
-	// 				}
-	// 			],
-	// 			async (err, importJob, response) => {
-	// 				if (err) {
-	// 					err = await UtilsModule.runJob("GET_ERROR", { error: err }, this);
-	// 					this.log(
-	// 						"ERROR",
-	// 						"REQUEST_SET_ADMIN",
-	// 						`Importing a YouTube playlist to be requested failed for admin "${session.userId}". "${err}"`
-	// 					);
-	// 					importJobModel.updateOne({ _id: importJob._id }, { $set: { status: "error" } });
-	// 					MediaModule.runJob("UPDATE_IMPORT_JOBS", { jobIds: importJob._id });
-	// 					return cb({ status: "error", message: err });
-	// 				}
-
-	// 				this.log(
-	// 					"SUCCESS",
-	// 					"REQUEST_SET_ADMIN",
-	// 					`Successfully imported a YouTube playlist to be requested for admin "${session.userId}".`
-	// 				);
-
-	// 				this.publishProgress({
-	// 					status: "success",
-	// 					message: `Playlist is done importing. ${response.successful} were added succesfully, ${response.failed} failed (${response.alreadyInDatabase} were already in database)`
-	// 				});
-
-	// 				return cb({
-	// 					status: "success",
-	// 					message: `Playlist is done importing. ${response.successful} were added succesfully, ${response.failed} failed (${response.alreadyInDatabase} were already in database)`,
-	// 					videos: returnVideos ? response.videos : null
-	// 				});
-	// 			}
-	// 		);
-	// 	}
-	// )
 };

+ 11 - 0
backend/logic/hooks/hasPermission.js

@@ -101,12 +101,23 @@ permissions.admin = {
 if (config.get("experimental.soundcloud")) {
 	permissions.moderator["admin.view.soundcloudTracks"] = true;
 	permissions.admin["admin.view.soundcloudTracks"] = true;
+
 	permissions.admin["admin.view.soundcloud"] = true;
+
+	permissions.admin["soundcloud.fetchNewApiKey"] = true;
+
+	permissions.admin["soundcloud.testApiKey"] = true;
+
+	permissions.moderator["soundcloud.getArtist"] = true;
+	permissions.admin["soundcloud.getArtist"] = true;
 }
+
 if (config.get("experimental.spotify")) {
 	permissions.moderator["admin.view.youtubeChannels"] = true;
 	permissions.admin["admin.view.youtubeChannels"] = true;
+
 	permissions.admin["admin.view.spotify"] = true;
+
 	permissions.admin["youtube.getMissingChannels"] = true;
 }