浏览代码

将 manager 模块名字修改为 web, 并调整 web 模块内部包结构

reghao 1 年之前
父节点
当前提交
a2ac081479
共有 100 个文件被更改,包括 0 次插入5843 次删除
  1. 0 326
      manager/pom.xml
  2. 0 17
      manager/src/main/java/cn/reghao/devops/manager/ManagerApplication.java
  3. 0 104
      manager/src/main/java/cn/reghao/devops/manager/account/controller/AccountAuthController.java
  4. 0 47
      manager/src/main/java/cn/reghao/devops/manager/account/controller/AccountCodeController.java
  5. 0 106
      manager/src/main/java/cn/reghao/devops/manager/account/controller/AccountProfileController.java
  6. 0 53
      manager/src/main/java/cn/reghao/devops/manager/account/controller/FileController.java
  7. 0 85
      manager/src/main/java/cn/reghao/devops/manager/account/controller/MenuController.java
  8. 0 77
      manager/src/main/java/cn/reghao/devops/manager/account/controller/RoleController.java
  9. 0 98
      manager/src/main/java/cn/reghao/devops/manager/account/controller/page/MenuPageController.java
  10. 0 85
      manager/src/main/java/cn/reghao/devops/manager/account/controller/page/RolePageController.java
  11. 0 136
      manager/src/main/java/cn/reghao/devops/manager/account/controller/page/UserPageController.java
  12. 0 15
      manager/src/main/java/cn/reghao/devops/manager/account/db/query/MenuQuery.java
  13. 0 54
      manager/src/main/java/cn/reghao/devops/manager/account/db/query/MenuQueryImpl.java
  14. 0 30
      manager/src/main/java/cn/reghao/devops/manager/account/db/query/RoleQuery.java
  15. 0 107
      manager/src/main/java/cn/reghao/devops/manager/account/db/query/RoleQueryImpl.java
  16. 0 28
      manager/src/main/java/cn/reghao/devops/manager/account/db/query/UserQuery.java
  17. 0 84
      manager/src/main/java/cn/reghao/devops/manager/account/db/query/UserQueryImpl.java
  18. 0 15
      manager/src/main/java/cn/reghao/devops/manager/account/db/repository/DiskFileRepository.java
  19. 0 15
      manager/src/main/java/cn/reghao/devops/manager/account/db/repository/MenuRepository.java
  20. 0 13
      manager/src/main/java/cn/reghao/devops/manager/account/db/repository/RoleRepository.java
  21. 0 13
      manager/src/main/java/cn/reghao/devops/manager/account/db/repository/UserRepository.java
  22. 0 9
      manager/src/main/java/cn/reghao/devops/manager/account/model/constant/DataStatus.java
  23. 0 11
      manager/src/main/java/cn/reghao/devops/manager/account/model/constant/MenuType.java
  24. 0 25
      manager/src/main/java/cn/reghao/devops/manager/account/model/constant/RoleType.java
  25. 0 34
      manager/src/main/java/cn/reghao/devops/manager/account/model/constant/UserGender.java
  26. 0 33
      manager/src/main/java/cn/reghao/devops/manager/account/model/dto/AccountLoginDto.java
  27. 0 21
      manager/src/main/java/cn/reghao/devops/manager/account/model/dto/AccountProfile.java
  28. 0 20
      manager/src/main/java/cn/reghao/devops/manager/account/model/dto/AccountRole.java
  29. 0 31
      manager/src/main/java/cn/reghao/devops/manager/account/model/dto/CreateAccountDto.java
  30. 0 44
      manager/src/main/java/cn/reghao/devops/manager/account/model/dto/MenuAddDTO.java
  31. 0 46
      manager/src/main/java/cn/reghao/devops/manager/account/model/dto/MenuDTO.java
  32. 0 52
      manager/src/main/java/cn/reghao/devops/manager/account/model/dto/MenuUpdateDTO.java
  33. 0 35
      manager/src/main/java/cn/reghao/devops/manager/account/model/dto/RoleDTO.java
  34. 0 19
      manager/src/main/java/cn/reghao/devops/manager/account/model/dto/RsaPubkey.java
  35. 0 19
      manager/src/main/java/cn/reghao/devops/manager/account/model/dto/UpdatePasswordDto.java
  36. 0 24
      manager/src/main/java/cn/reghao/devops/manager/account/model/dto/UserUpdateDTO.java
  37. 0 57
      manager/src/main/java/cn/reghao/devops/manager/account/model/po/DiskFile.java
  38. 0 52
      manager/src/main/java/cn/reghao/devops/manager/account/model/po/Menu.java
  39. 0 43
      manager/src/main/java/cn/reghao/devops/manager/account/model/po/Role.java
  40. 0 135
      manager/src/main/java/cn/reghao/devops/manager/account/model/po/User.java
  41. 0 49
      manager/src/main/java/cn/reghao/devops/manager/account/model/po/UserAuthority.java
  42. 0 26
      manager/src/main/java/cn/reghao/devops/manager/account/model/vo/MenuVO.java
  43. 0 28
      manager/src/main/java/cn/reghao/devops/manager/account/model/vo/RoleVO.java
  44. 0 36
      manager/src/main/java/cn/reghao/devops/manager/account/model/vo/UserVO.java
  45. 0 28
      manager/src/main/java/cn/reghao/devops/manager/account/security/ExceptionAuthenticationEntryPoint.java
  46. 0 199
      manager/src/main/java/cn/reghao/devops/manager/account/security/WebSecurityConfig.java
  47. 0 36
      manager/src/main/java/cn/reghao/devops/manager/account/security/encoder/Md5PasswordEncoder.java
  48. 0 13
      manager/src/main/java/cn/reghao/devops/manager/account/security/exceptioin/AccountLoginException.java
  49. 0 33
      manager/src/main/java/cn/reghao/devops/manager/account/security/filter/LoginRedirectFilter.java
  50. 0 48
      manager/src/main/java/cn/reghao/devops/manager/account/security/form/AccountAuthFilter.java
  51. 0 42
      manager/src/main/java/cn/reghao/devops/manager/account/security/form/AccountAuthProvider.java
  52. 0 126
      manager/src/main/java/cn/reghao/devops/manager/account/security/form/AccountAuthToken.java
  53. 0 36
      manager/src/main/java/cn/reghao/devops/manager/account/security/handler/AuthFailHandlerImpl.java
  54. 0 55
      manager/src/main/java/cn/reghao/devops/manager/account/security/handler/AuthSuccessHandlerImpl.java
  55. 0 27
      manager/src/main/java/cn/reghao/devops/manager/account/security/handler/LogoutHandlerImpl.java
  56. 0 27
      manager/src/main/java/cn/reghao/devops/manager/account/security/handler/LogoutSuccessHandlerImpl.java
  57. 0 34
      manager/src/main/java/cn/reghao/devops/manager/account/security/session/SecuritySessionConfig.java
  58. 0 33
      manager/src/main/java/cn/reghao/devops/manager/account/security/session/SessionExpiredStrategy.java
  59. 0 19
      manager/src/main/java/cn/reghao/devops/manager/account/service/AccountAuthService.java
  60. 0 20
      manager/src/main/java/cn/reghao/devops/manager/account/service/AccountService.java
  61. 0 56
      manager/src/main/java/cn/reghao/devops/manager/account/service/AccountSessionService.java
  62. 0 42
      manager/src/main/java/cn/reghao/devops/manager/account/service/CodeService.java
  63. 0 15
      manager/src/main/java/cn/reghao/devops/manager/account/service/FileService.java
  64. 0 70
      manager/src/main/java/cn/reghao/devops/manager/account/service/HomeService.java
  65. 0 15
      manager/src/main/java/cn/reghao/devops/manager/account/service/MenuService.java
  66. 0 58
      manager/src/main/java/cn/reghao/devops/manager/account/service/PubkeyService.java
  67. 0 17
      manager/src/main/java/cn/reghao/devops/manager/account/service/RoleService.java
  68. 0 51
      manager/src/main/java/cn/reghao/devops/manager/account/service/UserContext.java
  69. 0 155
      manager/src/main/java/cn/reghao/devops/manager/account/service/impl/AccountAuthServiceImpl.java
  70. 0 154
      manager/src/main/java/cn/reghao/devops/manager/account/service/impl/AccountServiceImpl.java
  71. 0 157
      manager/src/main/java/cn/reghao/devops/manager/account/service/impl/FileServiceImpl.java
  72. 0 237
      manager/src/main/java/cn/reghao/devops/manager/account/service/impl/MenuServiceImpl.java
  73. 0 77
      manager/src/main/java/cn/reghao/devops/manager/account/service/impl/RoleServiceImpl.java
  74. 0 70
      manager/src/main/java/cn/reghao/devops/manager/app/controller/AppStatusController.java
  75. 0 84
      manager/src/main/java/cn/reghao/devops/manager/app/controller/BuildDeployController.java
  76. 0 46
      manager/src/main/java/cn/reghao/devops/manager/app/controller/GetAppController.java
  77. 0 77
      manager/src/main/java/cn/reghao/devops/manager/app/controller/config/AppConfigController.java
  78. 0 49
      manager/src/main/java/cn/reghao/devops/manager/app/controller/config/AppDeployConfigController.java
  79. 0 33
      manager/src/main/java/cn/reghao/devops/manager/app/controller/config/BuildDirController.java
  80. 0 42
      manager/src/main/java/cn/reghao/devops/manager/app/controller/config/CompilerConfigController.java
  81. 0 42
      manager/src/main/java/cn/reghao/devops/manager/app/controller/config/PackerConfigController.java
  82. 0 42
      manager/src/main/java/cn/reghao/devops/manager/app/controller/config/RepoAuthConfigController.java
  83. 0 139
      manager/src/main/java/cn/reghao/devops/manager/app/controller/page/BuildDeployPageController.java
  84. 0 89
      manager/src/main/java/cn/reghao/devops/manager/app/controller/page/StatusPageController.java
  85. 0 160
      manager/src/main/java/cn/reghao/devops/manager/app/controller/page/config/AppConfigPageController.java
  86. 0 77
      manager/src/main/java/cn/reghao/devops/manager/app/controller/page/config/AppDeployConfigPageController.java
  87. 0 61
      manager/src/main/java/cn/reghao/devops/manager/app/controller/page/config/BuildDirPageController.java
  88. 0 76
      manager/src/main/java/cn/reghao/devops/manager/app/controller/page/config/CompilerPageController.java
  89. 0 76
      manager/src/main/java/cn/reghao/devops/manager/app/controller/page/config/PackerPageController.java
  90. 0 85
      manager/src/main/java/cn/reghao/devops/manager/app/controller/page/config/RepoAuthPageController.java
  91. 0 27
      manager/src/main/java/cn/reghao/devops/manager/app/db/query/AppConfigQuery.java
  92. 0 18
      manager/src/main/java/cn/reghao/devops/manager/app/db/query/AppDeployConfigQuery.java
  93. 0 37
      manager/src/main/java/cn/reghao/devops/manager/app/db/query/DeployLogQuery.java
  94. 0 93
      manager/src/main/java/cn/reghao/devops/manager/app/db/query/impl/AppConfigQueryImpl.java
  95. 0 80
      manager/src/main/java/cn/reghao/devops/manager/app/db/query/impl/AppDeployConfigQueryImpl.java
  96. 0 19
      manager/src/main/java/cn/reghao/devops/manager/app/db/repository/AppBuildingRepository.java
  97. 0 18
      manager/src/main/java/cn/reghao/devops/manager/app/db/repository/AppDeployingRepository.java
  98. 0 29
      manager/src/main/java/cn/reghao/devops/manager/app/db/repository/config/AppConfigRepository.java
  99. 0 20
      manager/src/main/java/cn/reghao/devops/manager/app/db/repository/config/AppDeployConfigRepository.java
  100. 0 17
      manager/src/main/java/cn/reghao/devops/manager/app/db/repository/config/build/CompilerConfigRepository.java

+ 0 - 326
manager/pom.xml

@@ -1,326 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>devops</artifactId>
-        <groupId>cn.reghao.devops</groupId>
-        <version>1.0.0</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>manager</artifactId>
-    <version>1.0.0</version>
-    <packaging>jar</packaging>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
-        <project.build.outputDir>${project.basedir}/bin</project.build.outputDir>
-    </properties>
-
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-dependencies</artifactId>
-                <version>2.3.9.RELEASE</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
-    <dependencies>
-        <dependency>
-            <groupId>cn.reghao.jutil</groupId>
-            <artifactId>web</artifactId>
-            <version>1.0.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>cn.reghao.devops</groupId>
-            <artifactId>common</artifactId>
-            <version>1.0.0-SNAPSHOT</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-websocket</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-configuration-processor</artifactId>
-            <optional>true</optional>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-validation</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>javax.validation</groupId>
-            <artifactId>validation-api</artifactId>
-            <version>2.0.1.Final</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-jpa</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-            <version>8.0.17</version>
-        </dependency>
-        <dependency>
-            <groupId>com.zaxxer</groupId>
-            <artifactId>HikariCP</artifactId>
-            <version>3.3.1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-security</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-thymeleaf</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.thymeleaf.extras</groupId>
-            <artifactId>thymeleaf-extras-springsecurity5</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-cache</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.github.ben-manes.caffeine</groupId>
-            <artifactId>caffeine</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>2.9.2</version>
-        </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>2.9.2</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.eclipse.jgit</groupId>
-            <artifactId>org.eclipse.jgit</artifactId>
-            <version>6.4.0.202211300538-r</version>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jgit</groupId>
-            <artifactId>org.eclipse.jgit.ssh.apache</artifactId>
-            <version>6.4.0.202211300538-r</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.maven</groupId>
-            <artifactId>maven-model</artifactId>
-            <version>3.6.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.maven.shared</groupId>
-            <artifactId>maven-invoker</artifactId>
-            <version>3.0.1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.jcraft</groupId>
-            <artifactId>jsch</artifactId>
-            <version>0.1.55</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.sun.mail</groupId>
-            <artifactId>javax.mail</artifactId>
-            <version>1.6.2</version>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>2.6</version>
-        </dependency>
-    </dependencies>
-
-    <profiles>
-        <profile>
-            <id>dev</id>
-            <properties>
-                <profile.active>dev</profile.active>
-            </properties>
-            <activation>
-                <activeByDefault>true</activeByDefault>
-            </activation>
-        </profile>
-        <profile>
-            <id>test</id>
-            <properties>
-                <profile.active>test</profile.active>
-            </properties>
-        </profile>
-    </profiles>
-
-    <build>
-        <finalName>devops-${project.artifactId}</finalName>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>application.yml</include>
-                    <include>application-${profile.active}.yml</include>
-                    <include>logback-spring.xml</include>
-                    <include>git.properties</include>
-                    <!-- 前端静态资源 -->
-                    <include>static/**</include>
-                    <include>templates/**</include>
-                </includes>
-            </resource>
-        </resources>
-
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.8.1</version>
-                <configuration>
-                    <source>11</source>
-                    <target>11</target>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>2.4.3</version>
-                <configuration>
-                    <!-- 让 maven 不处理字体 -->
-                    <nonFilteredFileExtensions>
-                        <nonFilteredFileExtension>ttf</nonFilteredFileExtension>
-                        <nonFilteredFileExtension>woff</nonFilteredFileExtension>
-                        <nonFilteredFileExtension>woff2</nonFilteredFileExtension>
-                    </nonFilteredFileExtensions>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <version>2.3.9.RELEASE</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <!-- 生成的 jar 包输出到指定目录 -->
-                    <outputDirectory>${project.build.outputDir}</outputDirectory>
-                </configuration>
-            </plugin>
-
-            <!--git-commit-id-plugin 插件,用于实现打包带git版本信息-->
-            <plugin>
-                <groupId>pl.project13.maven</groupId>
-                <artifactId>git-commit-id-plugin</artifactId>
-                <version>2.1.5</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>revision</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <!--日期格式;默认值:dd.MM.yyyy '@' HH:mm:ss z;-->
-                    <dateFormat>yyyy-MM-dd HH:mm:ss</dateFormat>
-                    <!--,构建过程中,是否打印详细信息;默认值:false;-->
-                    <verbose>true</verbose>
-                    <!-- ".git"文件路径;默认值:${project.basedir}/.git;
-                      注意: 如果是多模块(多模块)项目,则需要修改到.git文件夹的目录-->
-                    <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
-                    <!--若项目打包类型为pom,是否取消构建;默认值:true;-->
-                    <skipPoms>false</skipPoms>
-                    <!--是否生成"git.properties"文件;默认值:false;-->
-                    <generateGitPropertiesFile>true</generateGitPropertiesFile>
-                    <!--指定"git.properties"文件的存放路径(相对于${project.basedir}的一个路径);
-                    注意:该地址决定接口代码是否可以读取到git版本信息,请自行修改-->
-                    <generateGitPropertiesFilename>src/main/resources/git.properties</generateGitPropertiesFilename>
-                    <!--".git"文件夹未找到时,构建是否失败;若设置true,则构建失败;若设置false,则跳过执行该目标;默认值:true;-->
-                    <failOnNoGitDirectory>true</failOnNoGitDirectory>
-                    <!--git描述配置,可选;由JGit提供实现;-->
-                    <gitDescribe>
-                        <!--是否生成描述属性-->
-                        <skip>false</skip>
-                        <!--提交操作未发现tag时,仅打印提交操作ID,-->
-                        <always>false</always>
-                        <!--提交操作ID显式字符长度,最大值为:40;默认值:7;
-                            0代表特殊意义;后面有解释;
-                        -->
-                        <abbrev>8</abbrev>
-                        <!--构建触发时,代码有修改时(即"dirty state"),添加指定后缀;默认值:"";-->
-                        <dirty>-dirty</dirty>
-                        <!--always print using the "tag-commits_from_tag-g_commit_id-maybe_dirty" format, even if "on" a tag.
-                            The distance will always be 0 if you're "on" the tag.
-                        -->
-                        <forceLongFormat>false</forceLongFormat>
-                    </gitDescribe>
-                </configuration>
-            </plugin>
-            <!--apache maven插件,用于执行ant脚本函数-->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <version>1.8</version>
-                <executions>
-                    <execution>
-                        <!--maven 插件生命周期,我试过用compile 发现打包以后没有git.properties,因为打包的时候,还没有生成
-                        注意,这里改成 initialize 的话, 上面 git-commit-id-plugin 插件对应也该添加 phase 配置,并设置为 initialize
-                         否则你生成的文件,写入的就不会对应的值,而是变量名-->
-                        <phase>initialize</phase>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                        <configuration>
-                            <tasks>
-                                <echo message="写入 git 版本信息"/>
-                                <!-- concat 常用于把一些信息写入文件,我这里用于把 git-commit-id-plugin 生成的git环境变量写入文件 -->
-                                <concat destfile="src/main/resources/git.properties">
-                                    repo=${git.remote.origin.url}
-                                    branch=${git.branch}
-                                    commitId=${git.commit.id.abbrev}
-                                    commitTime=${git.commit.time}
-                                    buildTime=${git.build.time}
-                                </concat>
-                            </tasks>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>

+ 0 - 17
manager/src/main/java/cn/reghao/devops/manager/ManagerApplication.java

@@ -1,17 +0,0 @@
-package cn.reghao.devops.manager;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.autoconfigure.domain.EntityScan;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
-
-@SpringBootApplication
-@EnableJpaRepositories
-@EntityScan({"cn.reghao.devops.manager"})
-@ComponentScan({"cn.reghao.devops.manager", "cn.reghao.devops.common"})
-public class ManagerApplication {
-	public static void main(String[] args) {
-		SpringApplication.run(ManagerApplication.class, args);
-	}
-}

+ 0 - 104
manager/src/main/java/cn/reghao/devops/manager/account/controller/AccountAuthController.java

@@ -1,104 +0,0 @@
-package cn.reghao.devops.manager.account.controller;
-
-import cn.reghao.devops.common.util.NotAvailable;
-import cn.reghao.devops.common.version.AppVersion;
-import cn.reghao.devops.manager.account.model.constant.RoleType;
-import cn.reghao.devops.manager.account.model.po.Menu;
-import cn.reghao.devops.manager.account.model.po.User;
-import cn.reghao.devops.manager.account.service.HomeService;
-import cn.reghao.devops.manager.account.service.UserContext;
-import cn.reghao.devops.manager.sys.db.repository.SysMessageRepository;
-import cn.reghao.jutil.jdk.jvm.JVM;
-import cn.reghao.jutil.jdk.jvm.model.JvmInfo;
-import cn.reghao.jutil.jdk.machine.id.MachineIdLinux;
-import io.swagger.annotations.Api;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author reghao
- * @date 2021-04-04 21:24:18
- */
-@Slf4j
-@Api(tags = "登录页和首页")
-@Controller
-public class AccountAuthController {
-    private final JVM jvm;
-    private final MachineIdLinux machineId;
-    private final AppVersion appVersion;
-    private final HomeService homeService;
-    private final SysMessageRepository sysMessageRepository;
-
-    public AccountAuthController(HomeService homeService, SysMessageRepository sysMessageRepository) {
-        this.jvm = new JVM();
-        this.machineId = new MachineIdLinux();
-        this.appVersion = AppVersion.getVersion();
-        this.homeService = homeService;
-        this.sysMessageRepository = sysMessageRepository;
-    }
-    
-    @GetMapping("/login")
-    public String toLogin(Model model) {
-        model.addAttribute("isCaptcha", false);
-        return "/login";
-    }
-
-    @GetMapping("/")
-    public String index(Model model) throws Exception {
-        User user = UserContext.getUser();
-        if (user == null) {
-            throw new Exception("未登录");
-        }
-
-        boolean isAdmin = user.getRole().contains(RoleType.ROLE_ADMIN.name());
-        if (isAdmin) {
-            int unreadTotal = sysMessageRepository.countByUnread(true);
-            String unreadMessage;
-            if (unreadTotal > 9) {
-                unreadMessage = "9+";
-            } else {
-                unreadMessage = String.valueOf(unreadTotal);
-            }
-            model.addAttribute("unreadMessage", unreadMessage);
-        }
-
-        List<Menu> menus = homeService.userMenus(user.getRole());
-        Map<Integer, Menu> treeMenu = homeService.treeMenu(menus);
-        model.addAttribute("user", user);
-        model.addAttribute("treeMenu", treeMenu);
-        return "/main";
-    }
-
-    @GetMapping("/home")
-    public String home(Model model) {
-        String commitId = NotAvailable.na.getDesc();
-        if (appVersion != null) {
-            commitId = appVersion.getCommitId();
-        }
-
-        JvmInfo jvmInfo = jvm.info();
-        //JvmStat jvmStat = jvm.stat();
-        String osInfo = String.format("%s %s", jvmInfo.getOsName(), jvmInfo.getOsVersion());
-        String jvmInfo1 = String.format("%s %s", jvmInfo.getJvmName(), jvmInfo.getJvmVersion());
-        int pid = jvmInfo.getJvmPid();
-        String startAt = jvmInfo.getJvmStartTime();
-        String ipv4 = machineId.ipv4();
-
-        model.addAttribute("managerVersion", commitId);
-        model.addAttribute("hostAddr", ipv4);
-        model.addAttribute("osInfo", osInfo);
-        model.addAttribute("jvmInfo", jvmInfo1);
-        model.addAttribute("pid", pid);
-        model.addAttribute("startAt", startAt);
-        //model.addAttribute("jvmStat", jvmStat);
-
-        String template = "/home/index";
-        template = "/home/index1";
-        return template;
-    }
-}

+ 0 - 47
manager/src/main/java/cn/reghao/devops/manager/account/controller/AccountCodeController.java

