From b43c0cc81a382605760de89d4c73602b47f2b213 Mon Sep 17 00:00:00 2001 From: Sergey Akkuratov Date: Sun, 16 Jun 2024 16:25:35 +0300 Subject: [PATCH] Add basic auth for backend. --- .gitignore | 7 ++++ README.md | 20 ++++++++++- build.gradle.kts | 4 ++- .../autotests/configuration/MvcConfig.java | 17 +++++++++ .../configuration/WebSecurityConfig.java | 35 +++++++++++++++++++ src/main/resources/static/index.html | 13 +++++++ src/main/resources/static/index.ts | 0 src/main/resources/static/style.css | 7 ++++ src/main/resources/templates/hello.html | 13 +++++++ src/main/resources/templates/home.html | 11 ++++++ src/main/resources/templates/login.html | 19 ++++++++++ 11 files changed, 144 insertions(+), 2 deletions(-) create mode 100644 src/main/java/ru/sakkuratov/autotests/configuration/MvcConfig.java create mode 100644 src/main/java/ru/sakkuratov/autotests/configuration/WebSecurityConfig.java create mode 100644 src/main/resources/static/index.html create mode 100644 src/main/resources/static/index.ts create mode 100644 src/main/resources/static/style.css create mode 100644 src/main/resources/templates/hello.html create mode 100644 src/main/resources/templates/home.html create mode 100644 src/main/resources/templates/login.html diff --git a/.gitignore b/.gitignore index 5876486..cfb2c25 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ # JetBrains IDEA project settings folder .idea +# VSCode project settings +.VSCode + # Compiled class file *.class @@ -31,3 +34,7 @@ replay_pid* # Ignore Gradle build output directory build +bin + +# Ignore test results +allure-results diff --git a/README.md b/README.md index 4023b81..583c16b 100644 --- a/README.md +++ b/README.md @@ -1 +1,19 @@ -# ZucchiniLauncher \ No newline at end of file +# ZucchiniLauncher + +Система запуска автоматизированных тестов "Zucchini Launcher" — это инструмент для создания, запуска, мониторинга +выполнения и предоставление результатов автоматизированного тестирования. +Система должна обладать следующей функциональностью: + +1. Авторизация: пользователь должен авторизовываться в системе, иметь одну из ролей, иметь доступ к функциональности, + согласно роли, доступ к странице настроек. +2. Создание тестовых сценариев: пользователь должен иметь возможность создавать тестовые сценарии в текстовом редакторе + и сохранять их на сервере. +3. Просмотр и редактирование тестовых сценариев: пользователь должен иметь возможность просматривать существующее + сценарии и редактировать их текст. +4. Запуск тестовых сценариев: пользователь должен иметь возможность гибкого запуска тестовых сценариев из каталога. +5. Мониторинг текущих запусков: пользователь должен иметь возможность видеть текущее состояние запусков в системе – + какие сценарии запущены, какие в очереди, какие завершены. В зависимости от роли пользователь может управлять + состоянием сценария (останавливать, повышать приоритет и т.д.). +6. Просмотр результатов: пользователь должен иметь возможность просматривать результаты каждого завершенного запуска и + тестового сценария. + Системе будет иметь серверную и клиентскую часть. \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 19a528f..996c388 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -23,8 +23,10 @@ repositories { dependencies { // This dependency is used by the application. implementation(libs.guava) - implementation("org.springframework.boot:spring-boot-starter-data-mongodb") + //implementation("org.springframework.boot:spring-boot-starter-data-mongodb") implementation("org.springframework.boot:spring-boot-starter-web") + implementation("org.springframework.boot:spring-boot-starter-security") + implementation("org.springframework.boot:spring-boot-starter-thymeleaf") implementation("io.cucumber:cucumber-java:7.15.0") implementation("io.qameta.allure:allure-cucumber7-jvm:2.25.0") diff --git a/src/main/java/ru/sakkuratov/autotests/configuration/MvcConfig.java b/src/main/java/ru/sakkuratov/autotests/configuration/MvcConfig.java new file mode 100644 index 0000000..91819eb --- /dev/null +++ b/src/main/java/ru/sakkuratov/autotests/configuration/MvcConfig.java @@ -0,0 +1,17 @@ +package ru.sakkuratov.autotests.configuration; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class MvcConfig implements WebMvcConfigurer { + + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/home").setViewName("home"); + registry.addViewController("/").setViewName("home"); + registry.addViewController("/hello").setViewName("hello"); + registry.addViewController("/login").setViewName("login"); + } + +} \ No newline at end of file diff --git a/src/main/java/ru/sakkuratov/autotests/configuration/WebSecurityConfig.java b/src/main/java/ru/sakkuratov/autotests/configuration/WebSecurityConfig.java new file mode 100644 index 0000000..fb38ff5 --- /dev/null +++ b/src/main/java/ru/sakkuratov/autotests/configuration/WebSecurityConfig.java @@ -0,0 +1,35 @@ +package ru.sakkuratov.autotests.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configurers.LogoutConfigurer; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.security.web.SecurityFilterChain; + +@Configuration +@EnableWebSecurity +public class WebSecurityConfig { + + @Bean + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + http.authorizeHttpRequests((requests) -> requests.requestMatchers("/", "/home").permitAll().anyRequest().authenticated()) + .formLogin((form) -> form.loginPage("/login").permitAll()).logout(LogoutConfigurer::permitAll); + + return http.build(); + } + + @Bean + public UserDetailsService userDetailsService() { + UserDetails user = User.withUsername("admin") + .password("{bcrypt}$2a$10$S57Wxq3Abj6WaXq5BzY5heCrYAgaHy5ZEqIO5zGWsb8LSXR8j.za.") + .roles("ADMIN") + .build(); + + return new InMemoryUserDetailsManager(user); + } +} diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html new file mode 100644 index 0000000..7e370f5 --- /dev/null +++ b/src/main/resources/static/index.html @@ -0,0 +1,13 @@ + + + + + + Zucchini Launcher + + +
+

Hello!

+
+ + diff --git a/src/main/resources/static/index.ts b/src/main/resources/static/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/static/style.css b/src/main/resources/static/style.css new file mode 100644 index 0000000..9875fa3 --- /dev/null +++ b/src/main/resources/static/style.css @@ -0,0 +1,7 @@ +.main { + overflow: auto; + margin: 0 auto; + padding: 2rem 2rem; + border: 3px solid #333333; + border-radius: 2% 6% 5% 4% / 1% 1% 2% 4%; +} diff --git a/src/main/resources/templates/hello.html b/src/main/resources/templates/hello.html new file mode 100644 index 0000000..770b271 --- /dev/null +++ b/src/main/resources/templates/hello.html @@ -0,0 +1,13 @@ + + + + Hello World! + + +

Hello thymeleaf!

+
+ +
+ + \ No newline at end of file diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html new file mode 100644 index 0000000..11df00b --- /dev/null +++ b/src/main/resources/templates/home.html @@ -0,0 +1,11 @@ + + + + Spring Security Example + + +

Welcome!

+ +

Click here to see a greeting.

+ + \ No newline at end of file diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html new file mode 100644 index 0000000..16c86a0 --- /dev/null +++ b/src/main/resources/templates/login.html @@ -0,0 +1,19 @@ + + + + Spring Security Example + + +
+ Invalid username and password. +
+
+ You have been logged out. +
+
+
+
+
+
+ + \ No newline at end of file