├── keycloak-app
├── src
│ ├── assets
│ │ └── .gitkeep
│ ├── app
│ │ ├── app.component.scss
│ │ ├── amar
│ │ │ ├── amar.component.scss
│ │ │ ├── amar.component.html
│ │ │ ├── amar.component.ts
│ │ │ └── amar.component.spec.ts
│ │ ├── yassa
│ │ │ ├── yassa.component.scss
│ │ │ ├── yassa.component.html
│ │ │ ├── yassa.component.ts
│ │ │ └── yassa.component.spec.ts
│ │ ├── produits
│ │ │ ├── produits.component.scss
│ │ │ ├── produits.component.html
│ │ │ ├── produits.component.ts
│ │ │ └── produits.component.spec.ts
│ │ ├── suppliers
│ │ │ ├── suppliers.component.scss
│ │ │ ├── suppliers.component.html
│ │ │ ├── suppliers.component.spec.ts
│ │ │ └── suppliers.component.ts
│ │ ├── app.component.spec.ts
│ │ ├── services
│ │ │ ├── request-interceptor.service.ts
│ │ │ ├── keycloak-security.service copy.ts
│ │ │ ├── suppliers.service.ts
│ │ │ └── keycloak-security.service.ts
│ │ ├── app.component.ts
│ │ ├── app.component.html
│ │ ├── app.module copy.ts
│ │ ├── app-routing.module.ts
│ │ └── app.module.ts
│ ├── environments
│ │ ├── environment.prod.ts
│ │ └── environment.ts
│ ├── styles.scss
│ ├── favicon.ico
│ ├── index.html
│ ├── main.ts
│ ├── test.ts
│ └── polyfills.ts
├── e2e
│ ├── tsconfig.json
│ ├── src
│ │ ├── app.po.ts
│ │ └── app.e2e-spec.ts
│ └── protractor.conf.js
├── tsconfig.app.json
├── .editorconfig
├── tsconfig.spec.json
├── browserslist
├── tsconfig.json
├── .gitignore
├── README.md
├── karma.conf.js
├── package.json
├── tslint.json
└── angular.json
├── ecom-app
├── .mvn
│ └── wrapper
│ │ ├── maven-wrapper.jar
│ │ ├── maven-wrapper.properties
│ │ └── MavenWrapperDownloader.java
├── src
│ ├── main
│ │ ├── resources
│ │ │ ├── application.properties
│ │ │ └── templates
│ │ │ │ ├── home.html
│ │ │ │ ├── index.html
│ │ │ │ ├── errors.html
│ │ │ │ ├── products.html
│ │ │ │ ├── suppliers.html
│ │ │ │ └── template.html
│ │ └── java
│ │ │ └── com
│ │ │ └── yassa
│ │ │ └── ecomapp
│ │ │ ├── entites
│ │ │ ├── ProductRepository.java
│ │ │ └── Product.java
│ │ │ ├── securite
│ │ │ ├── KeycloakConfig.java
│ │ │ └── KeycloakSpringSecuriteConfig.java
│ │ │ ├── EcomAppApplication.java
│ │ │ └── controller
│ │ │ ├── ProductController.java
│ │ │ ├── SecurityController.java
│ │ │ └── SuppliersController.java
│ └── test
│ │ └── java
│ │ └── com
│ │ └── yassa
│ │ └── ecomapp
│ │ └── EcomAppApplicationTests.java
├── .gitignore
├── pom.xml
├── mvnw.cmd
└── mvnw
├── supplierService
├── .mvn
│ └── wrapper
│ │ ├── maven-wrapper.jar
│ │ ├── maven-wrapper.properties
│ │ └── MavenWrapperDownloader.java
├── src
│ ├── main
│ │ ├── resources
│ │ │ └── application.properties
│ │ └── java
│ │ │ └── com
│ │ │ └── yassa
│ │ │ └── supplierService
│ │ │ ├── entities
│ │ │ ├── SupplierRepository.java
│ │ │ └── Supplier.java
│ │ │ ├── securite
│ │ │ ├── KeycloakConfig.java
│ │ │ └── KeycloakSpringSecuriteConfig.java
│ │ │ └── SupplierServiceApplication.java
│ └── test
│ │ └── java
│ │ └── com
│ │ └── yassa
│ │ └── supplierService
│ │ └── SupplierServiceApplicationTests.java
├── .gitignore
├── pom.xml
├── mvnw.cmd
└── mvnw
├── README.md
└── .gitignore
/keycloak-app/src/assets/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/app.component.scss:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/amar/amar.component.scss:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/yassa/yassa.component.scss:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/produits/produits.component.scss:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/suppliers/suppliers.component.scss:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/yassa/yassa.component.html:
--------------------------------------------------------------------------------
1 |
yassa works!
2 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/amar/amar.component.html:
--------------------------------------------------------------------------------
1 | amar works!
2 |
3 | AMARRRRRRRRRR
4 |
--------------------------------------------------------------------------------
/keycloak-app/src/environments/environment.prod.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | production: true
3 | };
4 |
--------------------------------------------------------------------------------
/keycloak-app/src/styles.scss:
--------------------------------------------------------------------------------
1 | /* You can add global styles to this file, and also import other style files */
2 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/produits/produits.component.html:
--------------------------------------------------------------------------------
1 | produits works!
2 |
3 | {{ produits | json }}
4 |
--------------------------------------------------------------------------------
/keycloak-app/src/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amaryassa/secure-diffrents-apps-with-keycloak/HEAD/keycloak-app/src/favicon.ico
--------------------------------------------------------------------------------
/ecom-app/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amaryassa/secure-diffrents-apps-with-keycloak/HEAD/ecom-app/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/supplierService/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amaryassa/secure-diffrents-apps-with-keycloak/HEAD/supplierService/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/keycloak-app/src/app/suppliers/suppliers.component.html:
--------------------------------------------------------------------------------
1 |
2 | {{ errorMessage }}
3 |
4 | {{ suppliers | json }}
5 |
--------------------------------------------------------------------------------
/ecom-app/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | server.port=8082
2 | keycloak.realm= ecom-realm
3 | keycloak.auth-server-url= http://localhost:8080/auth/
4 | keycloak.resource= products-app
5 | keycloak.public-client= true
6 | keycloak.principal-attribute= name
--------------------------------------------------------------------------------
/ecom-app/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
3 |
--------------------------------------------------------------------------------
/ecom-app/src/main/java/com/yassa/ecomapp/entites/ProductRepository.java:
--------------------------------------------------------------------------------
1 | package com.yassa.ecomapp.entites;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | public interface ProductRepository extends JpaRepository {
6 | }
7 |
--------------------------------------------------------------------------------
/supplierService/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
3 |
--------------------------------------------------------------------------------
/supplierService/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | server.port=8083
2 | keycloak.realm= ecom-realm
3 | keycloak.auth-server-url= http://localhost:8080/auth/
4 | keycloak.resource= products-app
5 | keycloak.public-client= false
6 | keycloak.bearer-only=true
7 | keycloak.cors=true
8 |
--------------------------------------------------------------------------------
/supplierService/src/main/java/com/yassa/supplierService/entities/SupplierRepository.java:
--------------------------------------------------------------------------------
1 | package com.yassa.supplierService.entities;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | public interface SupplierRepository extends JpaRepository {
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/keycloak-app/e2e/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out-tsc/e2e",
5 | "module": "commonjs",
6 | "target": "es5",
7 | "types": [
8 | "jasmine",
9 | "jasminewd2",
10 | "node"
11 | ]
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/keycloak-app/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "./out-tsc/app",
5 | "types": []
6 | },
7 | "files": [
8 | "src/main.ts",
9 | "src/polyfills.ts"
10 | ],
11 | "include": [
12 | "src/**/*.d.ts"
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/keycloak-app/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see https://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | max_line_length = off
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/ecom-app/src/test/java/com/yassa/ecomapp/EcomAppApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.yassa.ecomapp;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | @SpringBootTest
7 | class EcomAppApplicationTests {
8 |
9 | @Test
10 | void contextLoads() {
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/keycloak-app/e2e/src/app.po.ts:
--------------------------------------------------------------------------------
1 | import { browser, by, element } from 'protractor';
2 |
3 | export class AppPage {
4 | navigateTo(): Promise {
5 | return browser.get(browser.baseUrl) as Promise;
6 | }
7 |
8 | getTitleText(): Promise {
9 | return element(by.css('app-root .content span')).getText() as Promise;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/amar/amar.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-amar',
5 | templateUrl: './amar.component.html',
6 | styleUrls: ['./amar.component.scss']
7 | })
8 | export class AmarComponent implements OnInit {
9 |
10 | constructor() { }
11 |
12 | ngOnInit(): void {
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/supplierService/src/test/java/com/yassa/supplierService/SupplierServiceApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.yassa.supplierService;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | @SpringBootTest
7 | class SupplierServiceApplicationTests {
8 |
9 | @Test
10 | void contextLoads() {
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/yassa/yassa.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-yassa',
5 | templateUrl: './yassa.component.html',
6 | styleUrls: ['./yassa.component.scss']
7 | })
8 | export class YassaComponent implements OnInit {
9 |
10 | constructor() { }
11 |
12 | ngOnInit(): void {
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/keycloak-app/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | KeycloakApp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/keycloak-app/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "./out-tsc/spec",
5 | "types": [
6 | "jasmine",
7 | "node"
8 | ]
9 | },
10 | "files": [
11 | "src/test.ts",
12 | "src/polyfills.ts"
13 | ],
14 | "include": [
15 | "src/**/*.spec.ts",
16 | "src/**/*.d.ts"
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## [formation du professeur Mohamed Youssfi sur youtube ](https://www.youtube.com/user/mohamedYoussfi/search?query=keycloak)
2 |
3 | # Secure differents Apps with Keycloak 9.0.1
4 | ## Angular + Spring thymeleaf + Spring Micro Service
5 |
6 | ### 1) ecom-app : Spring + Thymeleaf
7 |
8 |
9 | ### 2) keycloak-app : Angular 9
10 |
11 |
12 | ### 3)supplierService : Micro Service Spring
13 |
14 |
--------------------------------------------------------------------------------
/keycloak-app/src/main.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode } from '@angular/core';
2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
3 |
4 | import { AppModule } from './app/app.module';
5 | import { environment } from './environments/environment';
6 |
7 | if (environment.production) {
8 | enableProdMode();
9 | }
10 |
11 | platformBrowserDynamic().bootstrapModule(AppModule)
12 | .catch(err => console.error(err));
13 |
--------------------------------------------------------------------------------
/ecom-app/.gitignore:
--------------------------------------------------------------------------------
1 | HELP.md
2 | target/
3 | !.mvn/wrapper/maven-wrapper.jar
4 | !**/src/main/**
5 | !**/src/test/**
6 |
7 | ### STS ###
8 | .apt_generated
9 | .classpath
10 | .factorypath
11 | .project
12 | .settings
13 | .springBeans
14 | .sts4-cache
15 |
16 | ### IntelliJ IDEA ###
17 | .idea
18 | *.iws
19 | *.iml
20 | *.ipr
21 |
22 | ### NetBeans ###
23 | /nbproject/private/
24 | /nbbuild/
25 | /dist/
26 | /nbdist/
27 | /.nb-gradle/
28 | build/
29 |
30 | ### VS Code ###
31 | .vscode/
32 |
--------------------------------------------------------------------------------
/keycloak-app/browserslist:
--------------------------------------------------------------------------------
1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
2 | # For additional information regarding the format and rule options, please see:
3 | # https://github.com/browserslist/browserslist#queries
4 |
5 | # You can see what browsers were selected by your queries by running:
6 | # npx browserslist
7 |
8 | > 0.5%
9 | last 2 versions
10 | Firefox ESR
11 | not dead
12 | not IE 9-11 # For IE 9-11 support, remove 'not'.
--------------------------------------------------------------------------------
/supplierService/.gitignore:
--------------------------------------------------------------------------------
1 | HELP.md
2 | target/
3 | !.mvn/wrapper/maven-wrapper.jar
4 | !**/src/main/**
5 | !**/src/test/**
6 |
7 | ### STS ###
8 | .apt_generated
9 | .classpath
10 | .factorypath
11 | .project
12 | .settings
13 | .springBeans
14 | .sts4-cache
15 |
16 | ### IntelliJ IDEA ###
17 | .idea
18 | *.iws
19 | *.iml
20 | *.ipr
21 |
22 | ### NetBeans ###
23 | /nbproject/private/
24 | /nbbuild/
25 | /dist/
26 | /nbdist/
27 | /.nb-gradle/
28 | build/
29 |
30 | ### VS Code ###
31 | .vscode/
32 |
--------------------------------------------------------------------------------
/ecom-app/src/main/resources/templates/home.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
8 | Document
9 |
10 |
11 | Hello 4ss
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/supplierService/src/main/java/com/yassa/supplierService/securite/KeycloakConfig.java:
--------------------------------------------------------------------------------
1 | package com.yassa.supplierService.securite;
2 |
3 | import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver;
4 | import org.springframework.context.annotation.Bean;
5 | import org.springframework.context.annotation.Configuration;
6 |
7 | @Configuration
8 | public class KeycloakConfig {
9 | @Bean
10 | KeycloakSpringBootConfigResolver configResolver() {
11 | return new KeycloakSpringBootConfigResolver();
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/ecom-app/src/main/resources/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
11 |
12 | Document
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/ecom-app/src/main/java/com/yassa/ecomapp/entites/Product.java:
--------------------------------------------------------------------------------
1 | package com.yassa.ecomapp.entites;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 | import lombok.ToString;
7 |
8 | import javax.persistence.Entity;
9 | import javax.persistence.GeneratedValue;
10 | import javax.persistence.GenerationType;
11 | import javax.persistence.Id;
12 |
13 | @Entity
14 | @Data @NoArgsConstructor @AllArgsConstructor @ToString
15 | public class Product {
16 | @Id @GeneratedValue(strategy = GenerationType.IDENTITY )
17 | private Long id;
18 | private String name;
19 | private double price;
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/keycloak-app/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compileOnSave": false,
3 | "compilerOptions": {
4 | "baseUrl": "./",
5 | "outDir": "./dist/out-tsc",
6 | "sourceMap": true,
7 | "declaration": false,
8 | "downlevelIteration": true,
9 | "experimentalDecorators": true,
10 | "module": "esnext",
11 | "moduleResolution": "node",
12 | "importHelpers": true,
13 | "target": "es2015",
14 | "typeRoots": [
15 | "node_modules/@types"
16 | ],
17 | "lib": [
18 | "es2018",
19 | "dom"
20 | ]
21 | },
22 | "angularCompilerOptions": {
23 | "fullTemplateTypeCheck": true,
24 | "strictInjectionParameters": true
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/ecom-app/src/main/resources/templates/errors.html:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
11 |
12 | suppliers
13 |
14 |
15 |
16 |
17 | Erreur ! Pas autorisés !
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/produits/produits.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 | interface Produit {
3 | id: number;
4 | name: string;
5 | price: number;
6 | }
7 |
8 | @Component({
9 | selector: 'app-produits',
10 | templateUrl: './produits.component.html',
11 | styleUrls: ['./produits.component.scss']
12 | })
13 | export class ProduitsComponent implements OnInit {
14 |
15 | produits: Produit[] = [
16 | { id: 1, name: 'ordi HP', price: 850 },
17 | { id: 1, name: 'imprimante LX HP', price: 150 },
18 | { id: 1, name: 'Iphone X', price: 1150 }
19 | ];
20 |
21 | constructor() { }
22 |
23 | ngOnInit(): void {
24 |
25 |
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/amar/amar.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { AmarComponent } from './amar.component';
4 |
5 | describe('AmarComponent', () => {
6 | let component: AmarComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async(() => {
10 | TestBed.configureTestingModule({
11 | declarations: [ AmarComponent ]
12 | })
13 | .compileComponents();
14 | }));
15 |
16 | beforeEach(() => {
17 | fixture = TestBed.createComponent(AmarComponent);
18 | component = fixture.componentInstance;
19 | fixture.detectChanges();
20 | });
21 |
22 | it('should create', () => {
23 | expect(component).toBeTruthy();
24 | });
25 | });
26 |
--------------------------------------------------------------------------------
/keycloak-app/src/environments/environment.ts:
--------------------------------------------------------------------------------
1 | // This file can be replaced during build by using the `fileReplacements` array.
2 | // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.
3 | // The list of file replacements can be found in `angular.json`.
4 |
5 | export const environment = {
6 | production: false
7 | };
8 |
9 | /*
10 | * For easier debugging in development mode, you can import the following file
11 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
12 | *
13 | * This import should be commented out in production mode because it will have a negative impact
14 | * on performance if an error is thrown.
15 | */
16 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI.
17 |
--------------------------------------------------------------------------------
/supplierService/src/main/java/com/yassa/supplierService/entities/Supplier.java:
--------------------------------------------------------------------------------
1 | package com.yassa.supplierService.entities;
2 |
3 |
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 | import lombok.ToString;
8 |
9 | import javax.persistence.Entity;
10 | import javax.persistence.GeneratedValue;
11 | import javax.persistence.GenerationType;
12 | import javax.persistence.Id;
13 | import java.io.Serializable;
14 |
15 | @Entity
16 | @Data
17 | @NoArgsConstructor
18 | @AllArgsConstructor
19 | @ToString
20 | public class Supplier implements Serializable {
21 | @Id
22 | @GeneratedValue(strategy = GenerationType.IDENTITY )
23 | private Long id;
24 | private String name;
25 | private String email;
26 | }
27 |
--------------------------------------------------------------------------------
/keycloak-app/e2e/src/app.e2e-spec.ts:
--------------------------------------------------------------------------------
1 | import { AppPage } from './app.po';
2 | import { browser, logging } from 'protractor';
3 |
4 | describe('workspace-project App', () => {
5 | let page: AppPage;
6 |
7 | beforeEach(() => {
8 | page = new AppPage();
9 | });
10 |
11 | it('should display welcome message', () => {
12 | page.navigateTo();
13 | expect(page.getTitleText()).toEqual('keycloak-app app is running!');
14 | });
15 |
16 | afterEach(async () => {
17 | // Assert that there are no errors emitted from the browser
18 | const logs = await browser.manage().logs().get(logging.Type.BROWSER);
19 | expect(logs).not.toContain(jasmine.objectContaining({
20 | level: logging.Level.SEVERE,
21 | } as logging.Entry));
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/yassa/yassa.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { YassaComponent } from './yassa.component';
4 |
5 | describe('YassaComponent', () => {
6 | let component: YassaComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async(() => {
10 | TestBed.configureTestingModule({
11 | declarations: [ YassaComponent ]
12 | })
13 | .compileComponents();
14 | }));
15 |
16 | beforeEach(() => {
17 | fixture = TestBed.createComponent(YassaComponent);
18 | component = fixture.componentInstance;
19 | fixture.detectChanges();
20 | });
21 |
22 | it('should create', () => {
23 | expect(component).toBeTruthy();
24 | });
25 | });
26 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/produits/produits.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { ProduitsComponent } from './produits.component';
4 |
5 | describe('ProduitsComponent', () => {
6 | let component: ProduitsComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async(() => {
10 | TestBed.configureTestingModule({
11 | declarations: [ ProduitsComponent ]
12 | })
13 | .compileComponents();
14 | }));
15 |
16 | beforeEach(() => {
17 | fixture = TestBed.createComponent(ProduitsComponent);
18 | component = fixture.componentInstance;
19 | fixture.detectChanges();
20 | });
21 |
22 | it('should create', () => {
23 | expect(component).toBeTruthy();
24 | });
25 | });
26 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/suppliers/suppliers.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { SuppliersComponent } from './suppliers.component';
4 |
5 | describe('SuppliersComponent', () => {
6 | let component: SuppliersComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async(() => {
10 | TestBed.configureTestingModule({
11 | declarations: [ SuppliersComponent ]
12 | })
13 | .compileComponents();
14 | }));
15 |
16 | beforeEach(() => {
17 | fixture = TestBed.createComponent(SuppliersComponent);
18 | component = fixture.componentInstance;
19 | fixture.detectChanges();
20 | });
21 |
22 | it('should create', () => {
23 | expect(component).toBeTruthy();
24 | });
25 | });
26 |
--------------------------------------------------------------------------------
/keycloak-app/.gitignore:
--------------------------------------------------------------------------------
1 | # See http://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # compiled output
4 | /dist
5 | /tmp
6 | /out-tsc
7 | # Only exists if Bazel was run
8 | /bazel-out
9 |
10 | # dependencies
11 | /node_modules
12 |
13 | # profiling files
14 | chrome-profiler-events*.json
15 | speed-measure-plugin*.json
16 |
17 | # IDEs and editors
18 | /.idea
19 | .project
20 | .classpath
21 | .c9/
22 | *.launch
23 | .settings/
24 | *.sublime-workspace
25 |
26 | # IDE - VSCode
27 | .vscode/*
28 | !.vscode/settings.json
29 | !.vscode/tasks.json
30 | !.vscode/launch.json
31 | !.vscode/extensions.json
32 | .history/*
33 |
34 | # misc
35 | /.sass-cache
36 | /connect.lock
37 | /coverage
38 | /libpeerconnection.log
39 | npm-debug.log
40 | yarn-error.log
41 | testem.log
42 | /typings
43 |
44 | # System Files
45 | .DS_Store
46 | Thumbs.db
47 |
--------------------------------------------------------------------------------
/keycloak-app/src/test.ts:
--------------------------------------------------------------------------------
1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files
2 |
3 | import 'zone.js/dist/zone-testing';
4 | import { getTestBed } from '@angular/core/testing';
5 | import {
6 | BrowserDynamicTestingModule,
7 | platformBrowserDynamicTesting
8 | } from '@angular/platform-browser-dynamic/testing';
9 |
10 | declare const require: {
11 | context(path: string, deep?: boolean, filter?: RegExp): {
12 | keys(): string[];
13 | (id: string): T;
14 | };
15 | };
16 |
17 | // First, initialize the Angular testing environment.
18 | getTestBed().initTestEnvironment(
19 | BrowserDynamicTestingModule,
20 | platformBrowserDynamicTesting()
21 | );
22 | // Then we find all the tests.
23 | const context = require.context('./', true, /\.spec\.ts$/);
24 | // And load the modules.
25 | context.keys().map(context);
26 |
--------------------------------------------------------------------------------
/ecom-app/src/main/java/com/yassa/ecomapp/securite/KeycloakConfig.java:
--------------------------------------------------------------------------------
1 | package com.yassa.ecomapp.securite;
2 |
3 | import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver;
4 | import org.keycloak.adapters.springsecurity.client.KeycloakClientRequestFactory;
5 | import org.keycloak.adapters.springsecurity.client.KeycloakRestTemplate;
6 | import org.springframework.context.annotation.Bean;
7 | import org.springframework.context.annotation.Configuration;
8 |
9 | @Configuration
10 | public class KeycloakConfig {
11 | @Bean
12 | KeycloakSpringBootConfigResolver configResolver() {
13 | return new KeycloakSpringBootConfigResolver();
14 | }
15 |
16 | @Bean
17 | KeycloakRestTemplate keycloakRestTemplate(KeycloakClientRequestFactory keycloakClientRequestFactory) {
18 | return new KeycloakRestTemplate(keycloakClientRequestFactory);
19 |
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/suppliers/suppliers.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 | import { SuppliersService } from '../services/suppliers.service';
3 |
4 | export interface Supplier {
5 | id: number;
6 | name: string;
7 | }
8 |
9 | @Component({
10 | selector: 'app-suppliers',
11 | templateUrl: './suppliers.component.html',
12 | styleUrls: ['./suppliers.component.scss']
13 | })
14 | export class SuppliersComponent implements OnInit {
15 | errorMessage: string = null;
16 | suppliers: Supplier[];
17 |
18 | constructor(private suppliersService: SuppliersService) { }
19 |
20 | ngOnInit(): void {
21 | this.suppliersService.getSuppliers().subscribe(
22 | data => {
23 | this.suppliers = data;
24 | },
25 | err => {
26 | this.errorMessage = err;
27 | console.log('errorrr ! ', err)
28 | }
29 | );
30 |
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/ecom-app/src/main/resources/templates/products.html:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
11 |
12 | products
13 |
14 |
15 |
16 |
17 | | ID | Name | Price |
18 |
19 | |
20 | |
21 | |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/ecom-app/src/main/resources/templates/suppliers.html:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
11 |
12 | suppliers
13 |
14 |
15 |
16 |
17 | | ID | Name | email |
18 |
19 | |
20 | |
21 | |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/keycloak-app/e2e/protractor.conf.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 | // Protractor configuration file, see link for more information
3 | // https://github.com/angular/protractor/blob/master/lib/config.ts
4 |
5 | const { SpecReporter } = require('jasmine-spec-reporter');
6 |
7 | /**
8 | * @type { import("protractor").Config }
9 | */
10 | exports.config = {
11 | allScriptsTimeout: 11000,
12 | specs: [
13 | './src/**/*.e2e-spec.ts'
14 | ],
15 | capabilities: {
16 | browserName: 'chrome'
17 | },
18 | directConnect: true,
19 | baseUrl: 'http://localhost:4200/',
20 | framework: 'jasmine',
21 | jasmineNodeOpts: {
22 | showColors: true,
23 | defaultTimeoutInterval: 30000,
24 | print: function() {}
25 | },
26 | onPrepare() {
27 | require('ts-node').register({
28 | project: require('path').join(__dirname, './tsconfig.json')
29 | });
30 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
31 | }
32 | };
--------------------------------------------------------------------------------
/keycloak-app/README.md:
--------------------------------------------------------------------------------
1 | # KeycloakApp
2 |
3 | This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.0.2.
4 |
5 | ## Development server
6 |
7 | Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
8 |
9 | ## Code scaffolding
10 |
11 | Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
12 |
13 | ## Build
14 |
15 | Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build.
16 |
17 | ## Running unit tests
18 |
19 | Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
20 |
21 | ## Running end-to-end tests
22 |
23 | Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
24 |
25 | ## Further help
26 |
27 | To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).
28 |
--------------------------------------------------------------------------------
/keycloak-app/karma.conf.js:
--------------------------------------------------------------------------------
1 | // Karma configuration file, see link for more information
2 | // https://karma-runner.github.io/1.0/config/configuration-file.html
3 |
4 | module.exports = function (config) {
5 | config.set({
6 | basePath: '',
7 | frameworks: ['jasmine', '@angular-devkit/build-angular'],
8 | plugins: [
9 | require('karma-jasmine'),
10 | require('karma-chrome-launcher'),
11 | require('karma-jasmine-html-reporter'),
12 | require('karma-coverage-istanbul-reporter'),
13 | require('@angular-devkit/build-angular/plugins/karma')
14 | ],
15 | client: {
16 | clearContext: false // leave Jasmine Spec Runner output visible in browser
17 | },
18 | coverageIstanbulReporter: {
19 | dir: require('path').join(__dirname, './coverage/keycloak-app'),
20 | reports: ['html', 'lcovonly', 'text-summary'],
21 | fixWebpackSourcePaths: true
22 | },
23 | reporters: ['progress', 'kjhtml'],
24 | port: 9876,
25 | colors: true,
26 | logLevel: config.LOG_INFO,
27 | autoWatch: true,
28 | browsers: ['Chrome'],
29 | singleRun: false,
30 | restartOnFileChange: true
31 | });
32 | };
33 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/app.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { TestBed, async } from '@angular/core/testing';
2 | import { RouterTestingModule } from '@angular/router/testing';
3 | import { AppComponent } from './app.component';
4 |
5 | describe('AppComponent', () => {
6 | beforeEach(async(() => {
7 | TestBed.configureTestingModule({
8 | imports: [
9 | RouterTestingModule
10 | ],
11 | declarations: [
12 | AppComponent
13 | ],
14 | }).compileComponents();
15 | }));
16 |
17 | it('should create the app', () => {
18 | const fixture = TestBed.createComponent(AppComponent);
19 | const app = fixture.componentInstance;
20 | expect(app).toBeTruthy();
21 | });
22 |
23 | it(`should have as title 'keycloak-app'`, () => {
24 | const fixture = TestBed.createComponent(AppComponent);
25 | const app = fixture.componentInstance;
26 | expect(app.title).toEqual('keycloak-app');
27 | });
28 |
29 | it('should render title', () => {
30 | const fixture = TestBed.createComponent(AppComponent);
31 | fixture.detectChanges();
32 | const compiled = fixture.nativeElement;
33 | expect(compiled.querySelector('.content span').textContent).toContain('keycloak-app app is running!');
34 | });
35 | });
36 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/services/request-interceptor.service.ts:
--------------------------------------------------------------------------------
1 | import { Injectable } from '@angular/core';
2 | import { KeycloakSecurityService } from './keycloak-security.service';
3 | import { HttpRequest, HttpHandler, HttpParams, HttpInterceptor } from '@angular/common/http';
4 | import { take, exhaustMap } from 'rxjs/operators';
5 | import { of } from 'rxjs';
6 |
7 | @Injectable({
8 | providedIn: 'root'
9 | })
10 | export class RequestInterceptorService implements HttpInterceptor {
11 | constructor(private keycloakSecurityService: KeycloakSecurityService) { }
12 | intercept(req: HttpRequest, next: HttpHandler) {
13 | console.log('request interceptor ...')
14 | return of(this.keycloakSecurityService.keycloak)
15 | .pipe(
16 | take(1),
17 | exhaustMap(keycloak => {
18 | // console.log('keycloak', keycloak)
19 | if (!keycloak.authenticated) {
20 | return next.handle(req);
21 | }
22 | const modifiedReq = req.clone(
23 | {
24 | setHeaders: {
25 | Authorization: 'Bearer ' + keycloak.token
26 | }
27 | }
28 | );
29 | return next.handle(modifiedReq);
30 | })
31 | );
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/ecom-app/src/main/java/com/yassa/ecomapp/EcomAppApplication.java:
--------------------------------------------------------------------------------
1 | package com.yassa.ecomapp;
2 |
3 | import com.yassa.ecomapp.entites.Product;
4 | import com.yassa.ecomapp.entites.ProductRepository;
5 | import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver;
6 | import org.springframework.beans.factory.annotation.Configurable;
7 | import org.springframework.boot.CommandLineRunner;
8 | import org.springframework.boot.SpringApplication;
9 | import org.springframework.boot.autoconfigure.SpringBootApplication;
10 | import org.springframework.context.annotation.Bean;
11 |
12 | @SpringBootApplication
13 | public class EcomAppApplication {
14 |
15 | public static void main(String[] args) {
16 | SpringApplication.run(EcomAppApplication.class, args);
17 | }
18 |
19 | @Bean
20 | CommandLineRunner start(ProductRepository productRepository ) {
21 | return args -> {
22 |
23 | productRepository.save(new Product(null, "ordi HP", 850));
24 | productRepository.save(new Product(null, "imprimante LX HP", 150));
25 | productRepository.save(new Product(null, "Iphone X ", 1150));
26 |
27 | productRepository.findAll().forEach(product -> {
28 | System.out.println(product.getName());
29 | });
30 |
31 | };
32 | }
33 |
34 | }
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 | import { KeycloakSecurityService } from './services/keycloak-security.service';
3 |
4 |
5 | @Component({
6 | selector: 'app-root',
7 | templateUrl: './app.component.html',
8 | styleUrls: ['./app.component.scss']
9 | })
10 | export class AppComponent implements OnInit {
11 | title = 'keycloak-app';
12 | constructor(private keycloakSecurityService: KeycloakSecurityService) { }
13 | isAuth = false;
14 | keycloak: any;
15 | userInformations: any;
16 | ngOnInit() {
17 | this.keycloak = this.keycloakSecurityService.keycloak;
18 | console.log(this.keycloak);
19 | // console.log('hasRealmRole', this.keycloak.hasRealmRole('app-manager'));
20 | // console.log('hasResourceRole', this.keycloak.hasResourceRole('app-manager'));
21 | this.isAuth = this.keycloak.authenticated;
22 | this.userInformations = this.isAuth ? this.keycloak.idTokenParsed : {};
23 | }
24 |
25 | onLogin() {
26 | this.keycloak.login();
27 | }
28 | onLogout() {
29 | this.keycloak.logout();
30 | }
31 | ManagedAccount() {
32 | this.keycloak.accountManagement();
33 | }
34 | isAppManager() {
35 | return this.keycloak.hasRealmRole('app-manager');
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | HELP.md
2 | target/
3 | !.mvn/wrapper/maven-wrapper.jar
4 | !**/src/main/**
5 | !**/src/test/**
6 |
7 | ### STS ###
8 | .apt_generated
9 | .classpath
10 | .factorypath
11 | .project
12 | .settings
13 | .springBeans
14 | .sts4-cache
15 |
16 | ### IntelliJ IDEA ###
17 | .idea
18 | *.iws
19 | *.iml
20 | *.ipr
21 |
22 | ### NetBeans ###
23 | /nbproject/private/
24 | /nbbuild/
25 | /dist/
26 | /nbdist/
27 | /.nb-gradle/
28 | build/
29 |
30 | ### VS Code ###
31 | .vscode/
32 |
33 |
34 | # See http://help.github.com/ignore-files/ for more about ignoring files.
35 |
36 | # compiled output
37 | /dist
38 | /tmp
39 | /out-tsc
40 | # Only exists if Bazel was run
41 | /bazel-out
42 |
43 | # dependencies
44 | /node_modules
45 |
46 | # profiling files
47 | chrome-profiler-events*.json
48 | speed-measure-plugin*.json
49 |
50 | # IDEs and editors
51 | /.idea
52 | .project
53 | .classpath
54 | .c9/
55 | *.launch
56 | .settings/
57 | *.sublime-workspace
58 |
59 | # IDE - VSCode
60 | .vscode/*
61 | !.vscode/settings.json
62 | !.vscode/tasks.json
63 | !.vscode/launch.json
64 | !.vscode/extensions.json
65 | .history/*
66 |
67 | # misc
68 | /.sass-cache
69 | /connect.lock
70 | /coverage
71 | /libpeerconnection.log
72 | npm-debug.log
73 | yarn-error.log
74 | testem.log
75 | /typings
76 |
77 | # System Files
78 | .DS_Store
79 | Thumbs.db
80 |
--------------------------------------------------------------------------------
/supplierService/src/main/java/com/yassa/supplierService/SupplierServiceApplication.java:
--------------------------------------------------------------------------------
1 | package com.yassa.supplierService;
2 |
3 | import com.yassa.supplierService.entities.Supplier;
4 | import com.yassa.supplierService.entities.SupplierRepository;
5 | import org.springframework.boot.CommandLineRunner;
6 | import org.springframework.boot.SpringApplication;
7 | import org.springframework.boot.autoconfigure.SpringBootApplication;
8 | import org.springframework.context.annotation.Bean;
9 | import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
10 |
11 | import java.util.stream.Stream;
12 |
13 |
14 |
15 | @SpringBootApplication
16 | public class SupplierServiceApplication {
17 |
18 | public static void main(String[] args) {
19 | SpringApplication.run(SupplierServiceApplication.class, args);
20 | }
21 |
22 | @Bean
23 | CommandLineRunner start(SupplierRepository supplierRepository, RepositoryRestConfiguration restConfiguration) {
24 | return args -> {
25 | restConfiguration.exposeIdsFor(Supplier.class);
26 |
27 |
28 | Stream.of("IBM", "HP", "Apple").forEach(name -> {
29 | supplierRepository.save(new Supplier(null, name, "contact@"+name+".fr"));
30 | });
31 |
32 | supplierRepository.findAll().forEach(supplier -> {
33 | System.out.println(supplier.getName());
34 | });
35 |
36 | };
37 |
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/app.component.html:
--------------------------------------------------------------------------------
1 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/supplierService/src/main/java/com/yassa/supplierService/securite/KeycloakSpringSecuriteConfig.java:
--------------------------------------------------------------------------------
1 | package com.yassa.supplierService.securite;
2 |
3 | import org.keycloak.adapters.springsecurity.KeycloakConfiguration;
4 | import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter;
5 | import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
6 | import org.springframework.security.config.annotation.web.builders.HttpSecurity;
7 | import org.springframework.security.core.session.SessionRegistryImpl;
8 | import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy;
9 | import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy;
10 |
11 | @KeycloakConfiguration
12 | public class KeycloakSpringSecuriteConfig extends KeycloakWebSecurityConfigurerAdapter {
13 |
14 | @Override
15 | protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
16 | return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
17 | }
18 |
19 | @Override
20 | protected void configure(AuthenticationManagerBuilder auth) throws Exception {
21 | auth.authenticationProvider(keycloakAuthenticationProvider());
22 | }
23 |
24 | @Override
25 | protected void configure(HttpSecurity http) throws Exception {
26 | super.configure(http);
27 | http.authorizeRequests().antMatchers("/suppliers/**").hasAuthority("app-manager");
28 | }
29 | }
--------------------------------------------------------------------------------
/keycloak-app/src/app/app.module copy.ts:
--------------------------------------------------------------------------------
1 | /* import { BrowserModule } from '@angular/platform-browser';
2 | import { NgModule, APP_INITIALIZER } from '@angular/core';
3 |
4 | import { AppRoutingModule } from './app-routing.module';
5 | import { AppComponent } from './app.component';
6 | import { ProduitsComponent } from './produits/produits.component';
7 | import { SuppliersComponent } from './suppliers/suppliers.component';
8 | import { KeycloakSecurityService } from './services/keycloak-security.service';
9 | import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
10 | import { RequestInterceptorService } from './services/request-interceptor.service';
11 | import { AmarComponent } from './amar/amar.component';
12 | import { YassaComponent } from './yassa/yassa.component';
13 |
14 |
15 | export function keycloakFactory(keycloakSecurityService: KeycloakSecurityService) {
16 | return () => keycloakSecurityService.init();
17 | }
18 |
19 | @NgModule({
20 | declarations: [
21 | AppComponent,
22 | ProduitsComponent,
23 | SuppliersComponent,
24 | AmarComponent,
25 | YassaComponent
26 | ],
27 | imports: [
28 | BrowserModule,
29 | AppRoutingModule,
30 | HttpClientModule
31 |
32 | ],
33 | providers: [
34 | { provide: APP_INITIALIZER, deps: [KeycloakSecurityService], useFactory: keycloakFactory, multi: true },
35 | { provide: HTTP_INTERCEPTORS, useClass: RequestInterceptorService, multi: true }
36 |
37 | ],
38 | bootstrap: [AppComponent]
39 | })
40 | export class AppModule { }
41 | */
42 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/services/keycloak-security.service copy.ts:
--------------------------------------------------------------------------------
1 | /* import { Injectable } from '@angular/core';
2 | import { KeycloakInstance } from 'keycloak-js';
3 | declare var Keycloak: any;
4 |
5 | @Injectable({
6 | providedIn: 'root'
7 | })
8 | export class KeycloakSecurityService {
9 |
10 | public keycloak: KeycloakInstance;
11 | // public keycloak: any;
12 |
13 | constructor() { }
14 |
15 | public init() {
16 | console.log('INIT : Service keycloak security ');
17 | this.keycloak = new Keycloak({
18 | url: 'http://localhost:8080/auth',
19 | realm: 'ecom-realm',
20 | clientId: 'keycloak-angular-app'
21 | });
22 | this.keycloak.init({
23 | // onLoad: 'login-required'
24 | onLoad: 'check-sso'
25 | // promiseType: 'native'
26 |
27 | }).then((authenticated) => {
28 | console.log('authenticated', authenticated);
29 | console.log('token: ', this.keycloak.token);
30 | }, err => {
31 | console.log('errer ', err);
32 | }
33 | );
34 | }
35 |
36 | /* public async init() {
37 | console.log('INIT : Service keycloak security ');
38 | this.keycloak = new Keycloak({
39 | url: 'http://localhost:8080/auth',
40 | realm: 'ecom-realm',
41 | clientId: 'keycloak-angular-app'
42 | });
43 | await this.keycloak.init({
44 | // onLoad: 'login-required'
45 | onLoad: 'check-sso'
46 | // promiseType: 'native'
47 |
48 | })
49 | console.log('token: ', this.keycloak.token)
50 | }
51 | }
52 | */
53 |
--------------------------------------------------------------------------------
/ecom-app/src/main/java/com/yassa/ecomapp/controller/ProductController.java:
--------------------------------------------------------------------------------
1 | package com.yassa.ecomapp.controller;
2 |
3 | import com.yassa.ecomapp.entites.ProductRepository;
4 | import org.springframework.beans.factory.annotation.Autowired;
5 | import org.springframework.stereotype.Controller;
6 | import org.springframework.ui.Model;
7 | import org.springframework.web.bind.annotation.GetMapping;
8 | import org.springframework.web.bind.annotation.RequestMapping;
9 | import org.springframework.web.bind.annotation.RequestParam;
10 | import org.springframework.web.bind.annotation.ResponseBody;
11 |
12 | @Controller
13 | public class ProductController {
14 | @Autowired
15 | private ProductRepository productRepository;
16 |
17 | @GetMapping("/")
18 | public String index() {
19 |
20 |
21 | return "index";
22 | }
23 |
24 |
25 | @GetMapping("/produits")
26 | public String products(@RequestParam(name="name", required=false, defaultValue="amar") String name, Model model) {
27 | model.addAttribute("name", name);
28 | model.addAttribute("products", productRepository.findAll());
29 |
30 | return "products";
31 | }
32 |
33 |
34 |
35 |
36 | @RequestMapping("/hello")
37 | @ResponseBody
38 | String hello() {
39 | return "Hello World!";
40 | }
41 |
42 |
43 | @GetMapping("/home")
44 | public String greeting(@RequestParam(name="name", required=false, defaultValue="amar") String name, Model model) {
45 | model.addAttribute("name", name);
46 | return "home";
47 | }
48 |
49 |
50 |
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/keycloak-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "keycloak-app",
3 | "version": "0.0.0",
4 | "scripts": {
5 | "ng": "ng",
6 | "start": "ng serve",
7 | "build": "ng build",
8 | "test": "ng test",
9 | "lint": "ng lint",
10 | "e2e": "ng e2e"
11 | },
12 | "private": true,
13 | "dependencies": {
14 | "@angular/animations": "~9.0.1",
15 | "@angular/common": "~9.0.1",
16 | "@angular/compiler": "~9.0.1",
17 | "@angular/core": "~9.0.1",
18 | "@angular/forms": "~9.0.1",
19 | "@angular/platform-browser": "~9.0.1",
20 | "@angular/platform-browser-dynamic": "~9.0.1",
21 | "@angular/router": "~9.0.1",
22 | "bootstrap": "^4.4.1",
23 | "jquery": "^3.4.1",
24 | "keycloak-js": "^9.0.2",
25 | "rxjs": "~6.5.4",
26 | "tslib": "^1.10.0",
27 | "zone.js": "~0.10.2"
28 | },
29 | "devDependencies": {
30 | "@angular-devkit/build-angular": "~0.900.2",
31 | "@angular/cli": "~9.0.2",
32 | "@angular/compiler-cli": "~9.0.1",
33 | "@angular/language-service": "~9.0.1",
34 | "@types/node": "^12.11.1",
35 | "@types/jasmine": "~3.5.0",
36 | "@types/jasminewd2": "~2.0.3",
37 | "codelyzer": "^5.1.2",
38 | "jasmine-core": "~3.5.0",
39 | "jasmine-spec-reporter": "~4.2.1",
40 | "karma": "~4.3.0",
41 | "karma-chrome-launcher": "~3.1.0",
42 | "karma-coverage-istanbul-reporter": "~2.1.0",
43 | "karma-jasmine": "~2.0.1",
44 | "karma-jasmine-html-reporter": "^1.4.2",
45 | "protractor": "~5.4.3",
46 | "ts-node": "~8.3.0",
47 | "tslint": "~5.18.0",
48 | "typescript": "~3.7.5"
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/ecom-app/src/main/java/com/yassa/ecomapp/securite/KeycloakSpringSecuriteConfig.java:
--------------------------------------------------------------------------------
1 | package com.yassa.ecomapp.securite;
2 |
3 | import org.keycloak.adapters.springsecurity.KeycloakConfiguration;
4 | import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter;
5 | import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
6 | import org.springframework.security.config.annotation.web.builders.HttpSecurity;
7 | import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
8 | import org.springframework.security.core.session.SessionRegistryImpl;
9 | import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy;
10 | import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy;
11 |
12 | @KeycloakConfiguration
13 | public class KeycloakSpringSecuriteConfig extends KeycloakWebSecurityConfigurerAdapter {
14 |
15 | @Override
16 | protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
17 | return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
18 | }
19 |
20 | @Override
21 | protected void configure(AuthenticationManagerBuilder auth) throws Exception {
22 | auth.authenticationProvider(keycloakAuthenticationProvider());
23 | }
24 |
25 | @Override
26 | protected void configure(HttpSecurity http) throws Exception {
27 | super.configure(http);
28 | http.authorizeRequests().antMatchers("/produits/**").authenticated();
29 | }
30 |
31 |
32 |
33 | }
--------------------------------------------------------------------------------
/keycloak-app/src/app/services/suppliers.service.ts:
--------------------------------------------------------------------------------
1 | import { Injectable } from '@angular/core';
2 | import { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';
3 | import { Supplier } from '../suppliers/suppliers.component';
4 | import { KeycloakSecurityService } from './keycloak-security.service';
5 | import { throwError } from 'rxjs';
6 | import { tap, catchError } from 'rxjs/operators';
7 |
8 | @Injectable({
9 | providedIn: 'root'
10 | })
11 | export class SuppliersService {
12 |
13 | constructor(private http: HttpClient, private keycloakSecurityService: KeycloakSecurityService) { }
14 |
15 |
16 | public getSuppliers() {
17 | return this.http
18 | .get('http://localhost:8083/suppliers').pipe(
19 | catchError(this.handleError),
20 | // tap(data => console.log('data', data))
21 | );
22 | }
23 |
24 |
25 |
26 | private handleError(errorRes: HttpErrorResponse) {
27 | console.log('errorRes', errorRes)
28 | let errorMessage = 'an unknown error occured';
29 | if (!errorRes.error || !errorRes.error.error || !errorRes.error.message) {
30 | return throwError(errorMessage);
31 | }
32 | switch (errorRes.error.message) {
33 | case 'Forbidden':
34 | errorMessage = 'Vous n\'avez pas les droits ! ou vous n\'êtes pas logger';
35 | break;
36 | case 'EMAIL_NOT_FOUND':
37 | errorMessage = 'this Email does not exist';
38 | break;
39 | case 'INVALID_PASSWORD':
40 | errorMessage = 'this password is not correct';
41 | break;
42 |
43 | }
44 | return throwError(errorMessage);
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/services/keycloak-security.service.ts:
--------------------------------------------------------------------------------
1 | import { Injectable } from '@angular/core';
2 | import { KeycloakInstance } from 'keycloak-js';
3 | declare var Keycloak: any;
4 |
5 | @Injectable({
6 | providedIn: 'root'
7 | })
8 | export class KeycloakSecurityService {
9 |
10 | public keycloak: KeycloakInstance;
11 | // public keycloak: any;
12 |
13 | constructor() { }
14 |
15 | init() {
16 | return new Promise((resolve, reject) => {
17 | console.log('INIT : Service keycloak security ');
18 | this.keycloak = new Keycloak({
19 | url: 'http://localhost:8080/auth',
20 | realm: 'ecom-realm',
21 | clientId: 'keycloak-angular-app'
22 | });
23 | this.keycloak.init({
24 | // onLoad: 'login-required'
25 | onLoad: 'check-sso'
26 | // promiseType: 'native'
27 |
28 | }).then((authenticated) => {
29 | // console.log('authenticated', authenticated);
30 | // console.log('token: ', this.keycloak.token);
31 | resolve({ authenticated, token: this.keycloak.token })
32 | }).catch(err => {
33 | reject(err);
34 | });
35 | });
36 |
37 |
38 | }
39 |
40 | /* public async init() {
41 | console.log('INIT : Service keycloak security ');
42 | this.keycloak = new Keycloak({
43 | url: 'http://localhost:8080/auth',
44 | realm: 'ecom-realm',
45 | clientId: 'keycloak-angular-app'
46 | });
47 | await this.keycloak.init({
48 | // onLoad: 'login-required'
49 | onLoad: 'check-sso'
50 | // promiseType: 'native'
51 |
52 | })
53 | console.log('token: ', this.keycloak.token)
54 | } */
55 | }
56 |
--------------------------------------------------------------------------------
/ecom-app/src/main/java/com/yassa/ecomapp/controller/SecurityController.java:
--------------------------------------------------------------------------------
1 | package com.yassa.ecomapp.controller;
2 |
3 | import org.keycloak.adapters.AdapterDeploymentContext;
4 | import org.keycloak.adapters.KeycloakDeployment;
5 | import org.keycloak.adapters.spi.HttpFacade;
6 | import org.keycloak.adapters.springsecurity.facade.SimpleHttpFacade;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.stereotype.Controller;
9 | import org.springframework.web.bind.annotation.GetMapping;
10 | import org.springframework.web.servlet.mvc.support.RedirectAttributes;
11 |
12 | import javax.servlet.ServletException;
13 | import javax.servlet.http.HttpServletRequest;
14 | import javax.servlet.http.HttpServletResponse;
15 |
16 | @Controller
17 | public class SecurityController {
18 | @Autowired
19 | private AdapterDeploymentContext adapterDeploymentContext;
20 | @GetMapping("/logout")
21 | public String logout(HttpServletRequest request) throws ServletException {
22 | request.logout();
23 | return "redirect:/";
24 | }
25 |
26 | @GetMapping("/changePassword")
27 | public String changePassword(
28 | RedirectAttributes attributes,
29 | HttpServletRequest request,
30 | HttpServletResponse response
31 | ) throws ServletException {
32 | HttpFacade facade = new SimpleHttpFacade(request, response);
33 | KeycloakDeployment deployment = adapterDeploymentContext.resolveDeployment(facade);
34 | attributes.addAttribute("referrer", deployment.getResourceName());
35 | attributes.addAttribute("referrer_uri", request.getHeader("referer"));
36 |
37 |
38 | return "redirect:"+ deployment.getAccountUrl() + "/password";
39 | }
40 |
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/app-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes, RouterModule } from '@angular/router';
3 | import { ProduitsComponent } from './produits/produits.component';
4 | import { SuppliersComponent } from './suppliers/suppliers.component';
5 | import { AppComponent } from './app.component';
6 | import { AmarComponent } from './amar/amar.component';
7 | import { YassaComponent } from './yassa/yassa.component';
8 |
9 |
10 | const routes: Routes = [
11 | { path: '', redirectTo: '', pathMatch: 'full' },
12 | { path: '', component: AppComponent },
13 | { path: 'produits', component: ProduitsComponent },
14 | { path: 'suppliers', component: SuppliersComponent },
15 | { path: '**', redirectTo: '/' }
16 | ];
17 |
18 |
19 |
20 | // const routes: Routes = [
21 | // {
22 | // outlet: '',
23 | // path: '',
24 | // children: [
25 | // {
26 | // path: 'amar',
27 | // children: [
28 | // {
29 | // path: '',
30 | // outlet: 'amar',
31 | // component: AmarComponent
32 | // },
33 | // {
34 | // path: '',
35 | // outlet: 'yassa',
36 | // component: YassaComponent
37 | // }
38 | // ]
39 | // },
40 | // {
41 | // path: 'yassa',
42 | // children: [
43 | // {
44 | // path: '',
45 | // outlet: 'yassa',
46 | // component: YassaComponent
47 | // },
48 | // {
49 | // path: '',
50 | // outlet: 'amar',
51 | // component: AmarComponent
52 | // }
53 | // ]
54 | // }
55 | // ]
56 |
57 | // }
58 | // ];
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | @NgModule({
67 | imports: [RouterModule.forRoot(routes)],
68 | exports: [RouterModule]
69 | })
70 | export class AppRoutingModule { }
71 |
--------------------------------------------------------------------------------
/ecom-app/src/main/java/com/yassa/ecomapp/controller/SuppliersController.java:
--------------------------------------------------------------------------------
1 | package com.yassa.ecomapp.controller;
2 |
3 |
4 | import lombok.Data;
5 | import org.keycloak.adapters.springsecurity.client.KeycloakRestTemplate;
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.core.ParameterizedTypeReference;
8 | import org.springframework.hateoas.PagedModel;
9 | import org.springframework.http.HttpMethod;
10 | import org.springframework.http.ResponseEntity;
11 | import org.springframework.stereotype.Controller;
12 | import org.springframework.ui.Model;
13 | import org.springframework.web.bind.annotation.ExceptionHandler;
14 | import org.springframework.web.bind.annotation.GetMapping;
15 | import org.springframework.web.bind.annotation.RequestParam;
16 |
17 | import javax.persistence.GeneratedValue;
18 | import javax.persistence.GenerationType;
19 | import javax.persistence.Id;
20 | import java.io.Serializable;
21 | import java.lang.reflect.Type;
22 |
23 | @Controller
24 | public class SuppliersController {
25 | @Autowired
26 | private KeycloakRestTemplate keycloakRestTemplate;
27 |
28 | @GetMapping("/suppliers")
29 | public String suppliers(String name, Model model) {
30 | ResponseEntity>
31 | respose = keycloakRestTemplate.exchange(
32 | "http://localhost:8083/suppliers",
33 | HttpMethod.GET,
34 | null,
35 | new ParameterizedTypeReference>() {
36 | });
37 |
38 | model.addAttribute("suppliers", respose.getBody().getContent());
39 |
40 | return "suppliers";
41 | }
42 |
43 | @ExceptionHandler(Exception.class)
44 | public String exceptionHandler() {
45 | return "Errors";
46 | }
47 |
48 | }
49 |
50 |
51 |
52 |
53 | @Data
54 | class Supplier {
55 | private Long id;
56 | private String name;
57 | private String email;
58 | }
59 |
60 |
--------------------------------------------------------------------------------
/keycloak-app/src/app/app.module.ts:
--------------------------------------------------------------------------------
1 | import { BrowserModule } from '@angular/platform-browser';
2 | import { NgModule, APP_INITIALIZER, DoBootstrap } from '@angular/core';
3 |
4 | import { AppRoutingModule } from './app-routing.module';
5 | import { AppComponent } from './app.component';
6 | import { ProduitsComponent } from './produits/produits.component';
7 | import { SuppliersComponent } from './suppliers/suppliers.component';
8 | import { KeycloakSecurityService } from './services/keycloak-security.service';
9 | import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
10 | import { RequestInterceptorService } from './services/request-interceptor.service';
11 | import { AmarComponent } from './amar/amar.component';
12 | import { YassaComponent } from './yassa/yassa.component';
13 |
14 |
15 | // export function keycloakFactory(keycloakSecurityService: KeycloakSecurityService) {
16 | // return () => keycloakSecurityService.init();
17 | // }
18 | const keycloakSecurityService = new KeycloakSecurityService();
19 |
20 | @NgModule({
21 | declarations: [
22 | AppComponent,
23 | ProduitsComponent,
24 | SuppliersComponent,
25 | AmarComponent,
26 | YassaComponent
27 | ],
28 | imports: [
29 | BrowserModule,
30 | AppRoutingModule,
31 | HttpClientModule
32 |
33 | ],
34 | providers: [
35 | // { provide: APP_INITIALIZER, deps: [KeycloakSecurityService], useFactory: keycloakFactory, multi: true },
36 | { provide: KeycloakSecurityService, useValue: keycloakSecurityService },
37 | { provide: HTTP_INTERCEPTORS, useClass: RequestInterceptorService, multi: true }
38 |
39 | ],
40 | entryComponents: [AppComponent]
41 | // bootstrap: [AppComponent]
42 | })
43 | export class AppModule implements DoBootstrap {
44 | ngDoBootstrap(appRef: import("@angular/core").ApplicationRef): void {
45 | keycloakSecurityService.init().then(data => {
46 | console.log('authenticated + toke :', data);
47 | appRef.bootstrap(AppComponent);
48 |
49 | }).catch(err => {
50 | console.error('err', err);
51 | });
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/ecom-app/src/main/resources/templates/template.html:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
13 |
14 |
15 |
16 |
17 |
18 | Index
19 |
20 |
21 |
22 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/keycloak-app/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tslint:recommended",
3 | "rules": {
4 | "array-type": false,
5 | "arrow-parens": false,
6 | "deprecation": {
7 | "severity": "warning"
8 | },
9 | "component-class-suffix": true,
10 | "contextual-lifecycle": true,
11 | "directive-class-suffix": true,
12 | "directive-selector": [
13 | true,
14 | "attribute",
15 | "app",
16 | "camelCase"
17 | ],
18 | "component-selector": [
19 | true,
20 | "element",
21 | "app",
22 | "kebab-case"
23 | ],
24 | "import-blacklist": [
25 | true,
26 | "rxjs/Rx"
27 | ],
28 | "interface-name": false,
29 | "max-classes-per-file": false,
30 | "max-line-length": [
31 | true,
32 | 140
33 | ],
34 | "member-access": false,
35 | "member-ordering": [
36 | true,
37 | {
38 | "order": [
39 | "static-field",
40 | "instance-field",
41 | "static-method",
42 | "instance-method"
43 | ]
44 | }
45 | ],
46 | "no-consecutive-blank-lines": false,
47 | "no-console": [
48 | true,
49 | "debug",
50 | "info",
51 | "time",
52 | "timeEnd",
53 | "trace"
54 | ],
55 | "no-empty": false,
56 | "no-inferrable-types": [
57 | true,
58 | "ignore-params"
59 | ],
60 | "no-non-null-assertion": true,
61 | "no-redundant-jsdoc": true,
62 | "no-switch-case-fall-through": true,
63 | "no-var-requires": false,
64 | "object-literal-key-quotes": [
65 | true,
66 | "as-needed"
67 | ],
68 | "object-literal-sort-keys": false,
69 | "ordered-imports": false,
70 | "quotemark": [
71 | true,
72 | "single"
73 | ],
74 | "trailing-comma": false,
75 | "no-conflicting-lifecycle": true,
76 | "no-host-metadata-property": true,
77 | "no-input-rename": true,
78 | "no-inputs-metadata-property": true,
79 | "no-output-native": true,
80 | "no-output-on-prefix": true,
81 | "no-output-rename": true,
82 | "no-outputs-metadata-property": true,
83 | "template-banana-in-box": true,
84 | "template-no-negated-async": true,
85 | "use-lifecycle-interface": true,
86 | "use-pipe-transform-interface": true
87 | },
88 | "rulesDirectory": [
89 | "codelyzer"
90 | ]
91 | }
--------------------------------------------------------------------------------
/supplierService/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | org.springframework.boot
7 | spring-boot-starter-parent
8 | 2.2.6.RELEASE
9 |
10 |
11 | com.yassa
12 | supplierService
13 | 0.0.1-SNAPSHOT
14 | supplierService
15 | Demo project for Spring Boot
16 |
17 |
18 | 1.8
19 |
20 |
21 |
22 |
23 | org.springframework.boot
24 | spring-boot-starter-data-jpa
25 |
26 |
27 | org.springframework.boot
28 | spring-boot-starter-data-rest
29 |
30 |
31 | org.springframework.boot
32 | spring-boot-starter-web
33 |
34 |
35 |
36 | org.springframework.boot
37 | spring-boot-devtools
38 | runtime
39 | true
40 |
41 |
42 | com.h2database
43 | h2
44 | runtime
45 |
46 |
47 | org.projectlombok
48 | lombok
49 | true
50 |
51 |
52 | org.springframework.boot
53 | spring-boot-starter-test
54 | test
55 |
56 |
57 | org.junit.vintage
58 | junit-vintage-engine
59 |
60 |
61 |
62 |
63 |
64 |
65 | org.keycloak
66 | keycloak-spring-boot-starter
67 | 9.0.0
68 |
69 |
70 | org.springframework.boot
71 | spring-boot-starter-security
72 |
73 |
74 |
75 |
76 |
77 |
78 | org.springframework.boot
79 | spring-boot-maven-plugin
80 |
81 |
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/keycloak-app/src/polyfills.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * This file includes polyfills needed by Angular and is loaded before the app.
3 | * You can add your own extra polyfills to this file.
4 | *
5 | * This file is divided into 2 sections:
6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main
8 | * file.
9 | *
10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
13 | *
14 | * Learn more in https://angular.io/guide/browser-support
15 | */
16 |
17 | /***************************************************************************************************
18 | * BROWSER POLYFILLS
19 | */
20 |
21 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */
22 | // import 'classlist.js'; // Run `npm install --save classlist.js`.
23 |
24 | /**
25 | * Web Animations `@angular/platform-browser/animations`
26 | * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.
27 | * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).
28 | */
29 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`.
30 |
31 | /**
32 | * By default, zone.js will patch all possible macroTask and DomEvents
33 | * user can disable parts of macroTask/DomEvents patch by setting following flags
34 | * because those flags need to be set before `zone.js` being loaded, and webpack
35 | * will put import in the top of bundle, so user need to create a separate file
36 | * in this directory (for example: zone-flags.ts), and put the following flags
37 | * into that file, and then add the following code before importing zone.js.
38 | * import './zone-flags';
39 | *
40 | * The flags allowed in zone-flags.ts are listed here.
41 | *
42 | * The following flags will work for all browsers.
43 | *
44 | * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
45 | * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
46 | * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
47 | *
48 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
49 | * with the following flag, it will bypass `zone.js` patch for IE/Edge
50 | *
51 | * (window as any).__Zone_enable_cross_context_check = true;
52 | *
53 | */
54 |
55 | /***************************************************************************************************
56 | * Zone JS is required by default for Angular itself.
57 | */
58 | import 'zone.js/dist/zone'; // Included with Angular CLI.
59 |
60 |
61 | /***************************************************************************************************
62 | * APPLICATION IMPORTS
63 | */
64 |
--------------------------------------------------------------------------------
/ecom-app/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | org.springframework.boot
7 | spring-boot-starter-parent
8 | 2.2.6.RELEASE
9 |
10 |
11 | com.yassa
12 | ecom-app
13 | 0.0.1-SNAPSHOT
14 | ecom-app
15 | Demo project for Spring Boot
16 |
17 |
18 | 1.8
19 |
20 |
21 |
22 |
23 | org.springframework.boot
24 | spring-boot-starter-data-jpa
25 |
26 |
27 | org.springframework.boot
28 | spring-boot-starter-data-rest
29 |
30 |
31 | org.springframework.boot
32 | spring-boot-starter-thymeleaf
33 |
34 |
35 | nz.net.ultraq.thymeleaf
36 | thymeleaf-layout-dialect
37 | 2.3.0
38 |
39 |
40 | org.springframework.boot
41 | spring-boot-starter-web
42 |
43 |
44 |
45 | org.springframework.boot
46 | spring-boot-devtools
47 | runtime
48 | true
49 |
50 |
51 | com.h2database
52 | h2
53 | runtime
54 |
55 |
56 | org.projectlombok
57 | lombok
58 | true
59 |
60 |
61 | org.webjars
62 | bootstrap
63 | 4.4.1
64 |
65 |
66 | org.webjars
67 | jquery
68 | 3.4.1
69 |
70 |
71 |
72 |
73 | org.keycloak
74 | keycloak-spring-boot-starter
75 | 9.0.0
76 |
77 |
78 | org.springframework.boot
79 | spring-boot-starter-security
80 |
81 |
82 | org.thymeleaf.extras
83 | thymeleaf-extras-springsecurity5
84 |
85 |
86 |
87 | org.springframework.boot
88 | spring-boot-starter-hateoas
89 |
90 |
91 |
92 |
93 |
94 |
95 | org.springframework.boot
96 | spring-boot-starter-test
97 | test
98 |
99 |
100 | org.junit.vintage
101 | junit-vintage-engine
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 | org.springframework.boot
111 | spring-boot-maven-plugin
112 |
113 |
114 |
115 |
116 |
117 |
--------------------------------------------------------------------------------
/keycloak-app/angular.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
3 | "version": 1,
4 | "newProjectRoot": "projects",
5 | "projects": {
6 | "keycloak-app": {
7 | "projectType": "application",
8 | "schematics": {
9 | "@schematics/angular:component": {
10 | "style": "scss"
11 | }
12 | },
13 | "root": "",
14 | "sourceRoot": "src",
15 | "prefix": "app",
16 | "architect": {
17 | "build": {
18 | "builder": "@angular-devkit/build-angular:browser",
19 | "options": {
20 | "outputPath": "dist/keycloak-app",
21 | "index": "src/index.html",
22 | "main": "src/main.ts",
23 | "polyfills": "src/polyfills.ts",
24 | "tsConfig": "tsconfig.app.json",
25 | "aot": true,
26 | "assets": [
27 | "src/favicon.ico",
28 | "src/assets"
29 | ],
30 | "styles": [
31 | "src/styles.scss",
32 | "node_modules/bootstrap/dist/css/bootstrap.min.css"
33 | ],
34 | "scripts": [
35 | "node_modules/jquery/dist/jquery.min.js",
36 | "node_modules/bootstrap/dist/js/bootstrap.min.js",
37 | "node_modules/keycloak-js/dist/keycloak.min.js"
38 | ]
39 | },
40 | "configurations": {
41 | "production": {
42 | "fileReplacements": [
43 | {
44 | "replace": "src/environments/environment.ts",
45 | "with": "src/environments/environment.prod.ts"
46 | }
47 | ],
48 | "optimization": true,
49 | "outputHashing": "all",
50 | "sourceMap": false,
51 | "extractCss": true,
52 | "namedChunks": false,
53 | "extractLicenses": true,
54 | "vendorChunk": false,
55 | "buildOptimizer": true,
56 | "budgets": [
57 | {
58 | "type": "initial",
59 | "maximumWarning": "2mb",
60 | "maximumError": "5mb"
61 | },
62 | {
63 | "type": "anyComponentStyle",
64 | "maximumWarning": "6kb",
65 | "maximumError": "10kb"
66 | }
67 | ]
68 | }
69 | }
70 | },
71 | "serve": {
72 | "builder": "@angular-devkit/build-angular:dev-server",
73 | "options": {
74 | "browserTarget": "keycloak-app:build"
75 | },
76 | "configurations": {
77 | "production": {
78 | "browserTarget": "keycloak-app:build:production"
79 | }
80 | }
81 | },
82 | "extract-i18n": {
83 | "builder": "@angular-devkit/build-angular:extract-i18n",
84 | "options": {
85 | "browserTarget": "keycloak-app:build"
86 | }
87 | },
88 | "test": {
89 | "builder": "@angular-devkit/build-angular:karma",
90 | "options": {
91 | "main": "src/test.ts",
92 | "polyfills": "src/polyfills.ts",
93 | "tsConfig": "tsconfig.spec.json",
94 | "karmaConfig": "karma.conf.js",
95 | "assets": [
96 | "src/favicon.ico",
97 | "src/assets"
98 | ],
99 | "styles": [
100 | "src/styles.scss"
101 | ],
102 | "scripts": []
103 | }
104 | },
105 | "lint": {
106 | "builder": "@angular-devkit/build-angular:tslint",
107 | "options": {
108 | "tsConfig": [
109 | "tsconfig.app.json",
110 | "tsconfig.spec.json",
111 | "e2e/tsconfig.json"
112 | ],
113 | "exclude": [
114 | "**/node_modules/**"
115 | ]
116 | }
117 | },
118 | "e2e": {
119 | "builder": "@angular-devkit/build-angular:protractor",
120 | "options": {
121 | "protractorConfig": "e2e/protractor.conf.js",
122 | "devServerTarget": "keycloak-app:serve"
123 | },
124 | "configurations": {
125 | "production": {
126 | "devServerTarget": "keycloak-app:serve:production"
127 | }
128 | }
129 | }
130 | }
131 | }
132 | },
133 | "defaultProject": "keycloak-app",
134 | "cli": {
135 | "analytics": false
136 | }
137 | }
--------------------------------------------------------------------------------
/ecom-app/.mvn/wrapper/MavenWrapperDownloader.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2007-present the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | import java.net.*;
17 | import java.io.*;
18 | import java.nio.channels.*;
19 | import java.util.Properties;
20 |
21 | public class MavenWrapperDownloader {
22 |
23 | private static final String WRAPPER_VERSION = "0.5.6";
24 | /**
25 | * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
26 | */
27 | private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
28 | + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
29 |
30 | /**
31 | * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
32 | * use instead of the default one.
33 | */
34 | private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
35 | ".mvn/wrapper/maven-wrapper.properties";
36 |
37 | /**
38 | * Path where the maven-wrapper.jar will be saved to.
39 | */
40 | private static final String MAVEN_WRAPPER_JAR_PATH =
41 | ".mvn/wrapper/maven-wrapper.jar";
42 |
43 | /**
44 | * Name of the property which should be used to override the default download url for the wrapper.
45 | */
46 | private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
47 |
48 | public static void main(String args[]) {
49 | System.out.println("- Downloader started");
50 | File baseDirectory = new File(args[0]);
51 | System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
52 |
53 | // If the maven-wrapper.properties exists, read it and check if it contains a custom
54 | // wrapperUrl parameter.
55 | File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
56 | String url = DEFAULT_DOWNLOAD_URL;
57 | if(mavenWrapperPropertyFile.exists()) {
58 | FileInputStream mavenWrapperPropertyFileInputStream = null;
59 | try {
60 | mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
61 | Properties mavenWrapperProperties = new Properties();
62 | mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
63 | url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
64 | } catch (IOException e) {
65 | System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
66 | } finally {
67 | try {
68 | if(mavenWrapperPropertyFileInputStream != null) {
69 | mavenWrapperPropertyFileInputStream.close();
70 | }
71 | } catch (IOException e) {
72 | // Ignore ...
73 | }
74 | }
75 | }
76 | System.out.println("- Downloading from: " + url);
77 |
78 | File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
79 | if(!outputFile.getParentFile().exists()) {
80 | if(!outputFile.getParentFile().mkdirs()) {
81 | System.out.println(
82 | "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
83 | }
84 | }
85 | System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
86 | try {
87 | downloadFileFromURL(url, outputFile);
88 | System.out.println("Done");
89 | System.exit(0);
90 | } catch (Throwable e) {
91 | System.out.println("- Error downloading");
92 | e.printStackTrace();
93 | System.exit(1);
94 | }
95 | }
96 |
97 | private static void downloadFileFromURL(String urlString, File destination) throws Exception {
98 | if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
99 | String username = System.getenv("MVNW_USERNAME");
100 | char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
101 | Authenticator.setDefault(new Authenticator() {
102 | @Override
103 | protected PasswordAuthentication getPasswordAuthentication() {
104 | return new PasswordAuthentication(username, password);
105 | }
106 | });
107 | }
108 | URL website = new URL(urlString);
109 | ReadableByteChannel rbc;
110 | rbc = Channels.newChannel(website.openStream());
111 | FileOutputStream fos = new FileOutputStream(destination);
112 | fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
113 | fos.close();
114 | rbc.close();
115 | }
116 |
117 | }
118 |
--------------------------------------------------------------------------------
/supplierService/.mvn/wrapper/MavenWrapperDownloader.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2007-present the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | import java.net.*;
17 | import java.io.*;
18 | import java.nio.channels.*;
19 | import java.util.Properties;
20 |
21 | public class MavenWrapperDownloader {
22 |
23 | private static final String WRAPPER_VERSION = "0.5.6";
24 | /**
25 | * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
26 | */
27 | private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
28 | + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
29 |
30 | /**
31 | * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
32 | * use instead of the default one.
33 | */
34 | private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
35 | ".mvn/wrapper/maven-wrapper.properties";
36 |
37 | /**
38 | * Path where the maven-wrapper.jar will be saved to.
39 | */
40 | private static final String MAVEN_WRAPPER_JAR_PATH =
41 | ".mvn/wrapper/maven-wrapper.jar";
42 |
43 | /**
44 | * Name of the property which should be used to override the default download url for the wrapper.
45 | */
46 | private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
47 |
48 | public static void main(String args[]) {
49 | System.out.println("- Downloader started");
50 | File baseDirectory = new File(args[0]);
51 | System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
52 |
53 | // If the maven-wrapper.properties exists, read it and check if it contains a custom
54 | // wrapperUrl parameter.
55 | File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
56 | String url = DEFAULT_DOWNLOAD_URL;
57 | if(mavenWrapperPropertyFile.exists()) {
58 | FileInputStream mavenWrapperPropertyFileInputStream = null;
59 | try {
60 | mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
61 | Properties mavenWrapperProperties = new Properties();
62 | mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
63 | url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
64 | } catch (IOException e) {
65 | System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
66 | } finally {
67 | try {
68 | if(mavenWrapperPropertyFileInputStream != null) {
69 | mavenWrapperPropertyFileInputStream.close();
70 | }
71 | } catch (IOException e) {
72 | // Ignore ...
73 | }
74 | }
75 | }
76 | System.out.println("- Downloading from: " + url);
77 |
78 | File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
79 | if(!outputFile.getParentFile().exists()) {
80 | if(!outputFile.getParentFile().mkdirs()) {
81 | System.out.println(
82 | "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
83 | }
84 | }
85 | System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
86 | try {
87 | downloadFileFromURL(url, outputFile);
88 | System.out.println("Done");
89 | System.exit(0);
90 | } catch (Throwable e) {
91 | System.out.println("- Error downloading");
92 | e.printStackTrace();
93 | System.exit(1);
94 | }
95 | }
96 |
97 | private static void downloadFileFromURL(String urlString, File destination) throws Exception {
98 | if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
99 | String username = System.getenv("MVNW_USERNAME");
100 | char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
101 | Authenticator.setDefault(new Authenticator() {
102 | @Override
103 | protected PasswordAuthentication getPasswordAuthentication() {
104 | return new PasswordAuthentication(username, password);
105 | }
106 | });
107 | }
108 | URL website = new URL(urlString);
109 | ReadableByteChannel rbc;
110 | rbc = Channels.newChannel(website.openStream());
111 | FileOutputStream fos = new FileOutputStream(destination);
112 | fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
113 | fos.close();
114 | rbc.close();
115 | }
116 |
117 | }
118 |
--------------------------------------------------------------------------------
/ecom-app/mvnw.cmd:
--------------------------------------------------------------------------------
1 | @REM ----------------------------------------------------------------------------
2 | @REM Licensed to the Apache Software Foundation (ASF) under one
3 | @REM or more contributor license agreements. See the NOTICE file
4 | @REM distributed with this work for additional information
5 | @REM regarding copyright ownership. The ASF licenses this file
6 | @REM to you under the Apache License, Version 2.0 (the
7 | @REM "License"); you may not use this file except in compliance
8 | @REM with the License. You may obtain a copy of the License at
9 | @REM
10 | @REM https://www.apache.org/licenses/LICENSE-2.0
11 | @REM
12 | @REM Unless required by applicable law or agreed to in writing,
13 | @REM software distributed under the License is distributed on an
14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | @REM KIND, either express or implied. See the License for the
16 | @REM specific language governing permissions and limitations
17 | @REM under the License.
18 | @REM ----------------------------------------------------------------------------
19 |
20 | @REM ----------------------------------------------------------------------------
21 | @REM Maven Start Up Batch script
22 | @REM
23 | @REM Required ENV vars:
24 | @REM JAVA_HOME - location of a JDK home dir
25 | @REM
26 | @REM Optional ENV vars
27 | @REM M2_HOME - location of maven2's installed home dir
28 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
29 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
30 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
31 | @REM e.g. to debug Maven itself, use
32 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34 | @REM ----------------------------------------------------------------------------
35 |
36 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
37 | @echo off
38 | @REM set title of command window
39 | title %0
40 | @REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
41 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
42 |
43 | @REM set %HOME% to equivalent of $HOME
44 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
45 |
46 | @REM Execute a user defined script before this one
47 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
48 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending
49 | if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
50 | if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
51 | :skipRcPre
52 |
53 | @setlocal
54 |
55 | set ERROR_CODE=0
56 |
57 | @REM To isolate internal variables from possible post scripts, we use another setlocal
58 | @setlocal
59 |
60 | @REM ==== START VALIDATION ====
61 | if not "%JAVA_HOME%" == "" goto OkJHome
62 |
63 | echo.
64 | echo Error: JAVA_HOME not found in your environment. >&2
65 | echo Please set the JAVA_HOME variable in your environment to match the >&2
66 | echo location of your Java installation. >&2
67 | echo.
68 | goto error
69 |
70 | :OkJHome
71 | if exist "%JAVA_HOME%\bin\java.exe" goto init
72 |
73 | echo.
74 | echo Error: JAVA_HOME is set to an invalid directory. >&2
75 | echo JAVA_HOME = "%JAVA_HOME%" >&2
76 | echo Please set the JAVA_HOME variable in your environment to match the >&2
77 | echo location of your Java installation. >&2
78 | echo.
79 | goto error
80 |
81 | @REM ==== END VALIDATION ====
82 |
83 | :init
84 |
85 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
86 | @REM Fallback to current working directory if not found.
87 |
88 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
89 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
90 |
91 | set EXEC_DIR=%CD%
92 | set WDIR=%EXEC_DIR%
93 | :findBaseDir
94 | IF EXIST "%WDIR%"\.mvn goto baseDirFound
95 | cd ..
96 | IF "%WDIR%"=="%CD%" goto baseDirNotFound
97 | set WDIR=%CD%
98 | goto findBaseDir
99 |
100 | :baseDirFound
101 | set MAVEN_PROJECTBASEDIR=%WDIR%
102 | cd "%EXEC_DIR%"
103 | goto endDetectBaseDir
104 |
105 | :baseDirNotFound
106 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
107 | cd "%EXEC_DIR%"
108 |
109 | :endDetectBaseDir
110 |
111 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
112 |
113 | @setlocal EnableExtensions EnableDelayedExpansion
114 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
115 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
116 |
117 | :endReadAdditionalConfig
118 |
119 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
120 | set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
121 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
122 |
123 | set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
124 |
125 | FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
126 | IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
127 | )
128 |
129 | @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
130 | @REM This allows using the maven wrapper in projects that prohibit checking in binary data.
131 | if exist %WRAPPER_JAR% (
132 | if "%MVNW_VERBOSE%" == "true" (
133 | echo Found %WRAPPER_JAR%
134 | )
135 | ) else (
136 | if not "%MVNW_REPOURL%" == "" (
137 | SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
138 | )
139 | if "%MVNW_VERBOSE%" == "true" (
140 | echo Couldn't find %WRAPPER_JAR%, downloading it ...
141 | echo Downloading from: %DOWNLOAD_URL%
142 | )
143 |
144 | powershell -Command "&{"^
145 | "$webclient = new-object System.Net.WebClient;"^
146 | "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
147 | "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
148 | "}"^
149 | "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
150 | "}"
151 | if "%MVNW_VERBOSE%" == "true" (
152 | echo Finished downloading %WRAPPER_JAR%
153 | )
154 | )
155 | @REM End of extension
156 |
157 | @REM Provide a "standardized" way to retrieve the CLI args that will
158 | @REM work with both Windows and non-Windows executions.
159 | set MAVEN_CMD_LINE_ARGS=%*
160 |
161 | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
162 | if ERRORLEVEL 1 goto error
163 | goto end
164 |
165 | :error
166 | set ERROR_CODE=1
167 |
168 | :end
169 | @endlocal & set ERROR_CODE=%ERROR_CODE%
170 |
171 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
172 | @REM check for post script, once with legacy .bat ending and once with .cmd ending
173 | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
174 | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
175 | :skipRcPost
176 |
177 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
178 | if "%MAVEN_BATCH_PAUSE%" == "on" pause
179 |
180 | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
181 |
182 | exit /B %ERROR_CODE%
183 |
--------------------------------------------------------------------------------
/supplierService/mvnw.cmd:
--------------------------------------------------------------------------------
1 | @REM ----------------------------------------------------------------------------
2 | @REM Licensed to the Apache Software Foundation (ASF) under one
3 | @REM or more contributor license agreements. See the NOTICE file
4 | @REM distributed with this work for additional information
5 | @REM regarding copyright ownership. The ASF licenses this file
6 | @REM to you under the Apache License, Version 2.0 (the
7 | @REM "License"); you may not use this file except in compliance
8 | @REM with the License. You may obtain a copy of the License at
9 | @REM
10 | @REM https://www.apache.org/licenses/LICENSE-2.0
11 | @REM
12 | @REM Unless required by applicable law or agreed to in writing,
13 | @REM software distributed under the License is distributed on an
14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | @REM KIND, either express or implied. See the License for the
16 | @REM specific language governing permissions and limitations
17 | @REM under the License.
18 | @REM ----------------------------------------------------------------------------
19 |
20 | @REM ----------------------------------------------------------------------------
21 | @REM Maven Start Up Batch script
22 | @REM
23 | @REM Required ENV vars:
24 | @REM JAVA_HOME - location of a JDK home dir
25 | @REM
26 | @REM Optional ENV vars
27 | @REM M2_HOME - location of maven2's installed home dir
28 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
29 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
30 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
31 | @REM e.g. to debug Maven itself, use
32 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34 | @REM ----------------------------------------------------------------------------
35 |
36 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
37 | @echo off
38 | @REM set title of command window
39 | title %0
40 | @REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
41 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
42 |
43 | @REM set %HOME% to equivalent of $HOME
44 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
45 |
46 | @REM Execute a user defined script before this one
47 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
48 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending
49 | if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
50 | if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
51 | :skipRcPre
52 |
53 | @setlocal
54 |
55 | set ERROR_CODE=0
56 |
57 | @REM To isolate internal variables from possible post scripts, we use another setlocal
58 | @setlocal
59 |
60 | @REM ==== START VALIDATION ====
61 | if not "%JAVA_HOME%" == "" goto OkJHome
62 |
63 | echo.
64 | echo Error: JAVA_HOME not found in your environment. >&2
65 | echo Please set the JAVA_HOME variable in your environment to match the >&2
66 | echo location of your Java installation. >&2
67 | echo.
68 | goto error
69 |
70 | :OkJHome
71 | if exist "%JAVA_HOME%\bin\java.exe" goto init
72 |
73 | echo.
74 | echo Error: JAVA_HOME is set to an invalid directory. >&2
75 | echo JAVA_HOME = "%JAVA_HOME%" >&2
76 | echo Please set the JAVA_HOME variable in your environment to match the >&2
77 | echo location of your Java installation. >&2
78 | echo.
79 | goto error
80 |
81 | @REM ==== END VALIDATION ====
82 |
83 | :init
84 |
85 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
86 | @REM Fallback to current working directory if not found.
87 |
88 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
89 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
90 |
91 | set EXEC_DIR=%CD%
92 | set WDIR=%EXEC_DIR%
93 | :findBaseDir
94 | IF EXIST "%WDIR%"\.mvn goto baseDirFound
95 | cd ..
96 | IF "%WDIR%"=="%CD%" goto baseDirNotFound
97 | set WDIR=%CD%
98 | goto findBaseDir
99 |
100 | :baseDirFound
101 | set MAVEN_PROJECTBASEDIR=%WDIR%
102 | cd "%EXEC_DIR%"
103 | goto endDetectBaseDir
104 |
105 | :baseDirNotFound
106 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
107 | cd "%EXEC_DIR%"
108 |
109 | :endDetectBaseDir
110 |
111 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
112 |
113 | @setlocal EnableExtensions EnableDelayedExpansion
114 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
115 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
116 |
117 | :endReadAdditionalConfig
118 |
119 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
120 | set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
121 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
122 |
123 | set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
124 |
125 | FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
126 | IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
127 | )
128 |
129 | @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
130 | @REM This allows using the maven wrapper in projects that prohibit checking in binary data.
131 | if exist %WRAPPER_JAR% (
132 | if "%MVNW_VERBOSE%" == "true" (
133 | echo Found %WRAPPER_JAR%
134 | )
135 | ) else (
136 | if not "%MVNW_REPOURL%" == "" (
137 | SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
138 | )
139 | if "%MVNW_VERBOSE%" == "true" (
140 | echo Couldn't find %WRAPPER_JAR%, downloading it ...
141 | echo Downloading from: %DOWNLOAD_URL%
142 | )
143 |
144 | powershell -Command "&{"^
145 | "$webclient = new-object System.Net.WebClient;"^
146 | "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
147 | "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
148 | "}"^
149 | "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
150 | "}"
151 | if "%MVNW_VERBOSE%" == "true" (
152 | echo Finished downloading %WRAPPER_JAR%
153 | )
154 | )
155 | @REM End of extension
156 |
157 | @REM Provide a "standardized" way to retrieve the CLI args that will
158 | @REM work with both Windows and non-Windows executions.
159 | set MAVEN_CMD_LINE_ARGS=%*
160 |
161 | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
162 | if ERRORLEVEL 1 goto error
163 | goto end
164 |
165 | :error
166 | set ERROR_CODE=1
167 |
168 | :end
169 | @endlocal & set ERROR_CODE=%ERROR_CODE%
170 |
171 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
172 | @REM check for post script, once with legacy .bat ending and once with .cmd ending
173 | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
174 | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
175 | :skipRcPost
176 |
177 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
178 | if "%MAVEN_BATCH_PAUSE%" == "on" pause
179 |
180 | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
181 |
182 | exit /B %ERROR_CODE%
183 |
--------------------------------------------------------------------------------
/ecom-app/mvnw:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # ----------------------------------------------------------------------------
3 | # Licensed to the Apache Software Foundation (ASF) under one
4 | # or more contributor license agreements. See the NOTICE file
5 | # distributed with this work for additional information
6 | # regarding copyright ownership. The ASF licenses this file
7 | # to you under the Apache License, Version 2.0 (the
8 | # "License"); you may not use this file except in compliance
9 | # with the License. You may obtain a copy of the License at
10 | #
11 | # https://www.apache.org/licenses/LICENSE-2.0
12 | #
13 | # Unless required by applicable law or agreed to in writing,
14 | # software distributed under the License is distributed on an
15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 | # KIND, either express or implied. See the License for the
17 | # specific language governing permissions and limitations
18 | # under the License.
19 | # ----------------------------------------------------------------------------
20 |
21 | # ----------------------------------------------------------------------------
22 | # Maven Start Up Batch script
23 | #
24 | # Required ENV vars:
25 | # ------------------
26 | # JAVA_HOME - location of a JDK home dir
27 | #
28 | # Optional ENV vars
29 | # -----------------
30 | # M2_HOME - location of maven2's installed home dir
31 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven
32 | # e.g. to debug Maven itself, use
33 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
34 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files
35 | # ----------------------------------------------------------------------------
36 |
37 | if [ -z "$MAVEN_SKIP_RC" ] ; then
38 |
39 | if [ -f /etc/mavenrc ] ; then
40 | . /etc/mavenrc
41 | fi
42 |
43 | if [ -f "$HOME/.mavenrc" ] ; then
44 | . "$HOME/.mavenrc"
45 | fi
46 |
47 | fi
48 |
49 | # OS specific support. $var _must_ be set to either true or false.
50 | cygwin=false;
51 | darwin=false;
52 | mingw=false
53 | case "`uname`" in
54 | CYGWIN*) cygwin=true ;;
55 | MINGW*) mingw=true;;
56 | Darwin*) darwin=true
57 | # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
58 | # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
59 | if [ -z "$JAVA_HOME" ]; then
60 | if [ -x "/usr/libexec/java_home" ]; then
61 | export JAVA_HOME="`/usr/libexec/java_home`"
62 | else
63 | export JAVA_HOME="/Library/Java/Home"
64 | fi
65 | fi
66 | ;;
67 | esac
68 |
69 | if [ -z "$JAVA_HOME" ] ; then
70 | if [ -r /etc/gentoo-release ] ; then
71 | JAVA_HOME=`java-config --jre-home`
72 | fi
73 | fi
74 |
75 | if [ -z "$M2_HOME" ] ; then
76 | ## resolve links - $0 may be a link to maven's home
77 | PRG="$0"
78 |
79 | # need this for relative symlinks
80 | while [ -h "$PRG" ] ; do
81 | ls=`ls -ld "$PRG"`
82 | link=`expr "$ls" : '.*-> \(.*\)$'`
83 | if expr "$link" : '/.*' > /dev/null; then
84 | PRG="$link"
85 | else
86 | PRG="`dirname "$PRG"`/$link"
87 | fi
88 | done
89 |
90 | saveddir=`pwd`
91 |
92 | M2_HOME=`dirname "$PRG"`/..
93 |
94 | # make it fully qualified
95 | M2_HOME=`cd "$M2_HOME" && pwd`
96 |
97 | cd "$saveddir"
98 | # echo Using m2 at $M2_HOME
99 | fi
100 |
101 | # For Cygwin, ensure paths are in UNIX format before anything is touched
102 | if $cygwin ; then
103 | [ -n "$M2_HOME" ] &&
104 | M2_HOME=`cygpath --unix "$M2_HOME"`
105 | [ -n "$JAVA_HOME" ] &&
106 | JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
107 | [ -n "$CLASSPATH" ] &&
108 | CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
109 | fi
110 |
111 | # For Mingw, ensure paths are in UNIX format before anything is touched
112 | if $mingw ; then
113 | [ -n "$M2_HOME" ] &&
114 | M2_HOME="`(cd "$M2_HOME"; pwd)`"
115 | [ -n "$JAVA_HOME" ] &&
116 | JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
117 | fi
118 |
119 | if [ -z "$JAVA_HOME" ]; then
120 | javaExecutable="`which javac`"
121 | if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
122 | # readlink(1) is not available as standard on Solaris 10.
123 | readLink=`which readlink`
124 | if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
125 | if $darwin ; then
126 | javaHome="`dirname \"$javaExecutable\"`"
127 | javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
128 | else
129 | javaExecutable="`readlink -f \"$javaExecutable\"`"
130 | fi
131 | javaHome="`dirname \"$javaExecutable\"`"
132 | javaHome=`expr "$javaHome" : '\(.*\)/bin'`
133 | JAVA_HOME="$javaHome"
134 | export JAVA_HOME
135 | fi
136 | fi
137 | fi
138 |
139 | if [ -z "$JAVACMD" ] ; then
140 | if [ -n "$JAVA_HOME" ] ; then
141 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
142 | # IBM's JDK on AIX uses strange locations for the executables
143 | JAVACMD="$JAVA_HOME/jre/sh/java"
144 | else
145 | JAVACMD="$JAVA_HOME/bin/java"
146 | fi
147 | else
148 | JAVACMD="`which java`"
149 | fi
150 | fi
151 |
152 | if [ ! -x "$JAVACMD" ] ; then
153 | echo "Error: JAVA_HOME is not defined correctly." >&2
154 | echo " We cannot execute $JAVACMD" >&2
155 | exit 1
156 | fi
157 |
158 | if [ -z "$JAVA_HOME" ] ; then
159 | echo "Warning: JAVA_HOME environment variable is not set."
160 | fi
161 |
162 | CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
163 |
164 | # traverses directory structure from process work directory to filesystem root
165 | # first directory with .mvn subdirectory is considered project base directory
166 | find_maven_basedir() {
167 |
168 | if [ -z "$1" ]
169 | then
170 | echo "Path not specified to find_maven_basedir"
171 | return 1
172 | fi
173 |
174 | basedir="$1"
175 | wdir="$1"
176 | while [ "$wdir" != '/' ] ; do
177 | if [ -d "$wdir"/.mvn ] ; then
178 | basedir=$wdir
179 | break
180 | fi
181 | # workaround for JBEAP-8937 (on Solaris 10/Sparc)
182 | if [ -d "${wdir}" ]; then
183 | wdir=`cd "$wdir/.."; pwd`
184 | fi
185 | # end of workaround
186 | done
187 | echo "${basedir}"
188 | }
189 |
190 | # concatenates all lines of a file
191 | concat_lines() {
192 | if [ -f "$1" ]; then
193 | echo "$(tr -s '\n' ' ' < "$1")"
194 | fi
195 | }
196 |
197 | BASE_DIR=`find_maven_basedir "$(pwd)"`
198 | if [ -z "$BASE_DIR" ]; then
199 | exit 1;
200 | fi
201 |
202 | ##########################################################################################
203 | # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
204 | # This allows using the maven wrapper in projects that prohibit checking in binary data.
205 | ##########################################################################################
206 | if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
207 | if [ "$MVNW_VERBOSE" = true ]; then
208 | echo "Found .mvn/wrapper/maven-wrapper.jar"
209 | fi
210 | else
211 | if [ "$MVNW_VERBOSE" = true ]; then
212 | echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
213 | fi
214 | if [ -n "$MVNW_REPOURL" ]; then
215 | jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
216 | else
217 | jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
218 | fi
219 | while IFS="=" read key value; do
220 | case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
221 | esac
222 | done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
223 | if [ "$MVNW_VERBOSE" = true ]; then
224 | echo "Downloading from: $jarUrl"
225 | fi
226 | wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
227 | if $cygwin; then
228 | wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
229 | fi
230 |
231 | if command -v wget > /dev/null; then
232 | if [ "$MVNW_VERBOSE" = true ]; then
233 | echo "Found wget ... using wget"
234 | fi
235 | if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
236 | wget "$jarUrl" -O "$wrapperJarPath"
237 | else
238 | wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
239 | fi
240 | elif command -v curl > /dev/null; then
241 | if [ "$MVNW_VERBOSE" = true ]; then
242 | echo "Found curl ... using curl"
243 | fi
244 | if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
245 | curl -o "$wrapperJarPath" "$jarUrl" -f
246 | else
247 | curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
248 | fi
249 |
250 | else
251 | if [ "$MVNW_VERBOSE" = true ]; then
252 | echo "Falling back to using Java to download"
253 | fi
254 | javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
255 | # For Cygwin, switch paths to Windows format before running javac
256 | if $cygwin; then
257 | javaClass=`cygpath --path --windows "$javaClass"`
258 | fi
259 | if [ -e "$javaClass" ]; then
260 | if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
261 | if [ "$MVNW_VERBOSE" = true ]; then
262 | echo " - Compiling MavenWrapperDownloader.java ..."
263 | fi
264 | # Compiling the Java class
265 | ("$JAVA_HOME/bin/javac" "$javaClass")
266 | fi
267 | if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
268 | # Running the downloader
269 | if [ "$MVNW_VERBOSE" = true ]; then
270 | echo " - Running MavenWrapperDownloader.java ..."
271 | fi
272 | ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
273 | fi
274 | fi
275 | fi
276 | fi
277 | ##########################################################################################
278 | # End of extension
279 | ##########################################################################################
280 |
281 | export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
282 | if [ "$MVNW_VERBOSE" = true ]; then
283 | echo $MAVEN_PROJECTBASEDIR
284 | fi
285 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
286 |
287 | # For Cygwin, switch paths to Windows format before running java
288 | if $cygwin; then
289 | [ -n "$M2_HOME" ] &&
290 | M2_HOME=`cygpath --path --windows "$M2_HOME"`
291 | [ -n "$JAVA_HOME" ] &&
292 | JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
293 | [ -n "$CLASSPATH" ] &&
294 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
295 | [ -n "$MAVEN_PROJECTBASEDIR" ] &&
296 | MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
297 | fi
298 |
299 | # Provide a "standardized" way to retrieve the CLI args that will
300 | # work with both Windows and non-Windows executions.
301 | MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
302 | export MAVEN_CMD_LINE_ARGS
303 |
304 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
305 |
306 | exec "$JAVACMD" \
307 | $MAVEN_OPTS \
308 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
309 | "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
310 | ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
311 |
--------------------------------------------------------------------------------
/supplierService/mvnw:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # ----------------------------------------------------------------------------
3 | # Licensed to the Apache Software Foundation (ASF) under one
4 | # or more contributor license agreements. See the NOTICE file
5 | # distributed with this work for additional information
6 | # regarding copyright ownership. The ASF licenses this file
7 | # to you under the Apache License, Version 2.0 (the
8 | # "License"); you may not use this file except in compliance
9 | # with the License. You may obtain a copy of the License at
10 | #
11 | # https://www.apache.org/licenses/LICENSE-2.0
12 | #
13 | # Unless required by applicable law or agreed to in writing,
14 | # software distributed under the License is distributed on an
15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 | # KIND, either express or implied. See the License for the
17 | # specific language governing permissions and limitations
18 | # under the License.
19 | # ----------------------------------------------------------------------------
20 |
21 | # ----------------------------------------------------------------------------
22 | # Maven Start Up Batch script
23 | #
24 | # Required ENV vars:
25 | # ------------------
26 | # JAVA_HOME - location of a JDK home dir
27 | #
28 | # Optional ENV vars
29 | # -----------------
30 | # M2_HOME - location of maven2's installed home dir
31 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven
32 | # e.g. to debug Maven itself, use
33 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
34 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files
35 | # ----------------------------------------------------------------------------
36 |
37 | if [ -z "$MAVEN_SKIP_RC" ] ; then
38 |
39 | if [ -f /etc/mavenrc ] ; then
40 | . /etc/mavenrc
41 | fi
42 |
43 | if [ -f "$HOME/.mavenrc" ] ; then
44 | . "$HOME/.mavenrc"
45 | fi
46 |
47 | fi
48 |
49 | # OS specific support. $var _must_ be set to either true or false.
50 | cygwin=false;
51 | darwin=false;
52 | mingw=false
53 | case "`uname`" in
54 | CYGWIN*) cygwin=true ;;
55 | MINGW*) mingw=true;;
56 | Darwin*) darwin=true
57 | # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
58 | # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
59 | if [ -z "$JAVA_HOME" ]; then
60 | if [ -x "/usr/libexec/java_home" ]; then
61 | export JAVA_HOME="`/usr/libexec/java_home`"
62 | else
63 | export JAVA_HOME="/Library/Java/Home"
64 | fi
65 | fi
66 | ;;
67 | esac
68 |
69 | if [ -z "$JAVA_HOME" ] ; then
70 | if [ -r /etc/gentoo-release ] ; then
71 | JAVA_HOME=`java-config --jre-home`
72 | fi
73 | fi
74 |
75 | if [ -z "$M2_HOME" ] ; then
76 | ## resolve links - $0 may be a link to maven's home
77 | PRG="$0"
78 |
79 | # need this for relative symlinks
80 | while [ -h "$PRG" ] ; do
81 | ls=`ls -ld "$PRG"`
82 | link=`expr "$ls" : '.*-> \(.*\)$'`
83 | if expr "$link" : '/.*' > /dev/null; then
84 | PRG="$link"
85 | else
86 | PRG="`dirname "$PRG"`/$link"
87 | fi
88 | done
89 |
90 | saveddir=`pwd`
91 |
92 | M2_HOME=`dirname "$PRG"`/..
93 |
94 | # make it fully qualified
95 | M2_HOME=`cd "$M2_HOME" && pwd`
96 |
97 | cd "$saveddir"
98 | # echo Using m2 at $M2_HOME
99 | fi
100 |
101 | # For Cygwin, ensure paths are in UNIX format before anything is touched
102 | if $cygwin ; then
103 | [ -n "$M2_HOME" ] &&
104 | M2_HOME=`cygpath --unix "$M2_HOME"`
105 | [ -n "$JAVA_HOME" ] &&
106 | JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
107 | [ -n "$CLASSPATH" ] &&
108 | CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
109 | fi
110 |
111 | # For Mingw, ensure paths are in UNIX format before anything is touched
112 | if $mingw ; then
113 | [ -n "$M2_HOME" ] &&
114 | M2_HOME="`(cd "$M2_HOME"; pwd)`"
115 | [ -n "$JAVA_HOME" ] &&
116 | JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
117 | fi
118 |
119 | if [ -z "$JAVA_HOME" ]; then
120 | javaExecutable="`which javac`"
121 | if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
122 | # readlink(1) is not available as standard on Solaris 10.
123 | readLink=`which readlink`
124 | if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
125 | if $darwin ; then
126 | javaHome="`dirname \"$javaExecutable\"`"
127 | javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
128 | else
129 | javaExecutable="`readlink -f \"$javaExecutable\"`"
130 | fi
131 | javaHome="`dirname \"$javaExecutable\"`"
132 | javaHome=`expr "$javaHome" : '\(.*\)/bin'`
133 | JAVA_HOME="$javaHome"
134 | export JAVA_HOME
135 | fi
136 | fi
137 | fi
138 |
139 | if [ -z "$JAVACMD" ] ; then
140 | if [ -n "$JAVA_HOME" ] ; then
141 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
142 | # IBM's JDK on AIX uses strange locations for the executables
143 | JAVACMD="$JAVA_HOME/jre/sh/java"
144 | else
145 | JAVACMD="$JAVA_HOME/bin/java"
146 | fi
147 | else
148 | JAVACMD="`which java`"
149 | fi
150 | fi
151 |
152 | if [ ! -x "$JAVACMD" ] ; then
153 | echo "Error: JAVA_HOME is not defined correctly." >&2
154 | echo " We cannot execute $JAVACMD" >&2
155 | exit 1
156 | fi
157 |
158 | if [ -z "$JAVA_HOME" ] ; then
159 | echo "Warning: JAVA_HOME environment variable is not set."
160 | fi
161 |
162 | CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
163 |
164 | # traverses directory structure from process work directory to filesystem root
165 | # first directory with .mvn subdirectory is considered project base directory
166 | find_maven_basedir() {
167 |
168 | if [ -z "$1" ]
169 | then
170 | echo "Path not specified to find_maven_basedir"
171 | return 1
172 | fi
173 |
174 | basedir="$1"
175 | wdir="$1"
176 | while [ "$wdir" != '/' ] ; do
177 | if [ -d "$wdir"/.mvn ] ; then
178 | basedir=$wdir
179 | break
180 | fi
181 | # workaround for JBEAP-8937 (on Solaris 10/Sparc)
182 | if [ -d "${wdir}" ]; then
183 | wdir=`cd "$wdir/.."; pwd`
184 | fi
185 | # end of workaround
186 | done
187 | echo "${basedir}"
188 | }
189 |
190 | # concatenates all lines of a file
191 | concat_lines() {
192 | if [ -f "$1" ]; then
193 | echo "$(tr -s '\n' ' ' < "$1")"
194 | fi
195 | }
196 |
197 | BASE_DIR=`find_maven_basedir "$(pwd)"`
198 | if [ -z "$BASE_DIR" ]; then
199 | exit 1;
200 | fi
201 |
202 | ##########################################################################################
203 | # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
204 | # This allows using the maven wrapper in projects that prohibit checking in binary data.
205 | ##########################################################################################
206 | if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
207 | if [ "$MVNW_VERBOSE" = true ]; then
208 | echo "Found .mvn/wrapper/maven-wrapper.jar"
209 | fi
210 | else
211 | if [ "$MVNW_VERBOSE" = true ]; then
212 | echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
213 | fi
214 | if [ -n "$MVNW_REPOURL" ]; then
215 | jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
216 | else
217 | jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
218 | fi
219 | while IFS="=" read key value; do
220 | case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
221 | esac
222 | done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
223 | if [ "$MVNW_VERBOSE" = true ]; then
224 | echo "Downloading from: $jarUrl"
225 | fi
226 | wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
227 | if $cygwin; then
228 | wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
229 | fi
230 |
231 | if command -v wget > /dev/null; then
232 | if [ "$MVNW_VERBOSE" = true ]; then
233 | echo "Found wget ... using wget"
234 | fi
235 | if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
236 | wget "$jarUrl" -O "$wrapperJarPath"
237 | else
238 | wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
239 | fi
240 | elif command -v curl > /dev/null; then
241 | if [ "$MVNW_VERBOSE" = true ]; then
242 | echo "Found curl ... using curl"
243 | fi
244 | if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
245 | curl -o "$wrapperJarPath" "$jarUrl" -f
246 | else
247 | curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
248 | fi
249 |
250 | else
251 | if [ "$MVNW_VERBOSE" = true ]; then
252 | echo "Falling back to using Java to download"
253 | fi
254 | javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
255 | # For Cygwin, switch paths to Windows format before running javac
256 | if $cygwin; then
257 | javaClass=`cygpath --path --windows "$javaClass"`
258 | fi
259 | if [ -e "$javaClass" ]; then
260 | if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
261 | if [ "$MVNW_VERBOSE" = true ]; then
262 | echo " - Compiling MavenWrapperDownloader.java ..."
263 | fi
264 | # Compiling the Java class
265 | ("$JAVA_HOME/bin/javac" "$javaClass")
266 | fi
267 | if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
268 | # Running the downloader
269 | if [ "$MVNW_VERBOSE" = true ]; then
270 | echo " - Running MavenWrapperDownloader.java ..."
271 | fi
272 | ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
273 | fi
274 | fi
275 | fi
276 | fi
277 | ##########################################################################################
278 | # End of extension
279 | ##########################################################################################
280 |
281 | export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
282 | if [ "$MVNW_VERBOSE" = true ]; then
283 | echo $MAVEN_PROJECTBASEDIR
284 | fi
285 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
286 |
287 | # For Cygwin, switch paths to Windows format before running java
288 | if $cygwin; then
289 | [ -n "$M2_HOME" ] &&
290 | M2_HOME=`cygpath --path --windows "$M2_HOME"`
291 | [ -n "$JAVA_HOME" ] &&
292 | JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
293 | [ -n "$CLASSPATH" ] &&
294 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
295 | [ -n "$MAVEN_PROJECTBASEDIR" ] &&
296 | MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
297 | fi
298 |
299 | # Provide a "standardized" way to retrieve the CLI args that will
300 | # work with both Windows and non-Windows executions.
301 | MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
302 | export MAVEN_CMD_LINE_ARGS
303 |
304 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
305 |
306 | exec "$JAVACMD" \
307 | $MAVEN_OPTS \
308 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
309 | "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
310 | ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
311 |
--------------------------------------------------------------------------------