From 6018e0170393b76c40cc648c56ccf3676a9895aa Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 09:45:25 +0200 Subject: [PATCH 01/47] =?UTF-8?q?=F0=9F=93=90Updated=20production=20API=20?= =?UTF-8?q?URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/src/environments/environment.prod.ts | 4 ++-- Frontend/src/environments/environment.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Frontend/src/environments/environment.prod.ts b/Frontend/src/environments/environment.prod.ts index 9c3b3818..31614a5d 100644 --- a/Frontend/src/environments/environment.prod.ts +++ b/Frontend/src/environments/environment.prod.ts @@ -1,4 +1,4 @@ export const environment = { - production: true, - apiUrl: 'https://localhost:3000', //Placeholder for the actual production URL + production: true, + apiUrl: 'https://echo-backend-1s8m.onrender.com/api' // Production API URL }; diff --git a/Frontend/src/environments/environment.ts b/Frontend/src/environments/environment.ts index f5d12fdd..21b2b333 100644 --- a/Frontend/src/environments/environment.ts +++ b/Frontend/src/environments/environment.ts @@ -1,4 +1,4 @@ export const environment = { - production: false, - apiUrl: 'http://localhost:3000', + production: false, + apiUrl: 'http://localhost:3000/api' // Development API URL }; From 57cc40037c4319efca393548e8e91ee561798820 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 09:47:00 +0200 Subject: [PATCH 02/47] =?UTF-8?q?=F0=9F=93=90Updated=20angular.json=20to?= =?UTF-8?q?=20use=20prod=20API=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/angular.json | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Frontend/angular.json b/Frontend/angular.json index 3b9e0233..95ac0106 100644 --- a/Frontend/angular.json +++ b/Frontend/angular.json @@ -50,12 +50,21 @@ } ], "outputHashing": "all", - "serviceWorker": "ngsw-config.json" + "serviceWorker": true, + "ngswConfigPath": "ngsw-config.json", + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ] }, "development": { "optimization": false, "extractLicenses": false, - "sourceMap": true + "sourceMap": true, + "serviceWorker": true, + "ngswConfigPath": "ngsw-config.json" } }, "defaultConfiguration": "production" From 4c7519b24579c9cefbe059e0ef3eb620bc5a409e Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 12:48:08 +0200 Subject: [PATCH 03/47] =?UTF-8?q?=F0=9F=93=90Updated=20static.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/static.json | 1 + 1 file changed, 1 insertion(+) diff --git a/Frontend/static.json b/Frontend/static.json index f5e91f8c..1aab9696 100644 --- a/Frontend/static.json +++ b/Frontend/static.json @@ -1,5 +1,6 @@ { "root": "dist/frontend", + "cleanUrls": false, "routes": { "/**": "index.html" } From 44f2c5b47519423b659ebd7b618221dead4111f9 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 12:53:15 +0200 Subject: [PATCH 04/47] =?UTF-8?q?=F0=9F=93=90Updated=20angular.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/angular.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Frontend/angular.json b/Frontend/angular.json index 95ac0106..866cbf74 100644 --- a/Frontend/angular.json +++ b/Frontend/angular.json @@ -63,8 +63,7 @@ "optimization": false, "extractLicenses": false, "sourceMap": true, - "serviceWorker": true, - "ngswConfigPath": "ngsw-config.json" + "serviceWorker": false } }, "defaultConfiguration": "production" From 06813335ccb4a7db2f81e5bf8e2d38feda96b509 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 12:55:22 +0200 Subject: [PATCH 05/47] =?UTF-8?q?=F0=9F=93=90Updated=20angular.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/angular.json | 1 - 1 file changed, 1 deletion(-) diff --git a/Frontend/angular.json b/Frontend/angular.json index 866cbf74..172a4237 100644 --- a/Frontend/angular.json +++ b/Frontend/angular.json @@ -51,7 +51,6 @@ ], "outputHashing": "all", "serviceWorker": true, - "ngswConfigPath": "ngsw-config.json", "fileReplacements": [ { "replace": "src/environments/environment.ts", From 25d82558123cb7321e6ecd8607c6b56d45d54301 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 12:58:11 +0200 Subject: [PATCH 06/47] =?UTF-8?q?=F0=9F=93=90Updated=20angular.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/angular.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Frontend/angular.json b/Frontend/angular.json index 172a4237..95c98154 100644 --- a/Frontend/angular.json +++ b/Frontend/angular.json @@ -50,7 +50,6 @@ } ], "outputHashing": "all", - "serviceWorker": true, "fileReplacements": [ { "replace": "src/environments/environment.ts", @@ -61,8 +60,7 @@ "development": { "optimization": false, "extractLicenses": false, - "sourceMap": true, - "serviceWorker": false + "sourceMap": true } }, "defaultConfiguration": "production" From 1ea46792434c01b272dbd08c653fdc994a5ade6e Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 13:07:31 +0200 Subject: [PATCH 07/47] =?UTF-8?q?=F0=9F=93=90Updated=20routes=20to=20remov?= =?UTF-8?q?e=20hashes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/src/app/app.routes.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Frontend/src/app/app.routes.ts b/Frontend/src/app/app.routes.ts index dd204797..6850637d 100644 --- a/Frontend/src/app/app.routes.ts +++ b/Frontend/src/app/app.routes.ts @@ -35,10 +35,11 @@ export const routes: Routes = [ { path: "library", component: UserLibraryComponent}, { path: "echo Song", component: EchoSongComponent}, { path: '**', redirectTo: '/login' } //DO NOT MOVE - MUST ALWAYS BE LAST + ]; @NgModule({ - imports: [RouterModule.forRoot(routes, { useHash: true })], + imports: [RouterModule.forRoot(routes, { useHash: false })], exports: [RouterModule] }) From 27ff2ca5e43e49c709d8b04ef79161b656ebd2a5 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 13:18:49 +0200 Subject: [PATCH 08/47] =?UTF-8?q?=F0=9F=93=90Updated=20angular.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/angular.json | 48 ++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/Frontend/angular.json b/Frontend/angular.json index 95c98154..fe849fac 100644 --- a/Frontend/angular.json +++ b/Frontend/angular.json @@ -5,17 +5,16 @@ "projects": { "Frontend": { "projectType": "application", - "schematics": {}, "root": "", "sourceRoot": "src", "prefix": "app", "architect": { "build": { - "builder": "@angular-devkit/build-angular:application", + "builder": "@angular-devkit/build-angular:browser", "options": { "outputPath": "dist/frontend", "index": "src/index.html", - "browser": "src/main.ts", + "main": "src/main.ts", "polyfills": [ "zone.js" ], @@ -28,39 +27,40 @@ "styles": [ "src/styles/styles.css" ], - "scripts": [], - "server": "src/main.server.ts", - "prerender": true, - "ssr": { - "entry": "server.ts" - } + "scripts": [] }, "configurations": { "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "outputHashing": "all", + "serviceWorker": true, + "ngswConfigPath": "ngsw-config.json", "budgets": [ { "type": "initial", - "maximumWarning": "50mb", - "maximumError": "1mb" + "maximumWarning": "2mb", + "maximumError": "5mb" }, { "type": "anyComponentStyle", "maximumWarning": "50kb", - "maximumError": "50kb" - } - ], - "outputHashing": "all", - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" + "maximumError": "100kb" } ] }, "development": { "optimization": false, + "outputHashing": "none", + "sourceMap": true, "extractLicenses": false, - "sourceMap": true + "vendorChunk": true, + "serviceWorker": false, + "buildOptimizer": false } }, "defaultConfiguration": "production" @@ -72,10 +72,10 @@ }, "configurations": { "production": { - "buildTarget": "Frontend:build:production" + "browserTarget": "Frontend:build:production" }, "development": { - "buildTarget": "Frontend:build:development" + "browserTarget": "Frontend:build:development" } }, "defaultConfiguration": "development" @@ -83,17 +83,19 @@ "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", "options": { - "buildTarget": "Frontend:build" + "browserTarget": "Frontend:build" } }, "test": { "builder": "@angular-devkit/build-angular:karma", "options": { + "main": "src/test.ts", "polyfills": [ "zone.js", "zone.js/testing" ], "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", "assets": [ "src/favicon.ico", "src/assets", From 1ea32feca5c3c29632acc43b2a393ba9a65b0cf0 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 13:44:14 +0200 Subject: [PATCH 09/47] =?UTF-8?q?=F0=9F=93=90Updated=20angular.json=20(aga?= =?UTF-8?q?in)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/angular.json | 46 +++++++++---------- .../back-button/back-button.component.ts | 8 ++-- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/Frontend/angular.json b/Frontend/angular.json index fe849fac..cb6a3b41 100644 --- a/Frontend/angular.json +++ b/Frontend/angular.json @@ -5,6 +5,7 @@ "projects": { "Frontend": { "projectType": "application", + "schematics": {}, "root": "", "sourceRoot": "src", "prefix": "app", @@ -31,36 +32,37 @@ }, "configurations": { "production": { - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" - } - ], - "outputHashing": "all", - "serviceWorker": true, - "ngswConfigPath": "ngsw-config.json", "budgets": [ { "type": "initial", - "maximumWarning": "2mb", - "maximumError": "5mb" + "maximumWarning": "50mb", + "maximumError": "1mb" }, { "type": "anyComponentStyle", "maximumWarning": "50kb", - "maximumError": "100kb" + "maximumError": "50kb" } - ] + ], + "outputHashing": "all", + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "extractLicenses": true, + "sourceMap": false, + "namedChunks": false, + "serviceWorker": true // Only for production build, no SSR or Prerendering }, "development": { "optimization": false, - "outputHashing": "none", - "sourceMap": true, "extractLicenses": false, - "vendorChunk": true, - "serviceWorker": false, - "buildOptimizer": false + "sourceMap": true, + "namedChunks": true, + "serviceWorker": false // Disable service workers for development } }, "defaultConfiguration": "production" @@ -72,10 +74,10 @@ }, "configurations": { "production": { - "browserTarget": "Frontend:build:production" + "buildTarget": "Frontend:build:production" }, "development": { - "browserTarget": "Frontend:build:development" + "buildTarget": "Frontend:build:development" } }, "defaultConfiguration": "development" @@ -83,19 +85,17 @@ "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "Frontend:build" + "buildTarget": "Frontend:build" } }, "test": { "builder": "@angular-devkit/build-angular:karma", "options": { - "main": "src/test.ts", "polyfills": [ "zone.js", "zone.js/testing" ], "tsConfig": "tsconfig.spec.json", - "karmaConfig": "karma.conf.js", "assets": [ "src/favicon.ico", "src/assets", diff --git a/Frontend/src/app/components/atoms/back-button/back-button.component.ts b/Frontend/src/app/components/atoms/back-button/back-button.component.ts index 10838b75..320ebe1e 100644 --- a/Frontend/src/app/components/atoms/back-button/back-button.component.ts +++ b/Frontend/src/app/components/atoms/back-button/back-button.component.ts @@ -7,7 +7,7 @@ import { NgClass } from '@angular/common'; selector: 'app-back-button', standalone: true, templateUrl: './back-button.component.html', - styleUrls: ['./back-button.component.scss'], + styleUrls: ['./back-button.component.css'], imports: [ NgClass ], }) export class BackButtonComponent { @@ -20,12 +20,12 @@ export class BackButtonComponent { private location: Location, public moodService: MoodService, ) { - this.currentMood = this.moodService.getCurrentMood(); - this.moodComponentClasses = this.moodService.getComponentMoodClasses(); + this.currentMood = this.moodService.getCurrentMood(); + this.moodComponentClasses = this.moodService.getComponentMoodClasses(); this.backgroundMoodClasses = this.moodService.getBackgroundMoodClasses(); } - + goBack() { this.location.back(); } From ac1bfb3fa37c2a35106cee9de26a7c86e6681fbc Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 15:01:24 +0200 Subject: [PATCH 10/47] =?UTF-8?q?=F0=9F=93=90Added=20deployed=20frontend?= =?UTF-8?q?=20to=20CORS=20enabled=20URL's?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Backend/src/main.ts b/Backend/src/main.ts index 471f5541..06ef7030 100644 --- a/Backend/src/main.ts +++ b/Backend/src/main.ts @@ -9,7 +9,7 @@ async function bootstrap() { // Enable CORS and configure origin from environment variable or default to localhost app.enableCors({ - origin: configService.get('CORS_ORIGIN', 'http://localhost:4200'), + origin: configService.get('CORS_ORIGIN', 'http://localhost:4200','https://echo-bm8z.onrender.com'), methods: "GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS", credentials: true, }); From cbe5742bb7e2f83865b17116586573ea150343a1 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 15:10:45 +0200 Subject: [PATCH 11/47] =?UTF-8?q?=F0=9F=93=90Adjusted=20CORS=20policy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/src/main.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Backend/src/main.ts b/Backend/src/main.ts index 06ef7030..03f9d6cb 100644 --- a/Backend/src/main.ts +++ b/Backend/src/main.ts @@ -7,9 +7,15 @@ async function bootstrap() { const app = await NestFactory.create(AppModule); const configService = app.get(ConfigService); - // Enable CORS and configure origin from environment variable or default to localhost + // Configure allowed origins for CORS from environment variable or default values + const allowedOrigins = configService.get('CORS_ORIGIN', [ + 'http://localhost:4200', + 'https://echo-bm8z.onrender.com' + ]); + + // Enable CORS with the allowed origins app.enableCors({ - origin: configService.get('CORS_ORIGIN', 'http://localhost:4200','https://echo-bm8z.onrender.com'), + origin: allowedOrigins, methods: "GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS", credentials: true, }); From 086e59b2cd741ac016f8aa1f63fce5bed027611b Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 15:21:44 +0200 Subject: [PATCH 12/47] =?UTF-8?q?=F0=9F=93=90Updated=20CORS=20policy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/src/main.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Backend/src/main.ts b/Backend/src/main.ts index 03f9d6cb..7b9e0f11 100644 --- a/Backend/src/main.ts +++ b/Backend/src/main.ts @@ -9,8 +9,8 @@ async function bootstrap() { // Configure allowed origins for CORS from environment variable or default values const allowedOrigins = configService.get('CORS_ORIGIN', [ - 'http://localhost:4200', - 'https://echo-bm8z.onrender.com' + 'https://echo-bm8z.onrender.com', + 'http://localhost:4200' ]); // Enable CORS with the allowed origins From 5447cfb6ba3c35790d0d0d220a096f7d2ee3daec Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 15:35:06 +0200 Subject: [PATCH 13/47] =?UTF-8?q?=F0=9F=93=90Updated=20API=20calls=20to=20?= =?UTF-8?q?use=20environment=20API=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/src/main.ts | 20 +++++++++++++++----- Frontend/src/app/services/auth.service.ts | 6 +++++- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Backend/src/main.ts b/Backend/src/main.ts index 7b9e0f11..8f947a5a 100644 --- a/Backend/src/main.ts +++ b/Backend/src/main.ts @@ -7,15 +7,25 @@ async function bootstrap() { const app = await NestFactory.create(AppModule); const configService = app.get(ConfigService); - // Configure allowed origins for CORS from environment variable or default values - const allowedOrigins = configService.get('CORS_ORIGIN', [ + // Define allowed origins as an array + const allowedOrigins = [ 'https://echo-bm8z.onrender.com', 'http://localhost:4200' - ]); + ]; - // Enable CORS with the allowed origins + // Enable CORS with dynamic origin checking app.enableCors({ - origin: allowedOrigins, + origin: (origin, callback) => { + // Allow requests with no origin, e.g., mobile apps or curl requests + if (!origin) return callback(null, true); + + // Check if the origin is allowed + if (allowedOrigins.includes(origin)) { + callback(null, true); + } else { + callback(new Error('Not allowed by CORS')); + } + }, methods: "GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS", credentials: true, }); diff --git a/Frontend/src/app/services/auth.service.ts b/Frontend/src/app/services/auth.service.ts index 0e28ce0a..aa36f28c 100644 --- a/Frontend/src/app/services/auth.service.ts +++ b/Frontend/src/app/services/auth.service.ts @@ -5,6 +5,10 @@ import { TokenService } from "./token.service"; import { ProviderService } from "./provider.service"; import { Router } from "@angular/router"; import { PlayerStateService } from "./player-state.service"; +import { environment } from '../../environments/environment'; + + + export interface AuthResponse { @@ -19,7 +23,7 @@ export class AuthService { private loggedInSubject = new BehaviorSubject(false); public isLoggedIn$: Observable = this.loggedInSubject.asObservable(); - private apiUrl = "http://localhost:3000/api/auth"; + private apiUrl = `${environment.apiUrl}/auth`; constructor(private http: HttpClient, private tokenService: TokenService, private playerStateService: PlayerStateService, private providerService: ProviderService, private router: Router) { From 6682a72d378b0a504afe3c192b295833fe6c42bc Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 15:44:41 +0200 Subject: [PATCH 14/47] =?UTF-8?q?=F0=9F=93=90Updated=20all=20frontend=20se?= =?UTF-8?q?rvices=20to=20use=20environment=20=20API=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/src/app/services/search.service.ts | 13 ++++++---- Frontend/src/app/services/spotify.service.ts | 27 +++++++++++--------- Frontend/src/app/services/youtube.service.ts | 8 +++--- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/Frontend/src/app/services/search.service.ts b/Frontend/src/app/services/search.service.ts index a3cff218..c5bcf6c7 100644 --- a/Frontend/src/app/services/search.service.ts +++ b/Frontend/src/app/services/search.service.ts @@ -3,6 +3,7 @@ import { HttpClient } from "@angular/common/http"; import { Observable, BehaviorSubject } from "rxjs"; import { tap } from "rxjs/operators"; import { TokenService } from "./token.service"; +import { environment } from "../../environments/environment"; export interface Track { @@ -56,6 +57,8 @@ export class SearchService albumResult$ = this.albumResultSubject.asObservable(); topResult$ = this.topResultSubject.asObservable(); + private apiUrl = environment.apiUrl; + constructor(private httpClient: HttpClient, private tokenService: TokenService, private http: HttpClient) { } @@ -63,7 +66,7 @@ export class SearchService // Store search results in searchResultSubject and set topResultSubject storeSearch(query: string): Observable { - return this.httpClient.post(`http://localhost:3000/api/search/search`, { "title": query }) + return this.httpClient.post(`${this.apiUrl}/search/search`, { "title": query }) .pipe( tap(results => { @@ -79,7 +82,7 @@ export class SearchService // Store album search results in albumResultSubject storeAlbumSearch(query: string): Observable { - return this.httpClient.post(`http://localhost:3000/api/search/album`, { "title": query }) + return this.httpClient.post(`${this.apiUrl}/search/album`, { "title": query }) .pipe( tap(results => { @@ -114,7 +117,7 @@ export class SearchService const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post(`http://localhost:3000/api/spotify/queue`, { + const response = await this.http.post(`${this.apiUrl}/spotify/queue`, { artist: artistName, song_name: trackName, accessToken: laccessToken, @@ -146,7 +149,7 @@ export class SearchService // Get the tracks of a specific album public async getAlbumInfo(albumName: string): Promise { - const response = await this.http.post(`http://localhost:3000/api/search/album-info`, { + const response = await this.http.post(`${this.apiUrl}/search/album-info`, { title: albumName }).toPromise(); @@ -174,7 +177,7 @@ export class SearchService //This function gets the details of a specific artist public async getArtistInfo(artistName: string): Promise { - const response = await this.http.post(`http://localhost:3000/api/search/album-info`, { + const response = await this.http.post(`${this.apiUrl}/search/album-info`, { artist: artistName }).toPromise(); diff --git a/Frontend/src/app/services/spotify.service.ts b/Frontend/src/app/services/spotify.service.ts index 2a1f6525..b417189f 100644 --- a/Frontend/src/app/services/spotify.service.ts +++ b/Frontend/src/app/services/spotify.service.ts @@ -7,6 +7,7 @@ import { TokenService } from "./token.service"; import { ProviderService } from "./provider.service"; import { MoodService } from "./mood-service.service"; import { PlayerStateService } from "./player-state.service"; +import { environment } from "../../environments/environment"; export interface TrackInfo { @@ -57,6 +58,8 @@ export class SpotifyService private RecentListeningObject: any = null; private QueueObject: any = null; + private apiUrl = `${environment.apiUrl}`; + constructor( private authService: AuthService, @Inject(PLATFORM_ID) private platformId: Object, @@ -199,7 +202,7 @@ export class SpotifyService const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.put(`http://localhost:3000/api/spotify/play`, { + const response = await this.http.put(`${this.apiUrl}/spotify/play`, { trackId: trackId, deviceId: this.deviceId, accessToken: laccessToken, @@ -239,7 +242,7 @@ export class SpotifyService try { - await this.http.put(`http://localhost:3000/api/spotify/next-track`, { + await this.http.put(`${this.apiUrl}/spotify/next-track`, { deviceId: this.deviceId, accessToken: laccessToken, refreshToken: lrefreshToken @@ -273,7 +276,7 @@ export class SpotifyService try { - await this.http.put(`http://localhost:3000/api/spotify/previous-track`, { + await this.http.put(`${this.apiUrl}/spotify/previous-track`, { deviceId: this.deviceId, accessToken: laccessToken, refreshToken: lrefreshToken @@ -393,7 +396,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("http://localhost:3000/api/spotify/recently-played", { + const response = await this.http.post("${this.apiUrl}/spotify/recently-played", { accessToken: laccessToken, refreshToken: lrefreshToken }).toPromise(); @@ -453,7 +456,7 @@ export class SpotifyService const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post(`http://localhost:3000/api/spotify/queue`, { + const response = await this.http.post(`${this.apiUrl}/spotify/queue`, { artist, song_name: songName, accessToken: laccessToken, @@ -510,7 +513,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("http://localhost:3000/api/spotify/currently-playing", { + const response = await this.http.post("${this.apiUrl}/spotify/currently-playing", { accessToken: laccessToken, refreshToken: lrefreshToken }).toPromise(); @@ -545,7 +548,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("http://localhost:3000/api/spotify/track-details", { + const response = await this.http.post("${this.apiUrl}/spotify/track-details", { trackID: trackId, accessToken: laccessToken, refreshToken: lrefreshToken @@ -599,7 +602,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("http://localhost:3000/api/spotify/add-to-queue", { + const response = await this.http.post("${this.apiUrl}/spotify/add-to-queue", { uri: fullTrackId, device_id: this.deviceId, accessToken: laccessToken, @@ -645,7 +648,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("http://localhost:3000/api/spotify/track-details-by-name", { + const response = await this.http.post("${this.apiUrl}/spotify/track-details-by-name", { trackName: trackName, artistName: artistName, accessToken: laccessToken, @@ -670,7 +673,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("http://localhost:3000/api/spotify/track-analysis", { + const response = await this.http.post("${this.apiUrl}/spotify/track-analysis", { trackId: trackId, accessToken: laccessToken, refreshToken: lrefreshToken @@ -733,7 +736,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("http://localhost:3000/api/spotify/top-artists", { + const response = await this.http.post("${this.apiUrl}/spotify/top-artists", { accessToken: laccessToken, refreshToken: lrefreshToken }).toPromise(); @@ -767,7 +770,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("http://localhost:3000/api/spotify/top-tracks", { + const response = await this.http.post("${this.apiUrl}/spotify/top-tracks", { accessToken: laccessToken, refreshToken: lrefreshToken }).toPromise(); diff --git a/Frontend/src/app/services/youtube.service.ts b/Frontend/src/app/services/youtube.service.ts index b444ac61..0a26a058 100644 --- a/Frontend/src/app/services/youtube.service.ts +++ b/Frontend/src/app/services/youtube.service.ts @@ -5,6 +5,7 @@ import { BehaviorSubject } from "rxjs"; import { TokenService } from "./token.service"; import { MoodService } from "./mood-service.service"; import { PlayerStateService } from "./player-state.service"; +import { environment } from "../../environments/environment"; export interface TrackInfo { @@ -45,6 +46,7 @@ export class YouTubeService implements OnDestroy currentlyPlayingTrack$ = this.currentlyPlayingTrackSubject.asObservable(); playingState$ = this.playingStateSubject.asObservable(); playbackProgress$ = this.playbackProgressSubject.asObservable(); + private apiUrl = `${environment.apiUrl}`; constructor( @Inject(PLATFORM_ID) private platformId: Object, @@ -238,7 +240,7 @@ export class YouTubeService implements OnDestroy const accessToken = this.tokenService.getAccessToken(); const refreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post(`http://localhost:3000/api/youtube/search`, { + const response = await this.http.post(`${this.apiUrl}/youtube/search`, { query, accessToken, refreshToken @@ -295,7 +297,7 @@ export class YouTubeService implements OnDestroy { try { - const response = await this.http.get(`http://localhost:3000/api/youtube/top-tracks`).toPromise(); + const response = await this.http.get(`${this.apiUrl}/youtube/top-tracks`).toPromise(); if (Array.isArray(response)) { @@ -337,7 +339,7 @@ export class YouTubeService implements OnDestroy const accessToken = this.tokenService.getAccessToken(); const refreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post(`http://localhost:3000/api/youtube/track-details-by-name`, { + const response = await this.http.post(`${this.apiUrl}/youtube/track-details-by-name`, { accessToken: accessToken, refreshToken: refreshToken, artistName: artist, From 5114a5c062747795977d747472db77d1cdf66531 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 16:04:53 +0200 Subject: [PATCH 15/47] =?UTF-8?q?=F0=9F=93=90Updated=20API=20URL=20syntax?= =?UTF-8?q?=20for=20Spotify=20service?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/src/app/services/spotify.service.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Frontend/src/app/services/spotify.service.ts b/Frontend/src/app/services/spotify.service.ts index b417189f..909b208a 100644 --- a/Frontend/src/app/services/spotify.service.ts +++ b/Frontend/src/app/services/spotify.service.ts @@ -58,7 +58,7 @@ export class SpotifyService private RecentListeningObject: any = null; private QueueObject: any = null; - private apiUrl = `${environment.apiUrl}`; + private apiUrl = environment.apiUrl; constructor( private authService: AuthService, @@ -396,7 +396,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("${this.apiUrl}/spotify/recently-played", { + const response = await this.http.post(`${this.apiUrl}/spotify/recently-played`, { accessToken: laccessToken, refreshToken: lrefreshToken }).toPromise(); @@ -513,7 +513,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("${this.apiUrl}/spotify/currently-playing", { + const response = await this.http.post(`${this.apiUrl}/spotify/currently-playing`, { accessToken: laccessToken, refreshToken: lrefreshToken }).toPromise(); @@ -548,7 +548,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("${this.apiUrl}/spotify/track-details", { + const response = await this.http.post(`${this.apiUrl}/spotify/track-details`, { trackID: trackId, accessToken: laccessToken, refreshToken: lrefreshToken @@ -602,7 +602,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("${this.apiUrl}/spotify/add-to-queue", { + const response = await this.http.post(`${this.apiUrl}/spotify/add-to-queue`, { uri: fullTrackId, device_id: this.deviceId, accessToken: laccessToken, @@ -648,7 +648,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("${this.apiUrl}/spotify/track-details-by-name", { + const response = await this.http.post(`${this.apiUrl}/spotify/track-details-by-name`, { trackName: trackName, artistName: artistName, accessToken: laccessToken, @@ -673,7 +673,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("${this.apiUrl}/spotify/track-analysis", { + const response = await this.http.post(`${this.apiUrl}/spotify/track-analysis`, { trackId: trackId, accessToken: laccessToken, refreshToken: lrefreshToken @@ -736,7 +736,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("${this.apiUrl}/spotify/top-artists", { + const response = await this.http.post(`${this.apiUrl}/spotify/top-artists`, { accessToken: laccessToken, refreshToken: lrefreshToken }).toPromise(); @@ -770,7 +770,7 @@ export class SpotifyService { const laccessToken = this.tokenService.getAccessToken(); const lrefreshToken = this.tokenService.getRefreshToken(); - const response = await this.http.post("${this.apiUrl}/spotify/top-tracks", { + const response = await this.http.post(`${this.apiUrl}/spotify/top-tracks`, { accessToken: laccessToken, refreshToken: lrefreshToken }).toPromise(); From 0088f4372af14fdee7cb746ca6a8bd528a3bcc6b Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 16:22:35 +0200 Subject: [PATCH 16/47] =?UTF-8?q?=F0=9F=93=90Updated=20callback=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/src/auth/controller/auth.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Backend/src/auth/controller/auth.controller.ts b/Backend/src/auth/controller/auth.controller.ts index 6d3e61ae..4c4f83ca 100644 --- a/Backend/src/auth/controller/auth.controller.ts +++ b/Backend/src/auth/controller/auth.controller.ts @@ -78,7 +78,7 @@ export class AuthController { if (accessToken && refreshToken) { try { await this.authService.setSession(accessToken, refreshToken); - res.redirect(303, "http://localhost:4200/home"); + res.redirect(303, "/home"); } catch (error) { console.error("Error setting session:", error); res.status(500).send("Internal Server Error"); From 231f2f66e0d88dd4ed5843d36873cf44da9d3a00 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 16:34:45 +0200 Subject: [PATCH 17/47] =?UTF-8?q?=F0=9F=93=90Updated=20supabase=20service?= =?UTF-8?q?=20callback=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Backend/src/auth/controller/auth.controller.ts | 2 +- Backend/src/supabase/services/supabase.service.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Backend/src/auth/controller/auth.controller.ts b/Backend/src/auth/controller/auth.controller.ts index 4c4f83ca..2a5280c2 100644 --- a/Backend/src/auth/controller/auth.controller.ts +++ b/Backend/src/auth/controller/auth.controller.ts @@ -78,7 +78,7 @@ export class AuthController { if (accessToken && refreshToken) { try { await this.authService.setSession(accessToken, refreshToken); - res.redirect(303, "/home"); + res.redirect(303, "https://echo-bm8z.onrender.com/home"); } catch (error) { console.error("Error setting session:", error); res.status(500).send("Internal Server Error"); diff --git a/Backend/src/supabase/services/supabase.service.ts b/Backend/src/supabase/services/supabase.service.ts index c20dc8d9..f6f1713d 100644 --- a/Backend/src/supabase/services/supabase.service.ts +++ b/Backend/src/supabase/services/supabase.service.ts @@ -22,7 +22,7 @@ export class SupabaseService { const { data, error } = await supabase.auth.signInWithOAuth({ provider: providerName, options: { - redirectTo: "http://localhost:4200/auth/callback", + redirectTo: "https://echo-bm8z.onrender.com/auth/callback", scopes: scope } }); From 53de92f7c00ab3a0c8daed7b9d89855786068165 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 19:02:19 +0200 Subject: [PATCH 18/47] :straight_ruler: Updated static.json --- Frontend/static.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Frontend/static.json b/Frontend/static.json index 1aab9696..30dd592d 100644 --- a/Frontend/static.json +++ b/Frontend/static.json @@ -2,6 +2,6 @@ "root": "dist/frontend", "cleanUrls": false, "routes": { - "/**": "index.html" + "/**": "/index.html" } } From 5e66fe3d1437d9acf708009e1e5224dcae9e3b99 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 19:31:33 +0200 Subject: [PATCH 19/47] :triangular_ruler: Updated authCallbackComponent --- Frontend/src/app/app.routes.ts | 1 + .../authcallback/authcallback.component.ts | 29 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Frontend/src/app/app.routes.ts b/Frontend/src/app/app.routes.ts index 6850637d..da4e3f0d 100644 --- a/Frontend/src/app/app.routes.ts +++ b/Frontend/src/app/app.routes.ts @@ -25,6 +25,7 @@ export const routes: Routes = [ { path: "profile", component: ProfileComponent }, { path: "mood", component: MoodComponent }, { path: "auth/callback", component: AuthCallbackComponent }, + { path: '/auth/callback', component: AuthCallbackComponent }, { path: "", redirectTo: "/login", pathMatch: "full" }, { path: "settings", component: SettingsComponent }, { path: "artist-profile", component: ArtistProfileComponent }, diff --git a/Frontend/src/app/authcallback/authcallback.component.ts b/Frontend/src/app/authcallback/authcallback.component.ts index 828ce21d..18548895 100644 --- a/Frontend/src/app/authcallback/authcallback.component.ts +++ b/Frontend/src/app/authcallback/authcallback.component.ts @@ -1,10 +1,9 @@ import { Component, OnInit } from "@angular/core"; -import { NavigationEnd, Router, RouterEvent } from "@angular/router"; +import { Router } from "@angular/router"; import { AuthService } from '../services/auth.service'; -import { SpotifyService } from "../services/spotify.service"; -import { TokenService } from "../services/token.service"; import { ProviderService } from "../services/provider.service"; -import { filter } from "rxjs/operators"; +import { TokenService } from "../services/token.service"; +import { SpotifyService } from "../services/spotify.service"; @Component({ selector: "app-auth-callback", @@ -28,36 +27,36 @@ export class AuthCallbackComponent implements OnInit { ngOnInit() { if (typeof window !== 'undefined') { const hash = window.location.hash; - const tokens = this.parseHashParams(hash); + const tokens = this.parseHashParams(hash); // Extract tokens from the URL hash if (tokens.accessToken && tokens.refreshToken) { - this.tokenService.setTokens(tokens.accessToken, tokens.refreshToken); + this.tokenService.setTokens(tokens.accessToken, tokens.refreshToken); // Save the tokens this.authService.sendTokensToServer(tokens).subscribe({ next: async (res: any) => { - console.log('Login successful:', res); - await this.spotifyService.init(); - await this.router.navigate(['/home']); + alert('Login successful:'); + await this.spotifyService.init(); // Initialize Spotify Service + await this.router.navigate(['/home']); // Redirect to home page }, error: (err: any) => { - console.error('Error processing login:', err); - this.router.navigate(['/login']); + alert('Error processing login:'); + this.router.navigate(['/login']); // Redirect to login if there's an error } }); } else { - console.error("No tokens found in URL hash"); - this.router.navigate(['/login']); + alert("No tokens found in URL hash"); + this.router.navigate(['/login']); // Redirect to login if no tokens are found } } } parseHashParams(hash: string) { - const params = new URLSearchParams(hash.substring(1)); + const params = new URLSearchParams(hash.substring(1)); // Remove '#' from the hash return { accessToken: params.get('access_token'), refreshToken: params.get('refresh_token'), providerToken: params.get('provider_token'), providerRefreshToken: params.get('provider_refresh_token'), - code: params.get('code') + expiresAt: params.get('expires_at') }; } } From 52a752b0840707c41d0b6fb6cfb8ec95d1defb8c Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 19:44:05 +0200 Subject: [PATCH 20/47] :construction: Added logs to supabase service --- .../src/supabase/services/supabase.service.ts | 69 +++++++++++++------ 1 file changed, 47 insertions(+), 22 deletions(-) diff --git a/Backend/src/supabase/services/supabase.service.ts b/Backend/src/supabase/services/supabase.service.ts index f6f1713d..b336f61d 100644 --- a/Backend/src/supabase/services/supabase.service.ts +++ b/Backend/src/supabase/services/supabase.service.ts @@ -5,18 +5,22 @@ import { AuthService } from "../../auth/services/auth.service"; import * as crypto from "crypto"; @Injectable() -export class SupabaseService { +export class SupabaseService +{ protected encryptionKey: Buffer; - constructor() { + constructor() + { this.encryptionKey = Buffer.from(encryptionKey, "base64"); } // This method is used to sign in with OAuth.using the given provider. - async signinWithOAuth(providerName: string) { + async signinWithOAuth(providerName: string) + { const supabase = createSupabaseClient(); let scope: string = ""; - if (providerName === "spotify") { + if (providerName === "spotify") + { scope = "streaming user-read-email user-read-private user-read-recently-played user-read-playback-state user-modify-playback-state user-library-read user-top-read"; } const { data, error } = await supabase.auth.signInWithOAuth({ @@ -26,51 +30,63 @@ export class SupabaseService { scopes: scope } }); - if (error) { + if (error) + { throw new Error(error.message); } return data.url; } // This method is used to exchange the code (returned by a provider) for a session (from Supabase). - async exchangeCodeForSession(code: string) { + async exchangeCodeForSession(code: string) + { const supabase = createSupabaseClient(); const { error } = await supabase.auth.exchangeCodeForSession(code); - if (error) { + if (error) + { throw new Error(error.message); } } // This method is used to handle tokens from Spotify and store them in the Supabase user_tokens table. - async handleSpotifyTokens(accessToken: string, refreshToken: string, providerToken: string, providerRefreshToken: string) { - if (!(accessToken && refreshToken && providerToken && providerRefreshToken)) { - return {message: "Error occurred during OAuth Sign In while processing tokens - please try again."} + async handleSpotifyTokens(accessToken: string, refreshToken: string, providerToken: string, providerRefreshToken: string) + { + if (!(accessToken && refreshToken && providerToken && providerRefreshToken)) + { + return { message: "Error occurred during OAuth Sign In while processing tokens - please try again." }; } const supabase = createSupabaseClient(); const { error } = await supabase.auth.setSession({ access_token: accessToken, refresh_token: refreshToken }); - if (error) { + if (error) + { console.error("Error setting session:", error); return; } const { data, error: userError } = await supabase.auth.getUser(); - if (userError) { + if (userError) + { console.error("Error retrieving user:", userError); return; } - if (data.user) { + if (data.user) + { const userId: string = data.user.id; await this.insertTokens(userId, this.encryptToken(providerToken), this.encryptToken(providerRefreshToken)); - } else { + } + else + { console.log("No user data available."); } } // This method is used to insert tokens into the user_tokens table. - async insertTokens(userId: string, providerToken: string, providerRefreshToken: string): Promise { - if (!(userId && providerToken && providerRefreshToken)) { + async insertTokens(userId: string, providerToken: string, providerRefreshToken: string): Promise + { + if (!(userId && providerToken && providerRefreshToken)) + { return; } const encryptedProviderToken = providerToken; @@ -89,7 +105,8 @@ export class SupabaseService { onConflict: "user_id" }); - if (error) { + if (error) + { console.error("Error updating or inserting token data:", error); throw new Error("Failed to update or insert tokens"); } @@ -97,7 +114,8 @@ export class SupabaseService { } // This method is used to encrypt a token. - encryptToken(token: string): string { + encryptToken(token: string): string + { const iv = crypto.randomBytes(16); const cipher = crypto.createCipheriv("aes-256-cbc", this.encryptionKey, iv); let encrypted = cipher.update(token, "utf8", "base64"); @@ -106,7 +124,8 @@ export class SupabaseService { } // This method is used to decrypt a token. - decryptToken(encryptedToken: string): string { + decryptToken(encryptedToken: string): string + { const [iv, encrypted] = encryptedToken.split(":"); const decipher = crypto.createDecipheriv("aes-256-cbc", this.encryptionKey, Buffer.from(iv, "base64")); let decrypted = decipher.update(encrypted, "base64", "utf8"); @@ -115,7 +134,10 @@ export class SupabaseService { } // This method is used to retrieve tokens from the user_tokens table. - async retrieveTokens(userId: string) { + async retrieveTokens(userId: string) + { + console.log(`Retrieving tokens for user: ${userId}`); + const supabase = createSupabaseClient(); const { data, error } = await supabase .from("user_tokens") @@ -123,12 +145,14 @@ export class SupabaseService { .eq("user_id", userId) .single(); - if (error) { + if (error) + { console.error("Error retrieving tokens:", error); throw new Error("Failed to retrieve tokens"); } - if (data) { + if (data) + { const providerToken = this.decryptToken(data.encrypted_provider_token); const providerRefreshToken = this.decryptToken(data.encrypted_provider_refresh_token); return { providerToken, providerRefreshToken }; @@ -136,4 +160,5 @@ export class SupabaseService { return null; } + } From 12c9b2c0da96bf78accf1bd92863cfcff6f70327 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 20:07:04 +0200 Subject: [PATCH 21/47] :construction: Updated frontend auth service --- Frontend/src/app/app.component.ts | 26 ++++++++++++++++++----- Frontend/src/app/services/auth.service.ts | 14 +++++------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/Frontend/src/app/app.component.ts b/Frontend/src/app/app.component.ts index b18b8b7f..5d38aba6 100644 --- a/Frontend/src/app/app.component.ts +++ b/Frontend/src/app/app.component.ts @@ -47,9 +47,9 @@ export class AppComponent implements OnInit, OnDestroy update: boolean = false; screenSize!: string; displayPageName: boolean = false; - columnStart: number = 3; - columnStartNav: number = 1; - colSpan: number = 4; + columnStart: number = 3; + columnStartNav: number = 1; + colSpan: number = 4; isSidebarOpen: boolean = false; protected displaySideBar: boolean = false; protected isAuthRoute: boolean = false; @@ -97,12 +97,27 @@ export class AppComponent implements OnInit, OnDestroy async ngOnInit() { + window.addEventListener('beforeunload', this.handleTabClose); this.screenSizeService.screenSize$.subscribe(screenSize => { this.screenSize = screenSize; }); } + // Handle the browser tab close event + handleTabClose = (event: BeforeUnloadEvent) => { + // Call the signOut method before the tab is closed + this.authService.signOut().subscribe({ + next: (response) => { + console.log('User signed out successfully on tab close'); + }, + error: (error) => { + console.error('Error during sign out on tab close:', error); + } + }); + } + + async ngAfterViewInit() { this.playerStateService.setReady(); @@ -115,7 +130,7 @@ export class AppComponent implements OnInit, OnDestroy layout(isSidebarOpen: boolean) { this.isSidebarOpen = isSidebarOpen; - this.columnStart = isSidebarOpen ? 1 : 3; + this.columnStart = isSidebarOpen ? 1 : 3; this.colSpan = isSidebarOpen ? 5 : 4; } @@ -129,5 +144,6 @@ export class AppComponent implements OnInit, OnDestroy ngOnDestroy() { this.authService.signOut(); + window.removeEventListener('beforeunload', this.handleTabClose); } -} \ No newline at end of file +} diff --git a/Frontend/src/app/services/auth.service.ts b/Frontend/src/app/services/auth.service.ts index aa36f28c..308a84f9 100644 --- a/Frontend/src/app/services/auth.service.ts +++ b/Frontend/src/app/services/auth.service.ts @@ -89,15 +89,11 @@ export class AuthService // This function is used to sign in the user with Spotify OAuth async signInWithOAuth(): Promise { - this.loggedInSubject.next(true); - if (localStorage.getItem("loggedIn") === "true") - { - this.router.navigate(["/home"]); - } - else - { - localStorage.setItem("loggedIn", "true"); - } + localStorage.removeItem("loggedIn"); + this.tokenService.clearTokens(); // Make sure to clear any tokens stored for the previous user + + this.loggedInSubject.next(false); + const providerName = this.providerService.getProviderName(); this.http.post<{ url: string }>(`${this.apiUrl}/oauth-signin`, { provider: providerName }) .subscribe( From d3ce003b81056f270ef830067e52c12d5d3015b4 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 20:43:01 +0200 Subject: [PATCH 22/47] :construction: Updated token service --- .../authcallback/authcallback.component.ts | 54 ++++++++++++------- Frontend/src/app/services/auth.service.ts | 6 +++ Frontend/src/app/services/token.service.ts | 2 +- 3 files changed, 42 insertions(+), 20 deletions(-) diff --git a/Frontend/src/app/authcallback/authcallback.component.ts b/Frontend/src/app/authcallback/authcallback.component.ts index 18548895..7c1847ab 100644 --- a/Frontend/src/app/authcallback/authcallback.component.ts +++ b/Frontend/src/app/authcallback/authcallback.component.ts @@ -24,33 +24,49 @@ export class AuthCallbackComponent implements OnInit { private providerService: ProviderService ) {} - ngOnInit() { - if (typeof window !== 'undefined') { + async ngOnInit() + { + if (typeof window !== 'undefined') + { const hash = window.location.hash; - const tokens = this.parseHashParams(hash); // Extract tokens from the URL hash + const tokens = this.parseHashParams(hash); + alert("Auth processing");// Extract tokens from the URL hash - if (tokens.accessToken && tokens.refreshToken) { - this.tokenService.setTokens(tokens.accessToken, tokens.refreshToken); // Save the tokens - this.authService.sendTokensToServer(tokens).subscribe({ - next: async (res: any) => { - alert('Login successful:'); - await this.spotifyService.init(); // Initialize Spotify Service - await this.router.navigate(['/home']); // Redirect to home page - }, - error: (err: any) => { - alert('Error processing login:'); - this.router.navigate(['/login']); // Redirect to login if there's an error - } - }); - } else { + if (tokens.accessToken) + { + if (tokens.refreshToken) + { + await this.tokenService.setTokens(tokens.accessToken, tokens.refreshToken); + this.authService.sendTokensToServer(tokens).subscribe({ + next: async (res: any) => + { + alert("Login successful:"); + await this.spotifyService.init(); + await this.router.navigate(["/home"]); + }, + error: (err: any) => + { + alert("Error processing login:"); + this.router.navigate(["/login"]); + } + }); + } + else + { + alert("No tokens found in URL hash"); + this.router.navigate(["/login"]); + } + } + else + { alert("No tokens found in URL hash"); - this.router.navigate(['/login']); // Redirect to login if no tokens are found + this.router.navigate(["/login"]); } } } parseHashParams(hash: string) { - const params = new URLSearchParams(hash.substring(1)); // Remove '#' from the hash + const params = new URLSearchParams(hash.substring(1)); return { accessToken: params.get('access_token'), refreshToken: params.get('refresh_token'), diff --git a/Frontend/src/app/services/auth.service.ts b/Frontend/src/app/services/auth.service.ts index 308a84f9..2934037c 100644 --- a/Frontend/src/app/services/auth.service.ts +++ b/Frontend/src/app/services/auth.service.ts @@ -68,6 +68,12 @@ export class AuthService return this.http.post(`${this.apiUrl}/providertokens`, { accessToken: laccessToken, refreshToken: lrefreshToken }); } + async setProviderTokens(): void + { + await this.http.post(`${this.apiUrl}/providertokens`, { accessToken: laccessToken, refreshToken: lrefreshToken }); + } + + verifyOfflineSession(): Promise { if (localStorage.getItem("loggedIn") === "true") diff --git a/Frontend/src/app/services/token.service.ts b/Frontend/src/app/services/token.service.ts index f1a9e860..9748db2d 100644 --- a/Frontend/src/app/services/token.service.ts +++ b/Frontend/src/app/services/token.service.ts @@ -25,7 +25,7 @@ export class TokenService { } //This method sets the access token and refresh token in the BehaviorSubjects and session Storage. - setTokens(accessToken: string, refreshToken: string): void { + async setTokens(accessToken: string, refreshToken: string): void { this.accessTokenSubject.next(accessToken); this.refreshTokenSubject.next(refreshToken); sessionStorage.setItem('accessToken', accessToken); From b7a0981c2e2b187b38901fbe76020eb06ca5cd83 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Wed, 25 Sep 2024 20:49:38 +0200 Subject: [PATCH 23/47] :construction: Updated frontend Auth service --- Frontend/src/app/services/auth.service.ts | 3 ++- Frontend/src/app/services/token.service.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Frontend/src/app/services/auth.service.ts b/Frontend/src/app/services/auth.service.ts index 2934037c..e871b73f 100644 --- a/Frontend/src/app/services/auth.service.ts +++ b/Frontend/src/app/services/auth.service.ts @@ -68,8 +68,9 @@ export class AuthService return this.http.post(`${this.apiUrl}/providertokens`, { accessToken: laccessToken, refreshToken: lrefreshToken }); } - async setProviderTokens(): void + async setProviderTokens(laccessToken: string, lrefreshToken: string): Promise { + await this.http.post(`${this.apiUrl}/providertokens`, { accessToken: laccessToken, refreshToken: lrefreshToken }); } diff --git a/Frontend/src/app/services/token.service.ts b/Frontend/src/app/services/token.service.ts index 9748db2d..1cb31287 100644 --- a/Frontend/src/app/services/token.service.ts +++ b/Frontend/src/app/services/token.service.ts @@ -25,7 +25,7 @@ export class TokenService { } //This method sets the access token and refresh token in the BehaviorSubjects and session Storage. - async setTokens(accessToken: string, refreshToken: string): void { + async setTokens(accessToken: string, refreshToken: string): Promise { this.accessTokenSubject.next(accessToken); this.refreshTokenSubject.next(refreshToken); sessionStorage.setItem('accessToken', accessToken); From d7e054271a145ee6253dbbc433bfd81164af0101 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Fri, 27 Sep 2024 08:08:18 +0200 Subject: [PATCH 24/47] :triangular_ruler: Fixed error in frontend Auth service --- Backend/src/main.ts | 9 --------- Frontend/src/app/services/auth.service.ts | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/Backend/src/main.ts b/Backend/src/main.ts index 8f947a5a..9083b928 100644 --- a/Backend/src/main.ts +++ b/Backend/src/main.ts @@ -16,10 +16,8 @@ async function bootstrap() { // Enable CORS with dynamic origin checking app.enableCors({ origin: (origin, callback) => { - // Allow requests with no origin, e.g., mobile apps or curl requests if (!origin) return callback(null, true); - // Check if the origin is allowed if (allowedOrigins.includes(origin)) { callback(null, true); } else { @@ -30,18 +28,11 @@ async function bootstrap() { credentials: true, }); - // Set global prefix for API app.setGlobalPrefix('api'); - - // Use Render's assigned PORT environment variable, fallback to 3000 if not set const port = configService.get('PORT', 3000); - - // Start the NestJS app await app.listen(port); - // Log the application URL console.log(`Application is running on: ${await app.getUrl()}`); } -// Bootstrap the application bootstrap(); diff --git a/Frontend/src/app/services/auth.service.ts b/Frontend/src/app/services/auth.service.ts index e871b73f..b33d5ac9 100644 --- a/Frontend/src/app/services/auth.service.ts +++ b/Frontend/src/app/services/auth.service.ts @@ -114,7 +114,7 @@ export class AuthService localStorage.setItem("spotifyReady", "true"); } } - await this.playerStateService + await this.playerStateService.setSpotifyReady(); if (response && response.url) { localStorage.setItem("loggedIn", "true"); From 4e8c11dc44a1adf2af5ede1634b75990677eb669 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Fri, 27 Sep 2024 08:16:33 +0200 Subject: [PATCH 25/47] :construction: Temporarily disabled service worker for production --- Frontend/angular.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Frontend/angular.json b/Frontend/angular.json index cb6a3b41..47621190 100644 --- a/Frontend/angular.json +++ b/Frontend/angular.json @@ -55,14 +55,14 @@ "extractLicenses": true, "sourceMap": false, "namedChunks": false, - "serviceWorker": true // Only for production build, no SSR or Prerendering + "serviceWorker": false }, "development": { "optimization": false, "extractLicenses": false, "sourceMap": true, "namedChunks": true, - "serviceWorker": false // Disable service workers for development + "serviceWorker": false } }, "defaultConfiguration": "production" From e030657f533dd9547029c39f2049dd583b6af894 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Fri, 27 Sep 2024 11:44:26 +0200 Subject: [PATCH 26/47] :triangular_ruler: Updated static.json --- Frontend/static.json | 1 + 1 file changed, 1 insertion(+) diff --git a/Frontend/static.json b/Frontend/static.json index 30dd592d..4ebd2beb 100644 --- a/Frontend/static.json +++ b/Frontend/static.json @@ -2,6 +2,7 @@ "root": "dist/frontend", "cleanUrls": false, "routes": { + "/auth/callback": "/auth/callback", "/**": "/index.html" } } From 177467c8e6f728481d144a96b23715777701320e Mon Sep 17 00:00:00 2001 From: 21797545 Date: Fri, 27 Sep 2024 14:27:28 +0200 Subject: [PATCH 27/47] :triangular_ruler: Updated angular.json to include static.json in build assets --- Frontend/angular.json | 6 ++++-- Frontend/src/static.json | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 Frontend/src/static.json diff --git a/Frontend/angular.json b/Frontend/angular.json index 47621190..b224edc2 100644 --- a/Frontend/angular.json +++ b/Frontend/angular.json @@ -23,7 +23,8 @@ "assets": [ "src/favicon.ico", "src/assets", - "src/manifest.webmanifest" + "src/manifest.webmanifest", + "src/static.json" ], "styles": [ "src/styles/styles.css" @@ -99,7 +100,8 @@ "assets": [ "src/favicon.ico", "src/assets", - "src/manifest.webmanifest" + "src/manifest.webmanifest", + "src/static.json" ], "styles": [ "src/styles/tailwind.css", diff --git a/Frontend/src/static.json b/Frontend/src/static.json new file mode 100644 index 00000000..4ebd2beb --- /dev/null +++ b/Frontend/src/static.json @@ -0,0 +1,8 @@ +{ + "root": "dist/frontend", + "cleanUrls": false, + "routes": { + "/auth/callback": "/auth/callback", + "/**": "/index.html" + } +} From 035bbb313ee66c5499e61010959a3486a0ab184a Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 10:20:06 +0200 Subject: [PATCH 28/47] :construction: Updated login view and authcallback component --- .../src/supabase/services/supabase.service.ts | 2 +- .../authcallback/authcallback.component.ts | 68 +++++++++---------- .../src/app/views/login/login.component.ts | 58 ++++++++++++---- 3 files changed, 76 insertions(+), 52 deletions(-) diff --git a/Backend/src/supabase/services/supabase.service.ts b/Backend/src/supabase/services/supabase.service.ts index b336f61d..43373f4c 100644 --- a/Backend/src/supabase/services/supabase.service.ts +++ b/Backend/src/supabase/services/supabase.service.ts @@ -26,7 +26,7 @@ export class SupabaseService const { data, error } = await supabase.auth.signInWithOAuth({ provider: providerName, options: { - redirectTo: "https://echo-bm8z.onrender.com/auth/callback", + redirectTo: "https://echo-bm8z.onrender.com/index.html", scopes: scope } }); diff --git a/Frontend/src/app/authcallback/authcallback.component.ts b/Frontend/src/app/authcallback/authcallback.component.ts index 7c1847ab..7510b1fc 100644 --- a/Frontend/src/app/authcallback/authcallback.component.ts +++ b/Frontend/src/app/authcallback/authcallback.component.ts @@ -1,9 +1,9 @@ import { Component, OnInit } from "@angular/core"; import { Router } from "@angular/router"; import { AuthService } from '../services/auth.service'; -import { ProviderService } from "../services/provider.service"; -import { TokenService } from "../services/token.service"; import { SpotifyService } from "../services/spotify.service"; +import { TokenService } from "../services/token.service"; +import { ProviderService } from "../services/provider.service"; @Component({ selector: "app-auth-callback", @@ -24,49 +24,43 @@ export class AuthCallbackComponent implements OnInit { private providerService: ProviderService ) {} - async ngOnInit() - { - if (typeof window !== 'undefined') - { + async ngOnInit() { + if (typeof window !== 'undefined') { const hash = window.location.hash; const tokens = this.parseHashParams(hash); - alert("Auth processing");// Extract tokens from the URL hash - if (tokens.accessToken) - { - if (tokens.refreshToken) - { - await this.tokenService.setTokens(tokens.accessToken, tokens.refreshToken); - this.authService.sendTokensToServer(tokens).subscribe({ - next: async (res: any) => - { - alert("Login successful:"); - await this.spotifyService.init(); - await this.router.navigate(["/home"]); - }, - error: (err: any) => - { - alert("Error processing login:"); - this.router.navigate(["/login"]); - } - }); - } - else - { - alert("No tokens found in URL hash"); - this.router.navigate(["/login"]); - } - } - else - { - alert("No tokens found in URL hash"); - this.router.navigate(["/login"]); + // Ensure access and refresh tokens are present + if (tokens.accessToken && tokens.refreshToken) { + // Set access and refresh tokens + await this.tokenService.setTokens(tokens.accessToken, tokens.refreshToken); + + // Send all tokens, including optional provider tokens, to the server + this.authService.sendTokensToServer({ + accessToken: tokens.accessToken, + refreshToken: tokens.refreshToken, + providerToken: tokens.providerToken || null, // Optional, fallback to null + providerRefreshToken: tokens.providerRefreshToken || null // Optional, fallback to null + }).subscribe({ + next: async (res: any) => { + console.log("Login successful", res); + await this.spotifyService.init(); + await this.router.navigate(['/home']); + }, + error: (err: any) => { + console.error("Error processing login", err); + this.router.navigate(['/login']); + } + }); + } else { + console.error("No tokens found in URL hash"); + this.router.navigate(['/login']); } } } + // Function to parse tokens from the URL hash parseHashParams(hash: string) { - const params = new URLSearchParams(hash.substring(1)); + const params = new URLSearchParams(hash.substring(1)); // Remove the '#' and parse return { accessToken: params.get('access_token'), refreshToken: params.get('refresh_token'), diff --git a/Frontend/src/app/views/login/login.component.ts b/Frontend/src/app/views/login/login.component.ts index a8e4d15a..994a826b 100644 --- a/Frontend/src/app/views/login/login.component.ts +++ b/Frontend/src/app/views/login/login.component.ts @@ -1,25 +1,55 @@ -//angular imports -import { Component } from '@angular/core'; -import {CommonModule} from '@angular/common'; -//services -import {ScreenSizeService} from './../../services/screen-size-service.service'; -//Component Template imports -import {DeskLoginComponent} from './../../components/templates/desktop/deskLogin/desk-login.component'; -import {MobileloginComponent} from './../../components/templates/mobile/mobilelogin/mobilelogin.component'; +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { ScreenSizeService } from './../../services/screen-size-service.service'; +import { DeskLoginComponent } from './../../components/templates/desktop/deskLogin/desk-login.component'; +import { MobileloginComponent } from './../../components/templates/mobile/mobilelogin/mobilelogin.component'; + @Component({ selector: 'app-login', standalone: true, - imports: [CommonModule, DeskLoginComponent, MobileloginComponent], + imports: [DeskLoginComponent, MobileloginComponent], templateUrl: './login.component.html', - styleUrl: './login.component.css' + styleUrls: ['./login.component.css'] }) -export class LoginComponentview { +export class LoginComponentview implements OnInit { screenSize?: string; - constructor( private screenSizeService: ScreenSizeService){ - } - async ngOnInit() { + + constructor(private screenSizeService: ScreenSizeService, private router: Router) {} + + ngOnInit() { this.screenSizeService.screenSize$.subscribe(screenSize => { this.screenSize = screenSize; }); + + // Check if the URL contains the OAuth tokens + const hash = window.location.hash; + + if (hash) { + // Parse the tokens from the URL hash + const tokens = this.parseHashParams(hash); + + if (tokens.accessToken && tokens.refreshToken) { + // Redirect to the AuthCallbackComponent with tokens as query params + this.router.navigate(['/auth/callback'], { queryParams: { + accessToken: tokens.accessToken, + refreshToken: tokens.refreshToken, + providerToken: tokens.providerToken, + providerRefreshToken: tokens.providerRefreshToken + }}); + } else { + console.error("No tokens found in URL"); + } + } + } + + parseHashParams(hash: string) { + const params = new URLSearchParams(hash.substring(1)); // Remove the '#' and parse + return { + accessToken: params.get('access_token'), + refreshToken: params.get('refresh_token'), + providerToken: params.get('provider_token'), + providerRefreshToken: params.get('provider_refresh_token'), + expiresAt: params.get('expires_at') + }; } } From 2c785ab4c694bbe557e3b09b328f6146e4983f3a Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 10:26:14 +0200 Subject: [PATCH 29/47] :construction: Updated redirectUrl for OAuth --- Backend/src/supabase/services/supabase.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Backend/src/supabase/services/supabase.service.ts b/Backend/src/supabase/services/supabase.service.ts index 43373f4c..b6dc9d9e 100644 --- a/Backend/src/supabase/services/supabase.service.ts +++ b/Backend/src/supabase/services/supabase.service.ts @@ -26,7 +26,7 @@ export class SupabaseService const { data, error } = await supabase.auth.signInWithOAuth({ provider: providerName, options: { - redirectTo: "https://echo-bm8z.onrender.com/index.html", + redirectTo: "https://echo-bm8z.onrender.com/login", scopes: scope } }); From 4c7de65463122c06b7f1829b97283362fc878054 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 12:48:19 +0200 Subject: [PATCH 30/47] :construction: Removed onDestroy from app component --- Frontend/src/app/app.component.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Frontend/src/app/app.component.ts b/Frontend/src/app/app.component.ts index 5d38aba6..aa7dc2e0 100644 --- a/Frontend/src/app/app.component.ts +++ b/Frontend/src/app/app.component.ts @@ -42,7 +42,7 @@ import { Observable } from "rxjs"; templateUrl: "./app.component.html", styleUrls: ["./app.component.css"] }) -export class AppComponent implements OnInit, OnDestroy +export class AppComponent implements OnInit { update: boolean = false; screenSize!: string; @@ -141,9 +141,4 @@ export class AppComponent implements OnInit, OnDestroy return false; } - ngOnDestroy() - { - this.authService.signOut(); - window.removeEventListener('beforeunload', this.handleTabClose); - } } From 0e11f58e19e531b64eb852c1f60ac73c32028a8a Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 13:25:24 +0200 Subject: [PATCH 31/47] :construction: Updated app.component.ts to redirect to callback if hash is found --- Frontend/src/app/app.component.ts | 22 +++--- .../authcallback/authcallback.component.ts | 68 ++++++++----------- .../src/app/views/login/login.component.ts | 3 +- 3 files changed, 45 insertions(+), 48 deletions(-) diff --git a/Frontend/src/app/app.component.ts b/Frontend/src/app/app.component.ts index aa7dc2e0..204c300d 100644 --- a/Frontend/src/app/app.component.ts +++ b/Frontend/src/app/app.component.ts @@ -1,5 +1,5 @@ import { Component, Inject, OnDestroy, OnInit, PLATFORM_ID } from "@angular/core"; -import { RouterOutlet, Router, NavigationEnd, Event as RouterEvent, ActivatedRoute } from "@angular/router"; +import { RouterOutlet, Router, NavigationEnd, ActivatedRoute } from "@angular/router"; import { BottomPlayerComponent } from "./components/organisms/bottom-player/bottom-player.component"; import { BottomNavComponent } from "./components/organisms/bottom-nav/bottom-nav.component"; import { ScreenSizeService } from "./services/screen-size-service.service"; @@ -9,10 +9,7 @@ import { CommonModule, isPlatformBrowser } from "@angular/common"; import { ProviderService } from "./services/provider.service"; import { PageHeaderComponent } from "./components/molecules/page-header/page-header.component"; import { MoodService } from "./services/mood-service.service"; -import { - BackgroundAnimationComponent -} from "./components/organisms/background-animation/background-animation.component"; - +import { BackgroundAnimationComponent } from "./components/organisms/background-animation/background-animation.component"; import { NavbarComponent } from "./components/organisms/navbar/navbar.component"; import { SideBarComponent } from './components/organisms/side-bar/side-bar.component'; //template imports @@ -42,7 +39,7 @@ import { Observable } from "rxjs"; templateUrl: "./app.component.html", styleUrls: ["./app.component.css"] }) -export class AppComponent implements OnInit +export class AppComponent implements OnInit, OnDestroy { update: boolean = false; screenSize!: string; @@ -102,11 +99,17 @@ export class AppComponent implements OnInit { this.screenSize = screenSize; }); + + // Handle OAuth login and redirect to /auth/callback + const url = window.location.href; + if (url.includes("access_token")) { + const fragment = url.split("#")[1]; // Get everything after # + this.router.navigate(['/auth/callback'], { fragment }); + } } // Handle the browser tab close event handleTabClose = (event: BeforeUnloadEvent) => { - // Call the signOut method before the tab is closed this.authService.signOut().subscribe({ next: (response) => { console.log('User signed out successfully on tab close'); @@ -117,7 +120,6 @@ export class AppComponent implements OnInit }); } - async ngAfterViewInit() { this.playerStateService.setReady(); @@ -141,4 +143,8 @@ export class AppComponent implements OnInit return false; } + ngOnDestroy() { + window.removeEventListener('beforeunload', this.handleTabClose); + } + } diff --git a/Frontend/src/app/authcallback/authcallback.component.ts b/Frontend/src/app/authcallback/authcallback.component.ts index 7510b1fc..fbc507a4 100644 --- a/Frontend/src/app/authcallback/authcallback.component.ts +++ b/Frontend/src/app/authcallback/authcallback.component.ts @@ -1,9 +1,8 @@ import { Component, OnInit } from "@angular/core"; -import { Router } from "@angular/router"; +import { Router, ActivatedRoute } from "@angular/router"; import { AuthService } from '../services/auth.service'; import { SpotifyService } from "../services/spotify.service"; import { TokenService } from "../services/token.service"; -import { ProviderService } from "../services/provider.service"; @Component({ selector: "app-auth-callback", @@ -21,52 +20,43 @@ export class AuthCallbackComponent implements OnInit { private router: Router, private spotifyService: SpotifyService, private tokenService: TokenService, - private providerService: ProviderService + private route: ActivatedRoute ) {} async ngOnInit() { - if (typeof window !== 'undefined') { - const hash = window.location.hash; - const tokens = this.parseHashParams(hash); + this.route.fragment.subscribe(async (fragment) => { + if (fragment) { + const tokens = this.parseHashParams(fragment); - // Ensure access and refresh tokens are present - if (tokens.accessToken && tokens.refreshToken) { - // Set access and refresh tokens - await this.tokenService.setTokens(tokens.accessToken, tokens.refreshToken); - - // Send all tokens, including optional provider tokens, to the server - this.authService.sendTokensToServer({ - accessToken: tokens.accessToken, - refreshToken: tokens.refreshToken, - providerToken: tokens.providerToken || null, // Optional, fallback to null - providerRefreshToken: tokens.providerRefreshToken || null // Optional, fallback to null - }).subscribe({ - next: async (res: any) => { - console.log("Login successful", res); - await this.spotifyService.init(); - await this.router.navigate(['/home']); - }, - error: (err: any) => { - console.error("Error processing login", err); - this.router.navigate(['/login']); - } - }); - } else { - console.error("No tokens found in URL hash"); - this.router.navigate(['/login']); + if (tokens.accessToken && tokens.refreshToken) { + await this.tokenService.setTokens(tokens.accessToken, tokens.refreshToken); + this.authService.sendTokensToServer(tokens).subscribe({ + next: async (res: any) => { + console.log("Login successful:", res); + await this.spotifyService.init(); + await this.router.navigate(["/home"]); + }, + error: (err: any) => { + console.error("Error processing login:", err); + this.router.navigate(["/login"]); + } + }); + } else { + console.error("No tokens found in URL hash"); + this.router.navigate(["/login"]); + } } - } + }); } - // Function to parse tokens from the URL hash parseHashParams(hash: string) { - const params = new URLSearchParams(hash.substring(1)); // Remove the '#' and parse + const params = new URLSearchParams(hash); return { - accessToken: params.get('access_token'), - refreshToken: params.get('refresh_token'), - providerToken: params.get('provider_token'), - providerRefreshToken: params.get('provider_refresh_token'), - expiresAt: params.get('expires_at') + accessToken: params.get("access_token"), + refreshToken: params.get("refresh_token"), + providerToken: params.get("provider_token"), + providerRefreshToken: params.get("provider_refresh_token"), + expiresAt: params.get("expires_at") }; } } diff --git a/Frontend/src/app/views/login/login.component.ts b/Frontend/src/app/views/login/login.component.ts index 994a826b..ceb4b5e4 100644 --- a/Frontend/src/app/views/login/login.component.ts +++ b/Frontend/src/app/views/login/login.component.ts @@ -3,11 +3,12 @@ import { Router } from '@angular/router'; import { ScreenSizeService } from './../../services/screen-size-service.service'; import { DeskLoginComponent } from './../../components/templates/desktop/deskLogin/desk-login.component'; import { MobileloginComponent } from './../../components/templates/mobile/mobilelogin/mobilelogin.component'; +import { NgIf } from "@angular/common"; @Component({ selector: 'app-login', standalone: true, - imports: [DeskLoginComponent, MobileloginComponent], + imports: [DeskLoginComponent, MobileloginComponent, NgIf], templateUrl: './login.component.html', styleUrls: ['./login.component.css'] }) From fbf04e15f56f7dd7e84dc16e986ff80d8c8015ee Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 13:45:28 +0200 Subject: [PATCH 32/47] :triangular_ruler: Updated backend supabase service to redirect based on environment --- Backend/package.json | 4 ++-- Backend/src/supabase/services/supabase.service.ts | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Backend/package.json b/Backend/package.json index 757f5445..13c0e490 100644 --- a/Backend/package.json +++ b/Backend/package.json @@ -10,9 +10,9 @@ "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "start": "nest start", - "start:dev": "nest start --watch", + "start:dev": "NODE_ENV=development nest start --watch", "start:debug": "nest start --debug --watch", - "start:prod": "node dist/main", + "start:prod": "NODE_ENV=production nest start --watch", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", diff --git a/Backend/src/supabase/services/supabase.service.ts b/Backend/src/supabase/services/supabase.service.ts index b6dc9d9e..d38684ec 100644 --- a/Backend/src/supabase/services/supabase.service.ts +++ b/Backend/src/supabase/services/supabase.service.ts @@ -19,17 +19,30 @@ export class SupabaseService { const supabase = createSupabaseClient(); let scope: string = ""; + let redirectTo: string; + if (providerName === "spotify") { scope = "streaming user-read-email user-read-private user-read-recently-played user-read-playback-state user-modify-playback-state user-library-read user-top-read"; } + + if (process.env.NODE_ENV === "production") + { + redirectTo = "https://echo-bm8z.onrender.com/login"; // Production URL + } + else + { + redirectTo = "http://localhost:4200/auth/callback"; // Development URL + } + const { data, error } = await supabase.auth.signInWithOAuth({ provider: providerName, options: { - redirectTo: "https://echo-bm8z.onrender.com/login", + redirectTo, scopes: scope } }); + if (error) { throw new Error(error.message); From e9ddf124eb5e2d25d69ae189d0960d54aab7b1e4 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 13:52:39 +0200 Subject: [PATCH 33/47] :muscle: Fixed extra brace from merge conflict --- Frontend/src/app/app.component.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Frontend/src/app/app.component.ts b/Frontend/src/app/app.component.ts index fd88a591..0d73a5e1 100644 --- a/Frontend/src/app/app.component.ts +++ b/Frontend/src/app/app.component.ts @@ -148,8 +148,7 @@ export class AppComponent implements OnInit, OnDestroy ngOnDestroy() { window.removeEventListener('beforeunload', this.handleTabClose); } - -} + toggleSideBar() { this.isSideBarHidden = !this.isSideBarHidden; From d3626b5cc65c5e38e21064d8c2b3310b01a0ad2e Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 14:03:06 +0200 Subject: [PATCH 34/47] :construction: Removed ready check for bottom player --- Frontend/src/app/app.component.html | 6 +++--- Frontend/src/app/app.component.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Frontend/src/app/app.component.html b/Frontend/src/app/app.component.html index d3ce1301..4e91f336 100644 --- a/Frontend/src/app/app.component.html +++ b/Frontend/src/app/app.component.html @@ -17,7 +17,7 @@
@@ -34,8 +34,8 @@ - + - \ No newline at end of file + diff --git a/Frontend/src/app/app.component.ts b/Frontend/src/app/app.component.ts index 0d73a5e1..36132dec 100644 --- a/Frontend/src/app/app.component.ts +++ b/Frontend/src/app/app.component.ts @@ -148,7 +148,7 @@ export class AppComponent implements OnInit, OnDestroy ngOnDestroy() { window.removeEventListener('beforeunload', this.handleTabClose); } - + toggleSideBar() { this.isSideBarHidden = !this.isSideBarHidden; From 9d345e1db8704cce8f0c6a711d1d07fc59342e0d Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 14:05:39 +0200 Subject: [PATCH 35/47] :triangular_ruler: Updated backend package.json --- Backend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Backend/package.json b/Backend/package.json index f3495502..8b561846 100644 --- a/Backend/package.json +++ b/Backend/package.json @@ -9,7 +9,7 @@ "jest --coverage": "jest", "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", - "start": "nest start", + "start": "NODE_ENV=development nest start", "start:dev": "NODE_ENV=development nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "NODE_ENV=production nest start --watch", From 4c35d781ac2633f35a820a164be1ea05a4cf9616 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 14:29:10 +0200 Subject: [PATCH 36/47] :triangular_ruler: Updated backend package.json --- Backend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Backend/package.json b/Backend/package.json index 8b561846..ae32fc06 100644 --- a/Backend/package.json +++ b/Backend/package.json @@ -9,7 +9,7 @@ "jest --coverage": "jest", "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", - "start": "NODE_ENV=development nest start", + "start": "NODE_ENV=production nest start", "start:dev": "NODE_ENV=development nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "NODE_ENV=production nest start --watch", From 08b1d2ed408eb4bd82f326f0886bf93b0e4125c0 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 14:39:47 +0200 Subject: [PATCH 37/47] :triangular_ruler: Updated angular.json --- Frontend/angular.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Frontend/angular.json b/Frontend/angular.json index b224edc2..f3a80d43 100644 --- a/Frontend/angular.json +++ b/Frontend/angular.json @@ -56,7 +56,9 @@ "extractLicenses": true, "sourceMap": false, "namedChunks": false, - "serviceWorker": false + "vendorChunk": true, + "commonChunk": true, + "serviceWorker": true }, "development": { "optimization": false, From ee7e7d769f88581a759ab8205c94014a6f2d0566 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 14:48:01 +0200 Subject: [PATCH 38/47] :triangular_ruler: Reverted backend package.json changes --- Backend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Backend/package.json b/Backend/package.json index ae32fc06..f3495502 100644 --- a/Backend/package.json +++ b/Backend/package.json @@ -9,7 +9,7 @@ "jest --coverage": "jest", "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", - "start": "NODE_ENV=production nest start", + "start": "nest start", "start:dev": "NODE_ENV=development nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "NODE_ENV=production nest start --watch", From b5d3d834567204f8adeca5974278fb4b37b25d4f Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 17:59:02 +0200 Subject: [PATCH 39/47] :triangular_ruler: Updated backend build command --- Backend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Backend/package.json b/Backend/package.json index f3495502..8b561846 100644 --- a/Backend/package.json +++ b/Backend/package.json @@ -9,7 +9,7 @@ "jest --coverage": "jest", "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", - "start": "nest start", + "start": "NODE_ENV=development nest start", "start:dev": "NODE_ENV=development nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "NODE_ENV=production nest start --watch", From da623be45374c1559fbb2eade4bdd7a128ca3e20 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 18:13:02 +0200 Subject: [PATCH 40/47] :triangular_ruler: Updated backend start commands --- Backend/package-lock.json | 19 +++++++++++++++++++ Backend/package.json | 7 ++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Backend/package-lock.json b/Backend/package-lock.json index d9f9a1dd..3a138b86 100644 --- a/Backend/package-lock.json +++ b/Backend/package-lock.json @@ -40,6 +40,7 @@ "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "coveralls": "^3.1.1", + "cross-env": "^7.0.3", "eslint": "^8.42.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.0", @@ -3987,6 +3988,24 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", diff --git a/Backend/package.json b/Backend/package.json index 8b561846..8b8d47fe 100644 --- a/Backend/package.json +++ b/Backend/package.json @@ -9,10 +9,10 @@ "jest --coverage": "jest", "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", - "start": "NODE_ENV=development nest start", - "start:dev": "NODE_ENV=development nest start --watch", + "start": "cross-env NODE_ENV=development nest start", + "start:dev": "cross-env NODE_ENV=development nest start --watch", "start:debug": "nest start --debug --watch", - "start:prod": "NODE_ENV=production nest start --watch", + "start:prod": "cross-env NODE_ENV=production nest start --watch", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", @@ -54,6 +54,7 @@ "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "coveralls": "^3.1.1", + "cross-env": "^7.0.3", "eslint": "^8.42.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.0", From 2952968d7fe9b876b0be71f4c55ecefdc2fe00ca Mon Sep 17 00:00:00 2001 From: Rueben van der Westhuizen <91849806+21434809@users.noreply.github.com> Date: Sun, 29 Sep 2024 18:21:26 +0200 Subject: [PATCH 41/47] =?UTF-8?q?=F0=9F=93=90Refactor=20app.routes.ts=20to?= =?UTF-8?q?=20remove=20duplicate=20path=20for=20AuthCallbackComponent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/src/app/app.routes.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/Frontend/src/app/app.routes.ts b/Frontend/src/app/app.routes.ts index d1a08d58..193ff764 100644 --- a/Frontend/src/app/app.routes.ts +++ b/Frontend/src/app/app.routes.ts @@ -25,7 +25,6 @@ export const routes: Routes = [ { path: "profile", component: ProfileComponent }, { path: "mood", component: MoodComponent }, { path: "auth/callback", component: AuthCallbackComponent }, - { path: '/auth/callback', component: AuthCallbackComponent }, { path: "home", component: HomesComponent}, { path: "", redirectTo: "/login", pathMatch: "full" }, { path: "settings", component: SettingsComponent }, From 9d9789e31034c619ba4f962417dfd6a65d0f72e6 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 18:24:24 +0200 Subject: [PATCH 42/47] :triangular_ruler: Fixed bug with authCallback --- Frontend/src/app/app.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Frontend/src/app/app.component.ts b/Frontend/src/app/app.component.ts index 36132dec..b7210e4a 100644 --- a/Frontend/src/app/app.component.ts +++ b/Frontend/src/app/app.component.ts @@ -106,7 +106,7 @@ export class AppComponent implements OnInit, OnDestroy const url = window.location.href; if (url.includes("access_token")) { const fragment = url.split("#")[1]; // Get everything after # - this.router.navigate(['/auth/callback'], { fragment }); + this.router.navigate(['auth/callback'], { fragment }); } } From 5c9e2f1384ce6822598222c6a4c92b860e06a9a3 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 23:17:16 +0200 Subject: [PATCH 43/47] :triangular_ruler: Added later commits manually --- .../artist-profile.component.html | 109 +++++++----- .../artist-profile.component.ts | 165 +++++++++--------- 2 files changed, 145 insertions(+), 129 deletions(-) diff --git a/Frontend/src/app/pages/artist-profile/artist-profile.component.html b/Frontend/src/app/pages/artist-profile/artist-profile.component.html index d0188e9c..29990be7 100644 --- a/Frontend/src/app/pages/artist-profile/artist-profile.component.html +++ b/Frontend/src/app/pages/artist-profile/artist-profile.component.html @@ -1,48 +1,73 @@ -
-
-
- - +
+
+ +
+ +
{{ artist.name }}
+
+ + +
+ +
+ {{ artist.name }} +
+ + +
+

{{ artist.description }}

+
Genres: {{ artist.genres.join(', ') }}
+
+
-
-
- - -
- Kendrick Lamar -
-
-

Songs

-
-
- Album Art -

{{ i + 1 }}. {{ song }}

-
-
-
+ +
+

Top Songs

+
+ +
+ + +
+
+
+
+
-
-

Albums

-
-
- Album Art -

{{ i + 1 }}. {{ album }}

-
-
-
+ +
+

Albums

+
+ +
+ + +
+
+
+
+
-
-

Playlists

-
-
- Album Art -

{{ i + 1 }}. {{ playlist }}

-
-
-
-
-
-
+ +
+

Playlists

+
+ +
+ + +
+
+
diff --git a/Frontend/src/app/pages/artist-profile/artist-profile.component.ts b/Frontend/src/app/pages/artist-profile/artist-profile.component.ts index 5fc4fa1f..8785bed5 100644 --- a/Frontend/src/app/pages/artist-profile/artist-profile.component.ts +++ b/Frontend/src/app/pages/artist-profile/artist-profile.component.ts @@ -16,104 +16,95 @@ import { SpotifyService } from "../../services/spotify.service"; import { InfoBarComponent } from '../../components/organisms/info-bar/info-bar.component'; import { MoodService } from '../../services/mood-service.service'; import { BackButtonComponent } from '../../components/atoms/back-button/back-button.component'; +import { TopCardComponent } from '../../components/molecules/top-card/top-card.component'; @Component({ - selector: 'app-artist-profile', - standalone: true, - imports: [ - NavbarComponent, - NgIf, - SideBarComponent, - MatCard, - MatCardContent, - MatButtonModule, - MatIconModule, - NgForOf, - EditProfileModalComponent, - CommonModule, - InfoBarComponent, - NgClass, - BackButtonComponent, - ], - templateUrl: './artist-profile.component.html', - styleUrl: './artist-profile.component.css', + selector: 'app-artist-profile', + standalone: true, + imports: [ + NavbarComponent, + NgIf, + SideBarComponent, + MatCard, + MatCardContent, + MatButtonModule, + MatIconModule, + NgForOf, + EditProfileModalComponent, + CommonModule, + InfoBarComponent, + NgClass, + BackButtonComponent, + TopCardComponent + ], + templateUrl: './artist-profile.component.html', + styleUrl: './artist-profile.component.css', }) -export class ArtistProfileComponent implements AfterViewInit { - imgpath: string = 'back.jpg'; - screenSize?: string; - currentMood!: string; - moodComponentClasses!:{ [key: string]: string }; - backgroundMoodClasses!:{ [key: string]: string }; - - artist = { - name: 'Kendrick Lamar', - description: 'Kendrick Lamar, an influential figure in contemporary music, epitomizes artistic depth and cultural resonance. His discography navigates themes of identity, societal struggle, and personal introspection with poetic precision.', - genres: ['Hip-Hop', 'Rap', 'Conscious Hip-Hop'], - similarArtists: ['J. Cole', 'Drake', 'Kanye West'], - topSongs: ['HUMBLE.', 'Swimming Pools (Drank)', 'Money Trees', 'Alright', 'DNA.'], - albums: ['Good Kid, M.A.A.D City', 'To Pimp a Butterfly', 'DAMN.', 'Mr. Morale & The Big Steppers'], - features: ['Goosebumps (with Travis Scott)', 'Control (with Big Sean)', 'Collard Greens (with ScHoolboy Q)', 'Pray for Me (with The Weeknd)'], - playlists: ['Kendrick Essentials', 'RapCaviar', 'Hip-Hop Hits', 'Workout Mix'], - }; - - username: string = ''; - constructor( - private authService: AuthService, - private router: Router, - protected dialog: MatDialog, - private screenSizeService: ScreenSizeService, - private spotifyService: SpotifyService, - public moodService: MoodService, - ) { - this.currentMood = this.moodService.getCurrentMood(); - this.moodComponentClasses = this.moodService.getComponentMoodClasses(); - } - - ngAfterViewInit(): void { - let currUser = this.authService.currentUser().subscribe((res) => { - this.username = res.user.user_metadata.name; - this.imgpath = res.user.user_metadata.picture; - }); - } - async ngOnInit() { - this.screenSizeService.screenSize$.subscribe(screenSize => { - this.screenSize = screenSize; - }); - if (typeof window !== 'undefined') { - await this.spotifyService.init(); - } - } +export class ArtistProfileComponent implements AfterViewInit { + imgpath: string = 'back.jpg'; + screenSize?: string; + currentMood!: string; + moodComponentClasses!:{ [key: string]: string }; + backgroundMoodClasses!:{ [key: string]: string }; - onNavChange($event: string) {} + artist = { + name: 'Kendrick Lamar', + description: 'Kendrick Lamar is a Grammy-winning rapper and songwriter from Compton, California, known for his thought-provoking lyrics and storytelling. His albums, like Good Kid, M.A.A.D City, To Pimp a Butterfly, and DAMN., explore themes of identity, societal struggles, and personal growth. Widely regarded as one of the most influential voices in hip-hop, Kendricks music blends sharp social commentary with powerful narratives, earning him accolades like the Pulitzer Prize for Music.', + genres: ['Hip-Hop', 'Rap', 'Conscious Hip-Hop'], + image: './assets/images/kendrick.jpg', + topSongs: ['HUMBLE.', 'Swimming Pools (Drank)', 'Money Trees', 'Alright', 'DNA.'], + albums: ['Good Kid, M.A.A.D City', 'To Pimp a Butterfly', 'DAMN.', 'Mr. Morale & The Big Steppers'], + playlists: ['Kendrick Essentials', 'RapCaviar', 'Hip-Hop Hits', 'Workout Mix'], + }; - openDialog(): void { - const dialogRef = this.dialog.open(EditProfileModalComponent, { - width: '250px', - }); + username: string = ''; - dialogRef.afterClosed().subscribe((result) => { - console.log('The dialog was closed'); - }); + constructor( + private authService: AuthService, + private router: Router, + protected dialog: MatDialog, + private screenSizeService: ScreenSizeService, + private spotifyService: SpotifyService, + public moodService: MoodService, + ) { + this.currentMood = this.moodService.getCurrentMood(); + this.moodComponentClasses = this.moodService.getComponentMoodClasses(); + } + ngAfterViewInit(): void { + let currUser = this.authService.currentUser().subscribe((res) => { + this.username = res.user.user_metadata.name; + this.imgpath = res.user.user_metadata.picture; + }); + } + async ngOnInit() { + this.screenSizeService.screenSize$.subscribe(screenSize => { + this.screenSize = screenSize; + }); + if (typeof window !== 'undefined') { + await this.spotifyService.init(); } + } - save() { - if (localStorage.getItem('path') !== null) { - // @ts-ignore - this.imgpath = localStorage.getItem('path'); - } - } + getAlbumArt(item: string): string { + // Placeholder function to return a default album art + return '../assets/images/damn.jpeg'; + } - refresh() { - this.authService.currentUser().subscribe((res) => { - this.username = res.user.user_metadata.username; - }); - } + playSong(song: string): void { + // Logic to play the selected song + console.log(`Playing song: ${song}`); + } + + viewAlbum(album: string): void { + // Logic to view the selected album + console.log(`Viewing album: ${album}`); + } - getAlbumArt(song: string): string { - // Placeholder function to return a default album art - return '../assets/images/damn.jpeg'; - } + viewPlaylist(playlist: string): void { + // Logic to view the selected playlist + console.log(`Viewing playlist: ${playlist}`); + } } From 6be79073f09dc95672612c78f1203efcf53dbe91 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Sun, 29 Sep 2024 23:20:40 +0200 Subject: [PATCH 44/47] Revert ":triangular_ruler: Added later commits manually" This reverts commit 5c9e2f1384ce6822598222c6a4c92b860e06a9a3. --- .../artist-profile.component.html | 109 +++++------- .../artist-profile.component.ts | 165 +++++++++--------- 2 files changed, 129 insertions(+), 145 deletions(-) diff --git a/Frontend/src/app/pages/artist-profile/artist-profile.component.html b/Frontend/src/app/pages/artist-profile/artist-profile.component.html index 29990be7..d0188e9c 100644 --- a/Frontend/src/app/pages/artist-profile/artist-profile.component.html +++ b/Frontend/src/app/pages/artist-profile/artist-profile.component.html @@ -1,73 +1,48 @@ -
-
- -
- -
{{ artist.name }}
-
- - -
- -
- {{ artist.name }} -
- - -
-

{{ artist.description }}

-
Genres: {{ artist.genres.join(', ') }}
-
-
+
+
+
+ + - -
-

Top Songs

-
- -
- - -
-
-
-
-
+
+
+ + +
+ Kendrick Lamar +
+
+

Songs

+
+
+ Album Art +

{{ i + 1 }}. {{ song }}

+
+
+
- -
-

Albums

-
- -
- - -
-
-
-
-
+
+

Albums

+
+
+ Album Art +

{{ i + 1 }}. {{ album }}

+
+
+
- -
-

Playlists

-
- -
- - -
-
-
+
+

Playlists

+
+
+ Album Art +

{{ i + 1 }}. {{ playlist }}

+
+
+
+ + +
diff --git a/Frontend/src/app/pages/artist-profile/artist-profile.component.ts b/Frontend/src/app/pages/artist-profile/artist-profile.component.ts index 8785bed5..5fc4fa1f 100644 --- a/Frontend/src/app/pages/artist-profile/artist-profile.component.ts +++ b/Frontend/src/app/pages/artist-profile/artist-profile.component.ts @@ -16,95 +16,104 @@ import { SpotifyService } from "../../services/spotify.service"; import { InfoBarComponent } from '../../components/organisms/info-bar/info-bar.component'; import { MoodService } from '../../services/mood-service.service'; import { BackButtonComponent } from '../../components/atoms/back-button/back-button.component'; -import { TopCardComponent } from '../../components/molecules/top-card/top-card.component'; @Component({ - selector: 'app-artist-profile', - standalone: true, - imports: [ - NavbarComponent, - NgIf, - SideBarComponent, - MatCard, - MatCardContent, - MatButtonModule, - MatIconModule, - NgForOf, - EditProfileModalComponent, - CommonModule, - InfoBarComponent, - NgClass, - BackButtonComponent, - TopCardComponent - ], - templateUrl: './artist-profile.component.html', - styleUrl: './artist-profile.component.css', + selector: 'app-artist-profile', + standalone: true, + imports: [ + NavbarComponent, + NgIf, + SideBarComponent, + MatCard, + MatCardContent, + MatButtonModule, + MatIconModule, + NgForOf, + EditProfileModalComponent, + CommonModule, + InfoBarComponent, + NgClass, + BackButtonComponent, + ], + templateUrl: './artist-profile.component.html', + styleUrl: './artist-profile.component.css', }) - export class ArtistProfileComponent implements AfterViewInit { - imgpath: string = 'back.jpg'; - screenSize?: string; - currentMood!: string; - moodComponentClasses!:{ [key: string]: string }; - backgroundMoodClasses!:{ [key: string]: string }; - - artist = { - name: 'Kendrick Lamar', - description: 'Kendrick Lamar is a Grammy-winning rapper and songwriter from Compton, California, known for his thought-provoking lyrics and storytelling. His albums, like Good Kid, M.A.A.D City, To Pimp a Butterfly, and DAMN., explore themes of identity, societal struggles, and personal growth. Widely regarded as one of the most influential voices in hip-hop, Kendricks music blends sharp social commentary with powerful narratives, earning him accolades like the Pulitzer Prize for Music.', - genres: ['Hip-Hop', 'Rap', 'Conscious Hip-Hop'], - image: './assets/images/kendrick.jpg', - topSongs: ['HUMBLE.', 'Swimming Pools (Drank)', 'Money Trees', 'Alright', 'DNA.'], - albums: ['Good Kid, M.A.A.D City', 'To Pimp a Butterfly', 'DAMN.', 'Mr. Morale & The Big Steppers'], - playlists: ['Kendrick Essentials', 'RapCaviar', 'Hip-Hop Hits', 'Workout Mix'], - }; + imgpath: string = 'back.jpg'; + screenSize?: string; + currentMood!: string; + moodComponentClasses!:{ [key: string]: string }; + backgroundMoodClasses!:{ [key: string]: string }; - username: string = ''; + artist = { + name: 'Kendrick Lamar', + description: 'Kendrick Lamar, an influential figure in contemporary music, epitomizes artistic depth and cultural resonance. His discography navigates themes of identity, societal struggle, and personal introspection with poetic precision.', + genres: ['Hip-Hop', 'Rap', 'Conscious Hip-Hop'], + similarArtists: ['J. Cole', 'Drake', 'Kanye West'], + topSongs: ['HUMBLE.', 'Swimming Pools (Drank)', 'Money Trees', 'Alright', 'DNA.'], + albums: ['Good Kid, M.A.A.D City', 'To Pimp a Butterfly', 'DAMN.', 'Mr. Morale & The Big Steppers'], + features: ['Goosebumps (with Travis Scott)', 'Control (with Big Sean)', 'Collard Greens (with ScHoolboy Q)', 'Pray for Me (with The Weeknd)'], + playlists: ['Kendrick Essentials', 'RapCaviar', 'Hip-Hop Hits', 'Workout Mix'], + }; - constructor( - private authService: AuthService, - private router: Router, - protected dialog: MatDialog, - private screenSizeService: ScreenSizeService, - private spotifyService: SpotifyService, - public moodService: MoodService, - ) { - this.currentMood = this.moodService.getCurrentMood(); - this.moodComponentClasses = this.moodService.getComponentMoodClasses(); - } + username: string = ''; - ngAfterViewInit(): void { - let currUser = this.authService.currentUser().subscribe((res) => { - this.username = res.user.user_metadata.name; - this.imgpath = res.user.user_metadata.picture; - }); - } + constructor( + private authService: AuthService, + private router: Router, + protected dialog: MatDialog, + private screenSizeService: ScreenSizeService, + private spotifyService: SpotifyService, + public moodService: MoodService, + ) { + this.currentMood = this.moodService.getCurrentMood(); + this.moodComponentClasses = this.moodService.getComponentMoodClasses(); + } - async ngOnInit() { - this.screenSizeService.screenSize$.subscribe(screenSize => { - this.screenSize = screenSize; - }); - if (typeof window !== 'undefined') { - await this.spotifyService.init(); + ngAfterViewInit(): void { + let currUser = this.authService.currentUser().subscribe((res) => { + this.username = res.user.user_metadata.name; + this.imgpath = res.user.user_metadata.picture; + }); } - } + async ngOnInit() { + this.screenSizeService.screenSize$.subscribe(screenSize => { + this.screenSize = screenSize; + }); + if (typeof window !== 'undefined') { + await this.spotifyService.init(); + } + } + + onNavChange($event: string) {} + + openDialog(): void { + const dialogRef = this.dialog.open(EditProfileModalComponent, { + width: '250px', + }); - getAlbumArt(item: string): string { - // Placeholder function to return a default album art - return '../assets/images/damn.jpeg'; - } + dialogRef.afterClosed().subscribe((result) => { + console.log('The dialog was closed'); + }); - playSong(song: string): void { - // Logic to play the selected song - console.log(`Playing song: ${song}`); - } - viewAlbum(album: string): void { - // Logic to view the selected album - console.log(`Viewing album: ${album}`); - } + } + + save() { + if (localStorage.getItem('path') !== null) { + // @ts-ignore + this.imgpath = localStorage.getItem('path'); + } + } + + refresh() { + this.authService.currentUser().subscribe((res) => { + this.username = res.user.user_metadata.username; + }); + } - viewPlaylist(playlist: string): void { - // Logic to view the selected playlist - console.log(`Viewing playlist: ${playlist}`); - } + getAlbumArt(song: string): string { + // Placeholder function to return a default album art + return '../assets/images/damn.jpeg'; + } } From 2875e008406571326cab2333882093bcce7cd870 Mon Sep 17 00:00:00 2001 From: 21797545 Date: Mon, 30 Sep 2024 10:11:33 +0200 Subject: [PATCH 45/47] :triangular_ruler: Updated service worker config --- Frontend/ngsw-config.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Frontend/ngsw-config.json b/Frontend/ngsw-config.json index cde446b9..a24a1c85 100644 --- a/Frontend/ngsw-config.json +++ b/Frontend/ngsw-config.json @@ -27,5 +27,22 @@ ] } } + ], + "dataGroups": [ + { + "name": "api-requests", + "urls": [ + "https://echo-backend-1s8m.onrender.com/api/auth/**", + "https://echo-backend-1s8m.onrender.com/api/spotify/**", + "https://echo-backend-1s8m.onrender.com/api/youtube/**", + "https://echo-backend-1s8m.onrender.com/api/search/**" + ], + "cacheConfig": { + "strategy": "freshness", + "maxSize": 100, + "maxAge": "1d", + "timeout": "10s" + } + } ] } From 7a8dc8db32a34ac8c276e8efdd67c2303ee6a505 Mon Sep 17 00:00:00 2001 From: Rueben van der Westhuizen <91849806+21434809@users.noreply.github.com> Date: Mon, 30 Sep 2024 10:37:49 +0200 Subject: [PATCH 46/47] =?UTF-8?q?=F0=9F=8E=89New=20Favicon=20-=20not=20a?= =?UTF-8?q?=20dolphin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/src/favicon.ico | Bin 15086 -> 15406 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Frontend/src/favicon.ico b/Frontend/src/favicon.ico index 57614f9c967596fad0a3989bec2b1deff33034f6..a3ddd3e70330c52799555c9d60a193c59c642928 100644 GIT binary patch literal 15406 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 Nr__JTFzvMr^FKp4S3v*( From b2ab5f93910bac897b8b1fc13795d52cc5bf928a Mon Sep 17 00:00:00 2001 From: Rueben van der Westhuizen <91849806+21434809@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:02:36 +0200 Subject: [PATCH 47/47] =?UTF-8?q?=F0=9F=8E=89Update=20favicon=20images=20a?= =?UTF-8?q?nd=20manifest.webmanifest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/icons/android-chrome-192x192.png | Bin 0 -> 31209 bytes .../assets/icons/android-chrome-512x512.png | Bin 0 -> 166837 bytes .../src/assets/icons/apple-touch-icon.png | Bin 0 -> 27723 bytes Frontend/src/assets/icons/favicon-16x16.png | Bin 0 -> 855 bytes Frontend/src/assets/icons/favicon-32x32.png | Bin 0 -> 2079 bytes Frontend/src/assets/icons/favicon.ico | Bin 0 -> 15406 bytes Frontend/src/manifest.webmanifest | 60 +++--------------- 7 files changed, 9 insertions(+), 51 deletions(-) create mode 100644 Frontend/src/assets/icons/android-chrome-192x192.png create mode 100644 Frontend/src/assets/icons/android-chrome-512x512.png create mode 100644 Frontend/src/assets/icons/apple-touch-icon.png create mode 100644 Frontend/src/assets/icons/favicon-16x16.png create mode 100644 Frontend/src/assets/icons/favicon-32x32.png create mode 100644 Frontend/src/assets/icons/favicon.ico diff --git a/Frontend/src/assets/icons/android-chrome-192x192.png b/Frontend/src/assets/icons/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0ef3f1bf99765a8a532ff946a9c6a376d425bf GIT binary patch literal 31209 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

-t~&J=IG_sNjp!7wOr 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%0DKXdU1+4oGqS_9ABrJn7G{>oXK@qzX+$vB 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

  • _uU|i(RvM2N-U7ed41Lg; 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 literal 0 HcmV?d00001 diff --git a/Frontend/src/assets/icons/favicon-32x32.png b/Frontend/src/assets/icons/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..59350a87bb0e279538dac79a3392203a02aee63e GIT binary patch literal 2079 zcmV+)2;ldLP)Px+*-1n}R9Hu~muqYs)fLD8=iZsw_3nCOue~-+;*?a2EpQqMg{qK(2vR{!3y~6H z2PKVKwQ40=p{C_SRj44UR4IMXM}%l4+7AVq2LV({TY?%|RAli`TR;gU;0;mUcH&^1 zUGHn=-cy~KopqcC7*(t^x-+BMdw%DC&b{{>!g;?N77r|Kx87HCfw!V7aQgGcO?4Zu z)a!c(djjX>Pxy&vJJ^{I&`p+kDS$o@(f}I77$>OxL_7k^f9}N2H_o5`{AY?^6bglW z+B#cv##xs)E_DYk^2S9z@Q@E&EC>=<CrwFZ2XEB5Tg+k#fkJav+ar*KmG8kUQMQ`Bol3Ir3*(Zii7C~qn5kS)g0RV$E z2u>5gV`7(;0KK4CeZ2$Q-n~G9fq{YfF!t3><17fhH7@6aNP&ex5}&PP;W42>mg~e6 z0|a1L0&LSU;m{yfOeEe5g#6EAg#;_PpK`3aV;;8eJ{N)p3RgVcZuKfLJ|nw}K0k>Y zD)Yi`Yh+O;MxE>|6)a`|q7cl;@3xFn2q2+LvhrbReHV5-5kt_DPxWuk8?Ud&xE;N| zw>)p$%jO3OUQzA{<*brLRSAF%K|}!wg@nO^*#HD$5EE3S0$f%Q05RM&&Pi6(gs59f zH}_!2ivrO~LV4JX6;7^`hi;tC{eGU+ZDP1WCIpC7h%QO@C=VnIVH&amL2(E`vG++< zoUn@8SV{6y8*8Mj7A208HG?_qnwkY5Go8k|TWi`rGp!6N;T0)R6_6M}g~r(@CdmOo zh`pEC&-PxUjTKT>AT*_|LfUG0pdaV#&L7SKV1Q1lp}iGl2g}MJg0LY-q=Mn9VrqyA z5EU#W4`KiZ#F~ks#3P8uB752@PKEcHGEIP#)#Kgv%K5VZPU&?kt7QHr#v=e5LdaDm z!xd#I%m-LBl!dGW6E1LuVrs^pL}E@fV=jh6fY7*(M+iv5I7?;$oYceHr^(z=5&#`T zL}MHd$%$GsDSeV82d405M)pl|m53;DvtDTvN-~g^i>q-bRKUmN8>A z2}B~G&$j?h;`YJ1L;K3g@L6T3qyv$j&#HjR%0g6$!%cS*^WxQ@JDAZncU$cR~fid*55s0yv@9t*KJ*q!=n`gHVMFU<@7hYLgb|6tAnw zgiBIZg2S}$xg&c&eaA55Ob zH(o#V&hIXD{9aw?-?-`YqTlxVUMkxRLA!O{YAJABt-Whn*{zY$Cdg5e7+0T`=p@7);>U8;QN8dj2LFfP0&J_>#*HhmXfUMP=F^=B?II7of zs1ZL_Zpj|tY*P*K{+0C9`0L5(-ll;K{q@w16=l9zqc9J){O8>RKlrfX$$lg1{ z@?Z|Xf2CI~O$7K#+UVoyVBSM5fKwRCR2`lyDWgSxNj}+(!c9pT{IO&Fy$Q$9G4t+X zvAA+W-_>8MTLe!Wf9;Vu*uCT@vv$Ix&f1YOndP$lN;=wr;`RS%=lJ_$PNM_BZ$?K) zzxDqZomG&W`*2JRf48d5FJuFf9Z<%yG9(+%uI%aQ1IbE;nI9|`i+6o204H!;x33e2 z%i5&k(@?fw0eCSrRe!Giy(BaLsaPzo{#XEH(qqoh12x$1iP4g>;(d4!O*n!5S@#hY zz>XD*#re%s_#<-^6GH`EM|m-Jja^U?$&15S-$~lvUs0y_{DS1E>;y*AQ}Wp@qobpL z|ESjAOspy-jrW2V@a=tg@|BAM$jdPd-&S|*(^3IVD-+cKWaVJO&-2IVl+$==baeFk zuqK`3Z+~KSziZU2Kc6ZAXRaKbyz#X;?^8?{PjZthaqDJDrM8&L literal 0 HcmV?d00001 diff --git a/Frontend/src/assets/icons/favicon.ico b/Frontend/src/assets/icons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a3ddd3e70330c52799555c9d60a193c59c642928 GIT binary patch literal 15406 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