Skip to content

Commit

Permalink
Add basic auth for backend.
Browse files Browse the repository at this point in the history
  • Loading branch information
SergeyAkkuratov committed Jun 16, 2024
1 parent a2b2f4e commit b43c0cc
Show file tree
Hide file tree
Showing 11 changed files with 144 additions and 2 deletions.
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# JetBrains IDEA project settings folder
.idea

# VSCode project settings
.VSCode

# Compiled class file
*.class

Expand Down Expand Up @@ -31,3 +34,7 @@ replay_pid*

# Ignore Gradle build output directory
build
bin

# Ignore test results
allure-results
20 changes: 19 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,19 @@
# ZucchiniLauncher
# ZucchiniLauncher

Система запуска автоматизированных тестов "Zucchini Launcher" — это инструмент для создания, запуска, мониторинга
выполнения и предоставление результатов автоматизированного тестирования.
Система должна обладать следующей функциональностью:

1. Авторизация: пользователь должен авторизовываться в системе, иметь одну из ролей, иметь доступ к функциональности,
согласно роли, доступ к странице настроек.
2. Создание тестовых сценариев: пользователь должен иметь возможность создавать тестовые сценарии в текстовом редакторе
и сохранять их на сервере.
3. Просмотр и редактирование тестовых сценариев: пользователь должен иметь возможность просматривать существующее
сценарии и редактировать их текст.
4. Запуск тестовых сценариев: пользователь должен иметь возможность гибкого запуска тестовых сценариев из каталога.
5. Мониторинг текущих запусков: пользователь должен иметь возможность видеть текущее состояние запусков в системе –
какие сценарии запущены, какие в очереди, какие завершены. В зависимости от роли пользователь может управлять
состоянием сценария (останавливать, повышать приоритет и т.д.).
6. Просмотр результатов: пользователь должен иметь возможность просматривать результаты каждого завершенного запуска и
тестового сценария.
Системе будет иметь серверную и клиентскую часть.
4 changes: 3 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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")

Expand Down
17 changes: 17 additions & 0 deletions src/main/java/ru/sakkuratov/autotests/configuration/MvcConfig.java
Original file line number Diff line number Diff line change
@@ -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");
}

}
Original file line number Diff line number Diff line change
@@ -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);
}
}
13 changes: 13 additions & 0 deletions src/main/resources/static/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<title>Zucchini Launcher</title>
</head>
<body>
<div class="main">
<h3>Hello!</h3>
</div>
</body>
</html>
Empty file.
7 changes: 7 additions & 0 deletions src/main/resources/static/style.css
Original file line number Diff line number Diff line change
@@ -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%;
}
13 changes: 13 additions & 0 deletions src/main/resources/templates/hello.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity6"
xmlns:th="https://www.thymeleaf.org">
<head>
<title>Hello World!</title>
</head>
<body>
<h1 th:inline="text">Hello <span sec:authentication="name" th:remove="tag">thymeleaf</span>!</h1>
<form method="post" th:action="@{/logout}">
<input type="submit" value="Sign Out"/>
</form>
</body>
</html>
11 changes: 11 additions & 0 deletions src/main/resources/templates/home.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org">
<head>
<title>Spring Security Example</title>
</head>
<body>
<h1>Welcome!</h1>

<p>Click <a th:href="@{/hello}">here</a> to see a greeting.</p>
</body>
</html>
19 changes: 19 additions & 0 deletions src/main/resources/templates/login.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org">
<head>
<title>Spring Security Example </title>
</head>
<body>
<div th:if="${param.error}">
Invalid username and password.
</div>
<div th:if="${param.logout}">
You have been logged out.
</div>
<form method="post" th:action="@{/login}">
<div><label> User Name : <input name="username" type="text"/> </label></div>
<div><label> Password: <input name="password" type="password"/> </label></div>
<div><input type="submit" value="Sign In"/></div>
</form>
</body>
</html>

0 comments on commit b43c0cc

Please sign in to comment.