Compare commits

...

105 Commits

Author SHA1 Message Date
李佳航
c25e74c296 Merge pull request #74 from dromara/dev
Dev
2024-12-24 10:28:46 +08:00
lijiahang
bbe2980998 修改表结构. 2024-12-24 10:03:23 +08:00
lijiahangmax
544a01534d Merge remote-tracking branch 'origin/dev' into dev 2024-12-23 23:24:19 +08:00
lijiahangmax
41a9bebe06 🎨 规范代码. 2024-12-23 23:23:42 +08:00
lijiahang
c84452630a 🔨 修改文档. 2024-12-23 17:53:58 +08:00
lijiahang
23bf0e360f 📝 修改文档. 2024-12-23 12:31:01 +08:00
lijiahang
62eb8f2d9a 📝 修改文档. 2024-12-23 11:23:49 +08:00
lijiahang
adcc6dddef 🔖 升级版本. 2024-12-23 10:52:49 +08:00
lijiahang
8bbda6691d 📝 修改文档. 2024-12-23 10:20:54 +08:00
lijiahangmax
79f14632bb 去除无用配置. 2024-12-21 01:51:55 +08:00
lijiahangmax
d51de4a520 Merge remote-tracking branch 'origin/dev' into dev 2024-12-20 00:00:18 +08:00
lijiahangmax
f65e17c723 🐛 修复分组创建权限问题. 2024-12-20 00:00:06 +08:00
lijiahangmax
c04859294c 🐛 修复分组创建权限问题. 2024-12-19 23:59:09 +08:00
lijiahang
23363efade 📝 修改文档. 2024-12-19 16:17:15 +08:00
lijiahang
933e9d90d1 🐳 修改命名空间. 2024-12-19 15:31:59 +08:00
lijiahang
b2341ce62e 📝 去除 demo. 2024-12-19 11:26:32 +08:00
lijiahang
7fb17a173e Merge remote-tracking branch 'origin/dev' into dev 2024-12-19 09:43:11 +08:00
lijiahang
c95d52e197 📝 去除版本. 2024-12-19 09:42:50 +08:00
lijiahangmax
d651c37e87 🔨 修改 sql 脚本. 2024-12-18 21:52:58 +08:00
lijiahangmax
1d89b392b0 🔨 修改表结构. 2024-12-18 21:35:59 +08:00
lijiahang
04327c19e3 🔨 命令发送. 2024-12-18 09:49:59 +08:00
lijiahangmax
786d07907d 🔨 命令发送. 2024-12-16 23:20:57 +08:00
lijiahangmax
1227ed1770 🔨 命令发送. 2024-12-16 20:54:35 +08:00
lijiahangmax
6d74b4379e 🔨 修改聚合配置. 2024-12-16 20:37:17 +08:00
lijiahangmax
985091f42b 🔨 上传任务使用用户连接配置. 2024-12-14 12:41:06 +08:00
lijiahang
885446dc58 去除命令 tooltip. 2024-12-13 16:38:58 +08:00
lijiahangmax
dd973a46fc 🔨 命令执行用户. 2024-12-13 01:05:01 +08:00
lijiahangmax
190b78d14a 修改包结构. 2024-12-12 22:47:30 +08:00
lijiahangmax
824f7317d7 添加执行人. 2024-12-12 21:35:05 +08:00
lijiahangmax
247ae2c862 添加系统类型. 2024-12-12 21:12:08 +08:00
lijiahangmax
f52a81f9d0 🔨 修改路由配置. 2024-12-11 22:47:56 +08:00
lijiahang
32e4859ba7 修改打包配置. 2024-12-11 11:06:29 +08:00
李佳航
0de59dd77d Merge pull request #70 from dromara/dev
Dev
2024-12-10 09:58:59 +08:00
lijiahang
d0b25c38a6 Merge remote-tracking branch 'origin/dev' into dev 2024-12-09 15:28:11 +08:00
lijiahang
9fe2531d2f 📝 修改介绍. 2024-12-09 15:28:03 +08:00
lijiahangmax
28ce2317c0 merge dev into dev
合并

Created-by: liushaoshuai
Author-id: 3003091
MR-id: 5446172
Commit-by: liushaoshuai
Merged-by: lijiahangmax
E2E-issues: 
Description: ⬆️ 升级 orion-kit 版本. 

See merge request: dromara/orion-visor!15
2024-12-09 15:25:26 +08:00
liushaoshuai
f38ae06fa0 ⬆️ 升级 orion-kit 版本.
Signed-off-by: liushaoshuai <liushaoshuai@noreply.gitcode.com>
2024-12-09 15:23:27 +08:00
lijiahangmax
e434d85ea5 merge dev into dev
修改文档

Created-by: liushaoshuai
Author-id: 3003091
MR-id: 5361842
Commit-by: liushaoshuai
Merged-by: lijiahangmax
E2E-issues: 
Description: 📝修改文档. 

See merge request: dromara/orion-visor!14
2024-12-06 13:59:08 +08:00
liushaoshuai
d303406332 📝修改文档.
Signed-off-by: liushaoshuai <liushaoshuai@noreply.gitcode.com>
2024-12-06 13:58:09 +08:00
lijiahangmax
952d63b282 merge dev into dev
PR#1

Created-by: SuperOwn
Author-id: 3000065
MR-id: 5350395
Commit-by: SuperOwn
Merged-by: lijiahangmax
E2E-issues: 
Description: 🔖 升级版本. 

See merge request: dromara/orion-visor!13
2024-12-06 12:11:59 +08:00
SuperOwn
cffb3c9e90 🔖 升级版本.
Signed-off-by: SuperOwn <SuperOwn@noreply.gitcode.com>
2024-12-06 12:10:56 +08:00
lijiahangmax
d828d4a754 merge dev into dev
升级版本

Created-by: orionsec
Author-id: 3000702
MR-id: 5345512
Commit-by: orionsec
Merged-by: lijiahangmax
E2E-issues: 
Description: 🔖 升级版本. 

See merge request: dromara/orion-visor!12
2024-12-06 11:41:29 +08:00
orionsec
30ff601078 🔖 升级版本.
Signed-off-by: orionsec <orionsec@noreply.gitcode.com>
2024-12-06 11:40:36 +08:00
lijiahangmax
eb18f4281a merge dev into dev
禁用缓存

Created-by: orionsec
Author-id: 3000702
MR-id: 5345037
Commit-by: orionsec
Merged-by: lijiahangmax
E2E-issues: 
Description: 🔖 升级版本. 
🐳 禁用缓存. 

See merge request: dromara/orion-visor!11
2024-12-06 11:37:45 +08:00
orionsec
b850aa1f7f 🐳 禁用缓存.
Signed-off-by: orionsec <orionsec@noreply.gitcode.com>
2024-12-06 11:36:50 +08:00
orionsec
100b5e8740 🔖 升级版本.
Signed-off-by: orionsec <orionsec@noreply.gitcode.com>
2024-12-06 11:36:25 +08:00
lijiahangmax
148d9f1201 merge dev into dev
PR

Created-by: orionsec
Author-id: 3000702
MR-id: 5344615
Commit-by: orionsec
Merged-by: lijiahangmax
E2E-issues: 
Description: 🔖 升级版本. 

See merge request: dromara/orion-visor!10
2024-12-06 11:33:29 +08:00
orionsec
88ddc7c4b2 🔖 升级版本.
Signed-off-by: orionsec <orionsec@noreply.gitcode.com>
2024-12-06 11:31:10 +08:00
lijiahangmax
4a2c01fba6 merge dev into dev
merge

Created-by: SuperOwn
Author-id: 3000065
MR-id: 5343257
Commit-by: SuperOwn
Merged-by: lijiahangmax
E2E-issues: 
Description: 🔖 升级版本. 

See merge request: dromara/orion-visor!8
2024-12-06 11:20:14 +08:00
SuperOwn
45c83f6080 🔖 升级版本.
Signed-off-by: SuperOwn <SuperOwn@noreply.gitcode.com>
2024-12-06 11:19:27 +08:00
lijiahangmax
08a0eeb6b5 merge dev into dev
修改版本

Created-by: SuperOwn
Author-id: 3000065
MR-id: 5343027
Commit-by: SuperOwn
Merged-by: lijiahangmax
E2E-issues: 
Description: 🔖 升级版本. 

See merge request: dromara/orion-visor!7
2024-12-06 11:18:31 +08:00
SuperOwn
73b034b27c 🔖 升级版本.
Signed-off-by: SuperOwn <SuperOwn@noreply.gitcode.com>
2024-12-06 11:16:06 +08:00
lijiahang
95a31d613d Merge remote-tracking branch 'origin/dev' into dev 2024-12-06 10:53:44 +08:00
lijiahangmax
8027d39938 merge dev into dev
merge

Created-by: chaoyuyu
Author-id: 2987168
MR-id: 5338562
Commit-by: chaoyuyu
Merged-by: lijiahangmax
E2E-issues: 
Description: update: 更新文件 build.sh 

See merge request: dromara/orion-visor!5
2024-12-06 10:51:33 +08:00
chaoyuyu
e3d33295fe update: 更新文件 build.sh
Signed-off-by: chaoyuyu <chaoyuyu@noreply.gitcode.com>
2024-12-06 10:46:09 +08:00
lijiahangmax
691c61613f merge dev into dev
合并

Created-by: opensources
Author-id: 2983898
MR-id: 5338447
Commit-by: opensources
Merged-by: lijiahangmax
E2E-issues: 
Description: 🐳 修改 docker 版本. 
🔖 升级版本. 