@@ -1,47 +0,0 @@
-package cn.reghao.devops.manager.account.controller;
-
-import cn.reghao.devops.manager.account.model.dto.RsaPubkey;
-import cn.reghao.devops.manager.account.service.CodeService;
-import cn.reghao.devops.manager.account.service.PubkeyService;
-import cn.reghao.jutil.jdk.result.WebResult;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.security.NoSuchAlgorithmException;
-import java.util.Base64;
-
-/**
- * @author reghao
- * @date 2022-02-18 16:05:30
- */
-@RestController
-@RequestMapping("/api/account/code")
-public class AccountCodeController {
-    private final CodeService codeService;
-    private final PubkeyService pubkeyService;
-
-    public AccountCodeController(CodeService codeService, PubkeyService pubkeyService) {
-        this.codeService = codeService;
-        this.pubkeyService = pubkeyService;
-    }
-
-    @GetMapping(value = "/pubkey", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String getPubkey() throws NoSuchAlgorithmException {
-        RsaPubkey rsaPubkey = pubkeyService.getPubkey();
-        return WebResult.success(rsaPubkey);
-    }
-
-    @GetMapping(value = "/captcha", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String getCaptcha() throws IOException {
-        InputStream in = codeService.generateCaptcha();
-        byte[] base64Bytes = Base64.getEncoder().encode(in.readAllBytes());
-        String base64Str = new String(base64Bytes, StandardCharsets.UTF_8);
-        String imageStr = String.format("data:image/jpeg;base64,%s", base64Str);
-        return WebResult.success(imageStr);
-    }
-}

+ 0 - 106
manager/src/main/java/cn/reghao/devops/manager/account/controller/AccountProfileController.java

@@ -1,106 +0,0 @@
-package cn.reghao.devops.manager.account.controller;
-
-import cn.reghao.devops.manager.account.model.dto.UpdatePasswordDto;
-import cn.reghao.devops.manager.account.model.dto.CreateAccountDto;
-import cn.reghao.jutil.jdk.result.Result;
-import cn.reghao.jutil.jdk.result.WebResult;
-import cn.reghao.devops.manager.account.model.dto.AccountProfile;
-import cn.reghao.devops.manager.account.model.dto.AccountRole;
-import cn.reghao.devops.manager.account.service.AccountService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.http.MediaType;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.validation.constraints.NotNull;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2021-04-04 21:24:18
- */
-@Api(tags = "用户接口")
-@RequestMapping("/api/rbac/user")
-@RestController
-public class AccountProfileController {
-    private final AccountService accountService;
-
-    public AccountProfileController(AccountService accountService) {
-        this.accountService = accountService;
-    }
-
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @ApiOperation(value = "创建用户")
-    @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
-    public String createUser(@Validated CreateAccountDto createAccountDto) {
-        Result result = accountService.createAccount(createAccountDto);
-        return WebResult.result(result);
-    }
-
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @ApiOperation(value = "批量创建用户")
-    @PostMapping(value = "/batch", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String batchAdd(MultipartFile file) {
-        return WebResult.success();
-    }
-
-    @PostMapping(value = "/avatar", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String userAvatar(MultipartFile file) {
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "修改用户信息")
-    @PostMapping(value = "/modify", produces = MediaType.APPLICATION_JSON_VALUE)
-    @Deprecated
-    public String updateAccountProfile(@Validated AccountProfile accountProfile) {
-        accountService.updateAccountProfile(accountProfile);
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "修改用户信息")
-    @PostMapping(value = "/edit", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String editUserInfo(@Validated AccountProfile accountProfile) {
-        accountService.updateAccountProfile(accountProfile);
-        return WebResult.success();
-    }
-
-    @PreAuthorize("hasRole('ROLE_ADMIN')")
-    @ApiOperation(value = "删除用户")
-    @DeleteMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deleteAccount(@PathVariable("id") Integer userId) {
-        accountService.deleteAccount(userId);
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "修改用户密码")
-    @PostMapping(value = "/passwd", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String modifyPassword(@NotNull Integer id, @NotNull String newPassword) {
-        accountService.updateAccountPassword(id, newPassword);
-        return WebResult.success();
-    }
-
-    @PostMapping(value = "/passwd/update", produces = MediaType.APPLICATION_JSON_VALUE)
-    @ResponseBody
-    public String editPasswd(UpdatePasswordDto updatePasswordDto) {
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "分配用户角色")
-    @PostMapping(value = "/role", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String assignRole(@Validated AccountRole accountRole) {
-        accountService.updateAccountRole(accountRole);
-        return WebResult.success();
-    }
-
-    // TODO 暂不启用本功能
-    @ApiOperation(value = "启用/禁用用户")
-    @PostMapping(value = "/status/{enable}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String updateAccountStatus(@PathVariable("enable") Boolean enable,
-                                @RequestParam(value = "ids") List<Integer> userIds) {
-        userIds.forEach(userId -> accountService.updateAccountStatus(userId, enable));
-        return WebResult.success();
-    }
-}

+ 0 - 53
manager/src/main/java/cn/reghao/devops/manager/account/controller/FileController.java

@@ -1,53 +0,0 @@
-package cn.reghao.devops.manager.account.controller;
-
-import cn.reghao.devops.manager.account.service.FileService;
-import cn.reghao.jutil.jdk.result.WebResult;
-import cn.reghao.jutil.web.ServletUtil;
-import org.springframework.http.MediaType;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author reghao
- * @date 2024-01-20 17:24:58
- */
-@Controller
-@RequestMapping
-public class FileController {
-    private final FileService fileService;
-
-    public FileController(FileService fileService) {
-        this.fileService = fileService;
-    }
-
-    @PostMapping(value = "/api/file/upload", produces = MediaType.APPLICATION_JSON_VALUE)
-    @ResponseBody
-    public String imageUpload(MultipartFile file) throws Exception {
-        String url = fileService.putFile(file);
-        Map<String, String> map = new HashMap<>();
-        map.put("name", file.getOriginalFilename());
-        map.put("url", url);
-        return WebResult.success(map);
-    }
-
-    @GetMapping("/file/**")
-    @ResponseBody
-    public void getFile() throws IOException {
-        HttpServletRequest servletRequest = ServletUtil.getRequest();
-        String uri = servletRequest.getRequestURI();
-        String uri1 = URLDecoder.decode(uri, StandardCharsets.UTF_8);
-        String objectName =  uri1.replaceFirst("/", "");
-        fileService.getFile(objectName);
-    }
-}

+ 0 - 85
manager/src/main/java/cn/reghao/devops/manager/account/controller/MenuController.java

@@ -1,85 +0,0 @@
-package cn.reghao.devops.manager.account.controller;
-
-import cn.reghao.jutil.jdk.result.Result;
-import cn.reghao.devops.manager.account.db.query.MenuQuery;
-import cn.reghao.devops.manager.account.model.dto.MenuDTO;
-import cn.reghao.devops.manager.account.model.po.Menu;
-import cn.reghao.devops.manager.account.service.impl.MenuServiceImpl;
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.http.MediaType;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2021-04-04 21:24:18
- */
-@Api(tags = "资源接口")
-@RequestMapping("/api/rbac/menu")
-@RestController
-public class MenuController {
-    private final MenuServiceImpl menuServiceImpl;
-    private final MenuQuery menuQuery;
-
-    public MenuController(MenuServiceImpl menuServiceImpl, MenuQuery menuQuery) {
-        this.menuServiceImpl = menuServiceImpl;
-        this.menuQuery = menuQuery;
-    }
-
-    @ApiOperation(value = "添加资源")
-    @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
-    public String addMenu(@Validated Menu menu) {
-        Result result = menuServiceImpl.addMenu(menu);
-        return WebResult.result(result);
-    }
-
-    @ApiOperation(value = "修改资源")
-    @PostMapping(value = "/edit", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String modifyMenu(@Validated MenuDTO menuDTO) {
-        Result result = menuServiceImpl.updateMenu(menuDTO);
-        return WebResult.result(result);
-    }
-
-    @ApiOperation(value = "修改资源状态")
-    @PostMapping(value = "/status/{enabled}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String menuStatus(@PathVariable("enabled") boolean enabled, @RequestParam("ids") List<Integer> ids) {
-        menuServiceImpl.updateMenusStatus(enabled, ids);
-        return WebResult.success();
-    }
-
-    @ApiOperation(value = "删除资源")
-    @DeleteMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deleteMenu(@PathVariable("id") Integer menuId) {
-        Result result = menuServiceImpl.deleteMenu(menuId);
-        return WebResult.result(result);
-    }
-
-    @ApiOperation(value = "获取指定状态的菜单")
-    @GetMapping(value = "/{isEnabled}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String list(@PathVariable(value = "isEnabled") Boolean isEnabled) {
-        List<Menu> list = menuQuery.getSortedMenusByStatus(isEnabled).stream()
-                .peek(menu -> menu.getRoles().forEach(role -> {
-                    role.setMenus(null);
-                }))
-                .collect(Collectors.toList());
-        return WebResult.success(list);
-    }
-
-    @ApiOperation(value = "对同一 pid 组内的资源进行排序")
-    @GetMapping(value = "/sorted/{pid}/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String sortList(@PathVariable(value = "pid") int pid,
-                           @PathVariable(value = "id", required = false) Menu menu) {
-        Map<Integer, String> map = menuQuery.getSortedChildGroupByPid(pid);
-        // 排除当前 menu
-        if (menu != null) {
-            map.remove(menu.getPos());
-        }
-        return WebResult.success(map);
-    }
-}

+ 0 - 77
manager/src/main/java/cn/reghao/devops/manager/account/controller/RoleController.java

@@ -1,77 +0,0 @@
-package cn.reghao.devops.manager.account.controller;
-
-import cn.reghao.devops.manager.account.db.query.MenuQuery;
-import cn.reghao.devops.manager.account.model.po.Menu;
-import cn.reghao.devops.manager.account.model.po.Role;
-import cn.reghao.devops.manager.account.service.RoleService;
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.http.MediaType;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2021-04-04 21:24:18
- */
-@Api(tags = "角色接口")
-@RequestMapping("/api/rbac/role")
-@RestController
-public class RoleController {
-    private final MenuQuery menuQuery;
-    private final RoleService roleService;
-
-    public RoleController(MenuQuery menuQuery, RoleService roleService) {
-        this.menuQuery = menuQuery;
-        this.roleService = roleService;
-    }
-
-    @ApiOperation("添加或修改角色")
-    @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
-    public String addOrModifyRole(@Validated Role role) {
-        roleService.addOrModify(role);
-        return WebResult.success();
-    }
-
-    @ApiOperation("删除角色")
-    @DeleteMapping(value = "/{roleId}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deleteRole(@PathVariable("roleId") Integer roleId) {
-        roleService.delete(roleId);
-        return WebResult.success();
-    }
-
-    @ApiOperation("获取角色可访问的资源")
-    @GetMapping(value = "/menus/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String getRoleMenus(@PathVariable("id") Role role) {
-        List<Menu> allMenus = menuQuery.findAll();
-        allMenus.forEach(menu -> {
-            // TODO 序列化时会递归 roles 中的 Role 导致 StackOverflow, 因此在序列化时应该把 Role 的 menus 设置为 null
-            Set<Role> roles = menu.getRoles().stream()
-                    .peek(role1 -> role1.setMenus(null))
-                    .collect(Collectors.toSet());
-            if (roles.contains(role)) {
-                // 对应前端的 checked 复选框
-                menu.setRemark("auth:true");
-            }
-        });
-
-        return WebResult.success(allMenus);
-    }
-
-    @ApiOperation("设置角色可访问的资源")
-    @PostMapping(value = "/menus", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String setRoleMenus(@RequestParam(value = "id") Integer roleId,
-                               @RequestParam(value = "menuId", required = false) Set<Menu> menus) {
-        if (menus == null) {
-            menus = Collections.emptySet();
-        }
-        roleService.setRoleMenus(roleId, menus);
-        return WebResult.success();
-    }
-}

+ 0 - 98
manager/src/main/java/cn/reghao/devops/manager/account/controller/page/MenuPageController.java

@@ -1,98 +0,0 @@
-package cn.reghao.devops.manager.account.controller.page;
-
-import cn.reghao.devops.manager.account.db.query.MenuQuery;
-import cn.reghao.devops.manager.account.db.query.RoleQuery;
-import cn.reghao.devops.manager.account.model.dto.MenuDTO;
-import cn.reghao.devops.manager.account.model.po.Role;
-import cn.reghao.devops.manager.account.model.po.Menu;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.*;
-
-/**
- * @author reghao
- * @date 2021-04-04 21:24:18
- */
-@Api(tags = "资源页面")
-@RequestMapping("/rbac/menu")
-@Controller
-public class MenuPageController {
-    private final RoleQuery roleQuery;
-    private final MenuQuery menuQuery;
-
-    public MenuPageController(RoleQuery roleQuery, MenuQuery menuQuery) {
-        this.roleQuery = roleQuery;
-        this.menuQuery = menuQuery;
-    }
-
-    @ApiOperation(value = "资源列表页面")
-    @GetMapping
-    public String menuPage(@RequestParam(value = "enabled", required = false) Boolean enabled, Model model) {
-        if (enabled == null) {
-            enabled = true;
-        }
-
-        model.addAttribute("enabled", enabled);
-        return "/rbac/menu/index";
-    }
-
-    @ApiOperation(value = "资源添加页面")
-    @GetMapping({"/add", "/add/{pid}"})
-    public String toAdd(@PathVariable(value = "pid", required = false) Integer pid, Model model) {
-        // 父级菜单
-        Menu pMenu = null;
-        if (pid != null) {
-            pMenu = menuQuery.findById(pid);
-        }
-
-        Set<Role> allRoles = new HashSet<>(roleQuery.findAll());
-        Set<Role> menuRoles = Collections.emptySet();
-
-        model.addAttribute("allRoles", allRoles);
-        model.addAttribute("menuRoles", menuRoles);
-        model.addAttribute("pMenu", pMenu);
-        return "/rbac/menu/add";
-    }
-
-    @ApiOperation(value = "资源编辑页面")
-    @GetMapping("/edit/{id}")
-    public String toEdit(@PathVariable("id") Menu menu, Model model) {
-        int pid = menu.getPid();
-        Menu pMenu;
-        if (pid == 0) {
-            pMenu = new Menu(pid, "根菜单");
-        } else {
-            pMenu = menuQuery.findById(pid);
-        }
-
-        Set<Role> allRoles = new HashSet<>(roleQuery.findAll());
-        //Set<Role> menuRoles = menu.getRoles();
-        Set<Role> menuRoles = Collections.emptySet();
-
-        model.addAttribute("allRoles", allRoles);
-        model.addAttribute("menuRoles", menuRoles);
-        model.addAttribute("menu", new MenuDTO(menu));
-        model.addAttribute("pMenu", pMenu);
-        return "/rbac/menu/edit";
-    }
-
-    // TODO Hibernate 会根据传入的 id 自动查找相应的 Menu
-    @ApiOperation(value = "可访问资源的角色列表页面")
-    @GetMapping("/roleList/{id}")
-    public String roleListWithResource(@PathVariable("id") Menu menu, Model model) {
-        List<Role> list = new ArrayList<>(menu.getRoles());
-        model.addAttribute("list", list);
-        return "/rbac/menu/roles";
-    }
-
-    @ApiOperation(value = "资源详细信息页面")
-    @GetMapping("/detail/{id}")
-    public String toDetail(@PathVariable("id") Menu menu, Model model) {
-        model.addAttribute("menu", menu);
-        return "/rbac/menu/detail";
-    }
-}

+ 0 - 85
manager/src/main/java/cn/reghao/devops/manager/account/controller/page/RolePageController.java

@@ -1,85 +0,0 @@
-package cn.reghao.devops.manager.account.controller.page;
-
-import cn.reghao.devops.manager.account.db.query.RoleQuery;
-import cn.reghao.devops.manager.account.model.po.User;
-import cn.reghao.devops.manager.account.model.vo.RoleVO;
-import cn.reghao.devops.manager.util.db.PageSort;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2021-04-04 21:24:18
- */
-@Api(tags = "角色页面")
-@RequestMapping("/rbac/role")
-@Controller
-public class RolePageController {
-    private RoleQuery roleQuery;
-
-    public RolePageController(RoleQuery roleQuery) {
-        this.roleQuery = roleQuery;
-    }
-
-    @ApiOperation("角色列表页面")
-    @GetMapping
-    public String rolePage(@RequestParam(value = "name", required = false) String name, Model model) {
-        Page<RoleVO> page;
-        if (name != null) {
-            List<RoleVO> list = roleQuery.getByMatchName(name);
-            page = new PageImpl<>(list);
-        } else {
-            PageRequest pageRequest = PageSort.pageRequest();
-            page = roleQuery.getRoleVOByPage(pageRequest);
-        }
-
-        model.addAttribute("page", page);
-        model.addAttribute("list", page.getContent());
-        return "/rbac/role/index";
-    }
-
-    @ApiOperation("角色新增页面")
-    @GetMapping("/add")
-    public String addRolePage() {
-        return "/rbac/role/add";
-    }
-
-    @ApiOperation("角色编辑页面")
-    @GetMapping("/edit/{id}")
-    public String editRolePage(@PathVariable("id") int id, Model model) {
-        RoleVO vo = roleQuery.getRoleVOById(id);
-        model.addAttribute("role", vo);
-        return "/rbac/role/add";
-    }
-
-    @ApiOperation("角色详细信息页面")
-    @GetMapping("/detail/{id}")
-    public String roleDetailPage(@PathVariable("id") int id, Model model) {
-        RoleVO vo = roleQuery.getRoleVOById(id);
-        model.addAttribute("role", vo);
-        return "/rbac/role/detail";
-    }
-
-    @ApiOperation("设置角色可访问的资源页面")
-    @GetMapping("/menus/{id}")
-    public String menusPage(@PathVariable(value = "id") Integer id, Model model){
-        model.addAttribute("roleId", id);
-        return "/rbac/role/menus";
-    }
-
-    @ApiOperation("拥有角色的所有用户页面")
-    @GetMapping("/users/{id}")
-    public String userListWithRole(@PathVariable("id") Integer roleId, Model model) {
-        List<User> list = roleQuery.getUsersByRoleId(roleId);
-        model.addAttribute("list", list);
-        return "/rbac/role/users";
-    }
-}

+ 0 - 136
manager/src/main/java/cn/reghao/devops/manager/account/controller/page/UserPageController.java

@@ -1,136 +0,0 @@
-package cn.reghao.devops.manager.account.controller.page;
-
-import cn.reghao.devops.manager.account.db.query.RoleQuery;
-import cn.reghao.devops.manager.account.db.query.UserQuery;
-import cn.reghao.devops.manager.account.model.po.Role;
-import cn.reghao.devops.manager.account.model.po.User;
-import cn.reghao.devops.manager.account.model.vo.UserVO;
-import cn.reghao.devops.manager.account.service.AccountSessionService;
-import cn.reghao.devops.manager.account.service.UserContext;
-import cn.reghao.devops.manager.util.db.PageSort;
-import cn.reghao.jutil.jdk.converter.DateTimeConverter;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.time.LocalDateTime;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2021-04-04 21:24:18
- */
-@Api(tags = "用户页面")
-@RequestMapping("/rbac/user")
-@Controller
-public class UserPageController {
-    private final UserQuery userQuery;
-    private final RoleQuery roleQuery;
-    private final AccountSessionService accountSessionService;
-
-    public UserPageController(UserQuery userQuery, RoleQuery roleQuery, AccountSessionService accountSessionService) {
-        this.userQuery = userQuery;
-        this.roleQuery = roleQuery;
-        this.accountSessionService = accountSessionService;
-    }
-
-    @ApiOperation(value = "用户列表页面")
-    @GetMapping
-    public String userPage(@RequestParam(value = "screenName", required = false) String screenName, Model model) {
-        Page<UserVO> page;
-        if (screenName != null) {
-            List<UserVO> list = userQuery.getByMatchScreenName(screenName);
-            page = new PageImpl<>(list);
-        } else {
-            PageRequest pageRequest = PageSort.pageRequest();
-            page = userQuery.getUserVOByPage(pageRequest);
-        }
-
-        Map<Integer, LocalDateTime> map = accountSessionService.getLastRequest();
-        page.getContent().forEach(userVO -> {
-            int userId = userVO.getUserId();
-            LocalDateTime lastAccess = map.get(userId);
-            if (lastAccess != null) {
-                userVO.setLastAccess(DateTimeConverter.format(lastAccess));
-            }
-        });
-
-        model.addAttribute("page", page);
-        model.addAttribute("list", page.getContent());
-        return "/rbac/user/index";
-    }
-
-    @ApiOperation(value = "新增用户页面")
-    @GetMapping("/add")
-    public String addUserPage(Model model) {
-        Set<Role> allRoles = new HashSet<>(new HashSet<>(roleQuery.findAll()));
-        Set<Role> userRoles = Collections.emptySet();
-
-        model.addAttribute("allRoles", allRoles);
-        model.addAttribute("userRoles", userRoles);
-        return "/rbac/user/add";
-    }
-
-    @ApiOperation(value = "用户信息编辑页面")
-    @GetMapping("/edit/{id}")
-    @Deprecated
-    public String editUserPage(@PathVariable("id") User user, Model model) {
-        Set<Role> allRoles = new HashSet<>(roleQuery.findAll());
-        Set<Role> userRoles = userQuery.getUserRoles(user);
-
-        model.addAttribute("allRoles", allRoles);
-        model.addAttribute("userRoles", userRoles);
-        model.addAttribute("user", user);
-        return "/rbac/user/edit";
-    }
-
-    @ApiOperation(value = "用户详细信息页面")
-    @GetMapping("/detail/{id}")
-    public String userDetailPage(@PathVariable("id") int id, Model model) {
-        User user = userQuery.findById(id);
-        Set<Role> roles = userQuery.getUserRoles(user);
-        List<String> names = roles.stream().map(Role::getName).collect(Collectors.toList());
-
-        model.addAttribute("roles", names.toString());
-        model.addAttribute("user", user);
-        return "/rbac/user/detail";
-    }
-
-    @GetMapping("/profile")
-    public String userInfoPage(Model model) {
-        User user = UserContext.getUser();
-        model.addAttribute("user", user);
-        return "/rbac/user/userinfo";
-    }
-
-    @ApiOperation(value = "用户修改密码页面")
-    @GetMapping("/passwd/{id}")
-    public String modifyPasswordPage(@PathVariable("id") Integer id, Model model) {
-        model.addAttribute("id", id);
-        return "/rbac/user/passwd";
-    }
-
-    @GetMapping("/passwd/edit")
-    public String editPasswdPage(Model model) {
-        return "/rbac/user/editpasswd";
-    }
-
-    @ApiOperation(value = "用户角色分配页面")
-    @GetMapping("/role/{id}")
-    public String assignRolePage(@PathVariable("id") User user, Model model) {
-        Set<Role> roles = new HashSet<>(roleQuery.findAll());
-        int userId = user.getId();
-        Set<Role> authRoles = userQuery.getUserRoles(userId);
-
-        model.addAttribute("id", userId);
-        model.addAttribute("list", roles);
-        model.addAttribute("authRoles", authRoles);
-        return "/rbac/user/role";
-    }
-}

+ 0 - 15
manager/src/main/java/cn/reghao/devops/manager/account/db/query/MenuQuery.java

@@ -1,15 +0,0 @@
-package cn.reghao.devops.manager.account.db.query;
-
-import cn.reghao.devops.manager.account.model.po.Menu;
-import cn.reghao.jutil.jdk.db.BaseQuery;
-
-import java.util.*;
-
-/**
- * @author reghao
- * @date 2021-07-12 15:32:26
- */
-public interface MenuQuery extends BaseQuery<Menu> {
-    List<Menu> getSortedMenusByStatus(Boolean isEnabled);
-    Map<Integer, String> getSortedChildGroupByPid(int pid);
-}

+ 0 - 54
manager/src/main/java/cn/reghao/devops/manager/account/db/query/MenuQueryImpl.java

@@ -1,54 +0,0 @@
-package cn.reghao.devops.manager.account.db.query;
-
-import cn.reghao.devops.manager.account.db.repository.MenuRepository;
-import cn.reghao.devops.manager.account.model.po.Menu;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2021-07-12 15:32:26
- */
-@Service
-public class MenuQueryImpl implements MenuQuery {
-    private final MenuRepository menuRepository;
-
-    public MenuQueryImpl(MenuRepository menuRepository) {
-        this.menuRepository = menuRepository;
-    }
-
-    @Override
-    public List<Menu> findAll() {
-        return menuRepository.findAll();
-    }
-
-    @Override
-    public Menu findById(int id) {
-        return menuRepository.getOne(id);
-    }
-
-    @Override
-    public List<Menu> getSortedMenusByStatus(Boolean isEnabled) {
-        List<Menu> menuList = menuRepository.findByEnabled(isEnabled);
-        Map<Integer, List<Menu>> map =  menuList.stream().collect(Collectors.groupingBy(Menu::getPid));
-        List<Menu> list = new ArrayList<>();
-        map.forEach((pid, menus) -> {
-            list.addAll(menus.stream()
-                    .sorted(Comparator.comparing(Menu::getPos))
-                    .collect(Collectors.toList()));
-        });
-
-        return list;
-    }
-
-    @Override
-    public Map<Integer, String> getSortedChildGroupByPid(int pid) {
-        List<Menu> menus = menuRepository.findByPid(pid);
-        menus.sort(Comparator.comparingInt(Menu::getPos));
-        Map<Integer, String> map = new HashMap<>();
-        menus.forEach(menu -> map.put(menu.getPos(), menu.getName()));
-        return map;
-    }
-}

+ 0 - 30
manager/src/main/java/cn/reghao/devops/manager/account/db/query/RoleQuery.java

@@ -1,30 +0,0 @@
-package cn.reghao.devops.manager.account.db.query;
-
-import cn.reghao.devops.manager.account.model.po.Role;
-import cn.reghao.devops.manager.account.model.po.User;
-import cn.reghao.devops.manager.account.model.vo.RoleVO;
-import cn.reghao.jutil.jdk.db.BaseQuery;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2021-07-12 15:32:26
- */
-public interface RoleQuery extends BaseQuery<Role> {
-    Role findByName(String name);
-    Page<RoleVO> getRoleVOByPage(PageRequest pageRequest);
-    List<RoleVO> getByMatchName(String name);
-    RoleVO getRoleVOById(Integer id);
-    /**
-     * 获取拥有角色的用户
-     *
-     * @param
-     * @return
-     * @date 2021-07-14 下午2:57
-     */
-    List<User> getUsersByRoleId(Integer id);
-    List<User> getUsersByRole(Role role);
-}

+ 0 - 107
manager/src/main/java/cn/reghao/devops/manager/account/db/query/RoleQueryImpl.java

@@ -1,107 +0,0 @@
-package cn.reghao.devops.manager.account.db.query;
-
-import cn.reghao.devops.manager.account.db.repository.RoleRepository;
-import cn.reghao.devops.manager.account.db.repository.UserRepository;
-import cn.reghao.devops.manager.account.model.po.Role;
-import cn.reghao.devops.manager.account.model.po.User;
-import cn.reghao.devops.manager.account.model.vo.RoleVO;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.SetJoin;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2021-07-12 15:32:26
- */
-@Service
-public class RoleQueryImpl implements RoleQuery {
-    private final RoleRepository roleRepository;
-    private final UserRepository userRepository;
-
-    public RoleQueryImpl(RoleRepository roleRepository, UserRepository userRepository) {
-        this.roleRepository = roleRepository;
-        this.userRepository = userRepository;
-    }
-
-    @Override
-    public List<Role> findAll() {
-        return roleRepository.findAll();
-    }
-
-    @Override
-    public Role findById(int id) {
-        return roleRepository.findById(id).orElse(null);
-    }
-
-    @Override
-    public Role findByName(String name) {
-        return roleRepository.findByName(name);
-    }
-
-    @Override
-    public Page<RoleVO> getRoleVOByPage(PageRequest pageRequest) {
-        return roleRepository.findAll(pageRequest).map(RoleVO::new);
-    }
-
-    @Override
-    public List<RoleVO> getByMatchName(String name) {
-        Specification<Role> specification = (root, query, cb) -> {
-            String likeQuery = String.format("%%%s%%", name);
-            Predicate predicate = cb.like(root.get("name"), likeQuery);
-            return cb.and(predicate);
-        };
-        return roleRepository.findAll(specification).stream().map(RoleVO::new).collect(Collectors.toList());
-    }
-
-    @Override
-    public RoleVO getRoleVOById(Integer id) {
-        Role role = findById(id);
-        return role != null ? new RoleVO(role) : null;
-    }
-
-    /**
-     * 获取拥有角色的用户
-     *
-     * @param
-     * @return
-     * @date 2021-07-14 下午2:57
-     */
-    @Override
-    public List<User> getUsersByRoleId(Integer id) {
-        Role role = findById(id);
-        return getUsersByRole(role);
-    }
-
-    /**
-     * SQL 语句
-     * select u.*
-     * from role r
-     * inner join user_role ur
-     * inner join `user` u
-     * on r.title=ur.role and ur.user_id=u.id and r.title='ROLE_FRONTEND'
-     *
-     * @param
-     * @return
-     * @date 2023-03-02 17:54:48
-     */
-    @Override
-    public List<User> getUsersByRole(Role role) {
-        String name = role.getName();
-        Specification<User> specification = ((root, query, cb) -> {
-            SetJoin<User, String> setJoin = root.joinSet("role");
-            // User 中 Set 的元素是原始类型
-            Predicate predicate = setJoin.as(String.class).in(name);
-            // User 中的 Set 的元素是某个对象, fieldName 表示对象的某个字段名
-            //Predicate predicate = cb.equal(setJoin.get("fieldName"), title);
-            return cb.and(predicate);
-        });
-
-        return userRepository.findAll(specification);
-    }
-}

+ 0 - 28
manager/src/main/java/cn/reghao/devops/manager/account/db/query/UserQuery.java

@@ -1,28 +0,0 @@
-package cn.reghao.devops.manager.account.db.query;
-
-import cn.reghao.devops.manager.account.model.po.Role;
-import cn.reghao.devops.manager.account.model.po.User;
-import cn.reghao.devops.manager.account.model.vo.UserVO;
-import cn.reghao.jutil.jdk.db.BaseQuery;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-
-import java.util.*;
-
-/**
- * @author reghao
- * @date 2021-07-12 15:32:26
- */
-public interface UserQuery extends BaseQuery<User> {
-    Page<UserVO> getUserVOByPage(PageRequest pageRequest);
-    List<UserVO> getByMatchScreenName(String screenName);
-    /**
-     * 获取用户拥有的角色
-     *
-     * @param
-     * @return
-     * @date 2021-09-10 下午11:12
-     */
-    Set<Role> getUserRoles(User user);
-    Set<Role> getUserRoles(Integer userId);
-}

+ 0 - 84
manager/src/main/java/cn/reghao/devops/manager/account/db/query/UserQueryImpl.java

@@ -1,84 +0,0 @@
-package cn.reghao.devops.manager.account.db.query;
-
-import cn.reghao.devops.manager.account.db.repository.RoleRepository;
-import cn.reghao.devops.manager.account.db.repository.UserRepository;
-import cn.reghao.devops.manager.account.model.po.Role;
-import cn.reghao.devops.manager.account.model.po.User;
-import cn.reghao.devops.manager.account.model.po.UserAuthority;
-import cn.reghao.devops.manager.account.model.vo.UserVO;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-
-import javax.persistence.criteria.Predicate;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2021-07-12 15:32:26
- */
-@Service
-public class UserQueryImpl implements UserQuery {
-    private final UserRepository userRepository;
-    private final RoleRepository roleRepository;
-
-    public UserQueryImpl(UserRepository userRepository, RoleRepository roleRepository) {
-        this.userRepository = userRepository;
-        this.roleRepository = roleRepository;
-    }
-
-    @Override
-    public User findById(int id) {
-        return userRepository.getOne(id);
-    }
-
-    @Override
-    public Page<UserVO> getUserVOByPage(PageRequest pageRequest) {
-        return userRepository.findAll(pageRequest).map(UserVO::new);
-    }
-
-    @Override
-    public List<UserVO> getByMatchScreenName(String screenName) {
-        Specification<User> specification = (root, query, cb) -> {
-            String likeQuery = String.format("%%%s%%", screenName);
-            Predicate predicate = cb.like(root.get("screenName"), likeQuery);
-            return cb.and(predicate);
-        };
-        return userRepository.findAll(specification).stream().map(UserVO::new).collect(Collectors.toList());
-    }
-
-    /**
-     * 获取用户拥有的角色
-     *
-     * @param
-     * @return
-     * @date 2021-09-10 下午11:12
-     */
-    @Override
-    public Set<Role> getUserRoles(User user) {
-        Set<UserAuthority> set = user.getAuthorities().stream()
-                .map(grantedAuthority -> new UserAuthority(grantedAuthority.getAuthority()))
-                .collect(Collectors.toSet());
-
-        List<String> roles = set.stream()
-                .map(UserAuthority::getAuthority)
-                .collect(Collectors.toList());
-        Specification<Role> spec = ((root, query, criteriaBuilder) -> root.get("name").in(roles));
-        return new HashSet<>(roleRepository.findAll(spec));
-    }
-
-    @Override
-    public Set<Role> getUserRoles(Integer userId) {
-        User user = findById(userId);
-        if (user == null) {
-            return Collections.emptySet();
-        }
-
-        return getUserRoles(user);
-    }
-}

+ 0 - 15
manager/src/main/java/cn/reghao/devops/manager/account/db/repository/DiskFileRepository.java

@@ -1,15 +0,0 @@
-package cn.reghao.devops.manager.account.db.repository;
-
-import cn.reghao.devops.manager.account.model.po.DiskFile;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2024-01-29 09:24:29
- */
-public interface DiskFileRepository extends JpaRepository<DiskFile, Integer> {
-    DiskFile findByObjectName(String objectName);
-    List<DiskFile> findBySha256sum(String sha256sum);
-}

+ 0 - 15
manager/src/main/java/cn/reghao/devops/manager/account/db/repository/MenuRepository.java

@@ -1,15 +0,0 @@
-package cn.reghao.devops.manager.account.db.repository;
-
-import cn.reghao.devops.manager.account.model.po.Menu;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2019-08-29 10:52:14
- */
-public interface MenuRepository extends JpaRepository<Menu, Integer> {
-    List<Menu> findByPid(int pid);
-    List<Menu> findByEnabled(boolean isEnabled);
-}

+ 0 - 13
manager/src/main/java/cn/reghao/devops/manager/account/db/repository/RoleRepository.java

@@ -1,13 +0,0 @@
-package cn.reghao.devops.manager.account.db.repository;
-
-import cn.reghao.devops.manager.account.model.po.Role;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-
-/**
- * @author reghao
- * @date 2019-08-29 10:52:14
- */
-public interface RoleRepository extends JpaRepository<Role, Integer>, JpaSpecificationExecutor<Role> {
-    Role findByName(String name);
-}

+ 0 - 13
manager/src/main/java/cn/reghao/devops/manager/account/db/repository/UserRepository.java

@@ -1,13 +0,0 @@
-package cn.reghao.devops.manager.account.db.repository;
-
-import cn.reghao.devops.manager.account.model.po.User;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-
-/**
- * @author reghao
- * @date 2019-08-29 10:52:14
- */
-public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> {
-    User findByUsername(String username);
-}

+ 0 - 9
manager/src/main/java/cn/reghao/devops/manager/account/model/constant/DataStatus.java

@@ -1,9 +0,0 @@
-package cn.reghao.devops.manager.account.model.constant;
-
-/**
- * @author reghao
- * @date 2021-05-17 13:50:14
- */
-public enum DataStatus {
-    ENABLE, DISABLE
-}

+ 0 - 11
manager/src/main/java/cn/reghao/devops/manager/account/model/constant/MenuType.java

@@ -1,11 +0,0 @@
-package cn.reghao.devops.manager.account.model.constant;
-
-/**
- * 菜单类型
- *
- * @author reghao
- * @date 2021-04-05 02:22:44
- */
-public enum MenuType {
-    dir, page
-}

+ 0 - 25
manager/src/main/java/cn/reghao/devops/manager/account/model/constant/RoleType.java

@@ -1,25 +0,0 @@
-package cn.reghao.devops.manager.account.model.constant;
-
-/**
- * 角色类型
- *
- * @author reghao
- * @date 2021-04-05 02:22:44
- */
-public enum RoleType {
-    ROLE_ADMIN("管理员"),
-    ROLE_USER("普通用户"),
-    ROLE_BACKEND("后端"),
-    ROLE_FRONTEND("前端"),
-    ROLE_TEST("测试");
-
-    private final String desc;
-
-    RoleType(String desc) {
-        this.desc = desc;
-    }
-
-    public String getDesc() {
-        return desc;
-    }
-}

+ 0 - 34
manager/src/main/java/cn/reghao/devops/manager/account/model/constant/UserGender.java

@@ -1,34 +0,0 @@
-package cn.reghao.devops.manager.account.model.constant;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 用户性别
- *
- * @author reghao
- * @date 2021-07-14 10:23:46
- */
-public enum UserGender {
-    female(0, "女"), male(1, "男"), unknown(2, "未知");
-
-    private final Integer code;
-    private final String desc;
-
-    private static Map<Integer, String> descMap = new HashMap<>();
-    static {
-        for (UserGender gender : UserGender.values()) {
-            descMap.put(gender.code, gender.desc);
-        }
-    }
-
-    UserGender(Integer code, String desc) {
-        this.code = code;
-        this.desc = desc;
-    }
-
-    // TODO 第一次调用时会初始化 descMap
-    public static String getDescByCode(int code) {
-        return descMap.get(code);
-    }
-}

+ 0 - 33
manager/src/main/java/cn/reghao/devops/manager/account/model/dto/AccountLoginDto.java

@@ -1,33 +0,0 @@
-package cn.reghao.devops.manager.account.model.dto;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.Setter;
-import org.hibernate.validator.constraints.Length;
-
-import javax.validation.constraints.NotBlank;
-import java.io.Serializable;
-
-/**
- * 用户登录提交的数据
- *
- * @author reghao
- * @date 2021-11-17 16:36:05
- */
-@Setter
-@Getter
-public class AccountLoginDto implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    @NotBlank
-    private String principal;
-    @NotBlank
-    private String credential;
-    @Length(min = 5, max = 5, message = "图形验证码应是 5 个字符")
-    private String captchaCode;
-    private Boolean rememberMe;
-
-    public AccountLoginDto() {
-        this.rememberMe = false;
-    }
-}

+ 0 - 21
manager/src/main/java/cn/reghao/devops/manager/account/model/dto/AccountProfile.java

@@ -1,21 +0,0 @@
-package cn.reghao.devops.manager.account.model.dto;
-
-import lombok.Data;
-
-import javax.validation.constraints.NotBlank;
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2021-07-12 16:06:11
- */
-@Data
-public class AccountProfile implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private Integer userId;
-    @NotBlank(message = "用户名不能为空白字符串")
-    private String screenName;
-    private String mobile;
-    private String email;
-    private Integer gender;
-}

+ 0 - 20
manager/src/main/java/cn/reghao/devops/manager/account/model/dto/AccountRole.java

@@ -1,20 +0,0 @@
-package cn.reghao.devops.manager.account.model.dto;
-
-import cn.reghao.devops.manager.account.model.po.Role;
-import lombok.Data;
-
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-import java.util.Set;
-
-/**
- * @author reghao
- * @date 2021-07-14 09:37:16
- */
-@Data
-public class AccountRole implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private Integer userId;
-    @NotNull(message = "用户角色不能为 NULL")
-    private Set<Role> roles;
-}

+ 0 - 31
manager/src/main/java/cn/reghao/devops/manager/account/model/dto/CreateAccountDto.java

@@ -1,31 +0,0 @@
-package cn.reghao.devops.manager.account.model.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-
-/**
- * @author reghao
- * @date 2023-10-23 17:38:19
- */
-@Setter
-@Getter
-public class CreateAccountDto {
-    @NotBlank(message = "必须指定登录名")
-    private String username;
-    @NotBlank(message = "必须指定用户名")
-    private String screenName;
-    @NotBlank(message = "必须指定登录密码")
-    private String password;
-    @NotNull(message = "必须选择用户角色")
-    private Integer roleId;
-
-    public CreateAccountDto(String username, String password, int roleId) {
-        this.username = username;
-        this.screenName = username;
-        this.password = password;
-        this.roleId = roleId;
-    }
-}

+ 0 - 44
manager/src/main/java/cn/reghao/devops/manager/account/model/dto/MenuAddDTO.java

@@ -1,44 +0,0 @@
-package cn.reghao.devops.manager.account.model.dto;
-
-import cn.reghao.devops.manager.account.model.po.Menu;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2021-04-04 22:42:14
- */
-@NoArgsConstructor
-@Data
-public class MenuAddDTO implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    // Menu 类型
-    @NotBlank(message = "菜单类型不能为空白字符串")
-    private String type;
-    @NotBlank(message = "菜单名不能为空白字符串")
-    private String name;
-    @NotBlank(message = "URL 地址不能为空白字符串,目录类型使用可使用 # 字符")
-    private String url;
-    // 父级菜单 ID
-    @NotNull(message = "父级菜单不能为 NULL")
-    private Integer pid;
-    // 在同一个 pid 组内的位置,作为排序使用
-    private Integer pos;
-
-    public Menu to() {
-        Menu menu = new Menu();
-        menu.setType(this.getType());
-        menu.setName(this.getName());
-        menu.setUrl(this.getUrl());
-        menu.setIcon("layui-icon layui-icon-face-smile");
-        menu.setPid(this.getPid());
-        menu.setPos(this.getPos());
-        menu.setEnabled(true);
-        return menu;
-    }
-}

+ 0 - 46
manager/src/main/java/cn/reghao/devops/manager/account/model/dto/MenuDTO.java

@@ -1,46 +0,0 @@
-package cn.reghao.devops.manager.account.model.dto;
-
-import cn.reghao.devops.manager.account.model.po.Menu;
-import cn.reghao.devops.manager.account.model.po.Role;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-import java.util.Set;
-
-/**
- * @author reghao
- * @date 2021-07-15 14:06:13
- */
-@NoArgsConstructor
-@Data
-public class MenuDTO implements Serializable {
-    private static final long serialVersionUID = 1L;
-    @NotNull(message = "菜单 ID 不能为 NULL")
-    private Integer menuId;
-    // 父级菜单 ID
-    @NotNull(message = "父级菜单不能为 NULL")
-    private Integer pid;
-    // 在同一个 pid 组内的位置,作为排序使用
-    private Integer pos;
-    @NotBlank(message = "菜单名不能为空白字符串")
-    private String name;
-    @NotBlank(message = "URL 地址不能为空白字符串,目录类型使用可使用 # 字符")
-    private String url;
-    private String icon;
-    @NotNull(message = "角色不能为 NULL")
-    @JsonIgnore
-    private Set<Role> roles;
-
-    public MenuDTO(Menu menu) {
-        this.menuId = menu.getId();
-        this.pid = menu.getPid();
-        this.pos = menu.getPos();
-        this.name = menu.getName();
-        this.url = menu.getUrl();
-        this.icon = menu.getIcon();
-    }
-}

+ 0 - 52
manager/src/main/java/cn/reghao/devops/manager/account/model/dto/MenuUpdateDTO.java

@@ -1,52 +0,0 @@
-package cn.reghao.devops.manager.account.model.dto;
-
-import cn.reghao.devops.manager.account.model.po.Menu;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2021-07-15 14:06:13
- */
-@NoArgsConstructor
-@Data
-public class MenuUpdateDTO implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    @NotNull(message = "菜单 ID 不能为 NULL")
-    private Integer menuId;
-    @NotBlank(message = "菜单名不能为空白字符串")
-    private String name;
-    @NotBlank(message = "URL 地址不能为空白字符串,目录类型使用可使用 # 字符")
-    private String url;
-    private String icon;
-    // 父级菜单 ID
-    @NotNull(message = "父级菜单不能为 NULL")
-    private Integer pid;
-    // 在同一个 pid 组内的位置,作为排序使用
-    private Integer pos;
-
-    public MenuUpdateDTO(Menu menu) {
-        this.menuId = menu.getId();
-        this.name = menu.getName();
-        this.url = menu.getUrl();
-        this.icon = menu.getIcon();
-        this.pid = menu.getPid();
-        this.pos = menu.getPos();
-    }
-
-    public Menu to() {
-        Menu menu = new Menu();
-        menu.setId(this.getMenuId());
-        menu.setName(this.getName());
-        menu.setUrl(this.getUrl());
-        menu.setIcon(this.getIcon());
-        menu.setPid(this.getPid());
-        menu.setPos(this.getPos());
-        return menu;
-    }
-}

+ 0 - 35
manager/src/main/java/cn/reghao/devops/manager/account/model/dto/RoleDTO.java

@@ -1,35 +0,0 @@
-package cn.reghao.devops.manager.account.model.dto;
-
-import cn.reghao.devops.manager.account.model.po.Role;
-import cn.reghao.jutil.jdk.converter.DateTimeConverter;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.hibernate.validator.constraints.Length;
-
-import javax.validation.constraints.Pattern;
-
-/**
- * @author reghao
- * @date 2021-07-14 14:14:07
- */
-@NoArgsConstructor
-@Data
-public class RoleDTO {
-    private Integer roleId;
-    @Pattern(regexp = "^\\w+$", message = "角色只能是数字、英文字符和下划线")
-    private String name;
-    @Length(max = 100, message = "描述的长度不超过 100 个中文字符")
-    private String description;
-    private String createTime;
-
-    public Role to() {
-        Role role = new Role();
-        if (this.getRoleId() != null) {
-            role.setId(this.getRoleId());
-        }
-
-        role.setName("ROLE_" + this.getName());
-        role.setDescription(this.getDescription());
-        return role;
-    }
-}

+ 0 - 19
manager/src/main/java/cn/reghao/devops/manager/account/model/dto/RsaPubkey.java

@@ -1,19 +0,0 @@
-package cn.reghao.devops.manager.account.model.dto;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-/**
- * @author reghao
- * @date 2024-01-29 13:49:33
- */
-@NoArgsConstructor
-@AllArgsConstructor
-@Setter
-@Getter
-public class RsaPubkey {
-    private String pubkey;
-    private String r;
-}

+ 0 - 19
manager/src/main/java/cn/reghao/devops/manager/account/model/dto/UpdatePasswordDto.java

@@ -1,19 +0,0 @@
-package cn.reghao.devops.manager.account.model.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2023-02-22 11:04:24
- */
-@Setter
-@Getter
-public class UpdatePasswordDto implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private String original;
-    private String password;
-}

+ 0 - 24
manager/src/main/java/cn/reghao/devops/manager/account/model/dto/UserUpdateDTO.java

@@ -1,24 +0,0 @@
-package cn.reghao.devops.manager.account.model.dto;
-
-import lombok.Data;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2021-07-12 16:06:11
- */
-@Data
-public class UserUpdateDTO implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    @NotNull(message = "用户 ID 不能为 NULL")
-    private Integer userId;
-    @NotBlank(message = "用户名不能为空白字符串")
-    private String screenName;
-    // TODO 验证邮箱和手机号码是否有效
-    private String mobile;
-    private String email;
-}

+ 0 - 57
manager/src/main/java/cn/reghao/devops/manager/account/model/po/DiskFile.java

@@ -1,57 +0,0 @@
-package cn.reghao.devops.manager.account.model.po;
-
-import cn.reghao.devops.manager.util.db.BaseEntity;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-
-/**
- * @author reghao
- * @date 2023-11-11 00:06:21
- */
-@NoArgsConstructor
-@AllArgsConstructor
-@Setter
-@Getter
-@Entity
-public class DiskFile extends BaseEntity {
-    @Column(nullable = false, unique = true)
-    private String objectName;
-    @Column(nullable = false, unique = true)
-    private String objectId;
-    @Column(nullable = false)
-    private String absolutePath;
-    @Column(nullable = false)
-    private String sha256sum;
-    @Column(nullable = false)
-    private String filename;
-    @Column(nullable = false)
-    private String contentType;
-    @Column(nullable = false)
-    private Long size;
-    private Long owner;
-
-    public DiskFile(String objectName, String objectId, DiskFile diskFile, String filename) {
-        this.objectName = objectName;
-        this.objectId = objectId;
-        this.absolutePath = diskFile.getAbsolutePath();
-        this.sha256sum = diskFile.getSha256sum();
-        this.filename = filename;
-        this.contentType = diskFile.getContentType();
-        this.size = diskFile.getSize();
-    }
-
-    public DiskFile(String objectName, String objectId, String absolutePath, String sha256sum, String filename, String contentType, long size) {
-        this.objectName = objectName;
-        this.objectId = objectId;
-        this.absolutePath = absolutePath;
-        this.sha256sum = sha256sum;
-        this.filename = filename;
-        this.contentType = contentType;
-        this.size = size;
-    }
-}

+ 0 - 52
manager/src/main/java/cn/reghao/devops/manager/account/model/po/Menu.java

@@ -1,52 +0,0 @@
-package cn.reghao.devops.manager.account.model.po;
-
-import cn.reghao.devops.manager.util.db.BaseEntity;
-import lombok.*;
-
-import javax.persistence.*;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.util.*;
-
-/**
- * Layui 菜单, 作为 RBAC 中的 resource
- *
- * @author reghao
- * @date 2021-04-04 22:42:14
- */
-@NoArgsConstructor
-@Setter
-@Getter
-@Table(name = "sys_menu")
-@Entity
-public class Menu extends BaseEntity {
-    // Menu 类型
-    @NotBlank(message = "菜单类型不能为空白字符串")
-    private String type;
-    @NotBlank(message = "菜单名不能为空白字符串")
-    private String name;
-    @NotBlank(message = "URL 地址不能为空白字符串,目录类型使用可使用 # 字符")
-    private String url;
-    @NotNull(message = "菜单图标不能为 NULL")
-    private String icon;
-    // 父级菜单 ID
-    @NotNull(message = "父级菜单不能为 NULL")
-    private Integer pid;
-    // 在同一个 pid 组内的位置,作为排序使用
-    @NotNull
-    private Integer pos;
-    private Boolean enabled;
-    // Menu 拥有的所有子 Menu(按排序顺序, 不持久化)
-    @Transient
-    private Map<Integer, Menu> children;
-    @ManyToMany(mappedBy = "menus")
-    @NotNull(message = "角色不能为 NULL")
-    private Set<Role> roles;
-    @Transient
-    private String remark;
-
-    public Menu(int id, String name) {
-        this.id = id;
-        this.name = name;
-    }
-}

+ 0 - 43
manager/src/main/java/cn/reghao/devops/manager/account/model/po/Role.java

@@ -1,43 +0,0 @@
-package cn.reghao.devops.manager.account.model.po;
-
-import cn.reghao.devops.manager.util.db.BaseEntity;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import lombok.ToString;
-import org.hibernate.validator.constraints.Length;
-
-import javax.persistence.*;
-import javax.validation.constraints.Pattern;
-import java.util.Set;
-
-/**
- * @author reghao
- * @date 2019/03/14 21:46:13
- */
-@NoArgsConstructor
-@Data
-@EqualsAndHashCode(callSuper = false, exclude = {"description", "menus"})
-@ToString(exclude = {"menus"})
-@Table(name = "sys_role")
-@Entity
-public class Role extends BaseEntity {
-    // TODO 匹配小写英文字符报错
-    // @Pattern(regexp = "^[a-z]+$", message = "角色只能是英文字符")
-    @Pattern(regexp = "^\\w+$", message = "角色只能是英文字符")
-    @Column(unique = true, nullable = false)
-    private String name;
-    @Length(max = 100, message = "对角色描述的长度不超过 100 个中文字符")
-    private String description;
-    // Role 端维护 Role 和 Menu 之间的关系
-    @ManyToMany
-    @JoinTable(name = "sys_role_menu",
-            joinColumns = @JoinColumn(name = "role_id"),
-            inverseJoinColumns = @JoinColumn(name = "menu_id"))
-    private Set<Menu> menus;
-
-    public Role(String name, String description) {
-        this.name = name;
-        this.description = description;
-    }
-}

+ 0 - 135
manager/src/main/java/cn/reghao/devops/manager/account/model/po/User.java

@@ -1,135 +0,0 @@
-package cn.reghao.devops.manager.account.model.po;
-
-import cn.reghao.devops.manager.util.db.BaseEntity;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import lombok.*;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.userdetails.UserDetails;
-
-import javax.persistence.*;
-import javax.validation.constraints.NotBlank;
-import java.time.LocalDateTime;
-import java.util.Collection;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-/**
- * 用户
- *
- * @author reghao
- * @date 2019/03/14 19:12:48
- */
-@NoArgsConstructor
-@Getter
-@Setter
-@Table(name = "sys_user")
-@Entity
-public class User extends BaseEntity implements UserDetails {
-    // 用户名和密码
-    @Column(nullable = false, unique = true)
-    @NotBlank(message = "用户名不能为空白字符串")
-    private String username;
-    @Column(nullable = false)
-    @JsonIgnore
-    @NotBlank(message = "密码不能为空白字符串")
-    private String encodedPassword;
-    @Column(nullable = false)
-    private String salt;
-    private LocalDateTime createAt;
-
-    @ElementCollection(fetch = FetchType.EAGER)
-    @CollectionTable(name = "sys_user_role")
-    private Set<String> role;
-    private Boolean enabled = true;
-    private Boolean locked = false;
-
-    @NotBlank(message = "用户名不能为空白字符串")
-    private String screenName;
-    private String avatarUrl;
-    private String mobile;
-    private String email;
-    private Integer gender;
-
-    public User(String username, String encodedPassword, String salt, Set<String> roles) {
-        this.username = username;
-        this.encodedPassword = encodedPassword;
-        this.salt = salt;
-        this.createAt = LocalDateTime.now();
-        this.role = roles;
-        this.enabled = true;
-        this.locked = false;
-        this.screenName = username;
-        this.gender = 3;
-        this.avatarUrl = "/imgs/avatar.jpg";
-    }
-
-    @Override
-    public String getUsername() {
-        return username;
-    }
-
-    @Override
-    public String getPassword() {
-        return encodedPassword;
-    }
-
-    /**
-     * 帐号是否未过期
-     *
-     * @param
-     * @return
-     * @date 2019-05-29 下午2:05
-     */
-    @Override
-    public boolean isAccountNonExpired() {
-        return true;
-    }
-
-    /**
-     * 密码是否未过期
-     *
-     * @param
-     * @return
-     * @date 2019-05-29 下午2:05
-     */
-    @Override
-    public boolean isCredentialsNonExpired() {
-        return true;
-    }
-
-    /**
-     * 帐号是否可用
-     *
-     * @param
-     * @return
-     * @date 2019-05-29 下午2:05
-     */
-    @Override
-    public boolean isEnabled() {
-        return enabled;
-    }
-
-    /**
-     * 帐号是否锁定
-     *
-     * @param
-     * @return
-     * @date 2019-05-29 下午2:05
-     */
-    @Override
-    public boolean isAccountNonLocked() {
-        return locked;
-    }
-
-    /**
-     * 权限列表
-     *
-     * @param
-     * @return
-     * @date 2019-05-29 下午2:22
-     */
-    @Override
-    public Collection<? extends GrantedAuthority> getAuthorities() {
-        return role.stream().map(UserAuthority::new).collect(Collectors.toSet());
-    }
-}

+ 0 - 49
manager/src/main/java/cn/reghao/devops/manager/account/model/po/UserAuthority.java

@@ -1,49 +0,0 @@
-package cn.reghao.devops.manager.account.model.po;
-
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.SpringSecurityCoreVersion;
-import org.springframework.util.Assert;
-
-/**
- * SimpleGrantedAuthority 的重写, 仅用于 SpringSecurity
- *
- * @author reghao
- * @date 2020-06-24 14:44:25
- */
-public class UserAuthority implements GrantedAuthority {
-    private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;
-    private final String role;
-
-    public UserAuthority(String role) {
-        Assert.hasText(role, "A granted authority textual representation is required");
-        this.role = role;
-    }
-
-    @Override
-    public String getAuthority() {
-        return role;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-
-        if (obj instanceof UserAuthority) {
-            return role.equals(((UserAuthority) obj).role);
-        }
-
-        return false;
-    }
-
-    @Override
-    public int hashCode() {
-        return this.role.hashCode();
-    }
-
-    @Override
-    public String toString() {
-        return this.role;
-    }
-}

+ 0 - 26
manager/src/main/java/cn/reghao/devops/manager/account/model/vo/MenuVO.java

@@ -1,26 +0,0 @@
-package cn.reghao.devops.manager.account.model.vo;
-
-import cn.reghao.devops.manager.account.model.po.Menu;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * @author reghao
- * @date 2021-07-15 14:06:13
- */
-@Data
-public class MenuVO implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private Integer menuId;
-    private String name;
-    private String url;
-    private String type;
-
-    public MenuVO(Menu menu) {
-        this.menuId = menu.getId();
-        this.name = menu.getName();
-        this.url = menu.getUrl();
-        this.type = menu.getType();
-    }
-}

+ 0 - 28
manager/src/main/java/cn/reghao/devops/manager/account/model/vo/RoleVO.java

@@ -1,28 +0,0 @@
-package cn.reghao.devops.manager.account.model.vo;
-
-import cn.reghao.devops.manager.account.model.po.Role;
-import cn.reghao.jutil.jdk.converter.DateTimeConverter;
-import lombok.Data;
-
-import java.util.Locale;
-
-/**
- * @author reghao
- * @date 2021-07-14 14:14:07
- */
-@Data
-public class RoleVO {
-    private Integer roleId;
-    private String name;
-    private String description;
-    private String createTime;
-    private String updateTime;
-
-    public RoleVO(Role role) {
-        this.roleId = role.getId();
-        this.name = role.getName().split("ROLE_")[1].toLowerCase(Locale.ROOT);
-        this.description = role.getDescription();
-        this.createTime = DateTimeConverter.format(role.getCreateTime());
-        this.updateTime = DateTimeConverter.format(role.getUpdateTime());
-    }
-}

+ 0 - 36
manager/src/main/java/cn/reghao/devops/manager/account/model/vo/UserVO.java

@@ -1,36 +0,0 @@
-package cn.reghao.devops.manager.account.model.vo;
-
-import cn.reghao.devops.common.util.NotAvailable;
-import cn.reghao.devops.manager.account.model.constant.UserGender;
-import cn.reghao.devops.manager.account.model.po.User;
-import cn.reghao.jutil.jdk.converter.DateTimeConverter;
-import lombok.Data;
-
-/**
- * @author reghao
- * @date 2021-07-14 10:28:47
- */
-@Data
-public class UserVO {
-    private Integer userId;
-    private String username;
-    private String screenName;
-    private String gender;
-    private String mobile;
-    private String email;
-    private String createTime;
-    private String lastAccess;
-    private String status;
-
-    public UserVO(User user) {
-        this.userId = user.getId();
-        this.username = user.getUsername();
-        this.screenName = user.getScreenName();
-        this.gender = UserGender.getDescByCode(user.getGender());
-        this.mobile = user.getMobile();
-        this.email = user.getEmail();
-        this.createTime = DateTimeConverter.format(user.getCreateTime());
-        this.status = user.getEnabled() ? "启用" : "禁用";
-        this.lastAccess = NotAvailable.na.getDesc();
-    }
-}

+ 0 - 28
manager/src/main/java/cn/reghao/devops/manager/account/security/ExceptionAuthenticationEntryPoint.java

@@ -1,28 +0,0 @@
-package cn.reghao.devops.manager.account.security;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.web.AuthenticationEntryPoint;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * 在 WebSecurityConfig 中配置的需要认证的接口没有获取到请求中的认证信息时会转到此处进行处理
- *
- * @author reghao
- * @date 2023-07-28 16:43:59
- */
-@Slf4j
-public class ExceptionAuthenticationEntryPoint implements AuthenticationEntryPoint {
-    @Override
-    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception)
-            throws IOException, ServletException {
-        String uri = request.getRequestURI();
-        String errMsg = exception.getMessage();
-        log.error("请求 {} 接口认证失败: {}, 重定向到登录页面", uri, errMsg);
-        response.sendRedirect("/login");
-    }
-}

