This commit is contained in:
Crystal.Sea
2021-10-23 22:23:24 +08:00
parent 9b67ce8160
commit 3e2ed44521
14 changed files with 235 additions and 26 deletions

1
.gitignore vendored
View File

@@ -40,3 +40,4 @@ setEnvVars.bat
/.gradle/
/.gradle/*
.vscode/settings.json

View File

@@ -21,9 +21,15 @@
*(MAXKEY-210820) 企业微信扫码登录js更新wwLogin-1.2.4.js
*(MAXKEY-210821) 中文切换调整为下拉菜单
*(MAXKEY-210822) 移除原有的缓存方案
*(MAXKEY-210823) 依赖jar引用、更新和升级
spring 5.3.11
*(MAXKEY-210823) 应用管理OAuth适配器显示问题修复
*(MAXKEY-210824) 图片验证码优化,增加随机颜色的字符生成实现,干扰线优化
*(MAXKEY-210825) 依赖jar引用、更新和升级
spring 5.3.12
springboot 2.5.6
tomcat 9.0.54
springSecurity 5.5.3
springData 2.5.5
springSession 2.5.3
mybatis-jpa-extra 2.6
druid 1.2.8
caffeine 2.9.2

View File

@@ -44,11 +44,11 @@ poiVersion =4.1.2
tomcatVersion =9.0.54
tomcatembedloggingjuliVersion =8.5.2
#spring
springVersion =5.3.11
springBootVersion =2.5.5
springSecurityVersion =5.5.2
springDataVersion =2.5.2
springSessionVersion =2.5.2
springVersion =5.3.12
springBootVersion =2.5.6
springSecurityVersion =5.5.3
springDataVersion =2.5.5
springSessionVersion =2.5.3
springkafkaVersion =2.7.7
springretryVersion =1.3.0
springplugincoreVersion =2.0.0.RELEASE
@@ -61,6 +61,7 @@ springcloudalibabacsplVersion =1.8.2
alibabanacosclientVersion =2.0.3
#google
jibGradlePluginVersion =3.1.4
jhlabsfiltersVersion =2.0.235-1
kaptchaVersion =2.3.2
gsonVersion =2.8.8
guavaVersion =30.1.1-jre
@@ -98,7 +99,6 @@ jakartaannotationVersion =2.0.0
jakartavalidationapiVersion =3.0.0
attoparserVersion =2.0.5.RELEASE
unbescapeVersion =1.1.6.RELEASE
jhlabsfiltersVersion =2.0.235-1
slf4jVersion =1.7.32
jacksonVersion =2.12.5
bouncycastleVersion =1.69

View File

@@ -60,6 +60,12 @@ public class Accounts extends JpaBaseEntity implements Serializable {
private String relatedUsername;
@Column
private String relatedPassword;
@Column
private String createType;
@Column
private String strategyId;
@Column
private int status;
UserInfo userInfo;
@@ -156,6 +162,31 @@ public class Accounts extends JpaBaseEntity implements Serializable {
this.userInfo = userInfo;
}
public String getCreateType() {
return createType;
}
public void setCreateType(String createType) {
this.createType = createType;
}
public String getStrategyId() {
return strategyId;
}
public void setStrategyId(String strategyId) {
this.strategyId = strategyId;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
@Override
public String toString() {
return "AppAccounts [uid=" + userId + ", username=" + username + ", displayName=" + displayName + ", appId="

View File

@@ -90,6 +90,9 @@ public class AppsOAuth20Details extends Apps {
this.setVendor(application.getVendor());
this.setVendorUrl(application.getVendorUrl());
this.setVisible(application.getVisible());
this.setAdapter(application.getAdapter());
this.setAdapterId(application.getAdapterId());
this.setAdapterName(application.getAdapterName());
this.clientSecret = baseClientDetails.getClientSecret();
this.scope = baseClientDetails.getScope().toString();
@@ -114,6 +117,7 @@ public class AppsOAuth20Details extends Apps {
this.approvalPrompt = baseClientDetails.getApprovalPrompt();
this.pkce = baseClientDetails.getPkce();
}

View File

@@ -75,8 +75,8 @@ public class GroupsService extends JpaBaseService<Groups> implements Serializab
if(dynamicGroup.getDynamic().equals("1")) {
boolean isDynamicTimeSupport = false;
boolean isBetweenEffectiveTime = false;
if(dynamicGroup.getResumeTime()!=null&&dynamicGroup.getResumeTime().equals("")
&&dynamicGroup.getSuspendTime()!=null&&dynamicGroup.getSuspendTime().equals("")) {
if(StringUtils.isNotBlank(dynamicGroup.getResumeTime())
&&StringUtils.isNotBlank(dynamicGroup.getSuspendTime())) {
LocalTime currentTime = LocalDateTime.now().toLocalTime();
LocalTime resumeTime = LocalTime.parse(dynamicGroup.getResumeTime());
LocalTime suspendTime = LocalTime.parse(dynamicGroup.getSuspendTime());
@@ -92,7 +92,7 @@ public class GroupsService extends JpaBaseService<Groups> implements Serializab
}
if(dynamicGroup.getOrgIdsList()!=null && !dynamicGroup.getOrgIdsList().equals("")) {
if(StringUtils.isNotBlank(dynamicGroup.getOrgIdsList())) {
dynamicGroup.setOrgIdsList("'"+dynamicGroup.getOrgIdsList().replace(",", "','")+"'");
}
String filters = dynamicGroup.getFilters();

View File

@@ -7,5 +7,6 @@ org.maxkey.autoconfigure.JwtAuthnAutoConfiguration,\
org.maxkey.autoconfigure.RedisAutoConfiguration,\
org.maxkey.autoconfigure.AuthenticationAutoConfiguration,\
org.maxkey.synchronizer.autoconfigure.SynchronizerAutoConfiguration,\
org.maxkey.autoconfigure.SwaggerConfig,\
org.maxkey.MaxKeyMgtConfig,\
org.maxkey.MaxKeyMgtMvcConfig

View File

@@ -29,7 +29,7 @@
</head>
<body>
<form id="actionForm" method="post" type="label" autoclose="true" action="<@base/>/app/accounts/add" class="needs-validation" novalidate>
<form id="actionForm" method="post" type="label" autoclose="true" action="<@base/>/accounts/add" class="needs-validation" novalidate>
<table border="0" cellpadding="0" cellspacing="0" class="table table-bordered" >
<tbody>
<tr style="display:none">

View File

@@ -3,6 +3,21 @@
<head>
<#include "../layout/header.ftl"/>
<#include "../layout/common.cssjs.ftl"/>
<script type="text/javascript">
function statusFormatter(value, row, index){
if(value==1){
return '<@locale code="userinfo.status.active" />';
}else if(value==2){
return '<@locale code="userinfo.status.inactive" />';
}else if(value==5){
return '<@locale code="userinfo.status.lock" />';
}else if(value==9){
return '<@locale code="userinfo.status.delete" />';
}else {
return '<@locale code="userinfo.status.inactive" />';
}
};
</script>
</head>
<body>
<div class="app header-default side-nav-dark">
@@ -57,8 +72,12 @@
wurl="<@base/>/accounts/forwardAdd"
wwidth="960"
wheight="600"
target="window">
target="window">
<input class="button btn btn-info mr-3 " id="modifyBtn" type="button" value="<@locale code="button.text.edit"/>"
wurl="<@base/>/accounts/forwardUpdate"
wwidth="700"
wheight="400"
target="window">
<input class="button btn btn-danger mr-3 " id="deleteBtn" type="button" value="<@locale code="button.text.delete"/>"
wurl="<@base/>/accounts/delete" />
</div>
@@ -115,6 +134,7 @@
<th data-field="appName"><@locale code="account.appName"/></th>
<th data-field="appId" data-visible="false"><@locale code="account.appId"/></th>
<th data-field="relatedUsername"><@locale code="account.relatedUsername"/></th>
<th data-field="status" data-formatter="statusFormatter"><@locale code="common.text.status"/></th>
</tr>
</thead>
</table>

View File

@@ -0,0 +1,121 @@
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<#include "../layout/header.ftl"/>
<#include "../layout/common.cssjs.ftl"/>
<link type="text/css" rel="stylesheet" href="<@base />/static/css/minitable.css"/>
<script type="text/javascript">
$(function(){
$("#relatedUsername").focus(function(){
if($("#relatedUsername").val()==""){
$("#relatedUsername").val($("#username").val());
}
});
$("#generateSecret").on("click",function(){
$.post("<@base/>/userinfo/randomPassword/", {_method:"post",currTime:(new Date()).getTime()}, function(data) {
$("#relatedPassword").val(data+"");
});
});
$("#view").on("click",function(){
if($("#relatedPassword").attr("type")=="text"){
$("#relatedPassword").attr("type","password");
}else{
$("#relatedPassword").attr("type","text");
}
});
});
</script>
</head>
<body>
<form id="actionForm" method="post" type="label" autoclose="true" action="<@base/>/accounts/update" class="needs-validation" novalidate>
<table border="0" cellpadding="0" cellspacing="0" class="table table-bordered" >
<tbody>
<tr style="display:none">
<th><@locale code="userinfo.id" /></th>
<td nowrap>
<input required="" type="text" id="id" name="id" readonly class="form-control" title="" value="${model.id!}"/>
</td>
<td>
</td>
</tr>
<tr>
<th style="width: 150px;"><@locale code="userinfo.username" /></th>
<td nowrap style="width:400px">
<input required="" readonly type="text" id="username" name="username" class="form-control username" title="" value="${model.username!}" required="" />
</td>
<td >
</td>
</tr>
<tr>
<th><@locale code="userinfo.displayName" /></th>
<td nowrap>
<input required="" readonly type="text" id="displayName" name="displayName" class="form-control displayName" title="" value="${model.displayName!}" required="" />
</td>
<td>
</td>
</tr>
<tr>
<th><@locale code="apps.name" /></th>
<td nowrap>
<input required="" readonly type="text" id="appName" name="appName" class="form-control appName" title="" value="${model.appName!}" required="" />
</td>
<td>
</td>
</tr>
<tr>
<th><@locale code="account.relatedUsername" /></th>
<td nowrap>
<input type="text" id="relatedUsername" name="relatedUsername" class="form-control" title="" value="${model.relatedUsername!}" required="" />
</td>
<td>
</td>
</tr>
<tr>
<th><@locale code="account.relatedPassword" /></th>
<td nowrap>
<input type="password" id="relatedPassword" name="relatedPassword" class="form-control" title="" value="${model.relatedPassword!}" required="" />
</td>
<td>
<input id="generateSecret" type="button" class="button btn btn-warning mr-3" style="width:75px" value="<@locale code="button.text.generate"/>"/>
<input id="view" type="button" class="button btn btn-info mr-3" style="width:75px" value="<@locale code="button.text.view"/>"/>
</td>
</tr>
<tr>
<th><@locale code="common.text.status" /></th>
<td nowrap>
<select id="status" name="status" class="form-control form-select" >
<option value="1" <#if 1==model.status!>selected</#if>><@locale code="common.text.status.activate"/></option>
<option value="2" <#if 2==model.status!>selected</#if>><@locale code="common.text.status.inactive"/></option>
<option value="5" <#if 5==model.status!>selected</#if>><@locale code="common.text.status.lock"/></option>
<option value="9" <#if 9==model.status!>selected</#if>><@locale code="common.text.status.delete"/></option>
</select>
</td>
<td></td>
</tr>
<tr>
<td colspan="3" class="center">
<input id="_method" type="hidden" name="_method" value="post"/>
<input type="hidden" id="userId" name="userId" class="userId" title="" value="${model.userId!}"/>
<input type="hidden" id="appId" name="appId" class="appId" title="" value="${model.appId!}"/>
<input class="button btn btn-primary mr-3" type="submit" id="submitBtn" value="<@locale code="button.text.save" />"/>
<input class="button btn btn-secondary mr-3" type="button" id="closeBtn" value="<@locale code="button.text.cancel" /> "/>
</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>

View File

@@ -69,13 +69,19 @@
<tr>
<th><@locale code="socials.provider.hidden" /></th>
<td nowrap>
<input type="text" id="hidden" name="hidden" class="form-control" title="" value="" required="" />
<select id="hidden" name="hidden" class="form-control form-select" >
<option value="true" ><@locale code="common.text.yes"/></option>
<option value="false" selected><@locale code="common.text.no"/></option>
</select>
</td>
</tr>
<tr>
<th><@locale code="common.text.status" /></th>
<td nowrap>
<input type="text" id="status" name="status" class="form-control" title="" value="" required="" />
<select id="status" name="status" class="form-control form-select" >
<option value="1" selected><@locale code="common.text.status.activate"/></option>
<option value="2" ><@locale code="common.text.status.inactive"/></option>
</select>
</td>
</tr>
<tr>

View File

@@ -4,9 +4,20 @@
<#include "../layout/header.ftl"/>
<#include "../layout/common.cssjs.ftl"/>
<script type="text/javascript">
function dynamicFormatter(value, row, index){
return value=='0'? '<@locale code="common.text.no" />':'<@locale code="common.text.yes" />';
};
function statusFormatter(value, row, index){
if(value==1){
return '<@locale code="userinfo.status.active" />';
}else if(value==2){
return '<@locale code="userinfo.status.inactive" />';
}else if(value==5){
return '<@locale code="userinfo.status.lock" />';
}else if(value==9){
return '<@locale code="userinfo.status.delete" />';
}else {
return '<@locale code="userinfo.status.inactive" />';
}
};
function iconFormatter(value, row, index){
return "<img height='30' border='0px' src='<@base/>/static/"+value+"'/>";
};
@@ -101,7 +112,7 @@
<th data-field="provider"><@locale code="socials.provider.provider"/></th>
<th data-field="providerName"><@locale code="socials.provider.providerName"/></th>
<th data-field="sortIndex"><@locale code="common.text.sortindex"/></th>
<th data-field="status"><@locale code="common.text.status"/></th>
<th data-field="status" data-formatter="statusFormatter"><@locale code="common.text.status"/></th>
</tr>
</thead>

View File

@@ -72,13 +72,19 @@
<tr>
<th><@locale code="socials.provider.hidden" /></th>
<td nowrap>
<input type="text" id="hidden" name="hidden" class="form-control" title="" value="${model.hidden!}" required="" />
<select id="hidden" name="hidden" class="form-control form-select" >
<option value="true" <#if 'true'==model.hidden!>selected</#if>><@locale code="common.text.yes"/></option>
<option value="false" <#if 'false'==model.hidden!>selected</#if>><@locale code="common.text.no"/></option>
</select>
</td>
</tr>
<tr>
<th><@locale code="common.text.status" /></th>
<td nowrap>
<input type="text" id="status" name="status" class="form-control" title="" value="${model.status!}" required="" />
<select id="status" name="status" class="form-control form-select" >
<option value="1" <#if 1==model.status!>selected</#if>><@locale code="common.text.status.activate"/></option>
<option value="2" <#if 2==model.status!>selected</#if>><@locale code="common.text.status.inactive"/></option>
</select>
</td>
</tr>
<tr>

View File

@@ -15,10 +15,8 @@
};
function onClick(event, treeId, treeNode) {
$("#deptId").val(treeNode.id);
$("#list").setGridParam({ postData: { deptId: treeNode.id} });
$("#list").trigger('reloadGrid', [{page:1}]);
$("#departmentId").val(treeNode.id);
$("#searchBtn").click();
}
$(function () {
@@ -151,6 +149,10 @@
</head>
<body>
<div>
<form id="basic_search_form" style="display:none">
<input id="departmentId" class="form-control" name="departmentId" type="text" >
<input class="button btn mr-3 btn-primary" id="searchBtn" type="button" size="50" value="<@locale code="button.text.search"/>">
</form>
<input class="button btn btn-primary mr-3" style="float: right;" id="winClose" type="button" value="<@locale code="button.text.select" />" >
</div>
<!-- content -->