diff --git a/.env b/.env index 20bfb0a74c8e88ae613364a837696f2fba800197..2f5c42addba74377bad9a28673597bdbadb88071 100644 --- a/.env +++ b/.env @@ -1,9 +1,42 @@ -AUTH_SERVICE_HOSTNAME=auth-api -USERS_SERVICE_HOSTNAME=users-api -HOTELS_SERVICE_HOSTNAME=hotels-api -BOOKINGS_SERVICE_HOSTNAME=bookings-api -ROOMS_BOOKING_SERVICE_HOSTNAME=rooms-booking-api -DB_SERVICE_HOSTNAME=RoomsBooking-database -DB_DATABASE_NAME=RoomsBooking -DB_USER=user -BD_PASSWORD=password \ No newline at end of file +####################################### +# Environment +####################################### + +## Meter aquà cosas sobre las keys del token y esas mierdas + +####################################### +# APIs +####################################### +## AUTH +API_AUTH_ENDPOINT=/users +API_AUTH_HOSTNAME=auth-api +API_AUTH_PORT=8201 +API_AUTH_URL=http://$API_AUTH_HOSTNAME:$API_AUTH_PORT$API_AUTH_ENDPOINT +## Bookings +API_BOOKINGS_ENDPOINT=/bookings +API_BOOKINGS_HOSTNAME=bookings-api +API_BOOKINGS_PORT=4201 +API_BOOKINGS_URL=http://$API_BOOKINGS_HOSTNAME:$API_BOOKINGS_PORT$API_BOOKINGS_ENDPOINT +## Hotels +API_HOTELS_ENDPOINT=/hotels +API_HOTELS_HOSTNAME=hotels-api +API_HOTELS_PORT=8301 +API_HOTELS_URL=http://$API_HOTELS_HOSTNAME:$API_HOTELS_PORT$API_HOTELS_ENDPOINT +## Users +API_USERS_ENDPOINT=/users +API_USERS_HOSTNAME=users-api +API_USERS_PORT=8201 +API_USERS_URL=http://$API_USERS_HOSTNAME:$API_USERS_PORT$API_USERS_ENDPOINT +# +####################################### +# Databases +####################################### +## DB Bookings +DB_BOOKINGS_DATABASE=Bookings +DB_BOOKINGS_HOSTNAME=BookingsDB +## DB Hotels +DB_HOTELS_DATABASE=Hotels +DB_HOTELS_HOSTNAME=HotelsDB +## DB Users +DB_USERS_DATABASE=Users +DB_USERS_HOSTNAME=UsersDB diff --git a/angular/RestClient/src/environments/environment.prod.ts b/angular/RestClient/src/environments/environment.prod.ts index 4449314c617cbe840dd565f8465279c597b0dd0a..db340146972d3c6f6e2ed09dc8821c12d6de1835 100644 --- a/angular/RestClient/src/environments/environment.prod.ts +++ b/angular/RestClient/src/environments/environment.prod.ts @@ -1,18 +1,9 @@ -// const monolithUrl = 'http://rooms-booking-api:8080'; - -// export const environment = { -// production: true, -// authAPI: 'http://auth-api:8101', -// userAPI: `http://${monolithUrl}/users`, -// hotelAPI: `http://${monolithUrl}/hotels`, -// bookingAPI: `http://${monolithUrl}/bookings`, -// }; -const monolithUrl = 'localhost:8080'; +const gateWayUrl = 'localhost:8000'; // kong export const environment = { - production: false, - authAPI: 'http://localhost:8101', - userAPI: `http://${monolithUrl}/users`, - hotelAPI: `http://${monolithUrl}/hotels`, - bookingAPI: `http://${monolithUrl}/bookings`, + production: true, + authAPI: `http://${gateWayUrl}/auth`, + userAPI: `http://${gateWayUrl}/users`, + hotelAPI: `http://${gateWayUrl}/hotels`, + bookingAPI: `http://${gateWayUrl}/bookings`, }; diff --git a/angular/RestClient/src/environments/environment.ts b/angular/RestClient/src/environments/environment.ts index 4264ad5b8fcbc528de02ea9e038a19aa2f617254..a9915d12a1059fbdaf23b45d29da012625d595ec 100644 --- a/angular/RestClient/src/environments/environment.ts +++ b/angular/RestClient/src/environments/environment.ts @@ -1,9 +1,8 @@ -const monolithUrl = 'localhost:8080'; - +const developmentHost = 'localhost'; export const environment = { production: false, - authAPI: 'http://localhost:8101', - userAPI: `http://${monolithUrl}/users`, - hotelAPI: `http://${monolithUrl}/hotels`, - bookingAPI: `http://${monolithUrl}/bookings`, + authAPI: `http://${developmentHost}:8101`, + userAPI: `http://${developmentHost}:8201`, + hotelAPI: `http://${developmentHost}:8301`, + bookingAPI: `http://${developmentHost}:8401`, }; diff --git a/docker-compose.yml b/docker-compose.yml index 6f86e46bad45d0d7f2a56bc0ce180ea343d0353e..57fc680a4356510f5cb4d24b3d76d106377c2bf8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,62 +1,239 @@ volumes: kong_data: {} users_data: {} + hotels_data: {} + bookings_data: {} -networks: - kong-net: {} +networks: #Red interna para comunicar los servicios + kong-net: services: + ####################################### + # Kong + ####################################### + + # Postgres: The database used by Kong + kong-database: + image: postgres:9.6 + container_DATABASE: kong-postgres + restart: on-failure + networks: + - kong-net + volumes: + - kong_data:/var/lib/postgresql/data + environment: + POSTGRES_USER: kong + POSTGRES_PASSWORD: ${KONG_PG_PASSWORD:-kong} + POSTGRES_DB: kong + ports: + - 5432:5432 + healthcheck: + test: [CMD, pg_isready, -U, kong] + interval: 30s + timeout: 30s + retries: 3 + + # Kong database migration + kong-migration: + image: ${KONG_DOCKER_TAG:-kong:latest} + command: kong migrations bootstrap + networks: + - kong-net + restart: on-failure + environment: + KONG_DATABASE: postgres + KONG_PG_HOST: kong-database + KONG_PG_DATABASE: kong + KONG_PG_USER: kong + KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-kong} + depends_on: + kong-database: + condition: service_healthy + + # Kong: The API Gateway + kong: + image: ${KONG_DOCKER_TAG:-kong:latest} + restart: on-failure + networks: + - kong-net + environment: + KONG_DATABASE: postgres + KONG_PG_HOST: kong-database + KONG_PG_DATABASE: kong + KONG_PG_USER: kong + KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-kong} + KONG_PROXY_LISTEN: 0.0.0.0:8000 + KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443 + KONG_ADMIN_LISTEN: 0.0.0.0:8001 + depends_on: + kong-database: + condition: service_healthy + healthcheck: + test: [CMD, kong, health] + interval: 10s + timeout: 10s + retries: 10 + ports: + - 8000:8000 + - 8001:8001 + - 8443:8443 + - 8444:8444 + + ####################################### + # Konga + ####################################### + + # Konga database prepare + konga-prepare: + image: pantsel/konga:latest + command: "-c prepare -a postgres -u postgresql://kong:${KONG_PG_PASSWORD:-kong}@kong-database:5432/konga" + networks: + - kong-net + restart: on-failure + depends_on: + kong-database: + condition: service_healthy + + # Konga: Kong GUI + konga: + image: pantsel/konga:latest + restart: always + networks: + - kong-net + environment: + DB_ADAPTER: postgres + DB_URI: postgresql://kong:${KONG_PG_PASSWORD:-kong}@kong-database:5432/konga + NODE_ENV: production + depends_on: + kong-database: + condition: service_healthy + ports: + - 1337:133 + + ####################################### + # APIs + ####################################### + Auth-API: image: auth-api-image - hostname: ${AUTH_SERVICE_HOSTNAME} + hostname: ${API_AUTH_HOSTNAME} build: context: ./java/services/auth dockerfile: Dockerfile restart: unless-stopped - ports: - - 8101:8101 networks: - kong-net environment: - SPRING_DATASOURCE_URL: jdbc:mysql://${DB_SERVICE_HOSTNAME}:3306/${DB_DATABASE_NAME}?createDatabaseIfNotExist=true + # TODO Meter kid y secret key + KID: ${JWT_KID} + SECRET_KEY: ${JWT_KID} + EXTERNAL_SERVICE_USERS_URL: ${API_USERS_URL}${API_USERS_ENDPOINT} depends_on: - - RoomsBooking-database + - Users-API - RoomsBooking-API: - image: rooms-booking-api-image - hostname: ${ROOMS_BOOKING_SERVICE_HOSTNAME} + Users-API: + image: users-api-image + hostname: ${API_USERS_HOSTNAME} build: - context: ./java/roomBooking + context: ./java/services/user dockerfile: Dockerfile restart: unless-stopped - ports: - - 8080:8080 networks: - kong-net environment: - SPRING_DATASOURCE_URL: jdbc:mysql://${DB_SERVICE_HOSTNAME}:3306/${DB_DATABASE_NAME}?createDatabaseIfNotExist=true + SPRING_DATASOURCE_URL: jdbc:mysql://${DB_USERS_HOSTNAME}:${DB_USERS_PORT:-3306}/${DB_USERS_DATABASE}?createDatabaseIfNotExist=true + EXTERNAL_SERVICE_USERS_URL: ${API_USERS_URL}${API_USERS_ENDPOINT} depends_on: - - RoomsBooking-database + - Users-DB - RoomsBooking-database: + Hotels-API: + image: hotels-api-image + hostname: ${API_HOTELS_HOSTNAME} + build: + context: ./java/services/hotels + dockerfile: Dockerfile + restart: unless-stopped + networks: + - kong-net + environment: + SPRING_DATASOURCE_URL: jdbc:mysql://${DB_HOTELS_HOSTNAME}:${DB_HOTELS_PORT:-3306}/${DB_HOTELS_DATABASE}?createDatabaseIfNotExist=true + depends_on: + - Hotels-DB + + Bookings-API: + image: bookings-api-image + hostname: ${API_BOOKINGS_HOSTNAME} + build: + context: ./java/services/bookings + dockerfile: Dockerfile + restart: unless-stopped + networks: + - kong-net + environment: + SPRING_DATASOURCE_URL: jdbc:mysql://${DB_BOOKINGS_HOSTNAME}:${DB_BOOKINGS_PORT:-3306}/${DB_BOOKINGS_DATABASE}?createDatabaseIfNotExist=true + depends_on: + - Users-API + - Hotels-API + - Bookings-DB + + ####################################### + # Databases + ####################################### + + Users-DB: image: mysql - hostname: ${DB_SERVICE_HOSTNAME} + hostname: ${DB_USERS_HOSTNAME} cap_add: - SYS_NICE restart: unless-stopped - ports: - - "3307:3306" networks: - kong-net volumes: - users_data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD: ClaveRoot - MYSQL_USER: user - MYSQL_PASSWORD: password - MYSQL_DATABASE: RoomsBooking + MYSQL_ROOT_PASSWORD: ${DB_CREDENTIALS_ROOT_PASSWORD:-ClaveRoot} + MYSQL_USER: ${DB_CREDENTIALS_USER:-user} + MYSQL_PASSWORD: ${DB_CREDENTIALS_PASSWORD:-password} + MYSQL_DATABASE: ${DB_USERS_DATABASE} + MYSQL_ROOT_HOST: "%" + + Hotels-DB: + image: mysql + hostname: ${DB_HOTELS_HOSTNAME} + cap_add: + - SYS_NICE + restart: unless-stopped + networks: + - kong-net + volumes: + - hotels_data:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: ${DB_CREDENTIALS_ROOT_PASSWORD:-ClaveRoot} + MYSQL_USER: ${DB_CREDENTIALS_USER:-user} + MYSQL_PASSWORD: ${DB_CREDENTIALS_PASSWORD:-password} + MYSQL_DATABASE: ${DB_HOTELS_DATABASE} + MYSQL_ROOT_HOST: "%" + + Bookings-DB: + image: mysql + hostname: ${DB_BOOKINGS_HOSTNAME} + cap_add: + - SYS_NICE + restart: unless-stopped + networks: + - kong-net + volumes: + - hotels_data:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: ${DB_CREDENTIALS_ROOT_PASSWORD:-ClaveRoot} + MYSQL_USER: ${DB_CREDENTIALS_USER:-user} + MYSQL_PASSWORD: ${DB_CREDENTIALS_PASSWORD:-password} + MYSQL_DATABASE: ${DB_BOOKINGS_DATABASE} MYSQL_ROOT_HOST: "%" + ####################################### + # Cliente Angular + ####################################### RoomsBooking-Web: image: roomsbooking-web-image build: @@ -67,7 +244,5 @@ services: - 4200:80 networks: - kong-net - environment: - SPRING_DATASOURCE_URL: jdbc:mysql://${DB_SERVICE_HOSTNAME}:3306/${DB_DATABASE_NAME}?createDatabaseIfNotExist=true depends_on: - RoomsBooking-database diff --git a/java/roomBooking/src/main/resources/application.properties b/java/roomBooking/src/main/resources/application.properties index e9a1304c8364b789ce008c161df0f98daf1238a9..89ab25392d73d4fc6438b130d7b9a616678fce52 100644 --- a/java/roomBooking/src/main/resources/application.properties +++ b/java/roomBooking/src/main/resources/application.properties @@ -5,7 +5,9 @@ spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/RoomsBooking?cre spring.datasource.username=user spring.datasource.password=password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.security.user.name=admin +spring.security.user.password=admin # Usar esto para alternar entre las exposición del room repository ya que no es necesario su uso pero por defecto, al no cubrir su ruta, se expone # spring.data.rest.base-path=false -external.services.auth.host=localhost:8101 \ No newline at end of file +external.services.auth.host=localhost:8101 diff --git a/java/services/auth/src/main/java/com/uva/authentication/api/UserAPI.java b/java/services/auth/src/main/java/com/uva/authentication/api/UserAPI.java index d4aa44728a593f54275339d99c9e603b20b802e9..4216aad5aa41f21f2fb31f520eff7d4db6554a5f 100644 --- a/java/services/auth/src/main/java/com/uva/authentication/api/UserAPI.java +++ b/java/services/auth/src/main/java/com/uva/authentication/api/UserAPI.java @@ -31,7 +31,7 @@ public class UserAPI { private final User USER = new User(-1, "admin", null, null, UserRol.ADMIN); private String getAccessToken() { - if (token == null || token.isEmpty() || jwtUtil.isTokenValid(token, USER)) { + if (token == null || token.isEmpty()) { token = jwtUtil.generateToken(USER); } return token;