+ 0 - 199
manager/src/main/java/cn/reghao/devops/manager/account/security/WebSecurityConfig.java

@@ -1,199 +0,0 @@
-package cn.reghao.devops.manager.account.security;
-
-import cn.reghao.devops.manager.account.security.filter.LoginRedirectFilter;
-import cn.reghao.devops.manager.account.security.form.AccountAuthFilter;
-import cn.reghao.devops.manager.account.security.form.AccountAuthProvider;
-import cn.reghao.devops.manager.account.service.AccountAuthService;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.access.hierarchicalroles.RoleHierarchy;
-import org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
-import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.builders.WebSecurity;
-import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
-import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
-import org.springframework.security.config.http.SessionCreationPolicy;
-import org.springframework.security.core.session.SessionRegistry;
-import org.springframework.security.web.authentication.AuthenticationFailureHandler;
-import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
-import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
-import org.springframework.security.web.authentication.logout.LogoutHandler;
-import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
-import org.springframework.security.web.authentication.session.*;
-import org.springframework.security.web.context.SecurityContextPersistenceFilter;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Web 应用安全配置
- *
- * @author reghao
- * @date 2019-05-20 10:41:10
- */
-@Configuration
-@EnableWebSecurity
-@EnableGlobalMethodSecurity(prePostEnabled = true) // 调用方法时检查权限
-public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
-    private final String loginPage = "/login";
-    private final String loginApi = "/login";
-    private final String logoutApi = "/logout";
-
-    private final AccountAuthProvider userAuthProvider;
-    private final AccountAuthService accountAuthService;
-    private final AuthenticationSuccessHandler successHandler;
-    private final AuthenticationFailureHandler failureHandler;
-    private final LogoutHandler logoutHandler;
-    private final LogoutSuccessHandler logoutSuccessHandler;
-    private final SessionRegistry sessionRegistry;
-
-    public WebSecurityConfig(AccountAuthProvider userAuthProvider, AccountAuthService accountAuthService,
-                             AuthenticationSuccessHandler successHandler, AuthenticationFailureHandler failureHandler,
-                             LogoutHandler logoutHandler, LogoutSuccessHandler logoutSuccessHandler,
-                             SessionRegistry sessionRegistry) {
-        this.userAuthProvider = userAuthProvider;
-        this.accountAuthService = accountAuthService;
-        this.successHandler = successHandler;
-        this.failureHandler = failureHandler;
-        this.logoutHandler = logoutHandler;
-        this.logoutSuccessHandler = logoutSuccessHandler;
-        this.sessionRegistry = sessionRegistry;
-    }
-
-    /**
-     * 放行静态资源
-     *
-     * @param
-     * @return
-     * @date 2021-04-04 下午9:06
-     */
-    @Override
-    public void configure(WebSecurity web) {
-        web.ignoring()
-                .antMatchers("/ws/**")
-                .antMatchers("/css/**")
-                .antMatchers("/imgs/**")
-                .antMatchers("/js/**")
-                .antMatchers("/lib/**");
-    }
-
-    @Override
-    protected void configure(HttpSecurity http) throws Exception {
-        http.authorizeRequests()
-                .antMatchers("/login").permitAll()
-                // 放行匹配前缀的请求
-                .antMatchers("/api/account/code/**").permitAll()
-                .anyRequest().authenticated();
-
-        // 配置 FilterChainProxy 过滤器链
-        http.addFilterAfter(new LoginRedirectFilter(), SecurityContextPersistenceFilter.class);
-        http.addFilterBefore(accountAuthFilter(sessionRegistry), UsernamePasswordAuthenticationFilter.class);
-
-        // 禁用 UsernamePasswordAuthenticationFilter, 使用自定义的 AccountAuthFilter
-        http.formLogin().disable();
-
-        // 配置 LogoutFilter
-        http.logout()
-                .logoutUrl(logoutApi)
-                .addLogoutHandler(logoutHandler)
-                .logoutSuccessHandler(logoutSuccessHandler);
-
-        // 配置 ExceptionTranslationFilter, 登录认证接口失败时的处理, 不会重定向到 loginPage
-        http.exceptionHandling()
-                .authenticationEntryPoint(new ExceptionAuthenticationEntryPoint());
-
-        // 配置 SessionManagementFilter 和 ConcurrentSessionFilter
-        http.sessionManagement()
-                .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
-                //.sessionAuthenticationStrategy(new MySessionAuthenticationStrategy(sessionRegistry()));
-                .maximumSessions(1)
-                .expiredUrl(loginPage);
-
-        // 配置 RememberMeAuthenticationFilter, 禁用 RememberMeAuthenticationFilter
-        http.rememberMe().disable();
-                /*.key("DExNzAyNTQ2Nzo3NDI3MTNhYmM5MGE5")
-                .rememberMeParameter("rememberMe");*/
-
-        // 配置 CorsFilter, 禁用 CorsFilter
-        http.cors().disable();
-
-        // 配置 CsrfFilter, 禁用 CsrfFilter
-        http.csrf().disable();
-
-        // 配置 HeaderWriterFilter, 禁用 HeaderWriterFilter
-        http.headers().disable();
-    }
-
-    /**
-     * 配置认证管理器
-     *
-     * @param
-     * @return
-     * @date 2021-07-25 下午2:28
-     */
-    @Bean
-    @Override
-    public AuthenticationManager authenticationManagerBean() throws Exception {
-        return super.authenticationManagerBean();
-    }
-
-    /**
-     * 配置认证使用的 provider
-     *
-     * @param
-     * @return
-     * @date 2021-07-25 下午2:31
-     */
-    @Override
-    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
-        auth.authenticationProvider(userAuthProvider);
-    }
-
-    /**
-     * 配置账号密码登录 filter
-     *
-     * @param
-     * @return
-     * @date 2022-07-06 上午9:54
-     */
-    @Bean
-    public AccountAuthFilter accountAuthFilter(SessionRegistry sessionRegistry) throws Exception {
-        AccountAuthFilter filter = new AccountAuthFilter(loginApi, "POST", accountAuthService);
-        filter.setAuthenticationManager(super.authenticationManager());
-        filter.setAuthenticationSuccessHandler(successHandler);
-        filter.setAuthenticationFailureHandler(failureHandler);
-        filter.setSessionAuthenticationStrategy(sessionAuthenticationStrategy(sessionRegistry));
-        return filter;
-    }
-
-    public CompositeSessionAuthenticationStrategy sessionAuthenticationStrategy(SessionRegistry sessionRegistry){
-        ConcurrentSessionControlAuthenticationStrategy controlAuthenticationStrategy =
-                new ConcurrentSessionControlAuthenticationStrategy(sessionRegistry);
-        // 设置帐号同时登录的最大数量
-        controlAuthenticationStrategy.setMaximumSessions(1);
-        //controlAuthenticationStrategy.setExceptionIfMaximumExceeded(true);
-
-        List<SessionAuthenticationStrategy> authenticationStrategies = new ArrayList<>();
-        authenticationStrategies.add(controlAuthenticationStrategy);
-        authenticationStrategies.add(new SessionFixationProtectionStrategy());
-        authenticationStrategies.add(new RegisterSessionAuthenticationStrategy(sessionRegistry));
-
-        return new CompositeSessionAuthenticationStrategy(authenticationStrategies);
-    }
-
-    /**
-     * 角色继承
-     * ADMIN 可以访问 USER 的权限,反之不可
-     *
-     * @date 2019-07-05 上午11:18
-     */
-    @Bean
-    public RoleHierarchy roleHierarchy() {
-        RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
-        roleHierarchy.setHierarchy("ROLE_ADMIN > ROLE_USER");
-        return roleHierarchy;
-    }
-}