See merge request: dromara/orion-visor!4
2024-12-06 10:42:56 +08:00
opensources
a75ce2143d 🔖 升级版本.
Signed-off-by: opensources <opensources@noreply.gitcode.com>
2024-12-06 10:35:37 +08:00
opensources
cb828e5684 🐳 修改 docker 版本.
Signed-off-by: opensources <opensources@noreply.gitcode.com>
2024-12-06 10:34:30 +08:00
lijiahangmax
168f193416 merge dev into dev
修改 docker

Created-by: opensources
Author-id: 2983898
MR-id: 5338443
Commit-by: opensources
Merged-by: lijiahangmax
E2E-issues: 
Description: 🐳 修改版本. 

See merge request: dromara/orion-visor!3
2024-12-06 10:32:00 +08:00
opensources
211a50d33d 🐳 修改版本.
Signed-off-by: opensources <opensources@noreply.gitcode.com>
2024-12-06 10:31:17 +08:00
lijiahangmax
713af9d032 merge dev into dev
升级版本

Created-by: chaoyuyu
Author-id: 2987168
MR-id: 5338426
Commit-by: chaoyuyu
Merged-by: lijiahangmax
E2E-issues: 
Description: 🔖 升级版本. 

See merge request: dromara/orion-visor!2
2024-12-06 10:29:14 +08:00
chaoyuyu
214b6fe9ac 🔖 升级版本.
Signed-off-by: chaoyuyu <chaoyuyu@noreply.gitcode.com>
2024-12-06 10:25:02 +08:00
lijiahangmax
343c188749 merge dev into dev
merge

Created-by: Hanner
Author-id: 2987512
MR-id: 5338327
Commit-by: Hanner
Merged-by: lijiahangmax
E2E-issues: 
Description: 🔖 升级版本. 
update: 更新文件 pom.xml 
🔖 升级版本. 

See merge request: dromara/orion-visor!1
2024-12-06 10:14:32 +08:00
Hanner
fc6418caf3 🔖 升级版本.
Signed-off-by: Hanner <Hanner@noreply.gitcode.com>
2024-12-06 10:11:51 +08:00
Hanner
cf093e1023 update: 更新文件 pom.xml
Signed-off-by: Hanner <Hanner@noreply.gitcode.com>
2024-12-06 10:10:27 +08:00
Hanner
90eb6003c9 🔖 升级版本.
Signed-off-by: Hanner <Hanner@noreply.gitcode.com>
2024-12-06 10:08:54 +08:00
lijiahang
652691b32b 📝 修改 README. 2024-12-04 11:37:36 +08:00
lijiahang
eb77f33574 去除轮询接口错误信息. 2024-12-03 11:28:58 +08:00
lijiahang
9bfd5888bf 修改代码生成器. 2024-11-25 10:23:40 +08:00
lijiahang
73c18c79b8 🐛 计划任务创建后会自动执行. 2024-11-13 10:00:25 +08:00
lijiahang
562052b868 优化前端代码语义. 2024-11-07 10:46:17 +08:00
李佳航
6f42d41344 Merge pull request #65 from dromara/dev
merge
2024-11-01 10:41:52 +08:00
lijiahang
8db677684d 修改包名. 2024-10-29 09:59:50 +08:00
李佳航
988528ccca Merge pull request #64 from dromara/dev
Dev
2024-10-24 11:13:17 +08:00
lijiahang
029a46c07d 🔖 升级版本. 2024-10-24 09:36:05 +08:00
lijiahang
8ace3ddd1f 🐛 代码生成器无法运行. 2024-10-18 18:16:41 +08:00
lijiahang
2c705f0b67 🐛 代码生成器无法运行. 2024-10-18 14:06:28 +08:00
lijiahang
3ec43bd8a5 拆分模块. 2024-10-17 15:25:45 +08:00
lijiahang
b33abd3196 拆分模块. 2024-10-17 10:20:04 +08:00
lijiahang
d82f5b4bfb 拆分模块. 2024-10-16 15:37:12 +08:00
lijiahang
3e41e17367 优化模块值. 2024-10-15 17:41:39 +08:00
lijiahang
6e3abab232 📝 修改文档. 2024-10-15 15:05:11 +08:00
lijiahang
6306baa51a 修改表名. 2024-10-15 12:36:11 +08:00
lijiahang
7ceb7e162a 📝 修改文档. 2024-10-15 11:08:21 +08:00
lijiahang
2243d3cf5b 📝 添加 license 文件头. 2024-10-11 14:58:06 +08:00
lijiahang
e6937d67c1 📝 修改许可信息. 2024-10-11 12:23:05 +08:00
lijiahangmax
6e977dabf6 优化文件下载逻辑. 2024-10-10 23:18:53 +08:00
lijiahang
c229029c1d 系统动态设置. 2024-10-10 18:32:40 +08:00
lijiahang
76aa64fe75 📝 修改初始化sql. 2024-09-30 10:25:14 +08:00
lijiahang
3b1d6ab8a4 优化按钮组件逻辑. 2024-09-29 10:20:45 +08:00
李佳航
7015468e04 Merge pull request #60 from dromara/dev
Dev
2024-09-27 10:52:27 +08:00
lijiahang
ef57040e1d 📝 修改文档. 2024-09-27 10:41:06 +08:00
lijiahang
2a6537c604 🔖 升级版本. 2024-09-27 10:21:17 +08:00
lijiahang
541a9790ad 优化批量上传逻辑. 2024-09-26 17:38:39 +08:00
lijiahang
011e8ad089 📝 修改文档. 2024-09-14 17:18:51 +08:00
李佳航
3918d36c24 Merge pull request #59 from dromara/dev
Dev
2024-09-14 16:46:32 +08:00
lijiahang
37f452c7c3 Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	README.md
2024-09-14 16:44:31 +08:00
lijiahang
fc885bc0ad 📝 修改文档. 2024-09-14 16:43:53 +08:00
李佳航
44c226092d Merge pull request #58 from dromara/dev
Dev
2024-09-11 21:18:41 +08:00
lijiahangmax
14cf8c2492 Merge remote-tracking branch 'origin/dev' into dev 2024-09-11 21:16:08 +08:00
lijiahangmax
d6f5898e61 📝 修改 logo. 2024-09-11 21:14:32 +08:00
lijiahang
0ab8e405cc 📝 修改文档. 2024-09-11 10:18:35 +08:00
lijiahang
4e4231d5a5 修改清理限制. 2024-09-03 10:53:39 +08:00
李佳航
2df3f2fa1a Merge pull request #56 from dromara/dev
🔖 升级版本.
2024-09-02 15:28:10 +08:00
lijiahang
d6048f78f0 🔖 升级版本. 2024-09-02 14:57:47 +08:00
1608 changed files with 43075 additions and 20799 deletions

87
LICENSE
View File

@@ -200,90 +200,3 @@
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Apache Dubbo Submodules:
Apache Dubbo includes a number of submodules with separate copyright notices
and license terms. Your use of these submodules is subject to the terms and
conditions of the following licenses.
For the package org.apache.dubbo.common.threadlocal and org.apache.dubbo.common.timer:
This product contains a modified portion of 'Netty', an event-driven asynchronous network application framework also
under a "Apache License 2.0" license, see https://github.com/netty/netty/blob/4.1/LICENSE.txt:
* io.netty.util.concurrent.FastThreadLocal
* io.netty.util.internal.InternalThreadLocalMap
* io.netty.util.Timer
* io.netty.util.TimerTask
* io.netty.util.Timeout
* io.netty.util.HashedWheelTimer
For the org.apache.dubbo.common.utils.CIDRUtils :
This product contains a modified portion of 'edazdarevic.commons.net.CIDRUtils' published at
https://github.com/edazdarevic/CIDRUtils. The project is licensed under a MIT License:
* The MIT License
*
* Copyright (c) 2013 Edin Dazdarevic (edin.dazdarevic@gmail.com)
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
For the file org.apache.dubbo.common.utils.Utf8Utils.java:
This product contains a portion of the Protocol Buffers project, which is published at
https://developers.google.com/protocol-buffers/ and is licensed under the following License:
Copyright 2008 Google Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Code generated by the Protocol Buffer compiler is owned by the owner
of the input file used when generating it. This code is not
standalone and requires a support library to be linked with it. This
support library is itself covered by the above license.
For the ca.proto in dubbo-registry-xds:
This product contains a modified portion of 'Istio', an open platform to connect, manage, and secure microservices also
under a "Apache License 2.0" license, see https://github.com/istio/api/blob/master/LICENSE:
* security/v1alpha1/ca.proto

6
NOTICE
View File

@@ -1,7 +1,9 @@
* 在使用本项目前,请您仔细阅读免责声明,确保您已充分理解其中的内容
* 在使用本项目前,请您仔细阅读使用须知及免责声明,确保您已充分理解其中的内容
* 本项目采用 APACHE LICENSE 2.0 开源协议,如您需要源码的开发方式,需要遵循以下几点
1. 禁止修改或删除 LICENSE 文件。
2. 不可二次开发或参与同类竞品的开发
2. 禁止修改或删除源码头部的版权声明
3. 本项目可免费商业使用,商业使用请保留项目源码、出处、描述文件和作者声明等。
4. 分发源码时候,请注明软件出处 https://visor.dromara.org/
5. 不可二次开发或参与同类竞品的开发。

View File

