Skip to content

Commit

Permalink
Hotfix
Browse files Browse the repository at this point in the history
  • Loading branch information
iwokonl committed Jun 6, 2024
1 parent e8d80b7 commit f9708b5
Show file tree
Hide file tree
Showing 76 changed files with 763 additions and 650 deletions.
101 changes: 63 additions & 38 deletions Back/micro-services/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,41 +2,43 @@ Jeśli tworzysz nowy serwis to dodaj: config client, eureka discovery client, sp

https://www.youtube.com/watch?v=KJ0cSvYj41c&t=3407s
Róbcie z tego bo amen XD

# Spis treści
- [README Angulara](https://github.com/iwokonl/Kantor/tree/main/Front/kantor-angular)

- [README Główne](https://github.com/iwokonl/Kantor)
- [README Angulara](https://github.com/iwokonl/Kantor/tree/main/Front/kantor-angular)

- [README Główne](https://github.com/iwokonl/Kantor)


- [Podstawowe serwisy dla mikrousług](#podstawowe-serwisy-dla-mikrousług)
- [Konfiguracja serwisu `Config`](#konfiguracja-serwisu-config)
- [Konfiguracja serwisu `Discovery`](#konfiguracja-serwisu-discovery)
- [Konfiguracja serwisu `Gateway`](#konfiguracja-serwisu-gateway)
- [Security w `Gateway`](#security-w-gateway)
- [Konfiguracja serwisu `Config`](#konfiguracja-serwisu-config)
- [Konfiguracja serwisu `Discovery`](#konfiguracja-serwisu-discovery)
- [Konfiguracja serwisu `Gateway`](#konfiguracja-serwisu-gateway)
- [Security w `Gateway`](#security-w-gateway)
- [Tworzenie nowego serwisu](#tworzenie-nowego-serwisu)
- [Komunikacja między mikrousługami](#komunikacja-między-mikrousługami)
- [Kod Security dla mikrousług](#kod-security-dla-mikrousług)
- [Komunikacja między mikrousługami](#komunikacja-między-mikrousługami)
- [Kod Security dla mikrousług](#kod-security-dla-mikrousług)
- [Projekt Mikrousług](#projekt-mikrousług)
- [Usługi](#usługi)
- [Wymagania](#wymagania)
- [Uruchomienie projektu](#uruchomienie-projektu)
- [Testowanie](#testowanie)
- [Dokumentacja](#dokumentacja)
- [Wsparcie](#wsparcie)
- [Licencja](#licencja)

- [Usługi](#usługi)
- [Wymagania](#wymagania)
- [Uruchomienie projektu](#uruchomienie-projektu)
- [Testowanie](#testowanie)
- [Dokumentacja](#dokumentacja)
- [Wsparcie](#wsparcie)
- [Licencja](#licencja)

# Podstawowe serwisy dla mikrousług

- `Gateway` - serwis odpowiedzialny za przekierowywanie zapytań do odpowiednich mikrousług.

- `Discovery` - serwis odpowiedzialny za odkrywanie mikrousług.

- `Config` - serwis odpowiedzialny za konfigurację mikrousług.
- `Config` - serwis odpowiedzialny za konfigurację mikrousług.


### Konfiguracja serwisu `Config`

#### Dependency

```xml
Expand All @@ -53,6 +55,7 @@ Róbcie z tego bo amen XD
</dependency>
</dependencies>
```

- #### Config w `config-server`

```yaml
Expand All @@ -70,23 +73,27 @@ spring:
native:
search-locations: classpath:/configurations # Lokalizacja plików konfiguracyjnych
```
### Konfiguracja serwisu `Discovery`
### Konfiguracja serwisu `Discovery`

- #### Dependency

```xml
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
Expand Down Expand Up @@ -124,7 +131,9 @@ spring:
import: optional:configserver:http://localhost:8888
```


### Konfiguracja serwisu `Gateway`

- #### Dependency
Expand All @@ -136,28 +145,28 @@ spring:
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway-mvc</artifactId>
</dependency>
<!-- Ewentualnie dla aplikacji reaktywnych-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-gateway</artifactId>-->
<!-- </dependency>-->
<dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
Expand Down Expand Up @@ -210,18 +219,21 @@ spring:
import: optional:configserver:http://localhost:8888
```


- ### Security w `Gateway`

Aby dodać możliwość autentykacji tokenem JWT trzeba w `pom.xml` dodać zależność:

```xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
Expand All @@ -234,9 +246,8 @@ Aby dodać możliwość autentykacji tokenem JWT trzeba w `pom.xml` dodać zale

Następnie stworzyć klasę `SecurityConfig` i dodać konfigurację:



```java
@RequiredArgsConstructor
@Configuration
@EnableWebSecurity
Expand All @@ -254,18 +265,20 @@ public class SecurityConfig {
.addFilterBefore(jwtRedirectionFilter, BasicAuthenticationFilter.class)
.sessionManagement(customizer -> customizer.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // Wyłączenie zarządzania sesją
.authorizeHttpRequests(request -> // Konfiguracja zabezpieczeń
request.requestMatchers(HttpMethod.POST, "api/v1/auth/login","api/v1/auth/register", "/error", "api/v1/currencies/search","api/v1/currencyAccounts/error").permitAll() // Pozwala na wykonywanie zapytań POST na adresach: /login, /register
request.requestMatchers(HttpMethod.POST, "api/v1/auth/login", "api/v1/auth/register", "/error", "api/v1/currencies/search", "api/v1/currencyAccounts/error").permitAll() // Pozwala na wykonywanie zapytań POST na adresach: /login, /register
.requestMatchers(HttpMethod.GET).permitAll() // Pozwala na wykonywanie zapytań GET na adresach: /search/**
.anyRequest().authenticated()); // Wymaga autoryzacji dla pozostałych zapytań
return httpSecurity.build();
}
}
```

- ##### `JwtAuthFilter` - Jest odpowiedzialne za autoryzację tokenem JWT i jest.

Następnie stworzyć klasę `JwtAuthFilter` i dodać konfigurację:

```java
@RequiredArgsConstructor
public class JwtAuthFilter extends OncePerRequestFilter {
Expand Down Expand Up @@ -295,11 +308,13 @@ public class JwtAuthFilter extends OncePerRequestFilter {
}
}
```

- ##### `JwtRedirectionFilter` - Jest odpowiedzialne za przekierowywanie tokena JWT z serwisu do bramy tzn. że na danemy wywołanemu serwisowi zostanie dostarczony token JWT.

Następnie stworzyć klasę `JwtRedirectionFilter` i dodać konfigurację:

```java
@Component
public class JwtRedirectionFilter implements Filter {
Expand All @@ -315,11 +330,13 @@ public class JwtRedirectionFilter implements Filter {
}
}
```

- ##### `UserAuthProvider` - Jest odpowiedzialne za tworzenie i walidację tokena JWT.

- Następnie stworzyć klasę `UserAuthProvider` i dodać konfigurację:

```java
@RequiredArgsConstructor
@Component
public class UserAuthProvider {
Expand Down Expand Up @@ -366,7 +383,7 @@ public class UserAuthProvider {
return new UsernamePasswordAuthenticationToken(user, null, Collections.emptyList());
} catch (JWTVerificationException exception) {
if(exception.getMessage().contains("The Token has expired on")) {
if (exception.getMessage().contains("The Token has expired on")) {
DecodedJWT decodedJWT = JWT.decode(token);
UserDto user = UserDto.builder()
.username(decodedJWT.getIssuer())
Expand All @@ -378,16 +395,17 @@ public class UserAuthProvider {
.build();
String newToken = createToken(user);
return new UsernamePasswordAuthenticationToken(user, newToken, Collections.emptyList());
}
else {
} else {
throw new AppExeption("Does not apply to token", HttpStatus.UNAUTHORIZED);
}
}
}
}
```


## Tworzenie nowego serwisu

Aby stworzyć nowy mikroserwis trzeba dodać do niego
Expand All @@ -402,6 +420,7 @@ zależności `config client`, `eureka discovery client`, `spring boot actuator`
### Dependency

```xml
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
Expand All @@ -428,7 +447,7 @@ spring:
name: NAZWA_TWOJEGO_SERWISU
config:
import: optional:configserver:http://localhost:XXXX # Optional znaczy to że jeśli nie znajdzie serwera konfiguracyjnego
# to nie zwróci błędu i będzie działać z domyślnymi wartościami(czyli z tego pliku).
# to nie zwróci błędu i będzie działać z domyślnymi wartościami(czyli z tego pliku).
# Zamień XXXX na port serwera konfiguracyjnego.
```

Expand All @@ -451,7 +470,9 @@ management:
sampling:
probability: 1.0
```


## Komunikacja między mikrousługami

Jeśli chcesz aby mikrousługi komunikowały się ze sobą, musisz dodać odpowiednie zależności i konfiguracje do każdej z
Expand Down Expand Up @@ -543,7 +564,9 @@ public interface CurrencyClient {
Optional<CurrencyDto> getexampleById(@PathVariable("id") Long id);
}
```


## Kod Security dla mikrousług

Poniżej znajdują się dwie klasy które trzeba dodać jeśli chcesz aby kominikacja odbywała się tylko między gateway i
Expand Down Expand Up @@ -592,7 +615,9 @@ public class IpAuthorizationManager implements AuthorizationManager<RequestAutho
}
}
```


# Projekt Mikrousług

Ten projekt to zestaw mikrousług zbudowanych przy użyciu Java, Spring Boot i Maven.
Expand Down
19 changes: 8 additions & 11 deletions Front/kantor-angular/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
10. [Rozwój](#rozwój)

## Opis projektu

Projekt kantoru wymiany walut online. Aplikacja pozwala użytkownikom na przeglądanie aktualnych kursów walut, wykresów historycznych kursów, zakładanie kont walutowych, przeprowadzanie transakcji walutowych i zarządzanie swoim kontem. Użytkownicy mogą również zarejestrować się, zalogować się i wylogować z aplikacji.
Doładowanie konta oraz wypłata środków jest możliwa po zalogowaniu się do aplikacji.
W obecnej wersji, kursy walut są pobierane z API NBP, a użytkownicy mogą przeglądać kursy walut z różnych krajów.
Expand All @@ -27,7 +28,6 @@ Wszystkie operacje są zapisywane w bazie danych, a użytkownik może sprawdzić
Aplikacja jest napisana w Angularze, wykorzystuje TypeScript, SCSS, Bootstrap, Axios, Chart.js i inne technologie.
Jest to projekt edukacyjny, który ma na celu nauczenie się tworzenia aplikacji internetowych za pomocą Angulara i innych technologii webowych.


## Technologie

1. **Angular**: Jest to platforma do budowy aplikacji internetowych. Umożliwia tworzenie skomplikowanych interfejsów użytkownika za pomocą komponentów i szablonów. Angular jest napisany w TypeScript, co ułatwia zarządzanie kodem i debugowanie.
Expand All @@ -50,8 +50,8 @@ Jest to projekt edukacyjny, który ma na celu nauczenie się tworzenia aplikacji

11. **Snackbar**: Jest to komponent Angulara, który wyświetla krótkie powiadomienia na dole ekranu. Jest to przydatne do wyświetlania informacji zwrotnych dla użytkownika.


## Instalacja

Instalacja NPM i Angular CLI:

1. **Node.js i NPM**: Angular wymaga Node.js i NPM (Node Package Manager) do zarządzania zależnościami. Możesz zainstalować Node.js i NPM odwiedzając stronę [Node.js](https://nodejs.org/en/download/) i pobierając odpowiedni instalator dla swojego systemu operacyjnego. Po zainstalowaniu Node.js, NPM zostanie zainstalowany automatycznie.
Expand All @@ -62,9 +62,8 @@ Instalacja NPM i Angular CLI:
npm install -g @angular/cli
```



## Uruchomienie

Uruchomienie projektu Angular:

Po zainstalowaniu Angular CLI i utworzeniu projektu Angular, możesz uruchomić swój projekt za pomocą polecenia `ng serve`. To polecenie uruchomi serwer deweloperski, który automatycznie odświeży twoją aplikację po każdej zmianie w plikach źródłowych.
Expand All @@ -83,13 +82,13 @@ npm start

Podobnie jak wcześniej, aplikacja będzie dostępna pod adresem `http://localhost:4200/` w przeglądarce.


## Testy

Dotychczas testy na frontendzie były wykonywane manualnie.
W przyszłości planujemy dodać testy jednostkowe i testy end-to-end do projektu.


## Komponenty

Komponenty z `app.module.ts`:

1. `AppComponent`: Jest to główny komponent aplikacji, który jest punktem wejścia dla innych komponentów.
Expand Down Expand Up @@ -122,9 +121,8 @@ Komponenty z `app.module.ts`:

15. `SettingsComponent`: Komponent odpowiedzialny za wyświetlanie ustawień.



## Serwisy

Plik `axios.service.ts` zawiera deklarację serwisu `AxiosService`, który jest serwisem Angulara. Serwis ten jest odpowiedzialny za zarządzanie autoryzacją użytkownika i wykonywanie żądań HTTP za pomocą biblioteki axios. Oto szczegółowy opis metod zadeklarowanych w tym serwisie:

1. `getAuthTocken()`: Ta metoda zwraca token autoryzacji zapisany w pamięci lokalnej przeglądarki. Jeśli token nie istnieje, zwraca `null`.
Expand All @@ -151,21 +149,20 @@ Inne serwisy

4. `user.service.ts`: Jest to serwis, który dostarcza metody do pobierania informacji o użytkowniku z backendu. Używa `HttpClient` do wykonywania żądań HTTP.


## Stylowanie

Postanowiliśmy zaprojektować całą stronę w ciemnej kolorystyce, ze wspólnym motywem dla wszystkich stron i kompnentów.
Próbujemy unikać gotowych rozwiązań pokroju Bootstrap i sami projektujemy od zera nasz design. Projekt designu i layoutu wykonany został w aplikacji Figma.
Stawiamy na nowoczesny wygląd z użyciem przezroczytych, rozmazanych ramek dających szklany wygląd.


## Zależności

[country-flag-emoji-polyfill](https://github.com/talkjs/country-flag-emoji-polyfill)
to oduł pozwalający na wyświetlanie emoji flagi dla danego kodu kraju. Używamy go w aplikacji do wyświetlania flagi dla danej waluty.
Jest użyty w projekcie z powodu braku wsparcia dla emoji flag w niektórych przeglądarkach na Windowsie.


## Rozwój

- Dodanie możliwości zmiany motywu kolorystycznego
- Dodanie możliwości zmiany języka
- Dodanie możliwości zmiany domyślnej waluty
Expand Down
Loading

0 comments on commit f9708b5

Please sign in to comment.