+ 0 - 36
manager/src/main/java/cn/reghao/devops/manager/account/security/encoder/Md5PasswordEncoder.java

@@ -1,36 +0,0 @@
-package cn.reghao.devops.manager.account.security.encoder;
-
-import cn.reghao.jutil.jdk.security.Md5Cryptor;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.stereotype.Component;
-
-import java.security.NoSuchAlgorithmException;
-
-/**
- * @author reghao
- * @date 2019-03-26 14:46:57
- */
-@Component
-public class Md5PasswordEncoder implements PasswordEncoder {
-    private final Md5Cryptor md5Cryptor;
-
-    public Md5PasswordEncoder() throws NoSuchAlgorithmException {
-        this.md5Cryptor = new Md5Cryptor();
-    }
-
-    @Override
-    public String encode(CharSequence rawPassword) {
-        // rawPassword 带盐值
-        return md5Cryptor.encrypt(rawPassword.toString());
-    }
-
-    private byte[] encode(CharSequence rawPassword, byte[] salt) {
-        return null;
-    }
-
-    @Override
-    public boolean matches(CharSequence rawPassword, String encodedPassword) {
-        String password = md5Cryptor.encrypt(rawPassword.toString());
-        return encodedPassword.equals(password);
-    }
-}

+ 0 - 13
manager/src/main/java/cn/reghao/devops/manager/account/security/exceptioin/AccountLoginException.java

@@ -1,13 +0,0 @@
-package cn.reghao.devops.manager.account.security.exceptioin;
-
-import org.springframework.security.core.AuthenticationException;
-
-/**
- * @author reghao
- * @date 2020-10-09 22:26:09
- */
-public class AccountLoginException extends AuthenticationException {
-    public AccountLoginException(String msg) {
-        super(msg);
-    }
-}

+ 0 - 33
manager/src/main/java/cn/reghao/devops/manager/account/security/filter/LoginRedirectFilter.java

@@ -1,33 +0,0 @@
-package cn.reghao.devops.manager.account.security.filter;
-
-import org.springframework.security.core.context.SecurityContext;
-import org.springframework.security.core.context.SecurityContextHolder;
-
-import javax.servlet.*;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * 已登录状态下,访问 /login 页面自动跳转到 /
- *
- * @author reghao
- * @date 2019-06-04 23:06:50
- */
-public class LoginRedirectFilter implements Filter {
-    @Override
-    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
-            throws IOException, ServletException {
-        HttpServletRequest httpRequest = (HttpServletRequest) request;
-        HttpServletResponse httpResponse = (HttpServletResponse) response;
-
-        SecurityContext securityContext = SecurityContextHolder.getContext();
-        String url = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length());
-        if (securityContext != null && securityContext.getAuthentication() != null && "/login".equals(url)) {
-            // 将登录页面重定向到主页
-            httpResponse.sendRedirect("/");
-        } else {
-            chain.doFilter(request, response);
-        }
-    }
-}

+ 0 - 48
manager/src/main/java/cn/reghao/devops/manager/account/security/form/AccountAuthFilter.java

@@ -1,48 +0,0 @@
-package cn.reghao.devops.manager.account.security.form;
-
-import cn.reghao.devops.manager.account.model.dto.AccountLoginDto;
-import cn.reghao.devops.manager.account.service.AccountAuthService;
-import cn.reghao.jutil.web.ServletUtil;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
-import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * 账号密码登录 filter
- * 替换 UsernamePasswordAuthenticationFilter,用于认证用户,匹配指定 URL 才会进行处理
- *
- * @author reghao
- * @date 2022-07-06 15:55:59
- */
-public class AccountAuthFilter extends AbstractAuthenticationProcessingFilter {
-    private final AccountAuthService accountAuthService;
-
-    public AccountAuthFilter(String authUrl, String httpMethod, AccountAuthService accountAuthService) {
-        super(new AntPathRequestMatcher(authUrl, httpMethod));
-        this.accountAuthService = accountAuthService;
-    }
-
-    /**
-     * 构造 Authentication 对象
-     * 参照 UsernamePasswordAuthenticationFilter
-     *
-     * @param
-     * @return
-     * @date 2020-05-06 上午11:16
-     */
-    @Override
-    public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
-            throws AuthenticationException, IOException, ServletException {
-        // json payload 中的 username 和 password 参数
-        AccountLoginDto accountLoginDto = (AccountLoginDto) ServletUtil.getBody(request, AccountLoginDto.class);
-        AccountAuthToken preAuthToken = accountAuthService.getPreAuthentication(accountLoginDto);
-        // 调用 UserAuthProvider.authenticate()
-        return this.getAuthenticationManager().authenticate(preAuthToken);
-    }
-}

+ 0 - 42
manager/src/main/java/cn/reghao/devops/manager/account/security/form/AccountAuthProvider.java

@@ -1,42 +0,0 @@
-package cn.reghao.devops.manager.account.security.form;
-
-import cn.reghao.devops.manager.account.service.AccountAuthService;
-import org.springframework.security.authentication.AuthenticationProvider;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.stereotype.Component;
-
-/**
- * 认证用户名/密码登录的 provider
- *
- * @author reghao
- * @date 2019-04-09 09:07:40
- */
-@Component
-public class AccountAuthProvider implements AuthenticationProvider {
-    private final AccountAuthService accountAuthService;
-
-    public AccountAuthProvider(AccountAuthService accountAuthService) {
-        this.accountAuthService = accountAuthService;
-    }
-
-    /**
-     * 对 Authentication 对象进行认证
-     * 参照 DaoAuthenticationProvider
-     *
-     * @param
-     * @return
-     * @date 2020-05-06 上午11:16
-     */
-    @Override
-    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
-        AccountAuthToken preAuthToken = (AccountAuthToken) authentication;
-        AccountAuthToken authToken = accountAuthService.authByPassword(preAuthToken);
-        return authToken;
-    }
-
-    @Override
-    public boolean supports(Class<?> authentication) {
-        return (AccountAuthToken.class.isAssignableFrom(authentication));
-    }
-}

+ 0 - 126
manager/src/main/java/cn/reghao/devops/manager/account/security/form/AccountAuthToken.java

@@ -1,126 +0,0 @@
-package cn.reghao.devops.manager.account.security.form;
-
-import cn.reghao.devops.manager.account.model.po.User;
-import org.springframework.security.authentication.AbstractAuthenticationToken;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.SpringSecurityCoreVersion;
-
-import java.util.List;
-
-/**
- * 参考 org.springframework.security.authentication.UsernamePasswordAuthenticationToken 实现
- *
- * @author reghao
- * @date 2022-07-06 15:59:02
- */
-public class AccountAuthToken extends AbstractAuthenticationToken {
-    private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;
-
-    // ~ Instance fields
-    // ================================================================================================
-    private final String loginId;
-    private final boolean rememberMe;
-    private final Integer userId;
-    private final Object principal;
-    private Object credentials;
-
-    // ~ Constructors
-    // ===================================================================================================
-
-    /**
-     * 等待认证时创建的 Authentication 对象
-     *
-     * This constructor can be safely used by any code that wishes to create a
-     * <code>PasswordAuthToken</code>, as the {@link #isAuthenticated()}
-     * will return <code>false</code>.
-     *
-     */
-    public AccountAuthToken(String loginId, Boolean rememberMe, Object principal, Object credentials) {
-        super(null);
-        super.setAuthenticated(false);
-        this.loginId = loginId;
-        this.rememberMe = rememberMe;
-        this.userId = null;
-        this.principal = principal;
-        this.credentials = credentials;
-    }
-
-    /**
-     * 认证通过时创建的 Authentication 对象
-     *
-     * This constructor should only be used by <code>AuthenticationManager</code> or
-     * <code>AuthenticationProvider</code> implementations that are satisfied with
-     * producing a trusted (i.e. {@link #isAuthenticated()} = <code>true</code>)
-     * authentication token.
-     *
-     * @param authToken
-     * @param user
-     */
-    public AccountAuthToken(AccountAuthToken authToken, User user) {
-        super(user.getAuthorities());
-        super.setAuthenticated(true); // must use super, as we override
-        super.setDetails(user);
-        this.loginId = authToken.getLoginId();
-        this.rememberMe = authToken.isRememberMe();
-        this.userId = user.getId();
-        this.principal = authToken.getPrincipal();
-        this.credentials = authToken.getCredentials();
-    }
-
-    /**
-     * 从 AccessToken 中恢复的已认证 Authentication 对象
-     *
-     * @param
-     * @return
-     * @date 2023-02-17 17:42:27
-     */
-    public AccountAuthToken(int plat, String loginId, int loginType, Object principal, List<GrantedAuthority> authorities) {
-        super(authorities);
-        super.setAuthenticated(true);
-        this.loginId = loginId;
-        this.rememberMe = false;
-        this.userId = Integer.parseInt((String) principal);
-        this.principal = principal;
-        this.credentials = null;
-    }
-
-    // ~ Methods
-    // ========================================================================================================
-    public String getLoginId() {
-        return loginId;
-    }
-
-    public boolean isRememberMe() {
-        return rememberMe;
-    }
-
-    public Integer getUserId() {
-        return this.userId;
-    }
-
-    @Override
-    public Object getCredentials() {
-        return this.credentials;
-    }
-
-    @Override
-    public Object getPrincipal() {
-        return this.principal;
-    }
-
-    /*@Override
-    public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
-        if (isAuthenticated) {
-            throw new IllegalArgumentException(
-                    "Cannot set this token to trusted - use constructor which takes a GrantedAuthority list instead");
-        }
-
-        super.setAuthenticated(false);
-    }*/
-
-    @Override
-    public void eraseCredentials() {
-        super.eraseCredentials();
-        credentials = null;
-    }
-}

+ 0 - 36
manager/src/main/java/cn/reghao/devops/manager/account/security/handler/AuthFailHandlerImpl.java

@@ -1,36 +0,0 @@
-package cn.reghao.devops.manager.account.security.handler;
-
-import cn.reghao.jutil.jdk.result.WebResult;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.web.authentication.AuthenticationFailureHandler;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-/**
- * 认证失败后的处理
- *
- * @author reghao
- * @date 2019-04-09 00:02:34
- */
-@Component
-public class AuthFailHandlerImpl implements AuthenticationFailureHandler {
-    @Override
-    public void onAuthenticationFailure(HttpServletRequest request,
-                                        HttpServletResponse response,
-                                        AuthenticationException exception) throws IOException, ServletException {
-        String errMsg = exception.getMessage();
-        String body = WebResult.failWithMsg(errMsg);
-        writeResponse(response, body);
-    }
-
-    private void writeResponse(HttpServletResponse response, String body) throws IOException {
-        response.setContentType("application/json; charset=utf-8");
-        PrintWriter printWriter = response.getWriter();
-        printWriter.write(body);
-    }
-}

+ 0 - 55
manager/src/main/java/cn/reghao/devops/manager/account/security/handler/AuthSuccessHandlerImpl.java

@@ -1,55 +0,0 @@
-package cn.reghao.devops.manager.account.security.handler;
-
-import cn.reghao.jutil.jdk.result.WebResult;
-import cn.reghao.jutil.web.ServletUtil;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
-import org.springframework.security.web.savedrequest.SavedRequest;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-/**
- * 认证成功后跳转到登录前的地址
- *
- * @author reghao
- * @date 2019-04-08 23:50:51
- */
-@Component
-public class AuthSuccessHandlerImpl implements AuthenticationSuccessHandler {
-    @Override
-    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication auth)
-            throws IOException {
-        String redirectPath = getRedirectPath();
-        String body = WebResult.success(redirectPath);
-        writeResponse(response, body);
-    }
-
-    /**
-     * 认证成功后, 重定向到登录前的地址, 需要 session 的支持
-     *
-     * @param
-     * @return
-     * @date 2023-08-16 10:58:41
-     */
-    private String getRedirectPath() {
-        String redirectPath = "/";
-        // 获取 spring security 在 session 中存放的变量
-        SavedRequest savedRequest =
-                (SavedRequest) ServletUtil.getSession().getAttribute("SPRING_SECURITY_SAVED_REQUEST");
-        if (savedRequest != null) {
-            redirectPath = savedRequest.getRedirectUrl();
-        }
-
-        return redirectPath;
-    }
-
-    private void writeResponse(HttpServletResponse response, String body) throws IOException {
-        response.setContentType("application/json; charset=utf-8");
-        PrintWriter printWriter = response.getWriter();
-        printWriter.write(body);
-    }
-}

+ 0 - 27
manager/src/main/java/cn/reghao/devops/manager/account/security/handler/LogoutHandlerImpl.java

@@ -1,27 +0,0 @@
-package cn.reghao.devops.manager.account.security.handler;
-
-import cn.reghao.devops.manager.account.service.AccountAuthService;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.web.authentication.logout.LogoutHandler;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * @author reghao
- * @date 2023-08-03 14:32:07
- */
-@Component
-public class LogoutHandlerImpl implements LogoutHandler {
-    private final AccountAuthService accountAuthService;
-
-    public LogoutHandlerImpl(AccountAuthService accountAuthService) {
-        this.accountAuthService = accountAuthService;
-    }
-
-    @Override
-    public void logout(HttpServletRequest request, HttpServletResponse response, Authentication auth) {
-        accountAuthService.logout();
-    }
-}