@@ -1,20 +1,20 @@
<div align="center"><img src="https://bjuimg.obs.cn-north-4.myhuaweicloud.com/images/2024/5/29/cec03bbd-0eab-464d-9caf-d0b5a7ffc5a6.png" alt="logo" width="32" /></div>
<p style="margin-top: 12px" align="center"><b>一款高颜值、现代化的智能运维&轻量堡垒机平台。</b></p>
<div align="center"><img src="https://bjuimg.obs.cn-north-4.myhuaweicloud.com/images/2024/9/11/11e7e78e-2af0-4c68-9811-db8a4c4400f4.png" alt="logo" width="520" /></div>
<p style="margin-top: 12px" align="center"><b>【Dromara】 一款高颜值、现代化的自动化运维&轻量堡垒机平台。</b></p>
<p align="center">
<a target="_blank"
style="text-decoration: none !important;"
href="https://app.codacy.com/gh/lijiahangmax/orion-visor/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade">
href="https://app.codacy.com/gh/orionsec/orion-visor/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade">
<img src="https://app.codacy.com/project/badge/Grade/49eaab3a9a474af3b87e1d21ffec71c4" alt="quality" />
</a>
<a target="_blank"
style="text-decoration: none !important;"
href="https://www.apache.org/licenses/LICENSE-2.0">
<img src="https://img.shields.io/github/license/lijiahangmax/orion-visor" alt="License" />
<img src="https://img.shields.io/github/license/dromara/orion-visor" alt="License" />
</a>
<a target="_blank"
style="text-decoration: none !important;"
href="https://github.com/dromara/orion-visor/releases">
<img src="https://img.shields.io/github/v/release/lijiahangmax/orion-visor" alt="release" />
<img src="https://img.shields.io/github/v/release/dromara/orion-visor" alt="release" />
</a>
<a target="_blank"
style="text-decoration: none !important;"
@@ -29,18 +29,18 @@
<a target="_blank"
style="text-decoration: none !important;"
href="https://github.com/dromara/orion-visor">
<img src="https://img.shields.io/github/stars/lijiahangmax/orion-visor" alt="star" />
<img src="https://img.shields.io/github/stars/dromara/orion-visor" alt="star" />
</a>
<a target="_blank"
style="text-decoration: none !important;"
href="https://github.com/dromara/orion-visor">
<img src="https://img.shields.io/github/forks/lijiahangmax/orion-visor" alt="star" />
<img src="https://img.shields.io/github/forks/dromara/orion-visor" alt="star" />
</a>
</p>
------------------------------
**`orion-visor`** 提供一站式服务器运维解决方案。
**`orion-visor`** 提供一站式自动化运维解决方案。
* **资产管理**:支持对资产进行分组,实现对主机、密钥和身份的统一管理和授权。
* **在线终端**:提供在线终端 SSH 服务,支持快捷命令、自定义快捷键和主题风格。
@@ -51,9 +51,10 @@
## 演示环境
* 🔗 演示地址: https://dv.orionsec.cn/
* 🔗 演示地址: [https://dv.orionsec.cn/](https://dv.orionsec.cn/)
* 🔏 演示账号: admin/admin
* ⭐ 体验后可以点一下 `star` 这对我很重要! [github](https://github.com/dromara/orion-visor) [gitee](https://gitee.com/dromara/orion-visor) [gitcode](https://gitcode.com/dromara/orion-visor/overview)
* ⭐ 体验后可以点一下 `star`
这对我很重要! [github](https://github.com/dromara/orion-visor) [gitee](https://gitee.com/dromara/orion-visor) [gitcode](https://gitcode.com/dromara/orion-visor/overview)
* 🌈 如果本项目对你有帮助请帮忙推广一下 让更多的人知道此项目!
* 🎭 演示环境部分功能不可用, 完整功能请本地部署!
* 📛 演示环境请不要随便删除数据!
@@ -72,15 +73,15 @@ docker compose up -d
## 项目文档
* [文档地址](https://visor.orionsec.cn/)
* [安装文档](https://visor.orionsec.cn/quickstart/docker.html)
* [更新日志](https://visor.orionsec.cn/update/change-log.html)
* [操作手册](https://visor.orionsec.cn/operator/asset.html)
* [常见问题](https://visor.orionsec.cn/support/faq.html)
* [文档地址](https://visor.dromara.org/)
* [安装文档](https://visor.dromara.org/quickstart/docker.html)
* [更新日志](https://visor.dromara.org/update/change-log.html)
* [操作手册](https://visor.dromara.org/operator/asset.html)
* [常见问题](https://visor.dromara.org/support/faq.html)
## 技术栈
* SpringBoot 2.7.17
* SpringBoot 2.7.+
* Mysql 8.0.+
* Redis 6.0.+
* Vue3 3.2.+
@@ -109,18 +110,20 @@ docker compose up -d
## Star History
[![Star History Chart](https://api.star-history.com/svg?repos=lijiahangmax/orion-visor&type=Date)](https://star-history.com/#lijiahangmax/orion-visor&Date)
[![Star History Chart](https://api.star-history.com/svg?repos=dromara/orion-visor&type=Date)](https://star-history.com/#dromara/orion-visor&Date)
## 关于我
本人专注于使用 Java 和 Vue 进行全栈开发, 并在系统自动化运维方面拥有丰富开发的经验。如果您在这些领域有需求或遇到痛点, 请随时联系我, 并备注“合作”。
## 联系我
<div style="display: flex;">
<img src="https://bjuimg.obs.cn-north-4.myhuaweicloud.com/images/2024/5/17/d42d91f3-f0ee-4c63-adab-a35809e0804c.jpg" alt="wx" width="298px" height="398px"/>
</div>
<img src="https://bjuimg.obs.cn-north-4.myhuaweicloud.com/images/2024/10/11/cf72c603-3951-4171-95b4-06271dda1c80.jpg" alt="wx" width="628px"/>
![个人微信: ljh1553488](https://img.shields.io/badge/ljh1553488-blue?style=social&label=WX%3A)
![QQ群1: 755242157](https://img.shields.io/badge/755242157-blue?style=social&label=QQ%E7%BE%A41%3A%20)
微信: ljh1553488
QQ群: 755242157
📧 咨询问题微信备注: vis
📧 问题/加群微信备注: ops
📧 合作/功能定制备注: 合作
## 支持一下
@@ -136,3 +139,7 @@ docker compose up -d
## License
本项目遵循 [Apache-2.0](https://github.com/dromara/orion-visor/blob/main/LICENSE) 开源许可证。
## Gite 最有价值开源项目 GVP
![GVP](https://bjuimg.obs.cn-north-4.myhuaweicloud.com/images/2024/10/24/8dd98b8d-9de5-44e6-86d3-04e27ec66123.jpg "GVP")

View File

@@ -1,7 +1,7 @@
version: '3.3'
services:
service:
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-service:2.1.5
image: registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-service:2.2.2
privileged: true
ports:
- 1081:80
@@ -32,7 +32,7 @@ services:
- mysql
- redis
mysql:
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-mysql:2.1.5
image: registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-mysql:2.2.2
privileged: true
ports:
- 3307:3306
@@ -52,7 +52,7 @@ services:
retries: 10
start_period: 3s
redis:
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-redis:2.1.5
image: registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:2.2.2
privileged: true
ports:
- 6380:6379

View File

@@ -1,7 +1,7 @@
version: '3.3'
services:
service:
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-service:2.1.5
image: registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-service:2.2.2
privileged: true
ports:
- ${SERVICE_PORT:-1081}:80
@@ -32,7 +32,7 @@ services:
- mysql
- redis
mysql:
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-mysql:2.1.5
image: registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-mysql:2.2.2
privileged: true
ports:
- 3307:3306
@@ -52,7 +52,7 @@ services:
retries: 15
start_period: 3s
redis:
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-redis:2.1.5
image: registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:2.2.2
privileged: true
ports:
- 6380:6379
@@ -68,7 +68,7 @@ services:
retries: 15
start_period: 3s
adminer:
image: registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-adminer:2.1.5
image: registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-adminer:2.2.2
ports:
- 8081:8080
depends_on:

View File

@@ -1,4 +1,4 @@
#/bin/bash
version=2.1.5
version=2.2.2
docker build -t orion-visor-adminer:${version} .
docker tag orion-visor-adminer:${version} registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-adminer:${version}
docker tag orion-visor-adminer:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-adminer:${version}

View File

@@ -1,6 +1,6 @@
#/bin/bash
version=2.1.5
version=2.2.2
cp -r ../../sql ./sql
docker build -t orion-visor-mysql:${version} .
rm -rf ./sql
docker tag orion-visor-mysql:${version} registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-mysql:${version}
docker tag orion-visor-mysql:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-mysql:${version}

View File

@@ -18,7 +18,7 @@ default-time_zone='+8:00'
# 服务端字符集
character_set_server=utf8mb4
# 字符排序规则
collation_server=utf8mb4_general_ci
collation_server=utf8mb4_unicode_ci
# 默认存储引擎
default-storage-engine=InnoDB
# 禁止 DNS 解析

View File

@@ -1,6 +1,6 @@
#/bin/bash
version=2.1.5
docker push registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-adminer:${version}
docker push registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-mysql:${version}
docker push registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-redis:${version}
docker push registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-service:${version}
version=2.2.2
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-adminer:${version}
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-mysql:${version}
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:${version}
docker push registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-service:${version}

View File

@@ -1,4 +1,4 @@
#/bin/bash
version=2.1.5
version=2.2.2
docker build -t orion-visor-redis:${version} .
docker tag orion-visor-redis:${version} registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-redis:${version}
docker tag orion-visor-redis:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-redis:${version}

View File

@@ -1,8 +1,8 @@
#/bin/bash
version=2.1.5
version=2.2.2
mv ../../orion-visor-launch/target/orion-visor-launch.jar ./orion-visor-launch.jar
mv ../../orion-visor-ui/dist ./dist
docker build -t orion-visor-service:${version} .
docker build --no-cache -t orion-visor-service:${version} .
rm -rf ./orion-visor-launch.jar
rm -rf ./dist
docker tag orion-visor-service:${version} registry.cn-hangzhou.aliyuncs.com/lijiahangmax/orion-visor-service:${version}
docker tag orion-visor-service:${version} registry.cn-hangzhou.aliyuncs.com/orionsec/orion-visor-service:${version}

View File

@@ -20,7 +20,7 @@
// 左侧文档名称
name: 'orion-visor',
// 右上角仓库
repo: 'https://github.com/lijiahangmax/orion-visor',
repo: 'https://github.com/dromara/orion-visor',
coverpage: true,
// 加载侧边栏
loadSidebar: true,

View File

@@ -4,21 +4,21 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-dependencies</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<name>${project.artifactId}</name>
<description>项目所有依赖</description>
<description>项目全部依赖</description>
<url>https://github.com/dromara/orion-visor</url>
<properties>
<revision>2.1.5</revision>
<revision>2.2.2</revision>
<spring.boot.version>2.7.17</spring.boot.version>
<spring.boot.admin.version>2.7.15</spring.boot.admin.version>
<flatten.maven.plugin.version>1.5.0</flatten.maven.plugin.version>
<orion.kit.version>1.0.8</orion.kit.version>
<orion.kit.version>2.0.1</orion.kit.version>
<aspectj.version>1.9.7</aspectj.version>
<lombok.version>1.18.26</lombok.version>
<springdoc.version>1.6.15</springdoc.version>
@@ -48,95 +48,95 @@
<!-- orion-kit -->
<dependency>
<groupId>io.github.lijiahangmax</groupId>
<groupId>cn.orionsec.kit</groupId>
<artifactId>orion-all</artifactId>
<version>${orion.kit.version}</version>
<exclusions>
<exclusion>
<artifactId>orion-log</artifactId>
<groupId>io.github.lijiahangmax</groupId>
<groupId>cn.orionsec.kit</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- orion-visor-starter -->
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-framework-common</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-spring-boot-starter-banner</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-spring-boot-starter-web</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-spring-boot-starter-swagger</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-spring-boot-starter-datasource</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-spring-boot-starter-mybatis</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-spring-boot-starter-job</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-spring-boot-starter-websocket</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-spring-boot-starter-redis</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-spring-boot-starter-desensitize</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-spring-boot-starter-log</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-spring-boot-starter-storage</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-spring-boot-starter-security</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-spring-boot-starter-monitor</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-spring-boot-starter-test</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-spring-boot-starter-biz-operator-log</artifactId>
<version>${revision}</version>
</dependency>

View File

@@ -3,7 +3,7 @@
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>
<groupId>com.orion.visor</groupId>
<groupId>org.dromara.visor</groupId>
<artifactId>orion-visor-framework</artifactId>
<version>${revision}</version>
</parent>
@@ -18,7 +18,7 @@
<dependencies>
<dependency>
<groupId>io.github.lijiahangmax</groupId>
<groupId>cn.orionsec.kit</groupId>
<artifactId>orion-all</artifactId>
</dependency>

View File

@@ -1,44 +0,0 @@
package com.orion.visor.framework.common.configuration.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* 线程池配置类
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/7/10 15:49
*/
@Data
@ConfigurationProperties(prefix = "orion.async.executor")
public class AsyncExecutorConfig {
/**
* 核心线程数量
*/
private int corePoolSize;
/**
* 最大线程数量
*/
private int maxPoolSize;
/**
* 队列容量
*/
private int queueCapacity;
/**
* 活跃时间
*/
private int keepAliveSeconds;
public AsyncExecutorConfig() {
this.corePoolSize = 8;
this.maxPoolSize = 16;
this.queueCapacity = 200;
this.keepAliveSeconds = 300;
}
}

View File

@@ -1,30 +0,0 @@
package com.orion.visor.framework.common.constant;
import com.orion.lang.constant.OrionConst;
/**
* 项目常量
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/6/19 18:56
*/
public interface AppConst extends OrionConst {
/**
* 同 ${orion.version} 迭代时候需要手动更改
*/
String VERSION = "2.1.5";
/**
* 同 ${spring.application.name}
*/
String APP_NAME = "orion-visor";
String GITHUB = "https://github.com/dromara/orion-visor";
String GITEE = "https://gitee.com/dromara/orion-visor";
String ISSUES = "https://github.com/dromara/orion-visor/issues";
}

View File

@@ -1,32 +0,0 @@
package com.orion.visor.framework.common.constant;
/**
* bean 排序常量
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/6/29 16:09
*/
public interface BeanOrderConst {
/**
* 公共返回值包装处理器
*/
int RESPONSE_ADVICE_WRAPPER = Integer.MIN_VALUE + 1000;
/**
* 演示模式切面
*/
int DEMO_DISABLE_API_ASPECT = Integer.MIN_VALUE + 10;
/**
* 全局日志打印
*/
int LOG_PRINT_ASPECT = Integer.MIN_VALUE + 20;
/**
* 操作日志切面
*/
int OPERATOR_LOG_ASPECT = Integer.MIN_VALUE + 30;
}

View File

@@ -1,20 +0,0 @@
package com.orion.visor.framework.common.constant;
/**
* 常量 - 中文
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/11/30 21:00
*/
public interface CnConst {
String CN_USER = "用户";
String CN_ROLE = "角色";
String CN_UNKNOWN = "未知";
String CN_INTRANET_IP = "内网IP";
}

View File

@@ -1,34 +0,0 @@
package com.orion.visor.framework.common.constant;
/**
* 常量
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/6/23 18:49
*/
public interface Const extends com.orion.lang.constant.Const, FieldConst, CnConst {
Integer NOT_DELETE = 0;
Integer IS_DELETED = 1;
int BEARER_PREFIX_LEN = 7;
int MD5_LEN = 32;
Long ROOT_PARENT_ID = 0L;
Integer DEFAULT_SORT = 10;
Long NONE_ID = -1L;
Integer DEFAULT_VERSION = 1;
Long SYSTEM_USER_ID = 0L;
String SYSTEM_USERNAME = "system";
int BATCH_COUNT = 500;
}

View File

@@ -1,48 +0,0 @@
package com.orion.visor.framework.common.constant;
/**
* 额外字段常量
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/12/28 18:34
*/
public interface ExtraFieldConst extends FieldConst {
String USER_ID = "userId";
String TRACE_ID = "traceId";
String IDENTITY = "identity";
String GROUP_NAME = "groupName";
String ID_LIST = "idList";
String USERNAME = "username";
String STATUS_NAME = "statusName";
String KEY_NAME = "keyName";
String POSITION_NAME = "positionName";
String GRANT_TYPE = "grantType";
String GRANT_NAME = "grantName";
String CHANNEL_ID = "channelId";
String SESSION_ID = "sessionId";
String CONNECT_TYPE = "connectType";
String HOST_ID = "hostId";
String HOST_NAME = "hostName";
String LOG_ID = "logId";
String DARK = "dark";
}

View File

@@ -1,18 +0,0 @@
package com.orion.visor.framework.common.constant;
/**
* 文件常量
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/4/17 10:35
*/
public interface FileConst {
String ERROR_LOG = "error.log";
String EXEC = "exec";
String SCRIPT = "script";
}

View File

@@ -1,16 +0,0 @@
package com.orion.visor.framework.common.constant;
/**
* 过滤器排序常量
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/6/16 17:04
*/
public interface FilterOrderConst {
int TRICE_ID_FILTER = Integer.MIN_VALUE + 1000;
int CORS_FILTER = Integer.MIN_VALUE + 2000;
}

View File

@@ -1,20 +0,0 @@
package com.orion.visor.framework.common.constant;
/**
* 验证常量
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/10/20 11:45
*/
public interface ValidConst {
String USERNAME_4_32_PATTERN = "^[a-zA-Z0-9_]{4,32}$";
String USERNAME_4_32_MESSAGE = "只能为 4-32 位的数字,字母或下滑线";
String DICT_1_32_PATTERN = "^[a-zA-Z0-9_]{1,32}$";
String DICT_1_32_MESSAGE = "只能为 1-32 位的数字,字母或下滑线";
}

View File

@@ -1,40 +0,0 @@
package com.orion.visor.framework.common.crypto;
import com.orion.lang.utils.codec.Base62s;
import com.orion.lang.utils.crypto.symmetric.SymmetricCrypto;
/**
* 数据加密器
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/7/8 0:20
*/
public interface ValueCrypto extends SymmetricCrypto {
/**
* 初始化
*/
void init();
/**
* 加密后 base62 编码
*
* @param plain 明文
* @return 密文
*/
default String encryptBase62(String plain) {
return new String(Base62s.encode(this.encrypt(plain)));
}
/**
* base62 解码后解密
*
* @param text 密文
* @return 明文
*/
default String decryptBase62(String text) {
return new String(this.decrypt(Base62s.decode(text)));
}
}

View File

@@ -1,25 +0,0 @@
package com.orion.visor.framework.common.entity;
import lombok.Data;
/**
* 自动清理配置
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/6/24 15:03
*/
@Data
public class AutoClearConfig {
/**
* 是否开启
*/
private Boolean enabled;
/**
* 保留周期 (天)
*/
private Integer keepPeriod;
}

View File

@@ -1,26 +0,0 @@
package com.orion.visor.framework.common.entity;
/**
* 数据清理请求 定义
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/8/29 11:26
*/
public interface DataClearRequest {
/**
* 获取清理数量限制
*
* @return 清理限制
*/
Integer getLimit();
/**
* 设置清理数量限制
*
* @param limit limit
*/
void setLimit(Integer limit);
}

View File

@@ -1,34 +0,0 @@
package com.orion.visor.framework.common.entity;
import com.orion.visor.framework.common.validator.group.Page;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
/**
* 公共页码请求
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/7/12 23:14
*/
@Data
@Schema(description = "公共页码请求")
public class PageRequest {
@NotNull(groups = Page.class)
@Min(value = 1, groups = Page.class)
@Max(value = 10000, groups = Page.class)
@Schema(description = "页码")
private Integer page;
@NotNull(groups = Page.class)
@Min(value = 1, groups = Page.class)
@Max(value = 200, groups = Page.class)
@Schema(description = "大小")
private Integer limit;
}

View File

@@ -1,30 +0,0 @@
package com.orion.visor.framework.common.entity;
import lombok.Data;
/**
* 请求留痕模型
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/12/29 11:57
*/
@Data
public class RequestIdentityModel implements RequestIdentity {
/**
* 请求地址
*/
private String address;
/**
* 请求位置
*/
private String location;
/**
* userAgent
*/
private String userAgent;
}

View File

@@ -1,49 +0,0 @@
package com.orion.visor.framework.common.entity;
import java.util.List;
/**
* 树节点
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/11/23 16:52
*/
public interface TreeNode<T extends TreeNode<T>> {
/**
* id
*
* @return id
*/
Long getId();
/**
* parentId
*
* @return parentId
*/
Long getParentId();
/**
* sort
*
* @return sort
*/
Integer getSort();
/**
* children
*
* @return children
*/
List<T> getChildren();
/**
* 设置 children
*
* @param children children
*/
void setChildren(List<T> children);
}

View File

@@ -1,43 +0,0 @@
package com.orion.visor.framework.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 启用状态
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/10/12 16:02
*/
@Getter
@AllArgsConstructor
public enum EnableStatus {
/**
* 停用
*/
DISABLED(0),
/**
* 启用
*/
ENABLED(1),
;
private final Integer value;
public static EnableStatus of(Integer value) {
if (value == null) {
return null;
}
for (EnableStatus e : values()) {
if (e.value.equals(value)) {
return e;
}
}
return null;
}
}

View File

@@ -1,45 +0,0 @@
package com.orion.visor.framework.common.enums;
import com.orion.lang.utils.Strings;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 端点定义
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/6/21 19:15
*/
@Getter
@AllArgsConstructor
public enum EndpointDefine {
/**
* 上传临时分区
*/
UPLOAD_SWAP("/upload/swap/{}"),
/**
* 批量执行日志
*/
EXEC_LOG("/exec/{}/{}.log"),
;
/**
* 端点
*/
private final String endpoint;
/**
* 格式化
*
* @param params params
* @return path
*/
public String format(Object... params) {
return Strings.format(this.endpoint, params);
}
}

View File

@@ -1,48 +0,0 @@
package com.orion.visor.framework.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 移动位置
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/11/13 17:26
*/
@Getter
@AllArgsConstructor
public enum MovePosition {
/**
* 拖拽到目标元素上
*/
TOP(-1),
/**
* 拖拽到目标元素中
*/
IN(0),
/**
* 拖拽到目标元素下
*/
BOTTOM(1),
;
private final Integer position;
public static MovePosition of(Integer position) {
if (position == null) {
return null;
}
for (MovePosition value : values()) {
if (value.position.equals(position)) {
return value;
}
}
return null;
}
}

View File

@@ -1,35 +0,0 @@
package com.orion.visor.framework.common.handler.data.model;
import com.alibaba.fastjson.JSON;
import java.util.Map;
/**
* 标准数据模型
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/12/20 22:07
*/
public interface GenericsDataModel {
/**
* 序列化
*
* @return json
*/
default String serial() {
return JSON.toJSONString(this);
}
/**
* 转为 map
*
* @return map
*/
default Map<String, Object> toMap() {
return JSON.parseObject(this.serial());
}
}

View File

@@ -1,46 +0,0 @@
package com.orion.visor.framework.common.handler.data.strategy;
import com.orion.visor.framework.common.handler.data.model.GenericsDataModel;
/**
* 标准数据处理策略
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/12/20 22:09
*/
public interface GenericsDataStrategy<M extends GenericsDataModel> {
/**
* 获取默认值
*
* @return 默认值
*/
M getDefault();
/**
* 执行完整验证链
* <p>
* preValid > updateFill > valid
*
* @param beforeModel beforeModel
* @param afterModel afterModel
*/
void doValid(M beforeModel, M afterModel);
/**
* 解析数据
*
* @param serialModel serialModel
* @return model
*/
M parse(String serialModel);
/**
* 转为视图配置
*
* @param model model
*/
void toView(M model);
}

View File

@@ -1,28 +0,0 @@
package com.orion.visor.framework.common.json.filter;
import com.alibaba.fastjson.serializer.PropertyFilter;
import com.orion.lang.utils.collect.Lists;
import java.util.List;
/**
* 字段忽略过滤器
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/10/12 11:21
*/
public class FieldIgnoreFilter implements PropertyFilter {
private final List<String> ignoreFields;
public FieldIgnoreFilter(List<String> ignoreFields) {
this.ignoreFields = ignoreFields;
}
@Override
public boolean apply(Object object, String name, Object value) {
return Lists.isEmpty(ignoreFields) || !ignoreFields.contains(name);
}
}

View File

@@ -1,33 +0,0 @@
package com.orion.visor.framework.common.lock;
import java.util.function.Supplier;
/**
* 分布式锁
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/5/16 12:24
*/
public interface Locker {
/**
* 尝试获取锁
*
* @param key key
* @param run run
* @return 是否获取到锁
*/
boolean tryLock(String key, Runnable run);
/**
* 尝试获取锁
*
* @param key key
* @param call call
* @param <T> T
* @return 执行结果
*/
<T> T tryLock(String key, Supplier<T> call);
}

View File

@@ -1,40 +0,0 @@
package com.orion.visor.framework.common.security;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* 当前登录用户
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/7/6 18:36
*/
@Data
@Schema(name = "LoginUser", description = "当前登录用户对象")
public class LoginUser {
@Schema(description = "id")
private Long id;
@Schema(description = "用户名")
private String username;
@Schema(description = "花名")
private String nickname;
@Schema(description = "用户状态")
private Integer status;
@Schema(description = "头像地址")
private String avatar;
@Schema(description = "登录时间戳")
private Long timestamp;
@Schema(description = "角色")
private List<UserRole> roles;
}

View File

@@ -1,40 +0,0 @@
package com.orion.visor.framework.common.security;
import com.orion.lang.utils.Booleans;
import com.orion.lang.utils.Strings;
import com.orion.visor.framework.common.constant.Const;
import com.orion.visor.framework.common.utils.CryptoUtils;
/**
* 密码修改器
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/9/21 11:35
*/
public class PasswordModifier {
private PasswordModifier() {
}
/**
* 获取新密码
*
* @param action action
* @return password
*/
public static String getEncryptNewPassword(UpdatePasswordAction action) {
if (Booleans.isTrue(action.getUseNewPassword())) {
// 使用新密码
String password = action.getPassword();
if (Strings.isBlank(password)) {
return Const.EMPTY;
} else {
return CryptoUtils.encryptAsString(password);
}
} else {
return null;
}
}
}

View File

@@ -1,26 +0,0 @@
package com.orion.visor.framework.common.security;
/**
* SecurityUtils 的 bean 对象
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/7/7 15:20
*/
public interface SecurityHolder {
/**
* 获取当前用户
*
* @return 当前用户
*/
LoginUser getLoginUser();
/**
* 获取当前用户id
*
* @return id
*/
Long getLoginUserId();
}

View File

@@ -1,28 +0,0 @@
package com.orion.visor.framework.common.security;
import java.io.Serializable;
/**
* 更新密码操作
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/9/21 11:32
*/
public interface UpdatePasswordAction extends Serializable {
/**
* 是否使用新密码
*
* @return use
*/
Boolean getUseNewPassword();
/**
* 获取密码
*
* @return password
*/
String getPassword();
}

View File

@@ -1,28 +0,0 @@
package com.orion.visor.framework.common.security;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
/**
* 用户角色
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/11/20 23:39
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@Schema(name = "UserRole", description = "用户角色")
public class UserRole {
@EqualsAndHashCode.Include
@Schema(description = "id")
private Long id;
@Schema(description = "角色")
private String code;
}

View File

@@ -1,33 +0,0 @@
package com.orion.visor.framework.common.thread;
import com.orion.visor.framework.common.utils.ThreadMdcUtils;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
/**
* 自动注入 MDC 异步线程池
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/7/10 15:16
*/
public class ThreadPoolMdcTaskExecutor extends ThreadPoolTaskExecutor {
@Override
public void execute(Runnable task) {
super.execute(ThreadMdcUtils.wrap(task));
}
@Override
public <T> Future<T> submit(Callable<T> task) {
return super.submit(ThreadMdcUtils.wrap(task));
}
@Override
public Future<?> submit(Runnable task) {
return super.submit(ThreadMdcUtils.wrap(task));
}
}

View File

@@ -1,28 +0,0 @@
package com.orion.visor.framework.common.utils;
import com.orion.lang.utils.time.Dates;
import com.orion.visor.framework.common.constant.Const;
/**
* 文件名称
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/8/31 17:57
*/
public class FileNames {
private FileNames() {
}
/**
* 导出文件名称
*
* @param title title
* @return name
*/
public static String exportName(String title) {
return title + "-" + Dates.current(Dates.YMD_HMS2) + "." + Const.SUFFIX_XLSX;
}
}

View File

@@ -1,38 +0,0 @@
package com.orion.visor.framework.common.utils;
import com.orion.lang.utils.Arrays1;
import com.orion.lang.utils.crypto.Caesars;
/**
* 混淆工具类
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/6/17 18:27
*/
public class Mixes {
private Mixes() {
}
/**
* 混淆
* <p>
* 此方法不可修改
*
* @param str str
* @return str
*/
public static String obfuscate(String str) {
char[] chars = str.toCharArray();
Arrays1.reverse(chars);
for (int i = 0; i < chars.length; i += 2) {
char temp = chars[i];
chars[i] = chars[i + 1];
chars[i + 1] = temp;
}
String res = new String(chars);
return new Caesars().encrypt(res);
}
}

View File

@@ -1,69 +0,0 @@
package com.orion.visor.framework.common.utils;
import com.orion.lang.utils.Objects1;
import com.orion.visor.framework.common.constant.AppConst;
import com.orion.visor.framework.common.constant.Const;
/**
* 路径工具类
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/4/17 10:28
*/
public class PathUtils {
private PathUtils() {
}
/**
* 获取用户根目录
*
* @param isWindows isWindows
* @param username 用户名
* @return 用户目录
*/
public static String getHomePath(boolean isWindows, String username) {
if (isWindows) {
// windows
return "C:/Users/" + username;
} else {
// linux
if (Const.ROOT.equals(username)) {
return "/" + Const.ROOT;
} else {
return "/home/" + username;
}
}
}
/**
* 获取应用路径
*
* @param isWindows isWindows
* @param username username
* @return path
*/
public static String getAppPath(boolean isWindows, String username) {
return getHomePath(isWindows, username)
+ "/" + AppConst.ORION
+ "/" + AppConst.APP_NAME;
}
/**
* 构建应用路径
*
* @param isWindows isWindows,
* @param username username
* @param paths paths
* @return path
*/
public static String buildAppPath(boolean isWindows, String username, Object... paths) {
StringBuilder path = new StringBuilder(getAppPath(isWindows, username));
for (Object o : paths) {
path.append("/").append(Objects1.toString(o));
}
return path.toString();
}
}

View File

@@ -1,38 +0,0 @@
package com.orion.visor.framework.common.utils;
import com.orion.visor.framework.common.constant.Const;
/**
* sql 工具类
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/8/26 16:03
*/
public class SqlUtils {
private SqlUtils() {
}
/**
* limit n
*
* @param limit limit
* @return limit
*/
public static String limit(Number limit) {
return Const.LIMIT + Const.SPACE + limit;
}
/**
* limit offset limit
*
* @param offset offset
* @param limit limit
* @return limit
*/
public static String limit(Number offset, Number limit) {
return Const.LIMIT + Const.SPACE + offset + Const.COMMA + limit;
}
}

View File

@@ -1,11 +0,0 @@
package com.orion.visor.framework.common.validator.group;
/**
* 批量验证分组
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/9/1 19:13
*/
public interface Batch {
}

View File

@@ -1,11 +0,0 @@
package com.orion.visor.framework.common.validator.group;
/**
* 清理验证分组
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/9/1 19:13
*/
public interface Clear {
}

View File

@@ -1,11 +0,0 @@
package com.orion.visor.framework.common.validator.group;
/**
* 导出验证分组
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/9/1 19:13
*/
public interface Export {
}

View File

@@ -1,11 +0,0 @@
package com.orion.visor.framework.common.validator.group;
/**
* 分页验证分组
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/9/1 19:13
*/
public interface Id {
}

View File

@@ -1,11 +0,0 @@
package com.orion.visor.framework.common.validator.group;
/**
* 导出验证分组
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/9/1 19:13
*/
public interface Import {
}

View File

@@ -1,11 +0,0 @@
package com.orion.visor.framework.common.validator.group;
/**
* 分页验证分组
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/9/1 19:13
*/
public interface Page {
}

View File

@@ -1,33 +0,0 @@
package com.orion.visor.framework.common.web.filter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import javax.servlet.Filter;
/**
* 过滤器构造器
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/6/25 15:05
*/
public class FilterCreator {
private FilterCreator() {
}
/**
* 创建过滤器
*
* @param filter filter
* @param order order
* @param <T> type
* @return filter bean
*/
public static <T extends Filter> FilterRegistrationBean<T> create(T filter, Integer order) {
FilterRegistrationBean<T> bean = new FilterRegistrationBean<>(filter);
bean.setOrder(order);
return bean;
}
}

View File

@@ -1,9 +1,31 @@
package com.orion.visor.framework.common.configuration;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.configuration;
import com.orion.spring.SpringHolder;
import com.orion.visor.framework.common.configuration.config.AsyncExecutorConfig;
import com.orion.visor.framework.common.constant.AutoConfigureOrderConst;
import com.orion.visor.framework.common.thread.ThreadPoolMdcTaskExecutor;
import cn.orionsec.kit.spring.SpringHolder;
import org.dromara.visor.framework.common.configuration.config.AsyncExecutorConfig;
import org.dromara.visor.framework.common.constant.AutoConfigureOrderConst;
import org.dromara.visor.framework.common.thread.ThreadPoolMdcTaskExecutor;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

View File

@@ -0,0 +1,66 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.configuration.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* 线程池配置类
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/7/10 15:49
*/
@Data
@ConfigurationProperties(prefix = "orion.async.executor")
public class AsyncExecutorConfig {
/**
* 核心线程数量
*/
private int corePoolSize;
/**
* 最大线程数量
*/
private int maxPoolSize;
/**
* 队列容量
*/
private int queueCapacity;
/**
* 活跃时间
*/
private int keepAliveSeconds;
public AsyncExecutorConfig() {
this.corePoolSize = 8;
this.maxPoolSize = 16;
this.queueCapacity = 200;
this.keepAliveSeconds = 300;
}
}

View File

@@ -0,0 +1,52 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.constant;
import cn.orionsec.kit.lang.constant.OrionConst;
/**
* 项目常量
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/6/19 18:56
*/
public interface AppConst extends OrionConst {
/**
* 同 ${orion.version} 迭代时候需要手动更改
*/
String VERSION = "2.2.2";
/**
* 同 ${spring.application.name}
*/
String APP_NAME = "orion-visor";
String GITHUB = "https://github.com/dromara/orion-visor";
String GITEE = "https://gitee.com/dromara/orion-visor";
String ISSUES = "https://github.com/dromara/orion-visor/issues";
}

View File

@@ -1,4 +1,26 @@
package com.orion.visor.framework.common.constant;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.constant;
/**
* 自动装配排序常量

View File

@@ -0,0 +1,54 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.constant;
/**
* bean 排序常量
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/6/29 16:09
*/
public interface BeanOrderConst {
/**
* 公共返回值包装处理器
*/
int RESPONSE_ADVICE_WRAPPER = Integer.MIN_VALUE + 1000;
/**
* 演示模式切面
*/
int DEMO_DISABLE_API_ASPECT = Integer.MIN_VALUE + 10;
/**
* 全局日志打印
*/
int LOG_PRINT_ASPECT = Integer.MIN_VALUE + 20;
/**
* 操作日志切面
*/
int OPERATOR_LOG_ASPECT = Integer.MIN_VALUE + 30;
}

View File

@@ -0,0 +1,42 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.constant;
/**
* 常量 - 中文
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/11/30 21:00
*/
public interface CnConst {
String CN_USER = "用户";
String CN_ROLE = "角色";
String CN_UNKNOWN = "未知";
String CN_INTRANET_IP = "内网IP";
}

View File

@@ -0,0 +1,56 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.constant;
/**
* 常量
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/6/23 18:49
*/
public interface Const extends cn.orionsec.kit.lang.constant.Const, FieldConst, CnConst {
Integer NOT_DELETE = 0;
Integer IS_DELETED = 1;
int BEARER_PREFIX_LEN = 7;
int MD5_LEN = 32;
Long ROOT_PARENT_ID = 0L;
Integer DEFAULT_SORT = 10;
Long NONE_ID = -1L;
Integer DEFAULT_VERSION = 1;
Long SYSTEM_USER_ID = 0L;
String SYSTEM_USERNAME = "system";
int BATCH_COUNT = 500;
}

View File

@@ -1,9 +1,31 @@
package com.orion.visor.framework.common.constant;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.constant;
import com.orion.lang.define.wrapper.CodeInfo;
import com.orion.lang.define.wrapper.HttpWrapper;
import com.orion.lang.utils.Exceptions;
import com.orion.lang.utils.Strings;
import cn.orionsec.kit.lang.define.wrapper.CodeInfo;
import cn.orionsec.kit.lang.define.wrapper.HttpWrapper;
import cn.orionsec.kit.lang.utils.Exceptions;
import cn.orionsec.kit.lang.utils.Strings;
/**
* 用于定义错误码

View File

@@ -1,7 +1,29 @@
package com.orion.visor.framework.common.constant;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.constant;
import com.orion.lang.exception.ApplicationException;
import com.orion.lang.exception.argument.InvalidArgumentException;
import cn.orionsec.kit.lang.exception.ApplicationException;
import cn.orionsec.kit.lang.exception.argument.InvalidArgumentException;
/**
* 错误信息
@@ -104,6 +126,8 @@ public interface ErrorMessage {
String AUTH_ERROR = "认证失败";
String FILE_UPLOAD_ERROR = "文件上传失败";
String SCRIPT_UPLOAD_ERROR = "脚本上传失败";
String EXEC_ERROR = "执行失败";

View File

@@ -0,0 +1,72 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.constant;
/**
* 额外字段常量
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/12/28 18:34
*/
public interface ExtraFieldConst extends FieldConst {
String USER_ID = "userId";
String TRACE_ID = "traceId";
String IDENTITY = "identity";
String GROUP_NAME = "groupName";
String ID_LIST = "idList";
String USERNAME = "username";
String HOME = "home";
String STATUS_NAME = "statusName";
String KEY_NAME = "keyName";
String POSITION_NAME = "positionName";
String GRANT_TYPE = "grantType";
String GRANT_NAME = "grantName";
String CHANNEL_ID = "channelId";
String SESSION_ID = "sessionId";
String CONNECT_TYPE = "connectType";
String HOST_ID = "hostId";
String HOST_NAME = "hostName";
String LOG_ID = "logId";
String DARK = "dark";
}

View File

@@ -1,4 +1,26 @@
package com.orion.visor.framework.common.constant;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.constant;
/**
* 字段常量
@@ -61,6 +83,8 @@ public interface FieldConst {
String TIME = "time";
String TEXT = "text";
String ISSUE = "issue";
String EXPIRE = "expire";

View File

@@ -0,0 +1,40 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.constant;
/**
* 文件常量
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/4/17 10:35
*/
public interface FileConst {
String ERROR_LOG = "error.log";
String EXEC = "exec";
String SCRIPT = "script";
}

View File

@@ -0,0 +1,38 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.constant;
/**
* 过滤器排序常量
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/6/16 17:04
*/
public interface FilterOrderConst {
int TRICE_ID_FILTER = Integer.MIN_VALUE + 1000;
int CORS_FILTER = Integer.MIN_VALUE + 2000;
}

View File

@@ -0,0 +1,42 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.constant;
/**
* 验证常量
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/10/20 11:45
*/
public interface ValidConst {
String USERNAME_4_32_PATTERN = "^[a-zA-Z0-9_]{4,32}$";
String USERNAME_4_32_MESSAGE = "只能为 4-32 位的数字,字母或下滑线";
String DICT_1_32_PATTERN = "^[a-zA-Z0-9_]{1,32}$";
String DICT_1_32_MESSAGE = "只能为 1-32 位的数字,字母或下滑线";
}

View File

@@ -0,0 +1,62 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.crypto;
import cn.orionsec.kit.lang.utils.codec.Base62s;
import cn.orionsec.kit.lang.utils.crypto.symmetric.SymmetricCrypto;
/**
* 数据加密器
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/7/8 0:20
*/
public interface ValueCrypto extends SymmetricCrypto {
/**
* 初始化
*/
void init();
/**
* 加密后 base62 编码
*
* @param plain 明文
* @return 密文
*/
default String encryptBase62(String plain) {
return new String(Base62s.encode(this.encrypt(plain)));
}
/**
* base62 解码后解密
*
* @param text 密文
* @return 明文
*/
default String decryptBase62(String text) {
return new String(this.decrypt(Base62s.decode(text)));
}
}

View File

@@ -0,0 +1,45 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 自动清理配置
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/6/24 15:03
*/
@Data
@Schema(name = "AutoClearConfig", description = "自动清理配置")
public class AutoClearConfig {
@Schema(description = "是否开启")
private Boolean enabled;
@Schema(description = "保留周期 (天)")
private Integer keepPeriod;
}

View File

@@ -0,0 +1,48 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.entity;
/**
* 数据清理请求 定义
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/8/29 11:26
*/
public interface DataClearRequest {
/**
* 获取清理数量限制
*
* @return 清理限制
*/
Integer getLimit();
/**
* 设置清理数量限制
*
* @param limit limit
*/
void setLimit(Integer limit);
}

View File

@@ -0,0 +1,56 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.visor.framework.common.validator.group.Page;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
/**
* 公共页码请求
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/7/12 23:14
*/
@Data
@Schema(name = "PageRequest", description = "公共页码请求")
public class PageRequest {
@NotNull(groups = Page.class)
@Min(value = 1, groups = Page.class)
@Max(value = 10000, groups = Page.class)
@Schema(description = "页码")
private Integer page;
@NotNull(groups = Page.class)
@Min(value = 1, groups = Page.class)
@Max(value = 200, groups = Page.class)
@Schema(description = "大小")
private Integer limit;
}

View File

@@ -1,4 +1,26 @@
package com.orion.visor.framework.common.entity;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.entity;
import java.io.Serializable;

View File

@@ -0,0 +1,48 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 请求留痕模型
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/12/29 11:57
*/
@Data
@Schema(name = "RequestIdentityModel", description = "请求留痕模型")
public class RequestIdentityModel implements RequestIdentity {
@Schema(description = "请求地址")
private String address;
@Schema(description = "请求位置")
private String location;
@Schema(description = "userAgent")
private String userAgent;
}

View File

@@ -0,0 +1,71 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.entity;
import java.util.List;
/**
* 树节点
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/11/23 16:52
*/
public interface TreeNode<T extends TreeNode<T>> {
/**
* id
*
* @return id
*/
Long getId();
/**
* parentId
*
* @return parentId
*/
Long getParentId();
/**
* sort
*
* @return sort
*/
Integer getSort();
/**
* children
*
* @return children
*/
List<T> getChildren();
/**
* 设置 children
*
* @param children children
*/
void setChildren(List<T> children);
}

View File

@@ -1,4 +1,26 @@
package com.orion.visor.framework.common.enums;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;

View File

@@ -0,0 +1,65 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 启用状态
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/10/12 16:02
*/
@Getter
@AllArgsConstructor
public enum EnableStatus {
/**
* 停用
*/
DISABLED(0),
/**
* 启用
*/
ENABLED(1),
;
private final Integer value;
public static EnableStatus of(Integer value) {
if (value == null) {
return null;
}
for (EnableStatus e : values()) {
if (e.value.equals(value)) {
return e;
}
}
return null;
}
}

View File

@@ -0,0 +1,67 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.enums;
import cn.orionsec.kit.lang.utils.Strings;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 端点定义
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/6/21 19:15
*/
@Getter
@AllArgsConstructor
public enum EndpointDefine {
/**
* 上传临时分区
*/
UPLOAD_SWAP("/upload/swap/{}"),
/**
* 批量执行日志
*/
EXEC_LOG("/exec/{}/{}.log"),
;
/**
* 端点
*/
private final String endpoint;
/**
* 格式化
*
* @param params params
* @return path
*/
public String format(Object... params) {
return Strings.format(this.endpoint, params);
}
}

View File

@@ -0,0 +1,70 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 移动位置
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/11/13 17:26
*/
@Getter
@AllArgsConstructor
public enum MovePosition {
/**
* 拖拽到目标元素上
*/
TOP(-1),
/**
* 拖拽到目标元素中
*/
IN(0),
/**
* 拖拽到目标元素下
*/
BOTTOM(1),
;
private final Integer position;
public static MovePosition of(Integer position) {
if (position == null) {
return null;
}
for (MovePosition value : values()) {
if (value.position.equals(position)) {
return value;
}
}
return null;
}
}

View File

@@ -1,4 +1,26 @@
package com.orion.visor.framework.common.file;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.file;
import java.io.InputStream;
import java.io.OutputStream;

View File

@@ -1,8 +1,30 @@
package com.orion.visor.framework.common.handler.data;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.handler.data;
import com.orion.spring.SpringHolder;
import com.orion.visor.framework.common.handler.data.model.GenericsDataModel;
import com.orion.visor.framework.common.handler.data.strategy.GenericsDataStrategy;
import cn.orionsec.kit.spring.SpringHolder;
import org.dromara.visor.framework.common.handler.data.model.GenericsDataModel;
import org.dromara.visor.framework.common.handler.data.strategy.GenericsDataStrategy;
/**
* 标准数据定义

View File

@@ -0,0 +1,57 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.handler.data.model;
import com.alibaba.fastjson.JSON;
import java.util.Map;
/**
* 标准数据模型
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/12/20 22:07
*/
public interface GenericsDataModel {
/**
* 序列化
*
* @return json
*/
default String serial() {
return JSON.toJSONString(this);
}
/**
* 转为 map
*
* @return map
*/
default Map<String, Object> toMap() {
return JSON.parseObject(this.serial());
}
}

View File

@@ -1,7 +1,29 @@
package com.orion.visor.framework.common.handler.data.strategy;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.handler.data.strategy;
import com.alibaba.fastjson.JSON;
import com.orion.visor.framework.common.handler.data.model.GenericsDataModel;
import org.dromara.visor.framework.common.handler.data.model.GenericsDataModel;
/**
* 标准数据处理策略 基类

View File

@@ -0,0 +1,68 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.handler.data.strategy;
import org.dromara.visor.framework.common.handler.data.model.GenericsDataModel;
/**
* 标准数据处理策略
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/12/20 22:09
*/
public interface GenericsDataStrategy<M extends GenericsDataModel> {
/**
* 获取默认值
*
* @return 默认值
*/
M getDefault();
/**
* 执行完整验证链
* <p>
* preValid > updateFill > valid
*
* @param beforeModel beforeModel
* @param afterModel afterModel
*/
void doValid(M beforeModel, M afterModel);
/**
* 解析数据
*
* @param serialModel serialModel
* @return model
*/
M parse(String serialModel);
/**
* 转为视图配置
*
* @param model model
*/
void toView(M model);
}

View File

@@ -1,9 +1,31 @@
package com.orion.visor.framework.common.json.filter;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.json.filter;
import cn.orionsec.kit.lang.utils.Desensitizes;
import cn.orionsec.kit.lang.utils.Objects1;
import cn.orionsec.kit.lang.utils.collect.Lists;
import com.alibaba.fastjson.serializer.ValueFilter;
import com.orion.lang.utils.Desensitizes;
import com.orion.lang.utils.Objects1;
import com.orion.lang.utils.collect.Lists;
import java.util.List;

View File

@@ -0,0 +1,50 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.json.filter;
import cn.orionsec.kit.lang.utils.collect.Lists;
import com.alibaba.fastjson.serializer.PropertyFilter;
import java.util.List;
/**
* 字段忽略过滤器
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/10/12 11:21
*/
public class FieldIgnoreFilter implements PropertyFilter {
private final List<String> ignoreFields;
public FieldIgnoreFilter(List<String> ignoreFields) {
this.ignoreFields = ignoreFields;
}
@Override
public boolean apply(Object object, String name, Object value) {
return Lists.isEmpty(ignoreFields) || !ignoreFields.contains(name);
}
}

View File

@@ -0,0 +1,55 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.lock;
import java.util.function.Supplier;
/**
* 分布式锁
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/5/16 12:24
*/
public interface Locker {
/**
* 尝试获取锁
*
* @param key key
* @param run run
* @return 是否获取到锁
*/
boolean tryLock(String key, Runnable run);
/**
* 尝试获取锁
*
* @param key key
* @param call call
* @param <T> T
* @return 执行结果
*/
<T> T tryLock(String key, Supplier<T> call);
}

View File

@@ -1,7 +1,29 @@
package com.orion.visor.framework.common.meta;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.meta;
import cn.orionsec.kit.lang.id.UUIds;
import com.alibaba.ttl.TransmittableThreadLocal;
import com.orion.lang.id.UUIds;
import org.slf4j.MDC;
/**

View File

@@ -0,0 +1,62 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.security;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* 当前登录用户
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/7/6 18:36
*/
@Data
@Schema(name = "LoginUser", description = "当前登录用户对象")
public class LoginUser {
@Schema(description = "id")
private Long id;
@Schema(description = "用户名")
private String username;
@Schema(description = "花名")
private String nickname;
@Schema(description = "用户状态")
private Integer status;
@Schema(description = "头像地址")
private String avatar;
@Schema(description = "登录时间戳")
private Long timestamp;
@Schema(description = "角色")
private List<UserRole> roles;
}

View File

@@ -0,0 +1,62 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.security;
import cn.orionsec.kit.lang.utils.Booleans;
import cn.orionsec.kit.lang.utils.Strings;
import org.dromara.visor.framework.common.constant.Const;
import org.dromara.visor.framework.common.utils.CryptoUtils;
/**
* 密码修改器
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/9/21 11:35
*/
public class PasswordModifier {
private PasswordModifier() {
}
/**
* 获取新密码
*
* @param action action
* @return password
*/
public static String getEncryptNewPassword(UpdatePasswordAction action) {
if (Booleans.isTrue(action.getUseNewPassword())) {
// 使用新密码
String password = action.getPassword();
if (Strings.isBlank(password)) {
return Const.EMPTY;
} else {
return CryptoUtils.encryptAsString(password);
}
} else {
return null;
}
}
}

View File

@@ -0,0 +1,48 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.security;
/**
* SecurityUtils 的 bean 对象
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/7/7 15:20
*/
public interface SecurityHolder {
/**
* 获取当前用户
*
* @return 当前用户
*/
LoginUser getLoginUser();
/**
* 获取当前用户id
*
* @return id
*/
Long getLoginUserId();
}

View File

@@ -0,0 +1,50 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.security;
import java.io.Serializable;
/**
* 更新密码操作
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/9/21 11:32
*/
public interface UpdatePasswordAction extends Serializable {
/**
* 是否使用新密码
*
* @return use
*/
Boolean getUseNewPassword();
/**
* 获取密码
*
* @return password
*/
String getPassword();
}

View File

@@ -0,0 +1,50 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.security;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
/**
* 用户角色
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/11/20 23:39
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@Schema(name = "UserRole", description = "用户角色")
public class UserRole {
@EqualsAndHashCode.Include
@Schema(description = "id")
private Long id;
@Schema(description = "角色")
private String code;
}

View File

@@ -0,0 +1,55 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.thread;
import org.dromara.visor.framework.common.utils.ThreadMdcUtils;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
/**
* 自动注入 MDC 异步线程池
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/7/10 15:16
*/
public class ThreadPoolMdcTaskExecutor extends ThreadPoolTaskExecutor {
@Override
public void execute(Runnable task) {
super.execute(ThreadMdcUtils.wrap(task));
}
@Override
public <T> Future<T> submit(Callable<T> task) {
return super.submit(ThreadMdcUtils.wrap(task));
}
@Override
public Future<?> submit(Runnable task) {
return super.submit(ThreadMdcUtils.wrap(task));
}
}

View File

@@ -1,6 +1,28 @@
package com.orion.visor.framework.common.utils;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.utils;
import com.orion.lang.constant.Const;
import cn.orionsec.kit.lang.constant.Const;
import java.util.Arrays;
import java.util.List;

View File

@@ -1,7 +1,29 @@
package com.orion.visor.framework.common.utils;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.utils;
import com.orion.lang.utils.Exceptions;
import com.orion.visor.framework.common.crypto.ValueCrypto;
import cn.orionsec.kit.lang.utils.Exceptions;
import org.dromara.visor.framework.common.crypto.ValueCrypto;
/**
* 加密工具类

View File

@@ -1,7 +1,29 @@
package com.orion.visor.framework.common.utils;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.utils;
import com.orion.lang.utils.Exceptions;
import com.orion.visor.framework.common.file.FileClient;
import cn.orionsec.kit.lang.utils.Exceptions;
import org.dromara.visor.framework.common.file.FileClient;
import java.io.InputStream;
import java.io.OutputStream;

View File

@@ -0,0 +1,50 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.utils;
import cn.orionsec.kit.lang.utils.time.Dates;
import org.dromara.visor.framework.common.constant.Const;
/**
* 文件名称
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/8/31 17:57
*/
public class FileNames {
private FileNames() {
}
/**
* 导出文件名称
*
* @param title title
* @return name
*/
public static String exportName(String title) {
return title + "-" + Dates.current(Dates.YMD_HMS2) + "." + Const.SUFFIX_XLSX;
}
}

View File

@@ -1,11 +1,31 @@
package com.orion.visor.framework.common.utils;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.utils;
import com.orion.ext.location.Region;
import com.orion.ext.location.region.LocationRegions;
import com.orion.lang.constant.StandardHttpHeader;
import com.orion.lang.utils.Strings;
import com.orion.visor.framework.common.constant.Const;
import com.orion.web.servlet.web.Servlets;
import cn.orionsec.kit.ext.location.Region;
import cn.orionsec.kit.ext.location.region.LocationRegions;
import cn.orionsec.kit.web.servlet.web.Servlets;
import org.dromara.visor.framework.common.constant.Const;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;

View File

@@ -1,8 +1,30 @@
package com.orion.visor.framework.common.utils;
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.utils;
import com.orion.lang.utils.Exceptions;
import com.orion.visor.framework.common.lock.Locker;
import cn.orionsec.kit.lang.utils.Exceptions;
import lombok.extern.slf4j.Slf4j;
import org.dromara.visor.framework.common.lock.Locker;
import java.util.function.Supplier;

View File

@@ -0,0 +1,139 @@
/*
* Copyright (c) 2023 - present Dromara, All rights reserved.
*
* https://visor.dromara.org
* https://visor.dromara.org.cn
* https://visor.orionsec.cn
*
* Members:
* Jiahang Li - ljh1553488six@139.com - author
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.visor.framework.common.utils;
import cn.orionsec.kit.lang.utils.Objects1;
import cn.orionsec.kit.lang.utils.Systems;
import cn.orionsec.kit.lang.utils.io.Files1;
import org.dromara.visor.framework.common.constant.AppConst;
import org.dromara.visor.framework.common.constant.Const;
/**
* 路径工具类
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/4/17 10:28
*/
public class PathUtils {
private PathUtils() {
}
/**
* 获取用户根目录
*
* @param isWindows isWindows
* @param username 用户名
* @return 用户目录
*/
public static String getHomePath(boolean isWindows, String username) {
return getHomePath(isWindows, username, false);
}
/**
* 获取用户根目录
*
* @param isWindows isWindows
* @param username 用户名
* @param prependSeparator 是否在头部添加分隔符
* @return 用户目录
*/
public static String getHomePath(boolean isWindows, String username, boolean prependSeparator) {
if (isWindows) {
// windows
if (prependSeparator) {
return "/C:/Users/" + username;
} else {
return "C:/Users/" + username;
}
} else {
// linux
if (Const.ROOT.equals(username)) {
return "/" + Const.ROOT;
} else {
return "/home/" + username;
}
}
}
/**
* 获取应用路径
*
* @param isWindows isWindows
* @param username username
* @return path
*/
public static String getAppPath(boolean isWindows, String username) {
return getHomePath(isWindows, username)
+ "/" + AppConst.ORION
+ "/" + AppConst.APP_NAME;
}
/**
* 构建应用路径
*
* @param isWindows isWindows,
* @param username username
* @param paths paths
* @return path
*/
public static String buildAppPath(boolean isWindows, String username, Object... paths) {
StringBuilder path = new StringBuilder(getAppPath(isWindows, username));
for (Object o : paths) {
path.append("/").append(Objects1.toString(o));
}
return path.toString();
}
/**
* 头部添加分隔符
*
* @param path path
* @return path
*/
public static String prependSeparator(String path) {
if (path.startsWith("/")) {
return path;
}
return "/" + path;
}
/**
* 获取 orion path
*
* @param path path
* @return path
*/
public static String getOrionPath(String path) {
path = Systems.HOME_DIR
+ Files1.SEPARATOR
+ AppConst.ORION
+ Files1.SEPARATOR
+ AppConst.APP_NAME
+ Files1.SEPARATOR
+ path;
return Files1.getPath(path);
}
}

Some files were not shown because too many files have changed in this diff Show More