diff --git a/build.gradle.kts b/build.gradle.kts index a7c5d57..62e9259 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,49 +1,51 @@ plugins { - java - id("org.springframework.boot") version "3.4.1" - id("io.spring.dependency-management") version "1.1.7" - id("com.vaadin") version "24.6.0" + java + id("org.springframework.boot") version "3.4.1" + id("io.spring.dependency-management") version "1.1.7" + id("com.vaadin") version "24.6.0" } group = "ru.vyatsu" version = "1.0.0" java { - toolchain { - languageVersion = JavaLanguageVersion.of(17) - } + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } } configurations { - compileOnly { - extendsFrom(configurations.annotationProcessor.get()) - } + compileOnly { + extendsFrom(configurations.annotationProcessor.get()) + } } repositories { - mavenCentral() + mavenCentral() } extra["vaadinVersion"] = "24.6.0" dependencies { - implementation("org.springframework.boot:spring-boot-starter-data-jpa") - implementation("org.springframework.boot:spring-boot-starter-web") - implementation("com.vaadin:vaadin-spring-boot-starter") - implementation("org.yaml:snakeyaml") - compileOnly("org.projectlombok:lombok") - annotationProcessor("org.projectlombok:lombok") - runtimeOnly("org.postgresql:postgresql") - testImplementation("org.springframework.boot:spring-boot-starter-test") - testRuntimeOnly("org.junit.platform:junit-platform-launcher") + implementation("org.springframework.boot:spring-boot-starter-data-jpa") + implementation("org.springframework.boot:spring-boot-starter-web") + implementation("com.vaadin:vaadin-spring-boot-starter") + implementation("org.springframework.boot:spring-boot-starter-oauth2-client") + + implementation("org.yaml:snakeyaml") + compileOnly("org.projectlombok:lombok") + annotationProcessor("org.projectlombok:lombok") + runtimeOnly("org.postgresql:postgresql") + testImplementation("org.springframework.boot:spring-boot-starter-test") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") } dependencyManagement { - imports { - mavenBom("com.vaadin:vaadin-bom:${property("vaadinVersion")}") - } + imports { + mavenBom("com.vaadin:vaadin-bom:${property("vaadinVersion")}") + } } tasks.withType { - useJUnitPlatform() + useJUnitPlatform() } diff --git a/src/main/java/ru/vyatsu/qr_access_admin/client/view/ClientView.java b/src/main/java/ru/vyatsu/qr_access_admin/client/view/ClientView.java index 8273cd4..2d10351 100644 --- a/src/main/java/ru/vyatsu/qr_access_admin/client/view/ClientView.java +++ b/src/main/java/ru/vyatsu/qr_access_admin/client/view/ClientView.java @@ -7,6 +7,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; +import jakarta.annotation.security.PermitAll; import ru.vyatsu.qr_access_admin.client.component.ClientEditor; import ru.vyatsu.qr_access_admin.client.entity.ClientEntity; import ru.vyatsu.qr_access_admin.client.entity.ClientRepository; @@ -16,6 +17,7 @@ import java.util.List; @Route(value = "clients", layout = MainLayout.class) @PageTitle("Клиенты") +@PermitAll public class ClientView extends VerticalLayout { private final ClientRepository repository; private final Grid grid; diff --git a/src/main/java/ru/vyatsu/qr_access_admin/common/config/SecurityConfiguration.java b/src/main/java/ru/vyatsu/qr_access_admin/common/config/SecurityConfiguration.java new file mode 100644 index 0000000..5634ed3 --- /dev/null +++ b/src/main/java/ru/vyatsu/qr_access_admin/common/config/SecurityConfiguration.java @@ -0,0 +1,17 @@ +package ru.vyatsu.qr_access_admin.common.config; + +import com.vaadin.flow.spring.security.VaadinWebSecurity; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; + +@Configuration +@EnableWebSecurity +public class SecurityConfiguration extends VaadinWebSecurity { + + @Override + protected void configure(HttpSecurity http) throws Exception { + super.configure(http); + http.oauth2Login(c -> c.loginProcessingUrl("/login/oauth2/code/own")); + } +} \ No newline at end of file diff --git a/src/main/java/ru/vyatsu/qr_access_admin/common/view/MainView.java b/src/main/java/ru/vyatsu/qr_access_admin/common/view/MainView.java index e4c428f..a96da68 100644 --- a/src/main/java/ru/vyatsu/qr_access_admin/common/view/MainView.java +++ b/src/main/java/ru/vyatsu/qr_access_admin/common/view/MainView.java @@ -1,12 +1,14 @@ package ru.vyatsu.qr_access_admin.common.view; -import ru.vyatsu.qr_access_admin.common.MainLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; +import jakarta.annotation.security.PermitAll; +import ru.vyatsu.qr_access_admin.common.MainLayout; @Route(value = "", layout = MainLayout.class) @PageTitle("Start") +@PermitAll public class MainView extends VerticalLayout { } diff --git a/src/main/java/ru/vyatsu/qr_access_admin/door/view/DoorView.java b/src/main/java/ru/vyatsu/qr_access_admin/door/view/DoorView.java index 2213a04..0acebb9 100644 --- a/src/main/java/ru/vyatsu/qr_access_admin/door/view/DoorView.java +++ b/src/main/java/ru/vyatsu/qr_access_admin/door/view/DoorView.java @@ -7,6 +7,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; +import jakarta.annotation.security.PermitAll; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; import jakarta.persistence.Query; @@ -22,6 +23,7 @@ import java.util.List; @Route(value = "doors", layout = MainLayout.class) @PageTitle("Двери") +@PermitAll public class DoorView extends VerticalLayout { private final Grid grid; private final DoorRepository repository; diff --git a/src/main/java/ru/vyatsu/qr_access_admin/partner/view/PartnerView.java b/src/main/java/ru/vyatsu/qr_access_admin/partner/view/PartnerView.java index 482457e..6284b41 100644 --- a/src/main/java/ru/vyatsu/qr_access_admin/partner/view/PartnerView.java +++ b/src/main/java/ru/vyatsu/qr_access_admin/partner/view/PartnerView.java @@ -7,6 +7,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; +import jakarta.annotation.security.PermitAll; import ru.vyatsu.qr_access_admin.common.MainLayout; import ru.vyatsu.qr_access_admin.partner.component.PartnerEditor; import ru.vyatsu.qr_access_admin.partner.entity.PartnerEntity; @@ -16,6 +17,7 @@ import java.util.List; @Route(value = "partners", layout = MainLayout.class) @PageTitle("Партнеры") +@PermitAll public class PartnerView extends VerticalLayout { private final PartnerRepository repository; private final Grid grid; diff --git a/src/main/java/ru/vyatsu/qr_access_admin/qr/view/QrView.java b/src/main/java/ru/vyatsu/qr_access_admin/qr/view/QrView.java index aac4133..4c13488 100644 --- a/src/main/java/ru/vyatsu/qr_access_admin/qr/view/QrView.java +++ b/src/main/java/ru/vyatsu/qr_access_admin/qr/view/QrView.java @@ -7,6 +7,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; +import jakarta.annotation.security.PermitAll; import ru.vyatsu.qr_access_admin.common.MainLayout; import ru.vyatsu.qr_access_admin.door.entity.DoorRepository; import ru.vyatsu.qr_access_admin.qr.component.QrEditor; @@ -17,6 +18,7 @@ import java.util.List; @Route(value = "qrs", layout = MainLayout.class) @PageTitle("Коды") +@PermitAll public class QrView extends VerticalLayout { private final QrRepository repository; private final Grid grid; diff --git a/src/main/java/ru/vyatsu/qr_access_admin/slot/view/SlotView.java b/src/main/java/ru/vyatsu/qr_access_admin/slot/view/SlotView.java index aab75ff..215a6e0 100644 --- a/src/main/java/ru/vyatsu/qr_access_admin/slot/view/SlotView.java +++ b/src/main/java/ru/vyatsu/qr_access_admin/slot/view/SlotView.java @@ -7,6 +7,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; +import jakarta.annotation.security.PermitAll; import ru.vyatsu.qr_access_admin.common.MainLayout; import ru.vyatsu.qr_access_admin.slot.component.SlotEditor; import ru.vyatsu.qr_access_admin.slot.entity.SlotEntity; @@ -16,6 +17,7 @@ import java.util.List; @Route(value = "slots", layout = MainLayout.class) @PageTitle("Слоты") +@PermitAll public class SlotView extends VerticalLayout { private final SlotRepository repository; private final Grid grid; diff --git a/src/main/java/ru/vyatsu/qr_access_admin/unit/view/UnitView.java b/src/main/java/ru/vyatsu/qr_access_admin/unit/view/UnitView.java index 7e41217..edddb46 100644 --- a/src/main/java/ru/vyatsu/qr_access_admin/unit/view/UnitView.java +++ b/src/main/java/ru/vyatsu/qr_access_admin/unit/view/UnitView.java @@ -7,6 +7,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; +import jakarta.annotation.security.PermitAll; import ru.vyatsu.qr_access_admin.common.MainLayout; import ru.vyatsu.qr_access_admin.unit.component.UnitEditor; import ru.vyatsu.qr_access_admin.unit.entity.UnitEntity; @@ -18,6 +19,7 @@ import java.util.List; @Route(value = "units", layout = MainLayout.class) @PageTitle("Устройства") +@PermitAll public class UnitView extends VerticalLayout { private final UnitRepository unitRepository; diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 2e2c7d8..18d8c72 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -9,6 +9,20 @@ spring: password: 123 security: oauth2: - resourceserver: - jwt: - jwk-set-uri: http://localhost:8081/oauth2/jwks \ No newline at end of file + client: + registration: + own: + clientId: ${CLIENT_ID:admin} + clientSecret: ${CLIENT_SECRET:} + authorizationGrantType: authorization_code + clientAuthenticationMethod: none + scope: + - admin + - openid + redirectUri: "{baseUrl}/login/oauth2/code/{registrationId}" + provider: + own: + issuerUri: http://127.0.0.1:8081 + jwkSetUri: http://127.0.0.1:8081/oauth2/jwks + tokenUri: http://127.0.0.1:8081/oauth2/token + authorizationUri: http://127.0.0.1:8081/oauth2/authorize \ No newline at end of file