+ 0 - 27
manager/src/main/java/cn/reghao/devops/manager/account/security/handler/LogoutSuccessHandlerImpl.java

@@ -1,27 +0,0 @@
-package cn.reghao.devops.manager.account.security.handler;
-
-import org.springframework.security.core.Authentication;
-import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * 账号注销成功后的处理, 使用此类后不再调用 logoutSuccessUrl, 在此类中直接返回给客户端
- * 账号注销的调用顺序 LogoutHandlerImpl -> LogoutSuccessHandlerImpl
- *
- * @author reghao
- * @date 2023-02-14 16:11:48
- */
-@Component
-public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler {
-    @Override
-    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication auth)
-            throws IOException, ServletException {
-        String redirectPath = "/login";
-        response.sendRedirect(redirectPath);
-    }
-}

+ 0 - 34
manager/src/main/java/cn/reghao/devops/manager/account/security/session/SecuritySessionConfig.java

@@ -1,34 +0,0 @@
-package cn.reghao.devops.manager.account.security.session;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.core.session.SessionRegistry;
-import org.springframework.security.core.session.SessionRegistryImpl;
-import org.springframework.security.web.session.ConcurrentSessionFilter;
-import org.springframework.security.web.session.HttpSessionEventPublisher;
-
-/**
- * spring-security 中涉及 session 处理的相关配置
- *
- * @author reghao
- * @date 2024-02-02 17:18:12
- */
-@Configuration
-public class SecuritySessionConfig {
-    @Bean
-    public SessionRegistry sessionRegistry() {
-        return new SessionRegistryImpl();
-    }
-
-    @Bean
-    public ConcurrentSessionFilter concurrentSessionFilter(SessionRegistry sessionRegistry,
-                                                           SessionExpiredStrategy sessionExpiredStrategy){
-        // 帐号同时登录数量超过限制时的处理类
-        return new ConcurrentSessionFilter(sessionRegistry, sessionExpiredStrategy);
-    }
-
-    @Bean
-    public HttpSessionEventPublisher httpSessionEventPublisher() {
-        return new HttpSessionEventPublisher();
-    }
-}

+ 0 - 33
manager/src/main/java/cn/reghao/devops/manager/account/security/session/SessionExpiredStrategy.java

@@ -1,33 +0,0 @@
-package cn.reghao.devops.manager.account.security.session;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.security.web.session.SessionInformationExpiredEvent;
-import org.springframework.security.web.session.SessionInformationExpiredStrategy;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * ConcurrentSessionFilter 中检测到过期 session 时的处理策略
- *
- * @author reghao
- * @date 2024-02-02 16:32:43
- */
-@Slf4j
-@Component
-public class SessionExpiredStrategy implements SessionInformationExpiredStrategy {
-    @Override
-    public void onExpiredSessionDetected(SessionInformationExpiredEvent event) throws IOException, ServletException {
-        String principal = (String) event.getSessionInformation().getPrincipal();
-        log.info("{} 已在别处登录!", principal);
-
-        HttpServletResponse response = event.getResponse();
-        /*response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
-        response.setContentType("application/json;charset=utf-8");
-        response.getWriter().write("您的账号已经在别的地方登录!");*/
-        String redirectPath = "/login";
-        response.sendRedirect(redirectPath);
-    }
-}

+ 0 - 19
manager/src/main/java/cn/reghao/devops/manager/account/service/AccountAuthService.java

@@ -1,19 +0,0 @@
-package cn.reghao.devops.manager.account.service;
-
-import cn.reghao.devops.manager.account.model.dto.AccountLoginDto;
-import cn.reghao.devops.manager.account.security.form.AccountAuthToken;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.validation.annotation.Validated;
-
-/**
- * @author reghao
- * @date 2021-11-14 14:51:17
- */
-public interface AccountAuthService extends UserDetailsService {
-    AccountAuthToken getPreAuthentication(@Validated AccountLoginDto userLoginDto) throws AuthenticationException;
-    AccountAuthToken authByPassword(AccountAuthToken authToken);
-    void setCookie(AccountAuthToken authToken, long timeout);
-    void clearCookie();
-    void logout();
-}

+ 0 - 20
manager/src/main/java/cn/reghao/devops/manager/account/service/AccountService.java

@@ -1,20 +0,0 @@
-package cn.reghao.devops.manager.account.service;
-
-import cn.reghao.devops.manager.account.model.dto.CreateAccountDto;
-import cn.reghao.devops.manager.account.model.dto.AccountProfile;
-import cn.reghao.devops.manager.account.model.dto.AccountRole;
-import cn.reghao.jutil.jdk.result.Result;
-
-/**
- * @author reghao
- * @date 2020-06-19 16:36:53
- */
-public interface AccountService {
-    void initAccount();
-    Result createAccount(CreateAccountDto createAccountDto);
-    void updateAccountPassword(Integer userId, String newPassword);
-    void updateAccountProfile(AccountProfile accountProfile);
-    void updateAccountRole(AccountRole accountRole);
-    void updateAccountStatus(Integer userId, Boolean enable);
-    void deleteAccount(Integer userId);
-}

+ 0 - 56
manager/src/main/java/cn/reghao/devops/manager/account/service/AccountSessionService.java

@@ -1,56 +0,0 @@
-package cn.reghao.devops.manager.account.service;
-
-import cn.reghao.devops.manager.account.db.repository.UserRepository;
-import cn.reghao.devops.manager.account.model.po.User;
-import org.springframework.security.core.session.SessionInformation;
-import org.springframework.security.core.session.SessionRegistry;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.util.*;
-
-/**
- * @author reghao
- * @date 2024-02-04 16:00:01
- */
-@Service
-public class AccountSessionService {
-    private final SessionRegistry sessionRegistry;
-    private final UserRepository userRepository;
-
-    public AccountSessionService(SessionRegistry sessionRegistry, UserRepository userRepository) {
-        this.sessionRegistry = sessionRegistry;
-        this.userRepository = userRepository;
-    }
-
-    public Map<Integer, LocalDateTime> getLastRequest() {
-        Map<Integer, LocalDateTime> map = new HashMap<>();
-        for (Object principal : sessionRegistry.getAllPrincipals()) {
-            String username = (String) principal;
-            User user = userRepository.findByUsername(username);
-            for (SessionInformation sessionInfo : sessionRegistry.getAllSessions(principal, false)) {
-                Date date = sessionInfo.getLastRequest();
-                LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
-                map.put(user.getId(), localDateTime);
-            }
-        }
-
-        return map;
-    }
-
-    public void deactiveSession(User user) {
-        int currentUserId = UserContext.getUser().getId();
-        if (currentUserId != user.getId()) {
-            String principal = user.getUsername();
-            for (Object object : sessionRegistry.getAllPrincipals()) {
-                String username = (String) object;
-                if (username.equals(principal)) {
-                    for (SessionInformation sessionInfo : sessionRegistry.getAllSessions(principal, false)) {
-                        sessionInfo.expireNow();
-                    }
-                }
-            }
-        }
-    }
-}

+ 0 - 42
manager/src/main/java/cn/reghao/devops/manager/account/service/CodeService.java

@@ -1,42 +0,0 @@
-package cn.reghao.devops.manager.account.service;
-
-import cn.reghao.devops.manager.util.CaptchaUtil;
-import cn.reghao.devops.manager.util.CacheKeys;
-import cn.reghao.jutil.jdk.security.RandomString;
-import com.github.benmanes.caffeine.cache.Cache;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.autoconfigure.web.ServerProperties;
-import org.springframework.stereotype.Service;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * @author reghao
- * @date 2022-04-26 20:24:58
- */
-@Slf4j
-@Service
-public class CodeService {
-    private final long sessionTimeout;
-    private final Cache<String, Object> caffeineCache;
-
-    public CodeService(ServerProperties serverProperties, Cache<String, Object> caffeineCache) {
-        this.sessionTimeout = serverProperties.getServlet().getSession().getTimeout().getSeconds();
-        this.caffeineCache = caffeineCache;
-    }
-
-    public InputStream generateCaptcha() throws IOException {
-        String captchaCode = RandomString.getString(5);
-        caffeineCache.put(CacheKeys.getCaptchaKey(), captchaCode);
-
-        ByteArrayOutputStream baos = CaptchaUtil.captchaWithDisturb(captchaCode, 130, 48);
-        return new ByteArrayInputStream(baos.toByteArray());
-    }
-
-    public String getCaptcha() {
-        return (String) caffeineCache.getIfPresent(CacheKeys.getCaptchaKey());
-    }
-}

+ 0 - 15
manager/src/main/java/cn/reghao/devops/manager/account/service/FileService.java

@@ -1,15 +0,0 @@
-package cn.reghao.devops.manager.account.service;
-
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.*;
-
-/**
- * @author reghao
- * @date 2024-01-19 21:29:24
- */
-public interface FileService {
-    void initLocalStore() throws IOException;
-    void getFile(String objectName) throws IOException;
-    String putFile(MultipartFile file) throws Exception;
-}

+ 0 - 70
manager/src/main/java/cn/reghao/devops/manager/account/service/HomeService.java

@@ -1,70 +0,0 @@
-package cn.reghao.devops.manager.account.service;
-
-import cn.reghao.devops.manager.account.db.query.RoleQuery;
-import cn.reghao.devops.manager.account.model.po.Menu;
-import cn.reghao.devops.manager.account.model.po.Role;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2021-04-04 23:36:10
- */
-@Service
-public class HomeService {
-    private final RoleQuery roleQuery;
-
-    public HomeService(RoleQuery roleQuery) {
-        this.roleQuery = roleQuery;
-    }
-
-    /**
-     * 用户拥有的角色可访问的资源
-     *
-     * @param
-     * @return
-     * @date 2021-09-10 下午6:27
-     */
-    public List<Menu> userMenus(Set<String> roles) {
-        List<Menu> menus = new ArrayList<>();
-        roles.forEach(name -> {
-            Role role = roleQuery.findByName(name);
-            menus.addAll(role.getMenus().stream().filter(Menu::getEnabled).collect(Collectors.toSet()));
-        });
-
-        return menus;
-    }
-
-    /**
-     * 根据 menu 集合生成页面侧边栏的树形菜单
-     *
-     * @param
-     * @return
-     * @date 2021-09-10 下午6:24
-     */
-    public Map<Integer, Menu> treeMenu(List<Menu> menus) {
-        // id -> menu
-        Map<Integer, Menu> keyMenu = new HashMap<>(16);
-        menus.forEach(menu -> keyMenu.put(menu.getId(), menu));
-
-        // 树形菜单数据
-        Map<Integer, Menu> treeMenu = new HashMap<>(16);
-        keyMenu.forEach((id, menu) -> {
-            Menu parentMenu = keyMenu.get(menu.getPid());
-            if (parentMenu != null) {
-                Map<Integer, Menu> childMenus = parentMenu.getChildren();
-                if (childMenus == null) {
-                    childMenus = new HashMap<>();
-                    parentMenu.setChildren(childMenus);
-                }
-                childMenus.put(menu.getPos(), menu);
-            } else {
-                treeMenu.put(menu.getPos(), menu);
-            }
-        });
-
-        return treeMenu;
-    }
-}

+ 0 - 15
manager/src/main/java/cn/reghao/devops/manager/account/service/MenuService.java

@@ -1,15 +0,0 @@
-package cn.reghao.devops.manager.account.service;
-
-import cn.reghao.jutil.jdk.result.Result;
-import cn.reghao.devops.manager.account.model.dto.MenuDTO;
-import cn.reghao.devops.manager.account.model.po.Menu;
-
-/**
- * @author reghao
- * @date 2021-07-21 15:17:14
- */
-public interface MenuService {
-    Result addMenu(Menu menu);
-    Result updateMenu(MenuDTO menuDTO);
-    Result deleteMenu(Integer menuId);
-}

+ 0 - 58
manager/src/main/java/cn/reghao/devops/manager/account/service/PubkeyService.java

@@ -1,58 +0,0 @@
-package cn.reghao.devops.manager.account.service;
-
-import cn.reghao.devops.manager.account.model.dto.RsaPubkey;
-import cn.reghao.devops.manager.util.CacheKeys;
-import cn.reghao.jutil.jdk.security.RandomString;
-import cn.reghao.jutil.jdk.security.RsaCryptor;
-import com.github.benmanes.caffeine.cache.Cache;
-import org.springframework.stereotype.Service;
-
-import java.security.NoSuchAlgorithmException;
-import java.util.Map;
-
-/**
- * @author reghao
- * @date 2023-02-20 11:09:03
- */
-@Service
-public class PubkeyService {
-    private final Cache<String, Object> caffeineCache;
-
-    public PubkeyService(Cache<String, Object> caffeineCache) {
-        this.caffeineCache = caffeineCache;
-    }
-
-    public RsaPubkey getPubkey() throws NoSuchAlgorithmException {
-        String pubkey = (String) caffeineCache.getIfPresent(CacheKeys.getRsaPubkeyKey());
-        if (pubkey == null) {
-            Map<String, String> rsaKeyPair = RsaCryptor.genKeyPair();
-            String prikey = rsaKeyPair.get("prikey");
-            pubkey = rsaKeyPair.get("pubkey");
-
-            caffeineCache.put(CacheKeys.getRsaPubkeyKey(), pubkey);
-            caffeineCache.put(CacheKeys.getRsaPrikeyKey(), prikey);
-        }
-
-        String r = RandomString.getString(16);
-        long timeout = 300;
-        caffeineCache.put(CacheKeys.getPubkeyRKey(), r);
-        return new RsaPubkey(pubkey, r);
-    }
-
-    public String decrypt(String cipherText) throws Exception {
-        String prikey = (String) caffeineCache.getIfPresent(CacheKeys.getRsaPrikeyKey());
-        if (prikey == null) {
-            String msg = "私钥不存在, 请重新刷新页面";
-            throw new Exception(msg);
-        }
-
-        String r = (String) caffeineCache.getIfPresent(CacheKeys.getPubkeyRKey());
-        if (r == null) {
-            String msg = "当前会话已过期, 请刷新页面后重新登录. 或者检查浏览器是否禁用了 cookie";
-            throw new Exception(msg);
-        }
-
-        String plainText = RsaCryptor.decrypt(cipherText, prikey);
-        return plainText.replace(r, "");
-    }
-}

+ 0 - 17
manager/src/main/java/cn/reghao/devops/manager/account/service/RoleService.java

@@ -1,17 +0,0 @@
-package cn.reghao.devops.manager.account.service;
-
-import cn.reghao.devops.manager.account.model.po.Menu;
-import cn.reghao.devops.manager.account.model.po.Role;
-
-import java.util.Set;
-
-/**
- * @author reghao
- * @date 2020-06-19 16:36:53
- */
-public interface RoleService {
-    void initRole();
-    void addOrModify(Role role);
-    void delete(Integer roleId);
-    void setRoleMenus(Integer roleId, Set<Menu> menus);
-}

+ 0 - 51
manager/src/main/java/cn/reghao/devops/manager/account/service/UserContext.java

@@ -1,51 +0,0 @@
-package cn.reghao.devops.manager.account.service;
-
-import cn.reghao.devops.manager.account.model.po.User;
-import cn.reghao.devops.manager.account.security.form.AccountAuthToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
-
-import java.util.Collections;
-import java.util.Set;
-
-/**
- * @author reghao
- * @date 2023-12-01 10:31:52
- */
-public class UserContext {
-    public static String getUsername() {
-        User user = getUser();
-        if (user == null) {
-            return null;
-        }
-
-        return user.getScreenName();
-    }
-
-    public static User getUser() {
-        Authentication authToken = SecurityContextHolder.getContext().getAuthentication();
-        if (authToken instanceof AccountAuthToken) {
-            return (User) authToken.getDetails();
-        }
-
-        return null;
-    }
-
-    public static String getUserRole() {
-        User user = getUser();
-        if (user != null && !user.getRole().isEmpty()) {
-            return user.getRole().iterator().next();
-        }
-
-        return "";
-    }
-
-    public static Set<String> getUserRoles() {
-        User user = getUser();
-        if (user != null) {
-            return user.getRole();
-        }
-
-        return Collections.emptySet();
-    }
-}

+ 0 - 155
manager/src/main/java/cn/reghao/devops/manager/account/service/impl/AccountAuthServiceImpl.java

@@ -1,155 +0,0 @@
-package cn.reghao.devops.manager.account.service.impl;
-
-import cn.reghao.devops.manager.account.db.repository.UserRepository;
-import cn.reghao.devops.manager.account.model.dto.AccountLoginDto;
-import cn.reghao.devops.manager.account.model.po.User;
-import cn.reghao.devops.manager.account.security.exceptioin.AccountLoginException;
-import cn.reghao.devops.manager.account.security.form.AccountAuthToken;
-import cn.reghao.devops.manager.account.service.AccountAuthService;
-import cn.reghao.devops.manager.account.service.CodeService;
-import cn.reghao.devops.manager.account.service.PubkeyService;
-import cn.reghao.devops.manager.util.CacheKeys;
-import cn.reghao.jutil.web.ServletUtil;
-import com.github.benmanes.caffeine.cache.Cache;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContext;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.security.web.authentication.preauth.PreAuthenticatedCredentialsNotFoundException;
-import org.springframework.stereotype.Service;
-
-import javax.servlet.http.Cookie;
-
-/**
- * @author reghao
- * @date 2022-07-08 14:51:17
- */
-@Service
-public class AccountAuthServiceImpl implements AccountAuthService {
-    private final String cookieName = "USERDATA";
-    private final String domain = "";
-    private final Cache<String, Object> cache;
-    private final UserRepository userRepository;
-    private final CodeService codeService;
-    private final PubkeyService pubkeyService;
-    private final PasswordEncoder passwordEncoder;
-
-    public AccountAuthServiceImpl(Cache<String, Object> cache, UserRepository userRepository,
-                                  CodeService codeService, PubkeyService pubkeyService, PasswordEncoder passwordEncoder) {
-        this.cache = cache;
-        this.userRepository = userRepository;
-        this.codeService = codeService;
-        this.pubkeyService = pubkeyService;
-        this.passwordEncoder = passwordEncoder;
-    }
-
-    @Override
-    public AccountAuthToken getPreAuthentication(AccountLoginDto accountLoginDto) {
-        String principal = accountLoginDto.getPrincipal();
-        String credential = accountLoginDto.getCredential();
-        String captchaCode = accountLoginDto.getCaptchaCode();
-        Boolean rememberMe = accountLoginDto.getRememberMe();
-
-        /*String savedCaptchaCode = codeService.getCaptcha();
-        if (savedCaptchaCode == null) {
-            String errMsg = "当前会话已过期, 请刷新页面后重新登录. 或者检查浏览器是否禁用了 cookie";
-            throw new PreAuthenticatedCredentialsNotFoundException(errMsg);
-        } else if (!savedCaptchaCode.equalsIgnoreCase(captchaCode)) {
-            String errMsg = "图形验证码不正确...";
-            throw new PreAuthenticatedCredentialsNotFoundException(errMsg);
-        }*/
-
-        String decryptCredential;
-        try {
-            decryptCredential = pubkeyService.decrypt(credential);
-        } catch (Exception e) {
-            throw new PreAuthenticatedCredentialsNotFoundException(e.getMessage());
-        }
-
-        String loginId = ServletUtil.getSessionId();
-        return new AccountAuthToken(loginId, rememberMe, principal, decryptCredential);
-    }
-
-    @Override
-    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
-        User user = userRepository.findByUsername(username);
-        if (user == null) {
-            String errMsg = String.format("帐号 %s 不存在", username);
-            throw new UsernameNotFoundException(errMsg);
-        }
-
-        return user;
-    }
-
-    @Override
-    public AccountAuthToken authByPassword(AccountAuthToken authToken) {
-        String username = (String) authToken.getPrincipal();
-        User user = (User) loadUserByUsername(username);
-        String password = (String) authToken.getCredentials();
-        String encodedPassword = passwordEncoder.encode(password + user.getSalt());
-        if (!user.getPassword().equals(encodedPassword)) {
-            String errMsg = "账号或密码不正确";
-            throw new AccountLoginException(errMsg);
-        }
-
-        return new AccountAuthToken(authToken, user);
-    }
-
-    @Override
-    public void setCookie(AccountAuthToken authToken, long timeout) {
-        int userId = authToken.getUserId();
-        int plat = 1;
-        String loginId = authToken.getLoginId();
-
-        String userdata = String.format("%s:%s:%s", userId, plat, loginId);
-        Cookie cookie3 = generateCookie(cookieName, userdata, timeout);
-        ServletUtil.getResponse().addCookie(cookie3);
-
-        String loginSuccessKey = CacheKeys.getLoginSuccessKey(userId, plat, loginId);
-        if (timeout == 0) {
-            timeout = 3600*24*30;
-        }
-        cache.put(loginSuccessKey, authToken);
-    }
-
-    private Cookie generateCookie(String name, String value, long timeout) {
-        String path = "/";
-
-        Cookie cookie = new Cookie(name, value);
-        if (timeout != 0) {
-            cookie.setMaxAge((int) timeout);
-        }
-        cookie.setDomain(domain);
-        cookie.setSecure(true);
-        cookie.setPath(path);
-        return cookie;
-    }
-
-    @Override
-    public void logout() {
-        // 删除 cookie 中的数据(或者是撤销 token)
-        // 删除 redis 中的 account login 数据
-        // 删除 redis 中的 session 数据
-        // 删除 SecurityContextHolder 中的数据
-
-        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
-        if (authentication instanceof AccountAuthToken) {
-            SecurityContext context = SecurityContextHolder.getContext();
-            context.setAuthentication(null);
-            SecurityContextHolder.clearContext();
-        }
-    }
-
-    @Override
-    public void clearCookie() {
-        String path = "/";
-        Cookie cookie2 = new Cookie(cookieName, null);
-        cookie2.setMaxAge(0);
-        cookie2.setDomain(domain);
-        cookie2.setSecure(true);
-        cookie2.setPath(path);
-        ServletUtil.getResponse().addCookie(cookie2);
-    }
-}

+ 0 - 154
manager/src/main/java/cn/reghao/devops/manager/account/service/impl/AccountServiceImpl.java

@@ -1,154 +0,0 @@
-package cn.reghao.devops.manager.account.service.impl;
-
-import cn.reghao.devops.manager.account.db.repository.RoleRepository;
-import cn.reghao.devops.manager.account.db.repository.UserRepository;
-import cn.reghao.devops.manager.account.model.constant.RoleType;
-import cn.reghao.devops.manager.account.model.dto.CreateAccountDto;
-import cn.reghao.devops.manager.account.model.po.Role;
-import cn.reghao.devops.manager.account.service.AccountService;
-import cn.reghao.devops.manager.account.service.AccountSessionService;
-import cn.reghao.jutil.jdk.result.Result;
-import cn.reghao.jutil.jdk.security.RandomString;
-import cn.reghao.devops.manager.account.model.dto.AccountProfile;
-import cn.reghao.devops.manager.account.model.dto.AccountRole;
-import cn.reghao.devops.manager.account.model.po.User;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2020-06-19 16:36:53
- */
-@Slf4j
-@Service
-public class AccountServiceImpl implements AccountService {
-    private final UserRepository userRepository;
-    private final RoleRepository roleRepository;
-    private final PasswordEncoder passwordEncoder;
-    private final AccountSessionService accountSessionService;
-
-    public AccountServiceImpl(UserRepository userRepository, RoleRepository roleRepository,
-                              PasswordEncoder passwordEncoder, AccountSessionService accountSessionService) {
-        this.userRepository = userRepository;
-        this.roleRepository = roleRepository;
-        this.passwordEncoder = passwordEncoder;
-        this.accountSessionService = accountSessionService;
-    }
-
-    @Override
-    public void initAccount() {
-        List<User> list = userRepository.findAll(PageRequest.of(0, 1)).getContent();
-        if (list.isEmpty()) {
-            String username = RandomString.getString(3).toLowerCase(Locale.ROOT);
-            username = "admin";
-            String password = RandomString.getString(10);
-
-            Role role = roleRepository.findByName(RoleType.ROLE_ADMIN.name());
-            if (role != null) {
-                int roleId = role.getId();
-                CreateAccountDto createAccountDto = new CreateAccountDto(username, password, roleId);
-                createAccount(createAccountDto);
-                log.info("初始化完成, 帐号和密码分别是 {} 和 {}", username, password);
-            }
-        }
-    }
-
-    @Override
-    public Result createAccount(CreateAccountDto createAccountDto) {
-        int roleId = createAccountDto.getRoleId();
-        Role role = roleRepository.findById(roleId).orElse(null);
-        if (role == null) {
-            return Result.fail("role 不存在");
-        }
-
-        String username = createAccountDto.getUsername();
-        User user = userRepository.findByUsername(username);
-        if (user == null) {
-            String password = createAccountDto.getPassword();
-            String salt = RandomString.getSalt(64);
-            String encodedPassword = passwordEncoder.encode(password + salt);
-
-            user = new User(username, encodedPassword, salt, Set.of(role.getName()));
-            userRepository.save(user);
-            return Result.success();
-        }
-
-        String errMsg = String.format("帐号 %s 已存在", username);
-        return Result.fail(errMsg);
-
-    }
-
-    @Override
-    public void updateAccountPassword(Integer userId, String newPassword) {
-        User userEntity = userRepository.findById(userId).orElse(null);
-        if (userEntity == null) {
-            return;
-        }
-
-        String salt = RandomString.getSalt(64);
-        String encodedPassword = passwordEncoder.encode(newPassword + salt);
-        userEntity.setSalt(salt);
-        userEntity.setEncodedPassword(encodedPassword);
-        userRepository.save(userEntity);
-        accountSessionService.deactiveSession(userEntity);
-    }
-
-    @Override
-    public void updateAccountProfile(AccountProfile accountProfile) {
-        User userEntity = userRepository.findById(accountProfile.getUserId()).orElse(null);
-        if (userEntity == null) {
-            return;
-        }
-
-        userEntity.setScreenName(accountProfile.getScreenName());
-        userEntity.setMobile(accountProfile.getMobile());
-        userEntity.setEmail(accountProfile.getEmail());
-        userRepository.save(userEntity);
-    }
-
-    @Override
-    public void updateAccountRole(AccountRole accountRole) {
-        int userId = accountRole.getUserId();
-        User userEntity = userRepository.findById(userId).orElse(null);
-        if (userEntity == null) {
-            return;
-        }
-
-        Set<String> roles = accountRole.getRoles().stream().map(Role::getName).collect(Collectors.toSet());
-        userEntity.setRole(roles);
-        userRepository.save(userEntity);
-        accountSessionService.deactiveSession(userEntity);
-    }
-
-    @Override
-    public void updateAccountStatus(Integer userId, Boolean enable) {
-        User userEntity = userRepository.findById(userId).orElse(null);
-        if (userEntity == null) {
-            return;
-        }
-
-        userEntity.setEnabled(enable);
-        userRepository.save(userEntity);
-    }
-
-    @Override
-    public void deleteAccount(Integer userId) {
-        User userEntity = userRepository.findById(userId).orElse(null);
-        if (userEntity == null) {
-            return;
-        }
-
-        if (userEntity.getId() == 1) {
-            log.error("不能删除管理员帐号");
-        } else {
-            userRepository.delete(userEntity);
-        }
-    }
-}

