From d5434da54e39363e286a869722db6af78d9377de Mon Sep 17 00:00:00 2001 From: Furkan <84590614+4Furki4@users.noreply.github.com> Date: Thu, 20 Jul 2023 15:33:24 +0300 Subject: [PATCH] =?UTF-8?q?add:=20t=C3=BCrkiyeli=20is=20forbidden=20using?= =?UTF-8?q?=20interceptor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nx.json | 46 ++++++++ project.json | 101 ++++++++++++++++++ src/app/app.module.ts | 6 ++ .../forbidden.interceptor.spec.ts | 16 +++ .../interceptors/forbidden.interceptor.ts | 22 ++++ 5 files changed, 191 insertions(+) create mode 100644 nx.json create mode 100644 project.json create mode 100644 src/app/services/interceptors/forbidden.interceptor.spec.ts create mode 100644 src/app/services/interceptors/forbidden.interceptor.ts diff --git a/nx.json b/nx.json new file mode 100644 index 0000000..6e117fd --- /dev/null +++ b/nx.json @@ -0,0 +1,46 @@ +{ + "tasksRunnerOptions": { + "default": { + "runner": "nx-cloud", + "options": { + "cacheableOperations": [ + "build", + "test" + ], + "accessToken": "ODQ2ZGViZDMtY2NmNi00YjFjLWE5YTctZmI0MzYzZWZhNDg2fHJlYWQtd3JpdGU=" + } + } + }, + "affected": { + "defaultBase": "main" + }, + "namedInputs": { + "sharedGlobals": [], + "default": [ + "{projectRoot}/**/*", + "sharedGlobals" + ], + "production": [ + "default", + "!{projectRoot}/tsconfig.spec.json", + "!{projectRoot}/**/*.spec.[jt]s" + ] + }, + "targetDefaults": { + "build": { + "dependsOn": [ + "^build" + ], + "inputs": [ + "production", + "^production" + ] + }, + "test": { + "inputs": [ + "default", + "^production" + ] + } + } +} diff --git a/project.json b/project.json new file mode 100644 index 0000000..177a219 --- /dev/null +++ b/project.json @@ -0,0 +1,101 @@ +{ + "$schema": "node_modules/nx/schemas/project-schema.json", + "name": "sozluk", + "projectType": "application", + "generators": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "sourceRoot": "src", + "prefix": "sozluk", + "targets": { + "build": { + "executor": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/sozluk", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": [ + "zone.js" + ], + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production", + "outputs": [ + "{options.outputPath}" + ] + }, + "serve": { + "executor": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "browserTarget": "sozluk:build:production" + }, + "development": { + "browserTarget": "sozluk:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "executor": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "sozluk:build" + } + }, + "test": { + "executor": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": [ + "zone.js", + "zone.js/testing" + ], + "tsConfig": "tsconfig.spec.json", + "inlineStyleLanguage": "scss", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + } + } + } +} diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 4410126..79c82e1 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -6,6 +6,7 @@ import { MainModule } from './components/main/main.module'; import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { CachingInterceptor } from './services/interceptors/caching.interceptor'; +import { ForbiddenInterceptor } from './services/interceptors/forbidden.interceptor'; @NgModule({ declarations: [ @@ -23,6 +24,11 @@ import { CachingInterceptor } from './services/interceptors/caching.interceptor' provide: HTTP_INTERCEPTORS, useClass: CachingInterceptor, multi: true + }, + { + provide: HTTP_INTERCEPTORS, + useClass: ForbiddenInterceptor, + multi: true } ], bootstrap: [AppComponent] diff --git a/src/app/services/interceptors/forbidden.interceptor.spec.ts b/src/app/services/interceptors/forbidden.interceptor.spec.ts new file mode 100644 index 0000000..e65bfc6 --- /dev/null +++ b/src/app/services/interceptors/forbidden.interceptor.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ForbiddenInterceptor } from './forbidden.interceptor'; + +describe('ForbiddenInterceptor', () => { + beforeEach(() => TestBed.configureTestingModule({ + providers: [ + ForbiddenInterceptor + ] + })); + + it('should be created', () => { + const interceptor: ForbiddenInterceptor = TestBed.inject(ForbiddenInterceptor); + expect(interceptor).toBeTruthy(); + }); +}); diff --git a/src/app/services/interceptors/forbidden.interceptor.ts b/src/app/services/interceptors/forbidden.interceptor.ts new file mode 100644 index 0000000..0ce94d7 --- /dev/null +++ b/src/app/services/interceptors/forbidden.interceptor.ts @@ -0,0 +1,22 @@ +import { Injectable } from '@angular/core'; +import { + HttpRequest, + HttpHandler, + HttpEvent, + HttpInterceptor +} from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { environment } from 'src/app/environments/environment'; + +@Injectable() +export class ForbiddenInterceptor implements HttpInterceptor { + + constructor() {} + + intercept(request: HttpRequest, next: HttpHandler): Observable> { + if(request.url.includes('türkiyeli')) { // return 403 forbidden if the request url contains 'türkiyeli' + return next.handle(request.clone({ url: environment.apiUrl+'/gts?ara=türk'})) + } + return next.handle(request); + } +}