From 5f69a549add739b190f46ba7d035e2fe31390e01 Mon Sep 17 00:00:00 2001 From: zhaoxiaohao <913652501@qq.com> Date: Fri, 17 Jul 2020 09:39:04 +0800 Subject: [PATCH] 添加修改密码的加密的功能 --- kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysUserController.java | 12 ++-- kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/system/user.html | 1 kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/AliyunOSSAutoConfigure.java | 9 +++ kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/controller/FileController.java | 4 kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/impl/AbstractIFileService.java | 45 +++++++++----- kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java | 27 ++++++-- kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/ISysUserService.java | 8 +- kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/FastdfsAutoConfigure.java | 6 ++ kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/tpl/password.html | 5 + kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/IFileService.java | 2 kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/QiniuOSSAutoConfigure.java | 6 ++ kidgrow-web/kidgrow-web-manager/src/main/resources/static/module/apiUrl.js | 3 12 files changed, 89 insertions(+), 39 deletions(-) diff --git a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/IFileService.java b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/IFileService.java index 548cf90..d70e4c9 100644 --- a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/IFileService.java +++ b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/IFileService.java @@ -41,5 +41,5 @@ /** * base64图片下载 */ - ResultBody baseDownLoad(Map<String, Object> map); + ResultBody baseDownLoad(Map<String, Object> map) throws Exception; } diff --git a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/impl/AbstractIFileService.java b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/impl/AbstractIFileService.java index 2783c87..eb8531c 100644 --- a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/impl/AbstractIFileService.java +++ b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/impl/AbstractIFileService.java @@ -1,6 +1,7 @@ package com.kidgrow.filecenter.service.impl; import cn.hutool.core.util.IdUtil; +import com.aliyun.oss.model.OSSObject; import com.aliyun.oss.model.ObjectMetadata; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -20,7 +21,6 @@ import org.apache.commons.collections4.MapUtils; import org.springframework.web.multipart.MultipartFile; import sun.misc.BASE64Decoder; -import sun.misc.BASE64Encoder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -95,6 +95,7 @@ protected abstract void uploadFile(MultipartFile file, FileInfo fileInfo) throws Exception; protected abstract void fileUpLoadOss(FileInfo fileInfo,String newFilePath, InputStream fileStream); protected abstract String FilePath(String imgType,String folderByDate); + protected abstract OSSObject down(String url); /** * 删除文件 @@ -219,29 +220,41 @@ } @Override - public ResultBody baseDownLoad(Map<String, Object> map) { + public ResultBody baseDownLoad(Map<String, Object> map) throws Exception { List<FileInfo> fileInfos = baseMapper.selectByMap(map); if(fileInfos.size()>0){ FileInfo fileInfo = fileInfos.get(0); - InputStream in = null; - byte[] data = null; - //读取图片字节数组 - try{ - in = new FileInputStream(fileInfo.getUrl()); - data = new byte[in.available()]; - in.read(data); - in.close(); - }catch (IOException e){ - e.printStackTrace(); - } - //对字节数组Base64编码 - BASE64Encoder encoder = new BASE64Encoder(); + OSSObject down1 = this.down(fileInfo.getUrl().replace("https://kidgrow.oss-accelerate.aliyuncs.com/","")); + InputStream objectContent = down1.getObjectContent(); //返回Base64编码过的字节数组字符串 - String encode = encoder.encode(data); + byte[] data = null; + // 读取图片字节数组 + try { + ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); + byte[] buff = new byte[100]; + int rc = 0; + while ((rc = objectContent.read(buff, 0, 100)) > 0) { + swapStream.write(buff, 0, rc); + } + data = swapStream.toByteArray(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (objectContent != null) { + try { + objectContent.close(); + down1.close(); + } catch (IOException e) { + throw new Exception("输入流关闭异常"); + } + } + } + String encode="data:"+fileInfo.getContentType()+";base64,"+Base64.getEncoder().encodeToString(data); return ResultBody.ok().data(encode); }else { return ResultBody.failed("获取数据失败"); } } + } diff --git a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/AliyunOSSAutoConfigure.java b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/AliyunOSSAutoConfigure.java index 029a41b..2ee75b4 100644 --- a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/AliyunOSSAutoConfigure.java +++ b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/AliyunOSSAutoConfigure.java @@ -2,6 +2,8 @@ import com.aliyun.oss.OSSClient; import com.aliyun.oss.common.auth.DefaultCredentialProvider; +import com.aliyun.oss.model.GetObjectRequest; +import com.aliyun.oss.model.OSSObject; import com.kidgrow.common.constant.SecurityConstants; import com.kidgrow.common.utils.DateUtil; import com.kidgrow.common.utils.StringUtils; @@ -18,6 +20,8 @@ import javax.servlet.http.HttpServletRequest; import java.io.InputStream; import java.util.Date; +import java.util.HashMap; +import java.util.Map; import java.util.UUID; /** @@ -96,6 +100,11 @@ { ossClient.putObject(fileProperties.getOss().getBucketName(), newFilePath, fileStream); fileInfo.setUrl(fileProperties.getOss().getDomain() + newFilePath); + + } + public OSSObject down(String url){ + GetObjectRequest request=new GetObjectRequest(fileProperties.getOss().getBucketName(),url); + return ossClient.getObject(request); } /** * 组合sso上的文件路径 diff --git a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/FastdfsAutoConfigure.java b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/FastdfsAutoConfigure.java index 9e5ed3c..175569f 100644 --- a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/FastdfsAutoConfigure.java +++ b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/FastdfsAutoConfigure.java @@ -1,6 +1,7 @@ package com.kidgrow.filecenter.config; import cn.hutool.core.util.StrUtil; +import com.aliyun.oss.model.OSSObject; import com.kidgrow.filecenter.model.FileInfo; import com.kidgrow.filecenter.properties.FileServerProperties; import com.kidgrow.filecenter.service.impl.AbstractIFileService; @@ -57,6 +58,11 @@ } @Override + protected OSSObject down(String url) { + return null; + } + + @Override protected boolean deleteFile(FileInfo fileInfo) { if (fileInfo != null && StrUtil.isNotEmpty(fileInfo.getPath())) { StorePath storePath = StorePath.parseFromUrl(fileInfo.getPath()); diff --git a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/QiniuOSSAutoConfigure.java b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/QiniuOSSAutoConfigure.java index ceea920..ad5f769 100644 --- a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/QiniuOSSAutoConfigure.java +++ b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/config/QiniuOSSAutoConfigure.java @@ -1,5 +1,6 @@ package com.kidgrow.filecenter.config; +import com.aliyun.oss.model.OSSObject; import com.kidgrow.filecenter.model.FileInfo; import com.kidgrow.filecenter.properties.FileServerProperties; import com.kidgrow.filecenter.service.impl.AbstractIFileService; @@ -100,6 +101,11 @@ } @Override + protected OSSObject down(String url) { + return null; + } + + @Override protected boolean deleteFile(FileInfo fileInfo) { try { Response response = bucketManager.delete(fileProperties.getOss().getBucketName(), fileInfo.getPath()); diff --git a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/controller/FileController.java b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/controller/FileController.java index 54304b9..3bf53b8 100644 --- a/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/controller/FileController.java +++ b/kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/controller/FileController.java @@ -72,8 +72,8 @@ /** * base64图片下载 */ - @PostMapping(value="baseDownLoad",produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public ResultBody baseDownLoad(@RequestBody Map<String,Object> map){ + @PostMapping(value="baseDownLoad") + public ResultBody baseDownLoad(@RequestBody Map<String,Object> map) throws Exception{ return fileService.baseDownLoad(map); } diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/ISysUserService.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/ISysUserService.java index 474800d..d480053 100644 --- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/ISysUserService.java +++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/ISysUserService.java @@ -70,13 +70,13 @@ * @param newPassword * @return */ - ResultBody updatePassword(Long id, String oldPassword, String newPassword,Boolean isdefault); + ResultBody updatePassword(Long id, String oldPassword, String newPassword,Boolean isdefault) throws Exception; /** * 更新手机号 * @param params * @return */ - ResultBody updateUserTel(Map<String,Object> params); + ResultBody updateUserTel(Map<String,Object> params) throws Exception ; /** * 用户列表 * @param params @@ -119,7 +119,7 @@ ResultBody findCountByMap(Map<String, Object> map); - ResultBody passwordByPhone(Map<String, Object> map); + ResultBody passwordByPhone(Map<String, Object> map) throws Exception; ResultBody registerByPhone(Map<String, Object> map); @@ -143,7 +143,7 @@ * @param userRegVo * @return */ - ResultBody doctorUserReg(UserRegVo userRegVo,SysUser sysUser); + ResultBody doctorUserReg(UserRegVo userRegVo,SysUser sysUser) throws Exception; /** * 获取医院科室下的所有有效的医生 * @param hospitalId diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java index 1ed685b..a5fa6eb 100644 --- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java +++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysUserServiceImpl.java @@ -15,6 +15,7 @@ import com.kidgrow.common.model.SysUser; import com.kidgrow.common.model.*; import com.kidgrow.common.service.impl.SuperServiceImpl; +import com.kidgrow.common.utils.AesUtils; import com.kidgrow.common.utils.DateUtils; import com.kidgrow.common.utils.Pinyin4jUtil; import com.kidgrow.redis.util.RedisUtils; @@ -228,15 +229,19 @@ @Transactional(rollbackFor = Exception.class) @Override - public ResultBody updatePassword(Long id, String oldPassword, String newPassword, Boolean isdefault) { + public ResultBody updatePassword(Long id, String oldPassword, String newPassword, Boolean isdefault) throws Exception { + SysUser sysUser = baseMapper.selectById(id); if (StrUtil.isNotBlank(oldPassword)) { + oldPassword=AesUtils.desEncrypt(oldPassword).trim(); if (!passwordEncoder.matches(oldPassword, sysUser.getPassword())) { return ResultBody.failed("旧密码错误!"); } } if (StrUtil.isBlank(newPassword)) { newPassword = com.kidgrow.common.utils.RandomValueUtils.getRandom(6); + }else { + newPassword=AesUtils.desEncrypt(newPassword).trim(); } SysUser user = new SysUser(); user.setId(id); @@ -256,12 +261,12 @@ @Override @Transactional(rollbackFor = Exception.class) - public ResultBody updateUserTel(Map<String, Object> params) { + public ResultBody updateUserTel(Map<String, Object> params) throws Exception { Long id = MapUtils.getLong(params, "id"); String oldTel = MapUtils.getString(params, "oldTel"); - String newTel = MapUtils.getString(params, "newTel"); - String authCode = MapUtils.getString(params, "authCode"); - String userPassword = MapUtils.getString(params, "userPassword"); + String newTel = AesUtils.desEncrypt(MapUtils.getString(params, "newTel")).trim(); + String authCode = AesUtils.desEncrypt(MapUtils.getString(params, "authCode")).trim(); + String userPassword = AesUtils.desEncrypt(MapUtils.getString(params, "userPassword")).trim(); if (id > 0 && StringUtils.isNotBlank(oldTel) && StringUtils.isNotBlank(newTel) && StringUtils.isNotBlank(authCode) && StringUtils.isNotBlank(userPassword)) { //检查验证码 @@ -275,6 +280,7 @@ } else { //验证旧手机号和密码 SysUser sysUser = baseMapper.selectById(id); + userPassword = AesUtils.desEncrypt(userPassword); if (passwordEncoder.matches(userPassword, sysUser.getPassword()) && sysUser.getMobile().equals((oldTel))) { //验证通过,修改手机号 SysUser user = new SysUser(); @@ -494,7 +500,7 @@ * @return */ @Override - public ResultBody passwordByPhone(Map<String, Object> map) { + public ResultBody passwordByPhone(Map<String, Object> map) throws Exception { //手机号,type,验证码,新密码 String phone = MapUtils.getString(map, "phone"); if (phone == null || "".equals(phone.trim())) { @@ -508,7 +514,10 @@ if (newPass == null || "".equals(newPass.trim())) { return ResultBody.failed("请输入正确的密码"); } - if (CheckVerificationCode(ConstantSMS.PASSWORD_SMS, map.get("phone").toString(), verificationCode)) { + phone= AesUtils.desEncrypt(phone.trim()); + verificationCode= AesUtils.desEncrypt(verificationCode.trim()); + newPass= AesUtils.desEncrypt(newPass.trim()); + if (CheckVerificationCode(ConstantSMS.PASSWORD_SMS, phone, verificationCode)) { //查询表 Map<String, Object> selectMap = new HashMap<>(); selectMap.put("mobile", phone); @@ -642,10 +651,12 @@ */ @Transactional(rollbackFor = Exception.class) @Override - public ResultBody doctorUserReg(UserRegVo userRegVo, SysUser sysUserd) { + public ResultBody doctorUserReg(UserRegVo userRegVo, SysUser sysUserd) throws Exception { if(sysUserd.getId()==null){ sysUserd = this.baseMapper.selectById(userRegVo.getUserId()); } + userRegVo.setPassword(AesUtils.desEncrypt(userRegVo.getPassword()).trim()); + userRegVo.setUsername(AesUtils.desEncrypt(userRegVo.getUsername()).trim()); //检查手机号是否已经注册 H端登录名和手机号存一样的值 if (phoneIsUsed(userRegVo.getMobile())) { return ResultBody.failed("该手机号已经注册"); diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysUserController.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysUserController.java index 2a05a44..aed44e1 100644 --- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysUserController.java +++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysUserController.java @@ -248,7 +248,7 @@ */ @PutMapping(value = "/users/{id}/password") @AuditLog(operation = "'重置用户密码:' + #id") - public ResultBody resetPassword(@PathVariable Long id) { + public ResultBody resetPassword(@PathVariable Long id) throws Exception{ if (checkAdmin(id)) { return ResultBody.failed(ADMIN_CHANGE_MSG); } @@ -259,7 +259,7 @@ * 用户自己修改密码 */ @PutMapping(value = "/users/password") - public ResultBody resetPassword(@RequestBody SysUser sysUser) { + public ResultBody resetPassword(@RequestBody SysUser sysUser) throws Exception { if (checkAdmin(sysUser.getId())) { return ResultBody.failed().msg(ADMIN_CHANGE_MSG); } @@ -271,7 +271,7 @@ * 用户自己修改密码-后端以外 */ @PutMapping(value = "/users/resetpassword") - public ResultBody resetClientPassword(@RequestParam Map<String, Object> params) { + public ResultBody resetClientPassword(@RequestParam Map<String, Object> params) throws Exception { Long id = MapUtils.getLong(params, "id"); String oldPassword = MapUtils.getString(params, "oldPassword"); String newPassword = MapUtils.getString(params, "newPassword"); @@ -294,7 +294,7 @@ * @return */ @PutMapping(value = "/users/updateusertel") - public ResultBody updateUserTel(@RequestParam Map<String, Object> params,@LoginUser SysUser sysUser) { + public ResultBody updateUserTel(@RequestParam Map<String, Object> params,@LoginUser SysUser sysUser) throws Exception { String oldTel = MapUtils.getString(params, "oldTel"); if (oldTel==null){ return ResultBody.failed("请输入原账号"); @@ -342,7 +342,7 @@ */ @PostMapping("/users/doctorUserReg") @AuditLog(operation = "'注册/添加用户:' + #userRegVo.mobile") - public ResultBody doctorUserReg(@RequestBody UserRegVo userRegVo,SysUser sysUser) { + public ResultBody doctorUserReg(@RequestBody UserRegVo userRegVo,SysUser sysUser) throws Exception { return appUserService.doctorUserReg(userRegVo,sysUser); } @@ -430,7 +430,7 @@ * 通过手机修改密码 */ @PutMapping(value = "/users/passwordByPhone") - public ResultBody passwordByPhone(@RequestBody Map<String, Object> map) { + public ResultBody passwordByPhone(@RequestBody Map<String, Object> map) throws Exception { return appUserService.passwordByPhone(map); } diff --git a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/module/apiUrl.js b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/module/apiUrl.js index 953b73e..29ebdc5 100644 --- a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/module/apiUrl.js +++ b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/module/apiUrl.js @@ -1,4 +1,5 @@ // var my_api_server_url = 'http://zuul.kidgrow.com/'; // var my_api_server_url = 'http://192.168.2.240:8888/'; -var my_api_server_url = 'http://127.0.0.1:8888/'; +// var my_api_server_url = 'http://127.0.0.1:8888/'; +var my_api_server_url = 'http://uat-zuul.kidgrow.cloud/'; diff --git a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/system/user.html b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/system/user.html index 410386c..1dae744 100644 --- a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/system/user.html +++ b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/system/user.html @@ -106,6 +106,7 @@ layer.closeAll('loading'); if (data.code == 0) { layer.msg(data.msg, { icon: 1, time: 500 }); + layer.alert("密码重置为:"+data.data, {icon: 1}); } else { layer.msg(data.msg, { icon: 2, time: 500 }); } diff --git a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/tpl/password.html b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/tpl/password.html index 177d65f..dc4f8f5 100644 --- a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/tpl/password.html +++ b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/tpl/password.html @@ -21,7 +21,7 @@ </div> </form> </div> - +<script type="text/javascript" src="../../module/aes.js"></script> <script> layui.use(['layer','form', 'admin','config'], function () { var form = layui.form; @@ -35,6 +35,9 @@ form.on('submit(submit-psw)', function (data) { layer.load(2); + data.field.oldPassword=getAesString(data.field.oldPassword) + data.field.newPassword=getAesString(data.field.newPassword) + data.field.rePassword=getAesString(data.field.rePassword) admin.req('api-user/users/password',JSON.stringify(data.field), function (data) { layer.closeAll('loading'); if (data.code == 0) { -- Gitblit v1.8.0