+ 0 - 157
manager/src/main/java/cn/reghao/devops/manager/account/service/impl/FileServiceImpl.java

@@ -1,157 +0,0 @@
-package cn.reghao.devops.manager.account.service.impl;
-
-import cn.reghao.devops.manager.account.db.repository.DiskFileRepository;
-import cn.reghao.devops.manager.account.model.po.DiskFile;
-import cn.reghao.devops.manager.account.service.FileService;
-import cn.reghao.jutil.jdk.security.DigestUtil;
-import cn.reghao.jutil.web.ServletUtil;
-import org.apache.commons.io.FileUtils;
-import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.*;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.StandardCopyOption;
-import java.util.List;
-import java.util.UUID;
-
-/**
- * @author reghao
- * @date 2024-01-19 21:29:24
- */
-@Service
-public class FileServiceImpl implements FileService {
-    // 1MiB
-    private final int bufSize = 1024*1024;
-    private final String storeDir = "";
-    private final DiskFileRepository diskFileRepository;
-
-    public FileServiceImpl(DiskFileRepository diskFileRepository) {
-        this.diskFileRepository = diskFileRepository;
-    }
-
-    @Override
-    public void initLocalStore() throws IOException {
-        File dir1 = new File(storeDir);
-        if (!dir1.exists()) {
-            //FileUtils.forceMkdir(dir1);
-        }
-    }
-
-    @Override
-    public void getFile(String objectName) throws IOException {
-        DiskFile diskFile = diskFileRepository.findByObjectName(objectName);
-        if (diskFile == null) {
-            writeResponse(HttpServletResponse.SC_NOT_FOUND);
-            return;
-        }
-
-        String absolutePath = diskFile.getAbsolutePath();
-        String contentType = diskFile.getContentType();
-        long size = diskFile.getSize();
-        HttpServletResponse response = ServletUtil.getResponse();
-        response.setStatus(HttpServletResponse.SC_OK);
-        response.setContentType(contentType);
-        response.setContentLengthLong(size);
-
-        OutputStream outputStream = response.getOutputStream();
-        writeResponse(outputStream, absolutePath, 0, size);
-    }
-
-    private void writeResponse(int statusCode) throws IOException {
-        HttpServletResponse response = ServletUtil.getResponse();
-        response.setStatus(statusCode);
-        OutputStream outputStream = response.getOutputStream();
-        outputStream.flush();
-        outputStream.close();
-    }
-
-    private void writeResponse(OutputStream outputStream, String absolutePath, long start, long end) throws IOException {
-        RandomAccessFile raf = new RandomAccessFile(absolutePath, "r");
-        raf.seek(start);
-
-        long len = end-start+1;
-        if (len < bufSize) {
-            int len1 = (int) len;
-            byte[] buf1 = new byte[len1];
-            int readLen1 = raf.read(buf1, 0, len1);
-            outputStream.write(buf1, 0, readLen1);
-        } else {
-            byte[] buf = new byte[bufSize];
-            long totalRead = 0;
-            int readLen;
-            while ((readLen = raf.read(buf, 0, bufSize)) != -1) {
-                outputStream.write(buf, 0, readLen);
-                totalRead += readLen;
-
-                long left = len - totalRead;
-                if (left < bufSize) {
-                    int left1 = (int) left;
-                    byte[] buf1 = new byte[left1];
-                    int readLen1 = raf.read(buf1, 0, left1);
-                    outputStream.write(buf1, 0, readLen1);
-                    break;
-                }
-            }
-        }
-
-        outputStream.flush();
-        outputStream.close();
-        raf.close();
-    }
-
-    @Override
-    public String putFile(MultipartFile file) throws Exception {
-        long size = file.getSize();
-        String filename = file.getOriginalFilename();
-        String suffix = getSuffix(filename);
-
-        String objectId = UUID.randomUUID().toString().replace("-", "");;
-        String objectName;
-        if (suffix.isBlank()) {
-            objectName = String.format("file/%s", objectId);
-        } else {
-            objectName = String.format("file/%s%s", objectId, suffix);
-        }
-
-        String contentId = UUID.randomUUID().toString().replace("-", "");
-        File savedFile = saveFile(file.getInputStream(), contentId, suffix);
-        String contentType = Files.probeContentType(Path.of(savedFile.getAbsolutePath()));
-        String sha256sum = DigestUtil.sha256sum(savedFile.getAbsolutePath());
-
-        List<DiskFile> diskFiles = diskFileRepository.findBySha256sum(sha256sum);
-        DiskFile diskFile;
-        if (!diskFiles.isEmpty()) {
-            DiskFile existFile = diskFiles.get(0);
-            diskFile = new DiskFile(objectName, objectId, existFile, filename);
-            FileUtils.deleteQuietly(savedFile);
-        } else {
-            diskFile = new DiskFile(objectName, objectId, savedFile.getAbsolutePath(), sha256sum, filename, contentType, size);
-        }
-
-        diskFileRepository.save(diskFile);
-        return "/" + objectName;
-    }
-
-    private File saveFile(InputStream inputStream, String contentId, String suffix) throws IOException {
-        String absolutePath = String.format("%s/%s%s", storeDir, contentId, suffix);
-        File file = new File(absolutePath);
-        if (file.exists()) {
-            throw new IOException(absolutePath + " exist");
-        }
-
-        Files.copy(inputStream, Path.of(absolutePath), StandardCopyOption.REPLACE_EXISTING);
-        return file;
-    }
-
-    private String getSuffix(String filename) {
-        if (filename == null) {
-            return "";
-        }
-
-        int idx = filename.lastIndexOf(".");
-        return idx == -1 ? "" : filename.substring(idx);
-    }
-}

+ 0 - 237
manager/src/main/java/cn/reghao/devops/manager/account/service/impl/MenuServiceImpl.java

@@ -1,237 +0,0 @@
-package cn.reghao.devops.manager.account.service.impl;
-
-import cn.reghao.devops.manager.account.db.repository.MenuRepository;
-import cn.reghao.devops.manager.account.db.repository.RoleRepository;
-import cn.reghao.devops.manager.account.model.constant.MenuType;
-import cn.reghao.devops.manager.account.service.MenuService;
-import cn.reghao.jutil.jdk.result.Result;
-import cn.reghao.jutil.jdk.result.ResultStatus;
-import cn.reghao.devops.manager.account.model.dto.MenuDTO;
-import cn.reghao.devops.manager.account.model.po.Menu;
-import cn.reghao.devops.manager.account.model.po.Role;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDateTime;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2021-05-17 17:16:19
- */
-@Slf4j
-@Service
-public class MenuServiceImpl implements MenuService {
-    private final MenuRepository menuRepository;
-    private final RoleRepository roleRepository;
-
-    public MenuServiceImpl(MenuRepository menuRepository, RoleRepository roleRepository) {
-        this.menuRepository = menuRepository;
-        this.roleRepository = roleRepository;
-    }
-
-    @Override
-    public synchronized Result addMenu(Menu menu) {
-        Result result = moreThanTwoParents(menu.getPid());
-        if (result.getCode() != ResultStatus.SUCCESS.getCode()) {
-            return result;
-        }
-
-        // 调整 menu 组内元素的位置
-        insertNewMenu(menu);
-        menu.setEnabled(true);
-        Menu menuEntity = menuRepository.save(menu);
-
-        //Set<Role> roles = menu.getRoles();
-        Set<Role> roles = Collections.emptySet();
-        roles.forEach(role -> role.getMenus().add(menuEntity));
-        roleRepository.saveAll(new ArrayList<>(roles));
-        return Result.result(ResultStatus.SUCCESS);
-    }
-
-    /**
-     * 检查菜单的层级, Menu 最多只能有两个 parent, 即最多只能有三级菜单
-     *
-     * @param
-     * @return
-     * @date 2021-07-15 上午11:15
-     */
-    private Result moreThanTwoParents(int pid) {
-        if (pid != 0) {
-            Menu menu1 = menuRepository.getOne(pid);
-            int pid1 = menu1.getPid();
-            if (pid1 != 0) {
-                Menu menu2 = menuRepository.getOne(pid1);
-                int pid2 = menu2.getPid();
-                if (pid2 != 0) {
-                    return Result.result(ResultStatus.FAIL, "Menu 最多只能有两个 parent,即最多只能有三级菜单");
-                }
-            }
-        }
-
-        return Result.result(ResultStatus.SUCCESS);
-    }
-
-    /**
-     * 向 menu 组插入元素时调整组内 menu 的位置
-     *
-     * @date 2021-05-18 上午9:54
-     */
-    private void insertNewMenu(Menu menu) {
-        int pid = menu.getPid();
-        if (pid != 0) {
-            Menu pMenu = menuRepository.getOne(pid);
-            if (pMenu.getType().equals(MenuType.page.name())) {
-                log.error("父级菜单的类型不能是 PAGE");
-                return;
-            }
-        }
-
-        List<Menu> menus = menuRepository.findByPid(pid);
-        menus.sort(Comparator.comparingInt(Menu::getPos));
-        // 组内没有 menu 或新增的 menu 在组内排在最后一位
-        if (menus.isEmpty()) {
-            menu.setPos(1);
-            return;
-        }
-
-        // menu 的新位置
-        int pos = menu.getPos()+1;
-        int size = menus.size();
-        if (pos == 1) {
-            // menu 的位置在 menu 组的首位, 组内的其他元素位置向后移一位
-            menu.setPos(1);
-            moveBackward(menus, 1);
-        } else if (pos >= size+1) {
-            // menu 的位置在 menu 组的末尾, 组内的其他元素位置不变
-            menu.setPos(size+1);
-        } else {
-            // menu 的位置在 menu 组的中间, pos 开始的元素位置向后移一位
-            menu.setPos(pos);
-            moveBackward(menus, pos);
-        }
-    }
-
-    /**
-     * 向后移动元素(向 menu 组新增元素时调用)
-     *
-     * @return
-     * @date 2021-07-15 下午5:07
-     */
-    private void moveBackward(List<Menu> menus, int startPos) {
-        for (int i = startPos-1; i < menus.size(); i++) {
-            Menu tmpMenu = menus.get(i);
-            int newPos = tmpMenu.getPos()+1;
-            tmpMenu.setPos(newPos);
-        }
-        menuRepository.saveAll(menus);
-    }
-
-    /**
-     * 向前移动元素(从 menu 组删除元素时调用)
-     *
-     * @param
-     * @return
-     * @date 2021-07-15 下午5:41
-     */
-    private void moveForward(List<Menu> menus, int startPos) {
-        for (int i = startPos; i < menus.size(); i++) {
-            Menu tmpMenu = menus.get(i);
-            int newPos = tmpMenu.getPos()-1;
-            tmpMenu.setPos(newPos);
-        }
-        menuRepository.saveAll(menus);
-    }
-
-    @Override
-    public synchronized Result updateMenu(MenuDTO menuDTO) {
-        int menuId = menuDTO.getMenuId();
-        Menu menuEntity = menuRepository.getOne(menuId);
-        if (menuEntity == null) {
-            return Result.result(ResultStatus.FAIL, String.format("ID 为 %s 的 Menu 不存在", menuId));
-        }
-
-        int oldPos = menuEntity.getPos();
-        // menu 的新位置
-        int newPos = menuDTO.getPos()+1;
-        int pid = menuDTO.getPid();
-        if (pid != menuEntity.getPid()) {
-            Result result = moreThanTwoParents(pid);
-            if (result.getCode() != ResultStatus.SUCCESS.getCode()) {
-                return result;
-            }
-
-            // menu 更换到了新的 menu 组
-            menuEntity.setPid(pid);
-            menuEntity.setPos(menuDTO.getPos());
-            insertNewMenu(menuEntity);
-        } else if (newPos != oldPos) {
-            reOrderMenus(pid, oldPos, newPos);
-            menuEntity.setPos(newPos);
-        }
-
-        menuEntity.setName(menuDTO.getName());
-        menuEntity.setUrl(menuDTO.getUrl());
-        menuEntity.setIcon(menuDTO.getIcon());
-        menuEntity.setUpdateTime(LocalDateTime.now());
-        menuRepository.save(menuEntity);
-
-        Set<Role> roles = menuDTO.getRoles();
-        roles.forEach(role -> role.getMenus().add(menuEntity));
-        roleRepository.saveAll(new ArrayList<>(roles));
-        return Result.result(ResultStatus.SUCCESS);
-    }
-
-    public void updateMenusStatus(boolean status, List<Integer> menuIds) {
-        menuRepository.findAllById(menuIds).forEach(menu -> {
-            menu.setEnabled(status);
-            menuRepository.save(menu);
-        });
-    }
-
-    /**
-     * 对组内的菜单进行重排序,只需调整 oldPos~newPos 之间的元素位置
-     *
-     * @param
-     * @return
-     * @date 2021-07-21 上午11:07
-     */
-    private void reOrderMenus(int pid, int oldPos, int newPos) {
-        Map<Integer, Menu> map = menuRepository.findByPid(pid).stream()
-                .collect(Collectors.toMap(Menu::getPos, menu -> menu));
-        map.remove(oldPos);
-        if (newPos < oldPos) {
-            // 向前移动
-            for (int i = newPos, j = 1; i < oldPos; i++, j++) {
-                map.get(i).setPos(newPos+j);
-            }
-        } else {
-            // 向后移动
-            for (int i = newPos-1, j = 1; i > oldPos; i--, j++) {
-                map.get(i).setPos(newPos-j);
-            }
-        }
-        menuRepository.saveAll(new ArrayList<>(map.values()));
-    }
-
-    @Override
-    public synchronized Result deleteMenu(Integer menuId) {
-        Menu menu = menuRepository.getOne(menuId);
-
-        // 删除 Role 关联的 Menu
-        for (Role role : menu.getRoles()) {
-            role.getMenus().remove(menu);
-            roleRepository.save(role);
-        }
-
-        // 重新调整组内排序
-        int pid = menu.getPid();
-        List<Menu> menus = menuRepository.findByPid(pid);
-        menus.sort(Comparator.comparingInt(Menu::getPos));
-        int pos = menu.getPos();
-        moveForward(menus, pos);
-        menuRepository.delete(menu);
-        return Result.result(ResultStatus.SUCCESS);
-    }
-}

+ 0 - 77
manager/src/main/java/cn/reghao/devops/manager/account/service/impl/RoleServiceImpl.java

@@ -1,77 +0,0 @@
-package cn.reghao.devops.manager.account.service.impl;
-
-import cn.reghao.devops.manager.account.db.query.RoleQuery;
-import cn.reghao.devops.manager.account.db.repository.MenuRepository;
-import cn.reghao.devops.manager.account.db.repository.RoleRepository;
-import cn.reghao.devops.manager.account.model.constant.RoleType;
-import cn.reghao.devops.manager.account.model.po.Menu;
-import cn.reghao.devops.manager.account.model.po.Role;
-import cn.reghao.devops.manager.account.model.po.User;
-import cn.reghao.devops.manager.account.service.RoleService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-
-/**
- * @author reghao
- * @date 2020-06-19 16:36:53
- */
-@Slf4j
-@Service
-public class RoleServiceImpl implements RoleService {
-    private final RoleQuery roleQuery;
-    private final RoleRepository roleRepository;
-    private final MenuRepository menuRepository;
-
-    public RoleServiceImpl(RoleQuery roleQuery, RoleRepository roleRepository, MenuRepository menuRepository) {
-        this.roleQuery = roleQuery;
-        this.roleRepository = roleRepository;
-        this.menuRepository = menuRepository;
-    }
-
-    public void initRole() {
-        List<Role> roleList = roleRepository.findAll();
-        if (roleList.isEmpty()) {
-            roleList = new ArrayList<>();
-            for (RoleType roleType : RoleType.values()) {
-                roleList.add(new Role(roleType.name(), roleType.getDesc()));
-            }
-            roleRepository.saveAll(roleList);
-
-            List<Menu> menus = menuRepository.findAll();
-            if (!menus.isEmpty()) {
-                Role role = roleRepository.findByName(RoleType.ROLE_ADMIN.name());
-                role.setMenus(new HashSet<>(menus));
-                roleRepository.save(role);
-            }
-        }
-    }
-
-    @Override
-    public void addOrModify(Role role) {
-        String title = String.format("ROLE_%s", role.getName());
-        role.setName(title.toUpperCase(Locale.ROOT));
-        roleRepository.save(role);
-    }
-
-    @Override
-    public void delete(Integer roleId) {
-        Role role = roleRepository.getOne(roleId);
-        List<User> users = roleQuery.getUsersByRole(role);
-        if (!users.isEmpty()) {
-            log.error("还有用户分配有本角色");
-            return;
-        }
-
-        role.getMenus().clear();
-        roleRepository.delete(role);
-    }
-
-    @Override
-    public void setRoleMenus(Integer roleId, Set<Menu> menus) {
-        Role role = roleRepository.getOne(roleId);
-        role.setMenus(menus);
-        roleRepository.save(role);
-    }
-}

+ 0 - 70
manager/src/main/java/cn/reghao/devops/manager/app/controller/AppStatusController.java

