Merge branch 'master' of https://github.com/metersphere/metersphere
This commit is contained in:
commit
6672c7756e
10
ROADMAP.md
10
ROADMAP.md
|
@ -55,11 +55,17 @@
|
||||||
- [x] 测试跟踪:支持对接禅道同步缺陷
|
- [x] 测试跟踪:支持对接禅道同步缺陷
|
||||||
- [x] 其他:Jenkins 插件支持 pipeline 方式调用
|
- [x] 其他:Jenkins 插件支持 pipeline 方式调用
|
||||||
|
|
||||||
|
## v1.6 (开发中)
|
||||||
|
- [ ] 新增接口管理功能
|
||||||
|
- [ ] 全新接口自动化使用方式
|
||||||
|
- [ ] 测试跟踪测试计划分类型展示
|
||||||
|
- [ ] 优化消息通知配置及实现方式
|
||||||
|
|
||||||
## 规划中
|
## 规划中
|
||||||
|
|
||||||
- [ ] 接口测试支持添加 WebSocket 协议请求
|
- [ ] 接口测试支持添加 WebSocket 协议请求
|
||||||
- [ ] 接口管理功能
|
|
||||||
- [ ] 集成云平台动态管理测试资源池
|
- [ ] 集成云平台动态管理测试资源池
|
||||||
- [ ] 支持 K8s 集群作为测试资源池
|
- [ ] 测试跟踪测试用例及接口测试增加版本管理
|
||||||
|
- [ ] 测试跟踪测试用例增加思维导图展示形式
|
||||||
- [ ] 移动端测试支持
|
- [ ] 移动端测试支持
|
||||||
- [ ] UI 功能测试支持
|
- [ ] UI 功能测试支持
|
||||||
|
|
|
@ -5,14 +5,17 @@ import io.metersphere.commons.constants.UserSource;
|
||||||
import io.metersphere.commons.user.SessionUser;
|
import io.metersphere.commons.user.SessionUser;
|
||||||
import io.metersphere.commons.utils.SessionUtils;
|
import io.metersphere.commons.utils.SessionUtils;
|
||||||
import io.metersphere.controller.request.LoginRequest;
|
import io.metersphere.controller.request.LoginRequest;
|
||||||
|
import io.metersphere.service.BaseDisplayService;
|
||||||
import io.metersphere.service.UserService;
|
import io.metersphere.service.UserService;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.shiro.SecurityUtils;
|
import org.apache.shiro.SecurityUtils;
|
||||||
import org.springframework.context.i18n.LocaleContextHolder;
|
import org.springframework.context.i18n.LocaleContextHolder;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping
|
@RequestMapping
|
||||||
|
@ -22,6 +25,8 @@ public class LoginController {
|
||||||
private UserService userService;
|
private UserService userService;
|
||||||
@Resource
|
@Resource
|
||||||
private Environment env;
|
private Environment env;
|
||||||
|
@Resource
|
||||||
|
private BaseDisplayService baseDisplayService;
|
||||||
|
|
||||||
@GetMapping(value = "/isLogin")
|
@GetMapping(value = "/isLogin")
|
||||||
public ResultHolder isLogin() {
|
public ResultHolder isLogin() {
|
||||||
|
@ -66,4 +71,9 @@ public class LoginController {
|
||||||
public String getDefaultLanguage() {
|
public String getDefaultLanguage() {
|
||||||
return userService.getDefaultLanguage();
|
return userService.getDefaultLanguage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("display/file/{imageName}")
|
||||||
|
public ResponseEntity<byte[]> image(@PathVariable("imageName") String imageName) throws IOException {
|
||||||
|
return baseDisplayService.getImage(imageName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
package io.metersphere.service;
|
||||||
|
|
||||||
|
import io.metersphere.base.domain.SystemParameter;
|
||||||
|
import io.metersphere.base.domain.SystemParameterExample;
|
||||||
|
import io.metersphere.base.mapper.SystemParameterMapper;
|
||||||
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class BaseDisplayService {
|
||||||
|
@Resource
|
||||||
|
private SystemParameterMapper systemParameterMapper;
|
||||||
|
@Resource
|
||||||
|
private FileService fileService;
|
||||||
|
|
||||||
|
public List<SystemParameter> getParamList(String type) {
|
||||||
|
SystemParameterExample example = new SystemParameterExample();
|
||||||
|
example.createCriteria().andParamKeyLike(type + "%");
|
||||||
|
return systemParameterMapper.selectByExample(example);
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] loadFileAsBytes(String fileId) {
|
||||||
|
return fileService.loadFileAsBytes(fileId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<byte[]> getImage(String imageName) throws IOException {
|
||||||
|
byte[] bytes = null;
|
||||||
|
List<SystemParameter> paramList = getParamList("ui." + imageName);
|
||||||
|
if (!CollectionUtils.isEmpty(paramList)) {
|
||||||
|
SystemParameter sp = paramList.get(0);
|
||||||
|
String paramValue = sp.getParamValue();
|
||||||
|
if (StringUtils.isNotBlank(paramValue)) {
|
||||||
|
bytes = loadFileAsBytes(paramValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MediaType contentType = MediaType.parseMediaType("application/octet-stream");
|
||||||
|
if (bytes == null) {
|
||||||
|
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(getClass().getClassLoader());
|
||||||
|
switch (imageName) {
|
||||||
|
case "logo":
|
||||||
|
bytes = IOUtils.toByteArray(resolver.getResources("/static/img/logo-light-MeterSphere.*.svg")[0].getInputStream());
|
||||||
|
contentType = MediaType.valueOf("image/svg+xml");
|
||||||
|
break;
|
||||||
|
case "loginImage":
|
||||||
|
bytes = IOUtils.toByteArray(resolver.getResources("/static/img/info.*.png")[0].getInputStream());
|
||||||
|
break;
|
||||||
|
case "loginLogo":
|
||||||
|
bytes = IOUtils.toByteArray(resolver.getResources("/static/img/logo-dark-MeterSphere.*.svg")[0].getInputStream());
|
||||||
|
contentType = MediaType.valueOf("image/svg+xml");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ResponseEntity.ok()
|
||||||
|
.contentType(contentType)
|
||||||
|
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + imageName + "\"")
|
||||||
|
.body(bytes);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1 +1 @@
|
||||||
Subproject commit 905ca8af61ce966d26109e9c5c8c0aee3ca1324e
|
Subproject commit f514243111c3acb317e80da23857143857a53566
|
|
@ -264,6 +264,10 @@ export default {
|
||||||
.login-logo {
|
.login-logo {
|
||||||
background: url(../assets/logo-dark-MeterSphere.svg);
|
background: url(../assets/logo-dark-MeterSphere.svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.logo-header {
|
||||||
|
background: url(../assets/logo-light-MeterSphere.svg);
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|
Loading…
Reference in New Issue