;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [NavigationComponent],
+ imports: [
+ NoopAnimationsModule,
+ MatButtonModule,
+ MatIconModule,
+ MatListModule,
+ MatSidenavModule,
+ MatToolbarModule,
+ ]
+ }).compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(NavigationComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should compile', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/module-frontend/src/app/navigation/navigation.component.ts b/module-frontend/src/app/navigation/navigation.component.ts
new file mode 100644
index 0000000..63c82a5
--- /dev/null
+++ b/module-frontend/src/app/navigation/navigation.component.ts
@@ -0,0 +1,21 @@
+import {Component} from '@angular/core';
+import {KeycloakService} from "keycloak-angular";
+
+@Component({
+ selector: 'app-navigation',
+ templateUrl: './navigation.component.html',
+ styleUrls: ['./navigation.component.scss']
+})
+export class NavigationComponent {
+ loggedUserName = '';
+
+ constructor(private keycloakService: KeycloakService) { }
+
+ ngOnInit(): void {
+ this.loggedUserName = this.keycloakService.getUsername();
+ }
+
+ logout(): void {
+ this.keycloakService.logout(window.location.origin);
+ }
+}
diff --git a/module-frontend/src/app/permission-denied/permission-denied.component.html b/module-frontend/src/app/permission-denied/permission-denied.component.html
new file mode 100644
index 0000000..5c0acfa
--- /dev/null
+++ b/module-frontend/src/app/permission-denied/permission-denied.component.html
@@ -0,0 +1,3 @@
+
+
Permission Denied to Access this Page!!!!
+
diff --git a/module-frontend/src/app/permission-denied/permission-denied.component.scss b/module-frontend/src/app/permission-denied/permission-denied.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/module-frontend/src/app/permission-denied/permission-denied.component.spec.ts b/module-frontend/src/app/permission-denied/permission-denied.component.spec.ts
new file mode 100644
index 0000000..8acd4aa
--- /dev/null
+++ b/module-frontend/src/app/permission-denied/permission-denied.component.spec.ts
@@ -0,0 +1,21 @@
+import {ComponentFixture, TestBed} from '@angular/core/testing';
+
+import {PermissionDeniedComponent} from './permission-denied.component';
+
+describe('PermissionDeniedComponent', () => {
+ let component: PermissionDeniedComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ declarations: [PermissionDeniedComponent]
+ });
+ fixture = TestBed.createComponent(PermissionDeniedComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/module-frontend/src/app/permission-denied/permission-denied.component.ts b/module-frontend/src/app/permission-denied/permission-denied.component.ts
new file mode 100644
index 0000000..1943f27
--- /dev/null
+++ b/module-frontend/src/app/permission-denied/permission-denied.component.ts
@@ -0,0 +1,10 @@
+import {Component} from '@angular/core';
+
+@Component({
+ selector: 'app-permission-denied',
+ templateUrl: './permission-denied.component.html',
+ styleUrls: ['./permission-denied.component.scss']
+})
+export class PermissionDeniedComponent {
+
+}
diff --git a/module-frontend/src/assets/.gitkeep b/module-frontend/src/assets/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/module-frontend/src/assets/silent-check-sso.html b/module-frontend/src/assets/silent-check-sso.html
new file mode 100644
index 0000000..9de338b
--- /dev/null
+++ b/module-frontend/src/assets/silent-check-sso.html
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/module-frontend/src/environments/environment.development.ts b/module-frontend/src/environments/environment.development.ts
new file mode 100644
index 0000000..88f70cc
--- /dev/null
+++ b/module-frontend/src/environments/environment.development.ts
@@ -0,0 +1,6 @@
+export const environment = {
+ backendURL: "http://localhost:12000/wahlrecht/v1",
+ keycloakURL: "https://id.2martens.de",
+ realm: "wahlrecht",
+ clientId: "wahlrecht-frontend"
+};
diff --git a/module-frontend/src/environments/environment.ts b/module-frontend/src/environments/environment.ts
new file mode 100644
index 0000000..2372891
--- /dev/null
+++ b/module-frontend/src/environments/environment.ts
@@ -0,0 +1,6 @@
+export const environment = {
+ backendURL: "https://wahlrecht.2martens.de/wahlrecht/v1",
+ keycloakURL: "https://id.2martens.de",
+ realm: "wahlrecht",
+ clientId: "wahlrecht-frontend"
+};
diff --git a/module-frontend/src/favicon.ico b/module-frontend/src/favicon.ico
new file mode 100644
index 0000000..997406a
Binary files /dev/null and b/module-frontend/src/favicon.ico differ
diff --git a/module-frontend/src/index.html b/module-frontend/src/index.html
new file mode 100644
index 0000000..c233da8
--- /dev/null
+++ b/module-frontend/src/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+ ModuleFrontend
+
+
+
+
+
+
+
+
+
+
+
diff --git a/module-frontend/src/main.ts b/module-frontend/src/main.ts
new file mode 100644
index 0000000..e59cec9
--- /dev/null
+++ b/module-frontend/src/main.ts
@@ -0,0 +1,7 @@
+import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
+
+import {AppModule} from './app/app.module';
+
+
+platformBrowserDynamic().bootstrapModule(AppModule)
+ .catch(err => console.error(err));
diff --git a/module-frontend/src/styles.scss b/module-frontend/src/styles.scss
new file mode 100644
index 0000000..7e7239a
--- /dev/null
+++ b/module-frontend/src/styles.scss
@@ -0,0 +1,4 @@
+/* You can add global styles to this file, and also import other style files */
+
+html, body { height: 100%; }
+body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; }
diff --git a/module-frontend/tsconfig.app.json b/module-frontend/tsconfig.app.json
new file mode 100644
index 0000000..374cc9d
--- /dev/null
+++ b/module-frontend/tsconfig.app.json
@@ -0,0 +1,14 @@
+/* To learn more about this file see: https://angular.io/config/tsconfig. */
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "outDir": "./out-tsc/app",
+ "types": []
+ },
+ "files": [
+ "src/main.ts"
+ ],
+ "include": [
+ "src/**/*.d.ts"
+ ]
+}
diff --git a/module-frontend/tsconfig.json b/module-frontend/tsconfig.json
new file mode 100644
index 0000000..ed966d4
--- /dev/null
+++ b/module-frontend/tsconfig.json
@@ -0,0 +1,33 @@
+/* To learn more about this file see: https://angular.io/config/tsconfig. */
+{
+ "compileOnSave": false,
+ "compilerOptions": {
+ "baseUrl": "./",
+ "outDir": "./dist/out-tsc",
+ "forceConsistentCasingInFileNames": true,
+ "strict": true,
+ "noImplicitOverride": true,
+ "noPropertyAccessFromIndexSignature": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true,
+ "sourceMap": true,
+ "declaration": false,
+ "downlevelIteration": true,
+ "experimentalDecorators": true,
+ "moduleResolution": "node",
+ "importHelpers": true,
+ "target": "ES2022",
+ "module": "ES2022",
+ "useDefineForClassFields": false,
+ "lib": [
+ "ES2022",
+ "dom"
+ ]
+ },
+ "angularCompilerOptions": {
+ "enableI18nLegacyMessageIdFormat": false,
+ "strictInjectionParameters": true,
+ "strictInputAccessModifiers": true,
+ "strictTemplates": true
+ }
+}
diff --git a/module-frontend/tsconfig.spec.json b/module-frontend/tsconfig.spec.json
new file mode 100644
index 0000000..be7e9da
--- /dev/null
+++ b/module-frontend/tsconfig.spec.json
@@ -0,0 +1,14 @@
+/* To learn more about this file see: https://angular.io/config/tsconfig. */
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "outDir": "./out-tsc/spec",
+ "types": [
+ "jasmine"
+ ]
+ },
+ "include": [
+ "src/**/*.spec.ts",
+ "src/**/*.d.ts"
+ ]
+}