@@ -1,70 +0,0 @@
-package cn.reghao.devops.manager.app.controller;
-
-import cn.reghao.devops.common.msg.constant.AppStatOps;
-import cn.reghao.devops.manager.app.service.bd.AppStat;
-import cn.reghao.devops.manager.log.model.vo.AppLogVO;
-import cn.reghao.devops.manager.log.service.LogService;
-import cn.reghao.jutil.jdk.result.Result;
-import cn.reghao.jutil.jdk.result.ResultStatus;
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2020-02-28 11:33:23
- */
-@Slf4j
-@Api(tags = "应用状态管理接口")
-@RestController
-@RequestMapping("/api/app/status")
-public class AppStatusController {
-    private final AppStat statusService;
-    private final LogService logService;
-    
-    public AppStatusController(AppStat statusService, LogService logService) {
-        this.statusService = statusService;
-        this.logService = logService;
-    }
-
-    @ApiOperation(value = "重启应用")
-    @PostMapping(value = "/restart/{appId}/{machineId}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String restart(@PathVariable("appId") String appId, @PathVariable("machineId") String machineId) throws Exception {
-        statusService.changeStatus(appId, machineId, AppStatOps.restart);
-        return WebResult.result(Result.result(ResultStatus.SUCCESS, appId + " 正在重启,请 10s 后刷新页面查看最新状态"));
-    }
-
-    @ApiOperation(value = "停止应用")
-    @PostMapping(value = "/stop/{appId}/{machineId}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String stop(@PathVariable("appId") String appId, @PathVariable("machineId") String machineId) throws Exception {
-        statusService.changeStatus(appId, machineId, AppStatOps.stop);
-        return WebResult.result(Result.result(ResultStatus.SUCCESS, appId + " 正在停止,请稍后刷新页面"));
-    }
-
-    @ApiOperation(value = "启动应用")
-    @PostMapping(value = "/start/{appId}/{machineId}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String start(@PathVariable("appId") String appId, @PathVariable("machineId") String machineId) throws Exception {
-        statusService.changeStatus(appId, machineId, AppStatOps.start);
-        return WebResult.result(Result.result(ResultStatus.SUCCESS, appId + " 正在启动,请 10s 后刷新页面查看最新状态"));
-    }
-
-    @ApiOperation(value = "应用当前状态")
-    @GetMapping(value = "/{appId}/{machineId}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String status(@PathVariable("appId") String appId, @PathVariable("machineId") String machineId) {
-        statusService.getStatus(appId, machineId);
-        String msg = String.format("正在获取 %s 的状态,请 10s 后刷新页面查看", appId);
-        return WebResult.result(Result.result(ResultStatus.SUCCESS, msg));
-    }
-
-    @ApiOperation(value = "应用历史日志")
-    @GetMapping(value = "/log", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String getAppLog() {
-        List<AppLogVO> list = logService.getAppLogs("admin-service", "172.16.90.200", "INFO");
-        return WebResult.success(list);
-    }
-}

+ 0 - 84
manager/src/main/java/cn/reghao/devops/manager/app/controller/BuildDeployController.java

@@ -1,84 +0,0 @@
-package cn.reghao.devops.manager.app.controller;
-
-import cn.reghao.devops.manager.app.service.bd.BuildApp;
-import cn.reghao.devops.manager.app.service.bd.BuildStat;
-import cn.reghao.devops.manager.app.service.bd.DeployApp;
-import cn.reghao.devops.manager.app.service.bd.webhook.WebhookService;
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @author reghao
- * @date 2019-08-30 18:49:15
- */
-@Slf4j
-@Api(tags = "应用构建部署接口")
-@RestController
-@RequestMapping("/api/app/bd")
-public class BuildDeployController {
-    private final BuildApp buildApp;
-    private final DeployApp deployApp;
-    private final BuildStat buildStat;
-    private final WebhookService webhookService;
-
-    public BuildDeployController(BuildApp buildApp, DeployApp deployApp,
-                                 BuildStat buildStat, WebhookService webhookService) {
-        this.buildApp = buildApp;
-        this.deployApp = deployApp;
-        this.buildStat = buildStat;
-        this.webhookService = webhookService;
-    }
-
-    @ApiOperation(value = "构建部署应用")
-    @ApiImplicitParams(@ApiImplicitParam(name="appId", value="应用 ID", paramType="path", dataType = "String"))
-    @PostMapping(value = "/update/{appId}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String buildAndDeploy(@PathVariable("appId") String appId) throws Exception {
-        buildApp.buildAndDeploy(appId, true);
-        return WebResult.successWithMsg("构建部署请求已提交");
-    }
-
-    @ApiOperation(value = "构建应用")
-    @ApiImplicitParams(@ApiImplicitParam(name="appId", value="应用 ID", paramType="path", dataType = "String"))
-    @PostMapping(value = "/build/{appId}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String build(@PathVariable("appId") String appId) throws Exception {
-        buildApp.buildAndDeploy(appId, false);
-        return WebResult.successWithMsg("构建请求已提交");
-    }
-
-    @ApiOperation(value = "部署应用")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name="buildLogId", value="构建 ID", paramType="path", dataType = "String"),
-            @ApiImplicitParam(name="machineId", value="机器 ID", paramType="path", dataType = "String")
-    })
-    @PostMapping(value = "/deploy/{buildLogId}/{machineId}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deploy(@PathVariable("buildLogId") String buildLogId, @PathVariable("machineId") String machineId)
-            throws Exception {
-        if (buildLogId == null || buildLogId.equals("null")) {
-            return WebResult.failWithMsg("应用尚未构建");
-        }
-
-        deployApp.deploy(buildLogId, machineId);
-        return WebResult.successWithMsg("部署请求已提交");
-    }
-
-    @ApiOperation(value = "重置应用构建状态")
-    @PostMapping(value = "/reset", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String resetState() {
-        // TODO 暂不启用 web 接口, 只在应用启动时执行
-        //buildStat.resetState();
-        return WebResult.successWithMsg("应用构建状态已重置");
-    }
-
-    @ApiOperation(value = "webhook 自动构建部署")
-    @PostMapping("/hook")
-    public String hook(@RequestBody String body) throws Exception {
-        webhookService.handle(body);
-        return WebResult.success();
-    }
-}

+ 0 - 46
manager/src/main/java/cn/reghao/devops/manager/app/controller/GetAppController.java

@@ -1,46 +0,0 @@
-package cn.reghao.devops.manager.app.controller;
-
-import cn.reghao.devops.manager.app.service.bd.GetApp;
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.MediaType;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-/**
- * @author reghao
- * @date 2023-04-21 23:57:00
- */
-@Slf4j
-@Controller
-@RequestMapping("/api/app/bd")
-public class GetAppController {
-    private final GetApp getApp;
-
-    public GetAppController(GetApp getApp) {
-        this.getApp = getApp;
-    }
-
-    @ApiOperation(value = "构建包下载接口")
-    @GetMapping(value = "/packageurl/{buildLogId}", produces = MediaType.APPLICATION_JSON_VALUE)
-    @ResponseBody
-    public String packageUrl(@PathVariable("buildLogId") String buildLogId) throws Exception {
-        String packageUrl = getApp.packageUrl(buildLogId);
-        return WebResult.successWithMsg(packageUrl);
-    }
-
-    @ApiOperation(value = "构建包下载接口")
-    @GetMapping("/dl/{filename}")
-    public String dlPackage(@PathVariable("filename") String filename) {
-        try {
-            getApp.dlPackage(filename);
-        } catch (Exception e) {
-            log.error(e.getMessage());
-        }
-        return "redirect:/app/bd/build";
-    }
-}

+ 0 - 77
manager/src/main/java/cn/reghao/devops/manager/app/controller/config/AppConfigController.java

@@ -1,77 +0,0 @@
-package cn.reghao.devops.manager.app.controller.config;
-
-import cn.reghao.devops.manager.app.model.dto.AppConfigDto;
-import cn.reghao.devops.manager.app.model.dto.AppConfigUpdateDto;
-import cn.reghao.devops.manager.app.service.config.AppConfigService;
-import cn.reghao.devops.manager.app.model.dto.CopyAppDto;
-import cn.reghao.devops.manager.app.model.po.config.AppConfig;
-import cn.reghao.jutil.jdk.result.Result;
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.MediaType;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2019-11-27 11:29:43
- */
-@Slf4j
-@Api(tags = "应用配置 CRUD 接口")
-@RestController
-@RequestMapping("/api/app/config/app")
-public class AppConfigController {
-    private final AppConfigService appConfigService;
-
-    public AppConfigController(AppConfigService appConfigService) {
-        this.appConfigService = appConfigService;
-    }
-
-    @ApiOperation(value = "添加应用配置")
-    @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
-    public String addAppConfig(@Validated AppConfigDto appConfigDto) {
-        Result result = appConfigService.create(appConfigDto);
-        return WebResult.result(result);
-    }
-
-    // TODO 使用 @PathVariable 注解时会自动填充实体
-    @ApiOperation(value = "复制应用配置")
-    @PostMapping(value = "/copy", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String copyAppConfig(@Validated CopyAppDto copyAppDto) {
-        Result result = appConfigService.createByCopy(copyAppDto);
-        return WebResult.result(result);
-    }
-
-    @ApiOperation(value = "修改应用配置")
-    @PostMapping(value = "/update", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String updateAppConfig(@Validated AppConfigUpdateDto appConfigUpdateDto) {
-        Result result = appConfigService.update(appConfigUpdateDto);
-        return WebResult.result(result);
-    }
-
-    @ApiOperation(value = "删除应用配置")
-    @DeleteMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deleteAppConfig(@PathVariable("id") AppConfig app) {
-        String appId = app.getAppId();
-        Result result = appConfigService.delete(appId);
-        return WebResult.result(result);
-    }
-
-    @ApiOperation(value = "清空应用本地仓库")
-    @DeleteMapping(value = "/repo/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deleteAppLocalRepo(@PathVariable("id") AppConfig app) {
-        String appId = app.getAppId();
-        Result result = appConfigService.clearLocalRepo(appId);
-        return WebResult.result(result);
-    }
-
-    @PostMapping(value = "/enable", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deleteAll(@RequestParam(value = "ids") List<String> appIds) {
-        Result result = appConfigService.batchDelete(appIds);
-        return WebResult.result(result);
-    }
-}

+ 0 - 49
manager/src/main/java/cn/reghao/devops/manager/app/controller/config/AppDeployConfigController.java

@@ -1,49 +0,0 @@
-package cn.reghao.devops.manager.app.controller.config;
-
-import cn.reghao.devops.manager.app.model.dto.DeployConfigDto;
-import cn.reghao.devops.manager.app.service.config.AppDeployConfigService;
-import cn.reghao.jutil.jdk.result.Result;
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.MediaType;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @author reghao
- * @date 2019-11-27 11:29:43
- */
-@Slf4j
-@Api(tags = "应用部署配置 CRUD 接口")
-@RestController
-@RequestMapping("/api/app/config/app/deploy")
-public class AppDeployConfigController {
-    private final AppDeployConfigService deployConfigService;
-
-    public AppDeployConfigController(AppDeployConfigService deployConfigService) {
-        this.deployConfigService = deployConfigService;
-    }
-
-    @ApiOperation(value = "添加应用部署配置")
-    @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
-    public String add(@Validated DeployConfigDto deployConfigDto) {
-        Result result = deployConfigService.add(deployConfigDto);
-        return WebResult.result(result);
-    }
-
-    @ApiOperation(value = "修改应用部署配置")
-    @PostMapping(value = "/update", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String update(@Validated DeployConfigDto deployConfigDto) {
-        Result result = deployConfigService.modify(deployConfigDto);
-        return WebResult.result(result);
-    }
-
-    @ApiOperation(value = "删除应用部署配置")
-    @DeleteMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String delete(@PathVariable("id") Integer appDeployConfigId) {
-        Result result = deployConfigService.delete(appDeployConfigId);
-        return WebResult.result(result);
-    }
-}

+ 0 - 33
manager/src/main/java/cn/reghao/devops/manager/app/controller/config/BuildDirController.java

@@ -1,33 +0,0 @@
-package cn.reghao.devops.manager.app.controller.config;
-
-import cn.reghao.devops.manager.app.service.config.BuildDirService;
-import cn.reghao.jutil.jdk.result.Result;
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @author reghao
- * @date 2019-08-30 18:49:15
- */
-@Slf4j
-@Api(tags = "构建目录配置接口")
-@RestController
-@RequestMapping("/api/app/config/build/dir")
-public class BuildDirController {
-    private final BuildDirService buildDirService;
-
-    public BuildDirController(BuildDirService buildDirService) {
-        this.buildDirService = buildDirService;
-    }
-
-    @ApiOperation(value = "清空构建目录")
-    @PostMapping(value = "/erase", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String emptyBuildDir() {
-        Result result = buildDirService.erase();
-        return WebResult.result(result);
-    }
-}

+ 0 - 42
manager/src/main/java/cn/reghao/devops/manager/app/controller/config/CompilerConfigController.java

@@ -1,42 +0,0 @@
-package cn.reghao.devops.manager.app.controller.config;
-
-import cn.reghao.devops.manager.app.model.po.config.build.CompilerConfig;
-import cn.reghao.devops.manager.app.service.config.CompilerConfigService;
-import cn.reghao.jutil.jdk.result.Result;
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.MediaType;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @author reghao
- * @date 2019-08-30 18:49:15
- */
-@Slf4j
-@Api(tags = "应用编译配置接口")
-@RestController
-@RequestMapping("/api/app/config/build/compiler")
-public class CompilerConfigController {
-    private final CompilerConfigService compilerConfigService;
-
-    public CompilerConfigController(CompilerConfigService compilerConfigService) {
-        this.compilerConfigService = compilerConfigService;
-    }
-
-    @ApiOperation(value = "添加/修改应用编译配置")
-    @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
-    public String addOrModifyCompileConfig(@Validated CompilerConfig compilerConfig) {
-        Result result = compilerConfigService.addOrModify(compilerConfig);
-        return WebResult.result(result);
-    }
-
-    @ApiOperation(value = "删除应用编译配置")
-    @DeleteMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deleteCompileConfig(@PathVariable("id") CompilerConfig compilerConfig) {
-        Result result = compilerConfigService.delete(compilerConfig);
-        return WebResult.result(result);
-    }
-}

+ 0 - 42
manager/src/main/java/cn/reghao/devops/manager/app/controller/config/PackerConfigController.java

@@ -1,42 +0,0 @@
-package cn.reghao.devops.manager.app.controller.config;
-
-import cn.reghao.devops.manager.app.model.po.config.build.PackerConfig;
-import cn.reghao.devops.manager.app.service.config.PackerConfigService;
-import cn.reghao.jutil.jdk.result.Result;
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.MediaType;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @author reghao
- * @date 2019-08-30 18:49:15
- */
-@Slf4j
-@Api(tags = "应用打包配置接口")
-@RestController
-@RequestMapping("/api/app/config/build/packer")
-public class PackerConfigController {
-    private final PackerConfigService packerConfigService;
-
-    public PackerConfigController(PackerConfigService packerConfigService) {
-        this.packerConfigService = packerConfigService;
-    }
-
-    @ApiOperation(value = "添加/修改应用打包配置")
-    @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
-    public String addOrModifyPackConfig(@Validated PackerConfig packerConfig) {
-        Result result = packerConfigService.addOrModify(packerConfig);;
-        return WebResult.result(result);
-    }
-
-    @ApiOperation(value = "删除应用打包配置")
-    @DeleteMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deletePackConfig(@PathVariable("id") PackerConfig packerConfig) {
-        Result result = packerConfigService.delete(packerConfig);
-        return WebResult.result(result);
-    }
-}

+ 0 - 42
manager/src/main/java/cn/reghao/devops/manager/app/controller/config/RepoAuthConfigController.java

@@ -1,42 +0,0 @@
-package cn.reghao.devops.manager.app.controller.config;
-
-import cn.reghao.devops.manager.app.model.po.config.build.RepoAuthConfig;
-import cn.reghao.devops.manager.app.service.config.RepoAuthConfigService;
-import cn.reghao.jutil.jdk.result.Result;
-import cn.reghao.jutil.jdk.result.WebResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.MediaType;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @author reghao
- * @date 2019-08-30 18:49:15
- */
-@Slf4j
-@Api(tags = "仓库认证配置接口")
-@RestController
-@RequestMapping("/api/app/config/build/repoauth")
-public class RepoAuthConfigController {
-    private final RepoAuthConfigService repoAuthConfigService;
-
-    public RepoAuthConfigController(RepoAuthConfigService repoAuthConfigService) {
-        this.repoAuthConfigService = repoAuthConfigService;
-    }
-
-    @ApiOperation(value = "添加/修改仓库认证配置")
-    @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
-    public String addOrModifyRepoConfig(@Validated RepoAuthConfig repoAuth) {
-        Result result = repoAuthConfigService.addOrModify(repoAuth);
-        return WebResult.result(result);
-    }
-
-    @ApiOperation(value = "删除仓库认证配置")
-    @DeleteMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String deleteRepoConfig(@PathVariable("id") RepoAuthConfig repoAuth) {
-        Result result = repoAuthConfigService.delete(repoAuth);
-        return WebResult.result(result);
-    }
-}

+ 0 - 139
manager/src/main/java/cn/reghao/devops/manager/app/controller/page/BuildDeployPageController.java

@@ -1,139 +0,0 @@
-package cn.reghao.devops.manager.app.controller.page;
-
-import cn.reghao.devops.common.util.NotAvailable;
-import cn.reghao.devops.manager.app.model.po.log.BuildConfigSnapshot;
-import cn.reghao.devops.manager.app.model.po.log.BuildConsumed;
-import cn.reghao.devops.manager.app.model.po.log.BuildLog;
-import cn.reghao.devops.manager.app.model.vo.AppBuildingVO;
-import cn.reghao.devops.manager.app.model.vo.AppDeployingVO;
-import cn.reghao.devops.manager.app.model.vo.BuildLogVO;
-import cn.reghao.devops.manager.app.service.bd.BuildService;
-import cn.reghao.devops.manager.app.service.page.BuildDeployLogPage;
-import cn.reghao.devops.manager.app.service.bd.BuildStat;
-import cn.reghao.devops.manager.app.service.bd.DeployStat;
-import cn.reghao.devops.manager.util.DefaultSetting;
-import cn.reghao.devops.manager.util.db.PageSort;
-import cn.reghao.jutil.jdk.db.PageList;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.domain.*;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2019-08-30 18:49:15
- */
-@Slf4j
-@Api(tags = "构建部署页面")
-@Controller
-@RequestMapping("/app/bd")
-public class BuildDeployPageController {
-    private final BuildStat buildStat;
-    private final DeployStat deployStat;
-    private final BuildDeployLogPage buildDeployLogPage;
-    private final BuildService buildService;
-
-    public BuildDeployPageController(BuildStat buildStat, DeployStat deployStat, BuildDeployLogPage buildDeployLogPage,
-                                     BuildService buildService) {
-        this.buildStat = buildStat;
-        this.deployStat = deployStat;
-        this.buildDeployLogPage = buildDeployLogPage;
-        this.buildService = buildService;
-    }
-
-    @ApiOperation(value = "应用构建页面")
-    @GetMapping(value = "/build")
-    public String index(@RequestParam(value = "env", required = false) String env,
-                        @RequestParam(value = "type", required = false) String type,
-                        @RequestParam(value = "appName", required = false) String appName, Model model) throws Exception {
-        if (env == null) {
-            env = DefaultSetting.getDefaultAppEnv();
-        }
-
-        if (type == null) {
-            type = DefaultSetting.getDefaultAppType();
-        }
-
-        PageRequest pageRequest = PageSort.pageRequest();
-        int pageNumber = pageRequest.getPageNumber()+1;
-        int pageSize = pageRequest.getPageSize();
-        PageList<AppBuildingVO> pageList;
-        Page<AppBuildingVO> page;
-        if (appName != null) {
-            pageList = buildStat.getByName(appName, pageNumber, pageSize);
-            page = buildService.findByPage(appName, pageRequest);
-        } else {
-            pageList = buildStat.getByPage(env, type, pageNumber, pageSize);
-            page = buildService.findByPage(env, type, pageRequest);
-        }
-
-        Page<AppBuildingVO> page1 = new PageImpl<>(pageList.getList(), pageRequest, pageList.getTotalSize());
-        model.addAttribute("env", env);
-        model.addAttribute("type", type);
-        model.addAttribute("page", page);
-        model.addAttribute("list", page.getContent());
-        return "/app/bd/index";
-    }
-
-    @ApiOperation(value = "应用部署页面")
-    @GetMapping("/deploy")
-    public String deployPage(@RequestParam("appId") String appId,
-                             @RequestParam("buildLogId") String buildLogId,
-                             Model model) {
-        List<AppDeployingVO> list = deployStat.get(appId, null);
-        model.addAttribute("appId", appId);
-        model.addAttribute("buildLogId", buildLogId);
-        model.addAttribute("list", list);
-        return "/app/bd/deploy";
-    }
-
-    @ApiOperation(value = "构建结果页面")
-    @GetMapping("/build/result")
-    public String buildLogResultPage(@RequestParam("buildLogId") String buildLogId, Model model) {
-        List<String> list = new ArrayList<>();
-        if (NotAvailable.na.getDesc().equals(buildLogId)) {
-            list.add("构建结果暂不可用");
-        } else {
-            String msg = buildDeployLogPage.getBuildResult(buildLogId);
-            list = Arrays.stream(msg.split(System.lineSeparator()))
-                    .collect(Collectors.toList());
-        }
-
-        model.addAttribute("list", list);
-        return "/app/bd/log/buildresult";
-    }
-
-    @ApiOperation(value = "历史构建页面")
-    @GetMapping("/build/history")
-    public String buildLogPage(@RequestParam("appId") String appId, Model model) {
-        PageRequest pageRequest = PageSort.pageRequest();
-        Page<BuildLogVO> buildLogs = buildDeployLogPage.buildLogVOs(appId, pageRequest);
-        model.addAttribute("page", buildLogs);
-        model.addAttribute("list", buildLogs.getContent());
-        return "/app/bd/log/buildlog";
-    }
-
-    @ApiOperation(value = "构建配置页面")
-    @GetMapping("/build/config")
-    public String buildConfigPage(@RequestParam("buildLogId") String buildLogId, Model model) {
-        BuildLog buildLog = buildDeployLogPage.findByBuildLogId(buildLogId);
-        BuildConfigSnapshot buildConfigSnapshot = buildLog.getBuildConfigSnapshot();
-        model.addAttribute("buildConfigSnapshot", buildConfigSnapshot);
-        return "/app/bd/log/buildconfig";
-    }
-
-    @ApiOperation(value = "构建耗时页面")
-    @GetMapping("/build/consumed")
-    public String buildTimePage(@RequestParam("buildLogId") String buildLogId, Model model) {
-        BuildLog buildLog = buildDeployLogPage.findByBuildLogId(buildLogId);
-        BuildConsumed buildConsumed = buildLog.getBuildConsumed();
-        model.addAttribute("buildConsumed", buildConsumed);
-        return "/app/bd/log/buildtime";
-    }
-}

+ 0 - 89
manager/src/main/java/cn/reghao/devops/manager/app/controller/page/StatusPageController.java

@@ -1,89 +0,0 @@
-package cn.reghao.devops.manager.app.controller.page;
-
-import cn.reghao.devops.manager.app.model.vo.AppRunning;
-import cn.reghao.devops.manager.app.model.vo.AppRunningVO;
-import cn.reghao.devops.manager.app.service.bd.DeployStat;
-import cn.reghao.devops.manager.util.DefaultSetting;
-import cn.reghao.devops.manager.util.db.PageSort;
-import cn.reghao.jutil.jdk.db.PageList;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import java.util.*;
-
-/**
- * @author reghao
- * @date 2019-08-30 18:49:15
- */
-@Slf4j
-@Api(tags = "应用状态页面")
-@Controller
-@RequestMapping("/app/stat")
-public class StatusPageController {
-    private final DeployStat deployStat;
-
-    public StatusPageController(DeployStat deployStat) {
-        this.deployStat = deployStat;
-    }
-
-    @ApiOperation(value = "应用运行状态列表页面")
-    @GetMapping
-    public String statusPage1(@RequestParam(value = "env", required = false) String env,
-                              @RequestParam(value = "appType", required = false) String appType,
-                              @RequestParam(value = "status", required = false) Boolean status,
-                              @RequestParam(value = "appName", required = false) String appName,
-                              Model model) {
-        if (env == null) {
-            env = DefaultSetting.getDefaultAppEnv();
-        }
-
-        if (appType == null) {
-            appType = DefaultSetting.getDefaultAppType();
-        }
-
-        if (status == null) {
-            status = true;
-        }
-
-        if (appName != null) {
-            Page<AppRunningVO> page = new PageImpl<>(Collections.emptyList());
-            PageList<AppRunningVO> pageList = PageList.empty();
-
-            model.addAttribute("env", env);
-            model.addAttribute("page", page);
-            model.addAttribute("list", pageList.getList());
-            return "/app/stat/index1";
-        }
-
-        PageRequest pageRequest = PageSort.pageRequest();
-        int pageNumber = pageRequest.getPageNumber();
-        int pageSize = pageRequest.getPageSize();
-        PageList<AppRunningVO> pageList = deployStat.getByPage(env, appType, pageNumber+1, pageSize);
-        Page<AppRunningVO> appRunnings = new PageImpl<>(pageList.getList(), pageRequest, pageList.getTotalSize());
-
-        model.addAttribute("env", env);
-        model.addAttribute("type", appType);
-        model.addAttribute("status", status);
-        model.addAttribute("page", appRunnings);
-        model.addAttribute("list", pageList.getList());
-        return "/app/stat/index1";
-    }
-
-    @ApiOperation(value = "应用运行状态详情页面")
-    @GetMapping(value = "/detail/{appId}")
-    public String statusPage2(@PathVariable(value = "appId") String appId, Model model) {
-        List<AppRunning> list = deployStat.getAppRunning(appId);
-        model.addAttribute("list", list);
-        return "/app/stat/index2";
-    }
-}

+ 0 - 160
manager/src/main/java/cn/reghao/devops/manager/app/controller/page/config/AppConfigPageController.java

@@ -1,160 +0,0 @@
-package cn.reghao.devops.manager.app.controller.page.config;
-
-import cn.reghao.devops.manager.build.model.constant.EnvType;
-import cn.reghao.devops.common.msg.constant.PackType;
-import cn.reghao.devops.manager.app.db.repository.config.build.CompilerConfigRepository;
-import cn.reghao.devops.manager.app.db.repository.config.build.PackerConfigRepository;
-import cn.reghao.devops.manager.app.db.repository.config.build.RepoAuthConfigRepository;
-import cn.reghao.devops.manager.app.model.constant.AppType;
-import cn.reghao.devops.manager.app.model.po.config.AppConfig;
-import cn.reghao.devops.manager.app.model.vo.KeyValue;
-import cn.reghao.devops.manager.util.DefaultSetting;
-import cn.reghao.devops.manager.util.db.PageSort;
-import cn.reghao.devops.manager.app.db.query.AppConfigQuery;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * @author reghao
- * @date 2019-08-30 18:49:15
- */
-@Slf4j
-@Api(tags = "应用配置页面")
-@Controller
-@RequestMapping("/app/config/app")
-public class AppConfigPageController {
-    private final AppConfigQuery appConfigQuery;
-    private final RepoAuthConfigRepository repoAuthConfigRepository;
-    private final CompilerConfigRepository compilerConfigRepository;
-    private final PackerConfigRepository packerConfigRepository;
-
-    public AppConfigPageController(AppConfigQuery appConfigQuery,
-                                   RepoAuthConfigRepository repoAuthConfigRepository,
-                                   CompilerConfigRepository compilerConfigRepository,
-                                   PackerConfigRepository packerConfigRepository) {
-        this.appConfigQuery = appConfigQuery;
-        this.repoAuthConfigRepository = repoAuthConfigRepository;
-        this.compilerConfigRepository = compilerConfigRepository;
-        this.packerConfigRepository = packerConfigRepository;
-    }
-
-    @ApiOperation(value = "应用配置页面")
-    @GetMapping
-    public String appConfigPage(@RequestParam(value = "env", required = false) String env,
-                                @RequestParam(value = "type", required = false) String type,
-                                @RequestParam(value = "appName", required = false) String appName,
-                                Model model) {
-        if (env == null) {
-            env = DefaultSetting.getDefaultAppEnv();
-        }
-
-        if (type == null) {
-            type = DefaultSetting.getDefaultAppType();
-        }
-
-        if (appName != null) {
-            Map<String, String> map = new HashMap<>();
-            map.put("appName", appName);
-            List<AppConfig> list = appConfigQuery.query(map);
-            Page<AppConfig> page = new PageImpl<>(list);
-
-            model.addAttribute("env", env);
-            model.addAttribute("type", type);
-            model.addAttribute("page", page);
-            model.addAttribute("list", page.getContent());
-            return "/app/config/app/index";
-        }
-
-        PageRequest pageRequest = PageSort.pageRequest();
-        Page<AppConfig> appPage = appConfigQuery.findByEnvAndType(env, type, pageRequest);
-
-        model.addAttribute("env", env);
-        model.addAttribute("type", type);
-        model.addAttribute("page", appPage);
-        model.addAttribute("list", appPage.getContent());
-        return "/app/config/app/index";
-    }
-
-    @GetMapping("/add")
-    public String addAppConfigPage(Model model) {
-        setAppModel(model);
-        return "/app/config/app/add";
-    }
-
-    private void setAppModel(Model model) {
-        List<KeyValue> packTypes = new ArrayList<>();
-        packTypes.add(new KeyValue("请选择打包类型", ""));
-        for (PackType packType : PackType.values()) {
-            packTypes.add(new KeyValue(packType.name(), packType.name()));
-        }
-
-        model.addAttribute("packTypes", packTypes);
-        setCommon(model);
-    }
-
-    private void setCommon(Model model) {
-        List<KeyValue> envs = getEnvList();
-        List<KeyValue> appTypes = new ArrayList<>();
-        for (AppType appType : AppType.values()) {
-            appTypes.add(new KeyValue(appType.name(), appType.name()));
-        }
-        model.addAttribute("environments", envs);
-        model.addAttribute("appTypes", appTypes);
-
-        List<KeyValue> repoAuths = repoAuthConfigRepository.findAll().stream()
-                .map(repoAuthConfig -> new KeyValue(String.valueOf(repoAuthConfig.getName()), repoAuthConfig.getName()))
-                .collect(Collectors.toList());
-
-        List<KeyValue> compilers = compilerConfigRepository.findAllByDeletedFalse().stream()
-                .map(compilerConfig -> new KeyValue(String.valueOf(compilerConfig.getName()), compilerConfig.getName()))
-                .collect(Collectors.toList());
-
-        List<KeyValue> packers = packerConfigRepository.findAllByDeletedFalse().stream()
-                .map(packerConfig -> new KeyValue(String.valueOf(packerConfig.getName()), packerConfig.getName()))
-                .collect(Collectors.toList());
-        model.addAttribute("repoAuths", repoAuths);
-        model.addAttribute("compilers", compilers);
-        model.addAttribute("packers", packers);
-    }
-
-    @GetMapping("/edit/{id}")
-    public String editAppConfigPage(@PathVariable("id") AppConfig app, Model model) {
-        setAppModel(model);
-        model.addAttribute("app", app);
-        return "/app/config/app/edit";
-    }
-
-    @GetMapping("/copy/{appId}")
-    public String copyAppConfigPage(@PathVariable("appId") String appId, Model model) {
-        List<KeyValue> envs = getEnvList();
-        model.addAttribute("environments", envs);
-        model.addAttribute("appId", appId);
-        return "/app/config/app/copy";
-    }
-
-    private List<KeyValue> getEnvList() {
-        List<KeyValue> envs = new ArrayList<>();
-        for (EnvType envType : EnvType.values()) {
-            envs.add(new KeyValue(envType.name(), envType.name()));
-        }
-
-        return envs;
-    }
-
-    @GetMapping("/detail/{appId}")
-    public String appConfigPage(@PathVariable("appId") String appId, Model model) {
-        AppConfig app = appConfigQuery.findByAppId(appId);
-        model.addAttribute("app", app);
-        return "/app/config/app/detail";
-    }
-}

+ 0 - 77
manager/src/main/java/cn/reghao/devops/manager/app/controller/page/config/AppDeployConfigPageController.java

@@ -1,77 +0,0 @@
-package cn.reghao.devops.manager.app.controller.page.config;
-
-import cn.reghao.devops.manager.app.model.po.config.AppConfig;
-import cn.reghao.devops.manager.app.model.po.config.AppDeployConfig;
-import cn.reghao.devops.manager.app.model.vo.AppDeployConfigVo;
-import cn.reghao.devops.manager.app.model.vo.KeyValue;
-import cn.reghao.devops.manager.app.service.page.config.AppDeployConfigPage;
-import cn.reghao.devops.manager.util.db.PageSort;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2019-08-30 18:49:15
- */
-@Slf4j
-@Api(tags = "应用部署配置页面")
-@Controller
-@RequestMapping("/app/config/app/deploy")
-public class AppDeployConfigPageController {
-    private final AppDeployConfigPage deployConfigPage;
-
-    public AppDeployConfigPageController(AppDeployConfigPage deployConfigPage) {
-        this.deployConfigPage = deployConfigPage;
-    }
-
-    @ApiOperation(value = "部署配置页面")
-    @GetMapping("/{appId}")
-    public String deployConfigIndexPage(@PathVariable("appId") String appId, Model model) {
-        PageRequest pageRequest = PageSort.pageRequest();
-        Page<AppDeployConfigVo> page = deployConfigPage.indexPage(appId, pageRequest);
-        List<AppDeployConfigVo> list = page.getContent();
-
-        model.addAttribute("appId", appId);
-        model.addAttribute("page", page);
-        model.addAttribute("list", list);
-        return "/app/config/app/deploy/index";
-    }
-
-    @GetMapping("/add/{appId}")
-    public String addAppConfigPage(@PathVariable("appId") String appId, Model model) {
-        AppConfig appConfig = deployConfigPage.getAppConfig(appId);
-        List<KeyValue> machines = deployConfigPage.onlineMachines(appConfig.getEnv());
-
-        model.addAttribute("appId", appId);
-        model.addAttribute("packType", appConfig.getPackerConfig().getType());
-        model.addAttribute("machines", machines);
-        return "/app/config/app/deploy/add";
-    }
-
-    @GetMapping("/edit/{appId}/{machineId}")
-    public String editAppConfigPage(@PathVariable("appId") String appId,
-                                    @PathVariable("machineId") String machineId,
-                                    Model model) {
-        AppDeployConfig appDeployConfig = deployConfigPage.findByAppIdAndMachineId(appId, machineId);
-        model.addAttribute("appDeployConfig", appDeployConfig);
-        return "/app/config/app/deploy/edit";
-    }
-
-    @GetMapping("/detail/{appId}/{machineId}")
-    public String appConfigPage(@PathVariable("appId") String appId, @PathVariable("machineId") String machineId,
-                                Model model) {
-        AppDeployConfig appDeployConfig = deployConfigPage.findByAppIdAndMachineId(appId, machineId);
-        model.addAttribute("deployConfigVO", new AppDeployConfigVo(appDeployConfig));
-        return "/app/config/app/deploy/detail";
-    }
-}

+ 0 - 61
manager/src/main/java/cn/reghao/devops/manager/app/controller/page/config/BuildDirPageController.java

@@ -1,61 +0,0 @@
-package cn.reghao.devops.manager.app.controller.page.config;
-
-import cn.reghao.devops.manager.app.model.po.config.build.BuildDir;
-import cn.reghao.devops.manager.app.service.config.BuildDirService;
-import cn.reghao.devops.manager.util.db.PageSort;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2019-08-30 18:49:15
- */
-@Slf4j
-@Api(tags = "构建目录配置页面")
-@Controller
-@RequestMapping("/app/config/build/dir")
-public class BuildDirPageController {
-    private final BuildDirService buildDirService;
-
-    public BuildDirPageController(BuildDirService buildDirService) {
-        this.buildDirService = buildDirService;
-    }
-
-    @ApiOperation(value = "构建目录页面")
-    @GetMapping
-    public String buildDirPage(Model model) {
-        BuildDir buildDir = buildDirService.get();
-        List<BuildDir> list = List.of(buildDir);
-
-        PageRequest pageRequest = PageSort.pageRequest();
-        Page<BuildDir> page = new PageImpl<>(list, pageRequest, list.size());
-
-        model.addAttribute("page", page);
-        model.addAttribute("list", list);
-        return "/app/config/build/builddir";
-    }
-
-    @ApiOperation(value = "目录容量详情页面")
-    @GetMapping("/usage")
-    public String usagePage(Model model) {
-        BuildDir buildDir = buildDirService.get();
-        List<BuildDir> list = List.of(buildDir);
-
-        PageRequest pageRequest = PageSort.pageRequest();
-        Page<BuildDir> page = new PageImpl<>(list, pageRequest, list.size());
-
-        model.addAttribute("page", page);
-        model.addAttribute("list", list);
-        return "/app/config/build/builddir";
-    }
-}

+ 0 - 76
manager/src/main/java/cn/reghao/devops/manager/app/controller/page/config/CompilerPageController.java

@@ -1,76 +0,0 @@
-package cn.reghao.devops.manager.app.controller.page.config;
-
-import cn.reghao.devops.common.machine.Machine;
-import cn.reghao.devops.manager.app.db.repository.config.build.CompilerConfigRepository;
-import cn.reghao.devops.manager.build.model.constant.CompileType;
-import cn.reghao.devops.manager.app.model.po.config.build.CompilerConfig;
-import cn.reghao.devops.manager.app.model.vo.KeyValue;
-import cn.reghao.devops.manager.util.db.PageSort;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2021-09-17 10:31:15
- */
-@Slf4j
-@Api(tags = "应用编译配置页面")
-@Controller
-@RequestMapping("/app/config/build/compiler")
-public class CompilerPageController {
-    private final CompilerConfigRepository compilerConfigRepository;
-
-    public CompilerPageController(CompilerConfigRepository compilerConfigRepository) {
-        this.compilerConfigRepository = compilerConfigRepository;
-    }
-
-    @ApiOperation(value = "编译配置页面")
-    @GetMapping
-    public String compilerConfigPage(Model model) {
-        PageRequest pageRequest = PageSort.pageRequest();
-        Page<CompilerConfig> page = compilerConfigRepository.findAll(pageRequest);
-
-        model.addAttribute("page", page);
-        model.addAttribute("list", page.getContent());
-        return "/app/config/compiler/index";
-    }
-
-    @GetMapping("/add")
-    public String addCompilerPage(Model model) {
-        setCompilerModel(model);
-        return "/app/config/compiler/add";
-    }
-
-    @GetMapping("/edit/{id}")
-    public String editCompilerPage(@PathVariable("id") CompilerConfig compilerConfig, Model model) {
-        model.addAttribute("compiler", compilerConfig);
-        return "/app/config/compiler/edit";
-    }
-
-    private void setCompilerModel(Model model) {
-        List<KeyValue> compileTypes = new ArrayList<>();
-        for (CompileType compileType : CompileType.values()) {
-            compileTypes.add(new KeyValue(compileType.name(), compileType.name()));
-        }
-        model.addAttribute("compileTypes", compileTypes);
-        model.addAttribute("machineId", Machine.ID);
-        model.addAttribute("machineIpv4", Machine.IPV4);
-    }
-
-    @GetMapping("/detail/{id}")
-    public String compilerDetailPage(@PathVariable("id") CompilerConfig compilerConfig, Model model) {
-        model.addAttribute("compiler", compilerConfig);
-        return "/app/config/compiler/detail";
-    }
-}

+ 0 - 76
manager/src/main/java/cn/reghao/devops/manager/app/controller/page/config/PackerPageController.java

@@ -1,76 +0,0 @@
-package cn.reghao.devops.manager.app.controller.page.config;
-
-import cn.reghao.devops.common.machine.Machine;
-import cn.reghao.devops.common.msg.constant.PackType;
-import cn.reghao.devops.manager.app.db.repository.config.build.PackerConfigRepository;
-import cn.reghao.devops.manager.app.model.po.config.build.PackerConfig;
-import cn.reghao.devops.manager.app.model.vo.KeyValue;
-import cn.reghao.devops.manager.util.db.PageSort;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2021-09-17 10:31:15
- */
-@Slf4j
-@Api(tags = "应用打包配置页面")
-@Controller
-@RequestMapping("/app/config/build/packer")
-public class PackerPageController {
-    private final PackerConfigRepository packerConfigRepository;
-
-    public PackerPageController(PackerConfigRepository packerConfigRepository) {
-        this.packerConfigRepository = packerConfigRepository;
-    }
-
-    @ApiOperation(value = "打包配置页面")
-    @GetMapping
-    public String packerPage(Model model) {
-        PageRequest pageRequest = PageSort.pageRequest();
-        Page<PackerConfig> page = packerConfigRepository.findAll(pageRequest);
-
-        model.addAttribute("page", page);
-        model.addAttribute("list", page.getContent());
-        return "/app/config/packer/index";
-    }
-
-    @GetMapping("/add")
-    public String addPackerPage(Model model) {
-        setPackerModel(model);
-        return "/app/config/packer/add";
-    }
-
-    @GetMapping("/edit/{id}")
-    public String editPackerPage(@PathVariable("id") PackerConfig packerConfig, Model model) {
-        model.addAttribute("packer", packerConfig);
-        return "/app/config/packer/edit";
-    }
-
-    private void setPackerModel(Model model) {
-        List<KeyValue> packTypes = new ArrayList<>();
-        for (PackType packType : PackType.values()) {
-            packTypes.add(new KeyValue(packType.name(), packType.name()));
-        }
-        model.addAttribute("packTypes", packTypes);
-        model.addAttribute("machineId", Machine.ID);
-        model.addAttribute("machineIpv4", Machine.IPV4);
-    }
-
-    @GetMapping("/detail/{id}")
-    public String packerDetailPage(@PathVariable("id") PackerConfig packerConfig, Model model) {
-        model.addAttribute("packer", packerConfig);
-        return "/app/config/packer/detail";
-    }
-}

+ 0 - 85
manager/src/main/java/cn/reghao/devops/manager/app/controller/page/config/RepoAuthPageController.java

@@ -1,85 +0,0 @@
-package cn.reghao.devops.manager.app.controller.page.config;
-
-import cn.reghao.devops.manager.app.db.repository.config.build.RepoAuthConfigRepository;
-import cn.reghao.devops.manager.build.model.constant.RepoAuthType;
-import cn.reghao.devops.manager.build.model.constant.RepoType;
-import cn.reghao.devops.manager.app.model.po.config.build.RepoAuthConfig;
-import cn.reghao.devops.manager.app.model.vo.KeyValue;
-import cn.reghao.devops.manager.util.db.PageSort;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2021-09-17 10:31:15
- */
-@Slf4j
-@Api(tags = "仓库认证配置页面")
-@Controller
-@RequestMapping("/app/config/build")
-public class RepoAuthPageController {
-    private final RepoAuthConfigRepository repoAuthConfigRepository;
-
-    public RepoAuthPageController(RepoAuthConfigRepository repoAuthConfigRepository) {
-        this.repoAuthConfigRepository = repoAuthConfigRepository;
-    }
-
-    @ApiOperation(value = "仓库认证列表页面")
-    @GetMapping("/repoauth")
-    public String repoAuthPage(Model model) {
-        PageRequest pageRequest = PageSort.pageRequest();
-        Page<RepoAuthConfig> page = repoAuthConfigRepository.findAll(pageRequest);
-
-        model.addAttribute("page", page);
-        model.addAttribute("list", page.getContent());
-        return "/app/config/repoauth/index";
-    }
-
-    @ApiOperation(value = "仓库认证添加页面")
-    @GetMapping("/repoauth/add")
-    public String addRepoAuthPage(Model model) {
-        setRepoAuthModel(model);
-        return "/app/config/repoauth/add";
-    }
-
-    @ApiOperation(value = "仓库认证编辑页面")
-    @GetMapping("/repoauth/edit/{id}")
-    public String editRepoAuthPage(@PathVariable("id") RepoAuthConfig repoAuth, Model model) {
-        repoAuth.setNull();
-        model.addAttribute("repoAuth", repoAuth);
-        return "/app/config/repoauth/edit";
-    }
-
-    private void setRepoAuthModel(Model model) {
-        List<KeyValue> repos = new ArrayList<>();
-        for (RepoType repoType : RepoType.values()) {
-            repos.add(new KeyValue(repoType.name(), repoType.name()));
-        }
-
-        List<KeyValue> auths = new ArrayList<>();
-        for (RepoAuthType authType : RepoAuthType.values()) {
-            auths.add(new KeyValue(authType.name(), authType.name()));
-        }
-
-        model.addAttribute("repos", repos);
-        model.addAttribute("auths", auths);
-    }
-
-    @GetMapping("/repoauth/detail/{id}")
-    public String repoAuthDetailPage(@PathVariable("id") RepoAuthConfig repoAuth, Model model) {
-        repoAuth.setPassword("******");
-        model.addAttribute("repoAuth", repoAuth);
-        return "/app/config/repoauth/detail";
-    }
-}

+ 0 - 27
manager/src/main/java/cn/reghao/devops/manager/app/db/query/AppConfigQuery.java

@@ -1,27 +0,0 @@
-package cn.reghao.devops.manager.app.db.query;
-
-import cn.reghao.devops.manager.app.model.po.config.AppConfig;
-import cn.reghao.devops.manager.app.model.po.config.build.CompilerConfig;
-import cn.reghao.devops.manager.app.model.po.config.build.PackerConfig;
-import cn.reghao.devops.manager.app.model.po.config.build.RepoAuthConfig;
-import cn.reghao.jutil.jdk.db.BaseQuery;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author reghao
- * @date 2021-06-02 15:01:18
- */
-public interface AppConfigQuery extends BaseQuery<AppConfig> {
-    List<AppConfig> query(Map<String, String> kv);
-    AppConfig findByRepoAndBranch(String repo, String branch);
-    AppConfig findByAppId(String appId);
-    Page<AppConfig> findByEnv(String env, Pageable pageable);
-    Page<AppConfig> findByEnvAndType(String env, String type, Pageable pageable);
-    List<AppConfig> findAllByRepoAuthConfig(RepoAuthConfig repoAuthConfig);
-    List<AppConfig> findAllByCompilerConfig(CompilerConfig compilerConfig);
-    List<AppConfig> findAllByPackerConfig(PackerConfig packerConfig);
-}

+ 0 - 18
manager/src/main/java/cn/reghao/devops/manager/app/db/query/AppDeployConfigQuery.java

@@ -1,18 +0,0 @@
-package cn.reghao.devops.manager.app.db.query;
-
-import cn.reghao.devops.manager.app.model.po.config.AppDeployConfig;
-import cn.reghao.jutil.jdk.db.BaseQuery;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2021-06-02 15:01:18
- */
-public interface AppDeployConfigQuery extends BaseQuery<AppDeployConfig> {
-    Page<AppDeployConfig> findByAppId(String appId, Pageable pageable);
-    List<AppDeployConfig> findByAppId(String appId);
-    AppDeployConfig findByAppIdAndMachineId(String appId, String machineId);
-}

+ 0 - 37
manager/src/main/java/cn/reghao/devops/manager/app/db/query/DeployLogQuery.java

@@ -1,37 +0,0 @@
-package cn.reghao.devops.manager.app.db.query;
-
-import cn.reghao.devops.manager.app.db.repository.log.DeployLogRepository;
-import cn.reghao.devops.manager.app.model.po.config.AppConfig;
-import cn.reghao.devops.manager.app.model.po.config.AppDeployConfig;
-import cn.reghao.devops.manager.app.model.po.log.BuildLog;
-import cn.reghao.devops.manager.app.model.po.log.DeployLog;
-import cn.reghao.devops.manager.machine.model.po.MachineHost;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Repository;
-
-import javax.persistence.criteria.Join;
-import javax.persistence.criteria.JoinType;
-import javax.persistence.criteria.Predicate;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-03-08 11:45:57
- */
-@Repository
-public class DeployLogQuery {
-    private final DeployLogRepository deployLogRepository;
-
-    public DeployLogQuery(DeployLogRepository deployLogRepository) {
-        this.deployLogRepository = deployLogRepository;
-    }
-
-    public List<DeployLog> findDeployLogByGroup() {
-        Specification<DeployLog> specification = (root, query, cb) -> {
-            query.groupBy(root.get("machineHost"));
-            return cb.conjunction();
-        };
-
-        return deployLogRepository.findAll(specification);
-    }
-}

+ 0 - 93
manager/src/main/java/cn/reghao/devops/manager/app/db/query/impl/AppConfigQueryImpl.java

@@ -1,93 +0,0 @@
-package cn.reghao.devops.manager.app.db.query.impl;
-
-import cn.reghao.devops.manager.app.db.query.AppConfigQuery;
-import cn.reghao.devops.manager.app.db.repository.config.AppConfigRepository;
-import cn.reghao.devops.manager.app.model.po.config.AppConfig;
-import cn.reghao.devops.manager.app.model.po.config.build.CompilerConfig;
-import cn.reghao.devops.manager.app.model.po.config.build.PackerConfig;
-import cn.reghao.devops.manager.app.model.po.config.build.RepoAuthConfig;
-import org.springframework.cache.annotation.Cacheable;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-
-import javax.persistence.criteria.Predicate;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author reghao
- * @date 2021-06-02 15:01:18
- */
-@Service
-public class AppConfigQueryImpl implements AppConfigQuery {
-    private final AppConfigRepository appRepository;
-
-    public AppConfigQueryImpl(AppConfigRepository appRepository) {
-        this.appRepository = appRepository;
-    }
-
-    @Override
-    public AppConfig findById(int id) {
-        return appRepository.getOne(id);
-    }
-
-    @Override
-    public List<AppConfig> query(Map<String, String> kv) {
-        Specification<AppConfig> specification = (root, query, cb) -> {
-            List<Predicate> predicates = new ArrayList<>();
-            kv.forEach((name, value) -> {
-                predicates.add(cb.like(root.get(name), "%" + value + "%"));
-            });
-
-            // select * from app_building where app_id like '%test%' and app_name like '%测试%'
-            return cb.and(predicates.toArray(new Predicate[0]));
-        };
-        return appRepository.findAll(specification);
-    }
-
-    @Override
-    public AppConfig findByRepoAndBranch(String repo, String branch) {
-        List<AppConfig> list = appRepository.findByAppRepoAndRepoBranch(repo, branch);
-        return list.size() == 1 ? list.get(0) : null;
-    }
-
-    //@Cacheable({"appId"})
-    @Override
-    public AppConfig findByAppId(String appId) {
-        return appRepository.findByDeletedFalseAndAppId(appId);
-    }
-
-    @Override
-    public Page<AppConfig> findByEnv(String env, Pageable pageable) {
-        return appRepository.findByEnv(env, pageable);
-    }
-
-    @Override
-    public Page<AppConfig> findByEnvAndType(String env, String type, Pageable pageable) {
-        return appRepository.findByEnvAndAppType(env, type, pageable);
-    }
-
-    //@Cacheable({"appId"})
-    @Override
-    public List<AppConfig> findAll() {
-        return appRepository.findAll();
-    }
-
-    @Override
-    public List<AppConfig> findAllByRepoAuthConfig(RepoAuthConfig repoAuthConfig) {
-        return appRepository.findAllByRepoAuthConfig(repoAuthConfig);
-    }
-
-    @Override
-    public List<AppConfig> findAllByCompilerConfig(CompilerConfig compilerConfig) {
-        return appRepository.findAllByCompilerConfig(compilerConfig);
-    }
-
-    @Override
-    public List<AppConfig> findAllByPackerConfig(PackerConfig packerConfig) {
-        return appRepository.findAllByPackerConfig(packerConfig);
-    }
-}

+ 0 - 80
manager/src/main/java/cn/reghao/devops/manager/app/db/query/impl/AppDeployConfigQueryImpl.java

@@ -1,80 +0,0 @@
-package cn.reghao.devops.manager.app.db.query.impl;
-
-import cn.reghao.devops.manager.app.db.query.AppDeployConfigQuery;
-import cn.reghao.devops.manager.app.db.repository.config.AppDeployConfigRepository;
-import cn.reghao.devops.manager.app.model.po.config.AppConfig;
-import cn.reghao.devops.manager.app.model.po.config.AppDeployConfig;
-import cn.reghao.devops.manager.machine.model.po.MachineHost;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-
-import javax.persistence.criteria.Join;
-import javax.persistence.criteria.JoinType;
-import javax.persistence.criteria.Predicate;
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2021-06-02 15:01:18
- */
-@Service
-public class AppDeployConfigQueryImpl implements AppDeployConfigQuery {
-    private final AppDeployConfigRepository deployConfigRepository;
-
-    public AppDeployConfigQueryImpl(AppDeployConfigRepository deployConfigRepository) {
-        this.deployConfigRepository = deployConfigRepository;
-    }
-
-    @Override
-    public AppDeployConfig findById(int id) {
-        return deployConfigRepository.findById(id).orElse(null);
-    }
-
-    @Override
-    public List<AppDeployConfig> findByAppId(String appId) {
-        Specification<AppDeployConfig> specification = (root, query, cb) -> {
-            Join<AppDeployConfig, AppConfig> innerJoin = root.join("appConfig", JoinType.INNER);
-            Predicate predicate = cb.equal(innerJoin.get("appId"), appId);
-            return cb.and(predicate);
-        };
-
-        return deployConfigRepository.findAll(specification);
-    }
-
-    @Override
-    public Page<AppDeployConfig> findByAppId(String appId, Pageable pageable) {
-        Specification<AppDeployConfig> specification = (root, query, cb) -> {
-            Join<AppDeployConfig, AppConfig> innerJoin = root.join("appConfig", JoinType.INNER);
-            Predicate predicate = cb.equal(innerJoin.get("appId"), appId);
-            return cb.and(predicate);
-        };
-
-        return deployConfigRepository.findAll(specification, pageable);
-    }
-
-    @Override
-    public AppDeployConfig findByAppIdAndMachineId(String appId, String machineId) {
-        Specification<AppDeployConfig> specification = (root, query, cb) -> {
-            Join<AppDeployConfig, AppConfig> innerJoin = root.join("appConfig", JoinType.INNER);
-            Predicate predicate = cb.equal(innerJoin.get("appId"), appId);
-
-            Join<AppDeployConfig, MachineHost> innerJoin1 = root.join("machineHost", JoinType.INNER);
-            Predicate predicate1 = cb.equal(innerJoin1.get("machineId"), machineId);
-
-            Predicate[] arr = new Predicate[2];
-            arr[0] = predicate;
-            arr[1] = predicate1;
-            return cb.and(arr);
-        };
-
-        List<AppDeployConfig> list = deployConfigRepository.findAll(specification);
-        if (!list.isEmpty()) {
-            // 若 list 不为空,则应该有且仅有一个元素
-            return list.get(0);
-        } else {
-            return null;
-        }
-    }
-}

+ 0 - 19
manager/src/main/java/cn/reghao/devops/manager/app/db/repository/AppBuildingRepository.java

@@ -1,19 +0,0 @@
-package cn.reghao.devops.manager.app.db.repository;
-
-import cn.reghao.devops.manager.app.model.po.AppBuilding;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-11-15 21:24:50
- */
-public interface AppBuildingRepository extends JpaRepository<AppBuilding, Integer> {
-    Page<AppBuilding> findAllByAppConfig_EnvAndAppConfig_AppType(String env, String type, Pageable pageable);
-    Page<AppBuilding> findAllByAppConfig_AppName(String appName, Pageable pageable);
-    AppBuilding findAllByAppConfig_AppId(String appId);
-    Page<AppBuilding> findAllByOnBuildingIsTrue(Pageable pageable);
-}

+ 0 - 18
manager/src/main/java/cn/reghao/devops/manager/app/db/repository/AppDeployingRepository.java

@@ -1,18 +0,0 @@
-package cn.reghao.devops.manager.app.db.repository;
-
-import cn.reghao.devops.manager.app.model.po.AppDeploying;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2023-11-15 21:24:50
- */
-public interface AppDeployingRepository extends JpaRepository<AppDeploying, Integer> {
-    List<AppDeploying> findAllByAppDeployConfig_AppConfig_AppId(String appId);
-    AppDeploying findAllByAppDeployConfig_AppConfig_AppIdAndAppDeployConfig_MachineHost_MachineId(String appId, String machineId);
-    Page<AppDeploying> findAllByAppDeployConfig_AppConfig_EnvAndAppDeployConfig_AppConfig_AppType(String env, String appType, Pageable pageable);
-}

+ 0 - 29
manager/src/main/java/cn/reghao/devops/manager/app/db/repository/config/AppConfigRepository.java

@@ -1,29 +0,0 @@
-package cn.reghao.devops.manager.app.db.repository.config;
-
-import cn.reghao.devops.manager.app.model.po.config.AppConfig;
-import cn.reghao.devops.manager.app.model.po.config.build.CompilerConfig;
-import cn.reghao.devops.manager.app.model.po.config.build.PackerConfig;
-import cn.reghao.devops.manager.app.model.po.config.build.RepoAuthConfig;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-
-import java.util.List;
-
-/**
- *
- * @author reghao
- * @date 2020-01-21 14:53:03
- */
-public interface AppConfigRepository extends JpaRepository<AppConfig, Integer>, JpaSpecificationExecutor<AppConfig> {
-    AppConfig findByAppId(String appId);
-    AppConfig findByDeletedFalseAndAppId(String appId);
-    List<AppConfig> findByAppRepoAndRepoBranch(String repo, String branch);
-    Page<AppConfig> findByEnv(String env, Pageable pageable);
-    Page<AppConfig> findByEnvAndAppType(String env, String type, Pageable pageable);
-
-    List<AppConfig> findAllByRepoAuthConfig(RepoAuthConfig repoAuthConfig);
-    List<AppConfig> findAllByCompilerConfig(CompilerConfig compilerConfig);
-    List<AppConfig> findAllByPackerConfig(PackerConfig packerConfig);
-}

+ 0 - 20
manager/src/main/java/cn/reghao/devops/manager/app/db/repository/config/AppDeployConfigRepository.java

@@ -1,20 +0,0 @@
-package cn.reghao.devops.manager.app.db.repository.config;
-
-import cn.reghao.devops.manager.app.model.po.config.AppConfig;
-import cn.reghao.devops.manager.app.model.po.config.AppDeployConfig;
-import cn.reghao.devops.manager.machine.model.po.MachineHost;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-
-import java.util.List;
-
-/**
- *
- * @author reghao
- * @date 2020-01-21 14:53:03
- */
-public interface AppDeployConfigRepository 
-        extends JpaRepository<AppDeployConfig, Integer>, JpaSpecificationExecutor<AppDeployConfig> {
-    List<AppDeployConfig> findByMachineHost(MachineHost machineHost);
-    List<AppDeployConfig> findByAppConfig(AppConfig appConfig);
-}

+ 0 - 17
manager/src/main/java/cn/reghao/devops/manager/app/db/repository/config/build/CompilerConfigRepository.java

@@ -1,17 +0,0 @@
-package cn.reghao.devops.manager.app.db.repository.config.build;
-
-import cn.reghao.devops.manager.app.model.po.config.build.CompilerConfig;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-
-import java.util.List;
-
-/**
- * @author reghao
- * @date 2020-01-21 14:53:03
- */
-public interface CompilerConfigRepository
-        extends JpaRepository<CompilerConfig, Integer>, JpaSpecificationExecutor<CompilerConfig> {
-    CompilerConfig findByName(String name);
-    List<CompilerConfig> findAllByDeletedFalse();
-}

部分文件因为文件数量过多而无法显示