From 50a3d8558138eca671b913d6e071d2d7ad53b8ea Mon Sep 17 00:00:00 2001
From: rekoe
Date: Tue, 29 Mar 2016 18:07:20 +0800
Subject: [PATCH 1/7] =?UTF-8?q?=E9=82=AE=E4=BB=B6=E5=8F=91=E9=80=81-=20?=
=?UTF-8?q?=E5=AF=86=E7=A0=81=E9=87=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/rekoe/domain/ProjectConfig.java | 13 ++++
.../rekoe/module/admin/AdminProjectAct.java | 2 +-
.../rekoe/module/admin/AdminSvnUserAct.java | 65 +++++++++++++++++++
.../java/com/rekoe/service/EmailService.java | 22 ++++++-
.../com/rekoe/service/EmailServiceImpl.java | 55 ++++++++++++++--
.../rekoe/service/ProjectConfigService.java | 4 ++
.../com/rekoe/service/ProjectService.java | 42 ++++++++++++
.../com/rekoe/service/SvnUserService.java | 10 +++
.../java/com/rekoe/utils/CommonUtils.java | 23 +++++++
.../template/admin/common/rest_pwd.ftl | 6 ++
.../WEB-INF/template/admin/email/rest_pwd.ftl | 60 +++++++++++++++++
.../WEB-INF/template/admin/project/config.ftl | 2 +
.../template/admin/project_group/list.ftl | 2 +-
.../WEB-INF/template/admin/svn_user/list.ftl | 28 ++++++++
14 files changed, 324 insertions(+), 10 deletions(-)
create mode 100644 src/main/webapp/WEB-INF/template/admin/common/rest_pwd.ftl
create mode 100644 src/main/webapp/WEB-INF/template/admin/email/rest_pwd.ftl
diff --git a/src/main/java/com/rekoe/domain/ProjectConfig.java b/src/main/java/com/rekoe/domain/ProjectConfig.java
index 8ccc302..9235f63 100644
--- a/src/main/java/com/rekoe/domain/ProjectConfig.java
+++ b/src/main/java/com/rekoe/domain/ProjectConfig.java
@@ -42,6 +42,11 @@ public class ProjectConfig implements Serializable {
@Comment("默认初始化目录")
private List dirs;
+ @Column(hump = true)
+ @Comment("是否开启邮件变更提醒")
+ @Default("0")
+ private boolean emailNotify;
+
public List getDirs() {
if (dirs == null) {
this.dirs = new ArrayList<>();
@@ -49,6 +54,14 @@ public class ProjectConfig implements Serializable {
return dirs;
}
+ public boolean isEmailNotify() {
+ return emailNotify;
+ }
+
+ public void setEmailNotify(boolean emailNotify) {
+ this.emailNotify = emailNotify;
+ }
+
public void setDirs(List dirs) {
this.dirs = dirs;
}
diff --git a/src/main/java/com/rekoe/module/admin/AdminProjectAct.java b/src/main/java/com/rekoe/module/admin/AdminProjectAct.java
index 99f0f09..e251e14 100644
--- a/src/main/java/com/rekoe/module/admin/AdminProjectAct.java
+++ b/src/main/java/com/rekoe/module/admin/AdminProjectAct.java
@@ -216,7 +216,7 @@ public class AdminProjectAct extends BaseAction {
@RequiresPermissions({ "svn.project:conf" })
@PermissionTag(name = "配置管理", tag = "SVN项目管理", enable = false)
public Message conf_update(@Param("::conf.") ProjectConfig conf, HttpServletRequest req) {
- boolean isRight = projectConfigService.update(conf.getRepositoryPath(), conf.getDomainPath());
+ boolean isRight = projectConfigService.update(conf);
if (isRight) {
return Message.success("ok", req);
}
diff --git a/src/main/java/com/rekoe/module/admin/AdminSvnUserAct.java b/src/main/java/com/rekoe/module/admin/AdminSvnUserAct.java
index c125f68..6b99b74 100644
--- a/src/main/java/com/rekoe/module/admin/AdminSvnUserAct.java
+++ b/src/main/java/com/rekoe/module/admin/AdminSvnUserAct.java
@@ -1,11 +1,19 @@
package com.rekoe.module.admin;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.lang3.RandomStringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.nutz.aop.interceptor.async.Async;
+import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
+import org.nutz.lang.Strings;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
@@ -13,14 +21,22 @@ import org.nutz.mvc.annotation.Param;
import com.rekoe.annotation.PermissionTag;
import com.rekoe.common.Message;
import com.rekoe.common.page.Pagination;
+import com.rekoe.domain.Pj;
+import com.rekoe.domain.ProjectConfig;
import com.rekoe.domain.Usr;
import com.rekoe.module.BaseAction;
+import com.rekoe.service.EmailService;
+import com.rekoe.service.ProjectConfigService;
+import com.rekoe.service.SvnService;
import com.rekoe.service.SvnUserService;
+import com.rekoe.utils.EncryptUtil;
@IocBean
@At("/admin/svn/user")
public class AdminSvnUserAct extends BaseAction {
+ private static final char[] RANDOM_ARRY_CHAR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
+
@Inject
private SvnUserService svnUserService;
@@ -53,4 +69,53 @@ public class AdminSvnUserAct extends BaseAction {
}
return Message.error("error", req);
}
+
+ @Inject
+ private EmailService emailService;
+
+ @Inject
+ private ProjectConfigService projectConfigService;
+
+ @Inject
+ private SvnService svnService;
+
+ /**
+ * 重置账号密码
+ *
+ * @param usr
+ * @param req
+ * @return
+ */
+ @At
+ @Ok("json")
+ @RequiresPermissions("svn.user:add")
+ @PermissionTag(name = "SVN添加账号", tag = "SVN账号管理", enable = false)
+ public Message restpwd(@Param("usr") String usr, HttpServletRequest req) {
+ Usr user = svnUserService.fetch(Cnd.where("usr", "=", usr));
+ if (user == null) {
+ return Message.error("error.account.empty", req);
+ }
+ String code = RandomStringUtils.random(7, RANDOM_ARRY_CHAR);
+ svnUserService.update(Chain.make("psw", EncryptUtil.encrypt(code)), Cnd.where("usr", "=", usr));
+ List list = svnUserService.getPjList(usr);
+ if (list != null) {
+ for (Pj pj : list) {
+ this.svnService.exportConfig(pj);
+ }
+ }
+ ProjectConfig conf = projectConfigService.get();
+ emailNotify(user, emailService, conf, user.getEmail(), code);
+ return Message.success("ok", req);
+ }
+
+ @Async
+ private void emailNotify(Usr user, EmailService emailService, ProjectConfig conf, String to, String pwd) {
+ if (conf.isEmailNotify() && Strings.isEmail(to)) {
+ Map root = new HashMap();
+ root.put("name", user.getName());
+ root.put("pwd", pwd);
+ root.put("usr", user.getUsr());
+ emailService.restpwd(to, root);
+ }
+ }
}
diff --git a/src/main/java/com/rekoe/service/EmailService.java b/src/main/java/com/rekoe/service/EmailService.java
index a271a2c..a17aa11 100644
--- a/src/main/java/com/rekoe/service/EmailService.java
+++ b/src/main/java/com/rekoe/service/EmailService.java
@@ -1,7 +1,27 @@
package com.rekoe.service;
+import java.util.Map;
+
public interface EmailService {
- boolean send(String to, String subject, String html);
+ public boolean send(String to, String subject, String templateFile, Map root);
+
+ /**
+ * 密码重置
+ *
+ * @param to
+ * @param root
+ * @return
+ */
+ public boolean restpwd(String to, Map root);
+
+ /**
+ * 项目开启
+ *
+ * @param to
+ * @param root
+ * @return
+ */
+ public boolean projectOpen(String to, Map root);
}
diff --git a/src/main/java/com/rekoe/service/EmailServiceImpl.java b/src/main/java/com/rekoe/service/EmailServiceImpl.java
index 2470763..20615b1 100644
--- a/src/main/java/com/rekoe/service/EmailServiceImpl.java
+++ b/src/main/java/com/rekoe/service/EmailServiceImpl.java
@@ -1,31 +1,72 @@
package com.rekoe.service;
+import java.io.File;
+import java.util.Map;
+
import org.apache.commons.mail.HtmlEmail;
import org.nutz.ioc.Ioc;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.log.Log;
import org.nutz.log.Logs;
+import org.nutz.plugins.view.freemarker.FreeMarkerConfigurer;
-@IocBean(name="emailService")
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+
+@IocBean(name = "emailService")
public class EmailServiceImpl implements EmailService {
private static final Log log = Logs.get();
-
+
@Inject("refer:$ioc")
protected Ioc ioc;
- public boolean send(String to, String subject, String html) {
+ @Inject
+ private Configuration configuration;
+
+ @Inject
+ private FreeMarkerConfigurer freeMarkerConfigurer;
+
+ public boolean send(String to, String subject, String templateFile, Map root) {
try {
HtmlEmail email = ioc.get(HtmlEmail.class);
+ email.setCharset("UTF-8");
email.setSubject(subject);
- email.setHtmlMsg(html);
+ email.setHtmlMsg(processTemplateIntoString(templateFile, root));
email.addTo(to);
- email.send();
+ String res = email.send();
+ if (log.isDebugEnabled()) {
+ log.debug(res);
+ }
return true;
- } catch (Throwable e) {
- log.info("send email fail", e);
+ } catch (Exception e) {
+ log.error("send email fail", e);
return false;
}
}
+
+ private String processTemplateIntoString(String templateFile, Map root) {
+ try {
+ String path = "template" + File.separator + "admin" + File.separator + "common" + File.separator + templateFile + freeMarkerConfigurer.getSuffix();
+ Template template = configuration.getTemplate(path);
+ template.setEncoding("UTF-8");
+ java.io.StringWriter writer = new java.io.StringWriter();
+ template.process(root, writer);
+ return writer.toString();
+ } catch (Exception e) {
+ log.error(e);
+ }
+ return "";
+ }
+
+ @Override
+ public boolean restpwd(String to, Map root) {
+ return send(to, "svn-密码重置邮件<系统邮件,请勿回复>", "rest_pwd", root);
+ }
+
+ @Override
+ public boolean projectOpen(String to, Map root) {
+ return send(to, "svn-项目开启邮件<系统邮件,请勿回复>", "project_open", root);
+ }
}
diff --git a/src/main/java/com/rekoe/service/ProjectConfigService.java b/src/main/java/com/rekoe/service/ProjectConfigService.java
index fceceaf..76487ee 100644
--- a/src/main/java/com/rekoe/service/ProjectConfigService.java
+++ b/src/main/java/com/rekoe/service/ProjectConfigService.java
@@ -35,6 +35,10 @@ public class ProjectConfigService extends BaseService {
dao().update(conf);
return true;
}
+ public boolean update(ProjectConfig conf) {
+ dao().update(conf);
+ return true;
+ }
public void init() {
get();
diff --git a/src/main/java/com/rekoe/service/ProjectService.java b/src/main/java/com/rekoe/service/ProjectService.java
index a2f4814..51a7639 100644
--- a/src/main/java/com/rekoe/service/ProjectService.java
+++ b/src/main/java/com/rekoe/service/ProjectService.java
@@ -1,11 +1,19 @@
package com.rekoe.service;
import java.io.File;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
+import org.nutz.dao.Sqls;
+import org.nutz.dao.sql.Sql;
+import org.nutz.dao.sql.SqlCallback;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
@@ -166,4 +174,38 @@ public class ProjectService extends BaseService {
public void update(Pj pj) {
dao().update(pj);
}
+
+ /**
+ * @param usr
+ * 用户
+ * @return 用户有权限的项目列表(用户是否是这个项目的管理员)
+ */
+ public List getList(String usr) {
+ Sql sql = Sqls.create("select p.pj,p.path,p.url,p.des,p.type,pm.pj manager from ( " + " select distinct a.pj,a.path,a.url,a.des,a.type from pj a where " + " exists (select b.usr from pj_gr_usr b where a.pj=b.pj and b.usr=@usr) " + " or exists(select c.usr from pj_usr_auth c where a.pj=c.pj and c.usr=@usr) " + " ) p " + " left join ( " + " select distinct a.pj from pj a where " + " exists (select b.usr from pj_gr_usr b where a.pj=b.pj and b.usr=@usr and b.gr like @like)" + " ) pm on p.pj=pm.pj");
+ final List list = new ArrayList();
+ sql.setCallback(new SqlCallback() {
+
+ @Override
+ public Object invoke(Connection conn, ResultSet rs, Sql sql) throws SQLException {
+ while (rs.next()) {
+ Pj pj = readPj(rs);
+ String manager = rs.getString("manager");// 是否是管理员组的用户
+ pj.setManager(StringUtils.isNotBlank(manager));
+ list.add(pj);
+ }
+ return list;
+ }
+ });
+ sql.setParam("usr", usr).setParam("like", "%" + Constants.GROUP_MANAGER);
+ dao().execute(sql);
+ return list;
+ }
+
+ public Pj readPj(ResultSet rs) throws SQLException {
+ Pj result = new Pj();
+ result.setPj(rs.getString("pj"));
+ result.setDes(rs.getString("des"));
+ result.setType(rs.getString("type"));
+ return result;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/rekoe/service/SvnUserService.java b/src/main/java/com/rekoe/service/SvnUserService.java
index 9496408..543da40 100644
--- a/src/main/java/com/rekoe/service/SvnUserService.java
+++ b/src/main/java/com/rekoe/service/SvnUserService.java
@@ -13,9 +13,11 @@ import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.sql.SqlCallback;
+import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
+import com.rekoe.domain.Pj;
import com.rekoe.domain.Usr;
/**
@@ -91,4 +93,12 @@ public class SvnUserService extends BaseService {
result.setRole(rs.getString("role"));
return result;
}
+
+ @Inject
+ private ProjectService projectService;
+
+ public List getPjList(String usr) {
+ List list = projectService.getList(usr);// 用户可以看到的所有项目
+ return list;
+ }
}
diff --git a/src/main/java/com/rekoe/utils/CommonUtils.java b/src/main/java/com/rekoe/utils/CommonUtils.java
index bf93aae..798ccc3 100644
--- a/src/main/java/com/rekoe/utils/CommonUtils.java
+++ b/src/main/java/com/rekoe/utils/CommonUtils.java
@@ -1,5 +1,8 @@
package com.rekoe.utils;
+import java.io.File;
+import java.net.URL;
+import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -11,12 +14,15 @@ import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.nutz.lang.util.NutMap;
+import org.nutz.log.Log;
+import org.nutz.log.Logs;
/**
* 工具类
*/
public class CommonUtils {
+ private final static Log log = Logs.get();
/**
* 正则表达式:验证用户名
*/
@@ -153,4 +159,21 @@ public class CommonUtils {
}
return paramsMap;
}
+
+ public static String getCurrentPath() {
+ URL url = CommonUtils.class.getProtectionDomain().getCodeSource().getLocation();
+ String filePath = null;
+ try {
+ filePath = URLDecoder.decode(url.getPath(), "utf-8");
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ }
+ if (filePath.endsWith(".jar")) {
+ filePath = filePath.substring(0, filePath.lastIndexOf("/") + 1);
+ }
+ File file = new File(filePath);
+ filePath = file.getAbsolutePath();
+ return filePath;
+ }
+
}
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/template/admin/common/rest_pwd.ftl b/src/main/webapp/WEB-INF/template/admin/common/rest_pwd.ftl
new file mode 100644
index 0000000..4d56da0
--- /dev/null
+++ b/src/main/webapp/WEB-INF/template/admin/common/rest_pwd.ftl
@@ -0,0 +1,6 @@
+${name}: 您好
+
+ 账号:${usr}
+ 密码:${pwd}
+ 密码信息请妥善保管。系统邮件请勿回复
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/template/admin/email/rest_pwd.ftl b/src/main/webapp/WEB-INF/template/admin/email/rest_pwd.ftl
new file mode 100644
index 0000000..ed5a8ab
--- /dev/null
+++ b/src/main/webapp/WEB-INF/template/admin/email/rest_pwd.ftl
@@ -0,0 +1,60 @@
+
+
+${name}: 您好
+
+ 账号:${usr}
+ 密码:${pwd}
+ 密码信息请妥善保管。系统邮件请勿回复
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/template/admin/project/config.ftl b/src/main/webapp/WEB-INF/template/admin/project/config.ftl
index 2434107..ba6812f 100644
--- a/src/main/webapp/WEB-INF/template/admin/project/config.ftl
+++ b/src/main/webapp/WEB-INF/template/admin/project/config.ftl
@@ -11,10 +11,12 @@
+<#assign isSend=obj.emailNotify>
<@p.form id="jvForm" action="update" labelWidth="12" onsubmit="return false;">
<@p.hidden id="conf.id" name="conf.id" value='${obj.id}' />
<@p.text width="30" label="仓库路径" id="conf.repositoryPath" name="conf.repositoryPath" value="${obj.repositoryPath}" maxlength="100" class="required" required="true"/><@p.tr/>
<@p.text width="30" label="访问url" id="conf.domainPath" name="conf.domainPath" value="${obj.domainPath}" maxlength="100" class="required" required="true"/><@p.tr/>
+<@p.radio width="50" colspan="1" label="是否发送重置密码邮件" id="conf.emailNotify" name="conf.emailNotify" value=isSend list={"true":"global.true","false":"global.false"} required="true"/><@p.tr/>
<@p.td label="默认开启的文件夹" colspan="6">
diff --git a/src/main/webapp/WEB-INF/template/admin/project_group/list.ftl b/src/main/webapp/WEB-INF/template/admin/project_group/list.ftl
index 0a3fb9d..e99becb 100644
--- a/src/main/webapp/WEB-INF/template/admin/project_group/list.ftl
+++ b/src/main/webapp/WEB-INF/template/admin/project_group/list.ftl
@@ -25,7 +25,7 @@ function deleted(pj,gr){
$.message(message);
if (message.type == "success")
{
- window.location.href = back;
+ window.location.href = list.rk;
}
}
});
diff --git a/src/main/webapp/WEB-INF/template/admin/svn_user/list.ftl b/src/main/webapp/WEB-INF/template/admin/svn_user/list.ftl
index f95522e..69b5f4d 100644
--- a/src/main/webapp/WEB-INF/template/admin/svn_user/list.ftl
+++ b/src/main/webapp/WEB-INF/template/admin/svn_user/list.ftl
@@ -8,6 +8,31 @@
function getTableForm() {
return document.getElementById('tableForm');
}
+function rest(usr){
+ $.dialog({
+ type: "warn",
+ content: '确定要充值用户密码?',
+ ok: 'Ok',
+ cancel: 'Cancel',
+ onOk: function() {
+ $.ajax({
+ url: "restpwd.rk",
+ type: "POST",
+ data: {"usr":usr},
+ dataType: "json",
+ cache: false,
+ success: function(message) {
+ $.message(message);
+ if (message.type == "success")
+ {
+ window.location.href = list.rk;
+ }
+ }
+ });
+ }
+ });
+ return false;
+}
@@ -30,6 +55,9 @@ function getTableForm() {
<@p.column title="编辑" align="center">
编辑<#rt/>
@p.column><#t/>
+ <@p.column title="密码重置" align="center">
+ 密码重置<#rt/>
+ @p.column><#t/>
@shiro.hasPermission>
@p.table>
@p.form>
From c3a061b0203e23b2a342069e34b04a479efc1a78 Mon Sep 17 00:00:00 2001
From: rekoe
Date: Tue, 29 Mar 2016 19:00:50 +0800
Subject: [PATCH 2/7] =?UTF-8?q?=E9=87=8D=E7=BD=AE=E8=B4=A6=E5=8F=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../rekoe/module/admin/AdminSvnUserAct.java | 21 +++++++++++++++++--
.../com/rekoe/service/ProjectService.java | 8 +++++--
.../com/rekoe/service/RepositoryService.java | 1 -
3 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/src/main/java/com/rekoe/module/admin/AdminSvnUserAct.java b/src/main/java/com/rekoe/module/admin/AdminSvnUserAct.java
index 6b99b74..b2a9964 100644
--- a/src/main/java/com/rekoe/module/admin/AdminSvnUserAct.java
+++ b/src/main/java/com/rekoe/module/admin/AdminSvnUserAct.java
@@ -14,7 +14,10 @@ import org.nutz.dao.Cnd;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings;
+import org.nutz.log.Log;
+import org.nutz.log.Logs;
import org.nutz.mvc.annotation.At;
+import org.nutz.mvc.annotation.Attr;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
@@ -27,6 +30,7 @@ import com.rekoe.domain.Usr;
import com.rekoe.module.BaseAction;
import com.rekoe.service.EmailService;
import com.rekoe.service.ProjectConfigService;
+import com.rekoe.service.ProjectService;
import com.rekoe.service.SvnService;
import com.rekoe.service.SvnUserService;
import com.rekoe.utils.EncryptUtil;
@@ -35,6 +39,8 @@ import com.rekoe.utils.EncryptUtil;
@At("/admin/svn/user")
public class AdminSvnUserAct extends BaseAction {
+ private final static Log log = Logs.get();
+
private static final char[] RANDOM_ARRY_CHAR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
@Inject
@@ -79,6 +85,9 @@ public class AdminSvnUserAct extends BaseAction {
@Inject
private SvnService svnService;
+ @Inject
+ private ProjectService projectService;
+
/**
* 重置账号密码
*
@@ -90,17 +99,25 @@ public class AdminSvnUserAct extends BaseAction {
@Ok("json")
@RequiresPermissions("svn.user:add")
@PermissionTag(name = "SVN添加账号", tag = "SVN账号管理", enable = false)
- public Message restpwd(@Param("usr") String usr, HttpServletRequest req) {
+ public Message restpwd(@Param("usr") String usr, @Attr("usr") Usr manager, HttpServletRequest req) {
Usr user = svnUserService.fetch(Cnd.where("usr", "=", usr));
if (user == null) {
return Message.error("error.account.empty", req);
}
String code = RandomStringUtils.random(7, RANDOM_ARRY_CHAR);
svnUserService.update(Chain.make("psw", EncryptUtil.encrypt(code)), Cnd.where("usr", "=", usr));
+ if (usr.equals(manager.getUsr())) {
+ req.getSession().setAttribute("usr", svnUserService.fetch(Cnd.where("usr", "=", usr)));
+ }
List list = svnUserService.getPjList(usr);
if (list != null) {
for (Pj pj : list) {
- this.svnService.exportConfig(pj);
+ try {
+ this.svnService.exportConfig(pj);
+ } catch (Exception e) {
+ projectService.deleteDB(pj.getPj());
+ log.errorf("project %s ,error %s", pj.getPj(), e.getMessage());
+ }
}
}
ProjectConfig conf = projectConfigService.get();
diff --git a/src/main/java/com/rekoe/service/ProjectService.java b/src/main/java/com/rekoe/service/ProjectService.java
index 51a7639..4868a97 100644
--- a/src/main/java/com/rekoe/service/ProjectService.java
+++ b/src/main/java/com/rekoe/service/ProjectService.java
@@ -163,11 +163,15 @@ public class ProjectService extends BaseService {
@Aop(TransAop.READ_COMMITTED)
public void delete(String pj) {
+ deleteDB(pj);
+ svnService.exportConfig(pj);
+ }
+
+ public void deleteDB(String pj) {
projectAuthService.deletePj(pj);
projectGroupUsrService.deletePj(pj);
projectGroupService.deletePj(pj);
projectUserService.deletePj(pj);
- svnService.exportConfig(pj);
dao().clear(getEntityClass(), Cnd.where("pj", "=", pj));
}
@@ -181,7 +185,7 @@ public class ProjectService extends BaseService {
* @return 用户有权限的项目列表(用户是否是这个项目的管理员)
*/
public List getList(String usr) {
- Sql sql = Sqls.create("select p.pj,p.path,p.url,p.des,p.type,pm.pj manager from ( " + " select distinct a.pj,a.path,a.url,a.des,a.type from pj a where " + " exists (select b.usr from pj_gr_usr b where a.pj=b.pj and b.usr=@usr) " + " or exists(select c.usr from pj_usr_auth c where a.pj=c.pj and c.usr=@usr) " + " ) p " + " left join ( " + " select distinct a.pj from pj a where " + " exists (select b.usr from pj_gr_usr b where a.pj=b.pj and b.usr=@usr and b.gr like @like)" + " ) pm on p.pj=pm.pj");
+ Sql sql = Sqls.create("select p.pj,p.des,p.type,pm.pj manager from ( " + " select distinct a.pj,a.des,a.type from pj a where " + " exists (select b.usr from pj_gr_usr b where a.pj=b.pj and b.usr=@usr) " + " or exists(select c.usr from pj_usr_auth c where a.pj=c.pj and c.usr=@usr) " + " ) p " + " left join ( " + " select distinct a.pj from pj a where " + " exists (select b.usr from pj_gr_usr b where a.pj=b.pj and b.usr=@usr and b.gr like @like)" + " ) pm on p.pj=pm.pj");
final List list = new ArrayList();
sql.setCallback(new SqlCallback() {
diff --git a/src/main/java/com/rekoe/service/RepositoryService.java b/src/main/java/com/rekoe/service/RepositoryService.java
index f9e4885..69e25ac 100644
--- a/src/main/java/com/rekoe/service/RepositoryService.java
+++ b/src/main/java/com/rekoe/service/RepositoryService.java
@@ -94,7 +94,6 @@ public class RepositoryService {
result = StringUtils.replace(result, "\b", " ");
result = StringUtils.replace(result, "<", " ");// eg.
result = StringUtils.replace(result, "(", " ");// eg. ()
-
result = result.trim();
int blank = result.indexOf(" ");
if (blank != -1) {
From 177774feec0a3924417037e6e59ff697452a505b Mon Sep 17 00:00:00 2001
From: rekoe
Date: Tue, 29 Mar 2016 19:01:43 +0800
Subject: [PATCH 3/7] fix ver
---
pom.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/pom.xml b/pom.xml
index 18be956..2c0f2bb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,7 +52,7 @@
org.nutz
nutz
- 1.r.55
+ 1.r.54.r5
org.nutz
@@ -116,9 +116,9 @@
20090211
- commons-email
+ org.apache.commons
commons-email
- 1.1
+ 1.4
org.nutz
From b173f6379c5396ec15f0eba1ebf3e3044f5d02d2 Mon Sep 17 00:00:00 2001
From: rekoe
Date: Tue, 29 Mar 2016 20:52:57 +0800
Subject: [PATCH 4/7] fix
---
README.md | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 400a97c..c436b81 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,7 @@
对了,数据库还没完,添上关联关系
完手动执行alter
- ……
+```
alter table pj_gr add constraint FK_Relationship_2 foreign key (pj) references pj (pj) on delete restrict on update restrict;
alter table pj_gr_auth add constraint FK_Reference_6 foreign key (pj, gr) references pj_gr (pj, gr) on delete >restrict on update restrict;
alter table pj_gr_usr add constraint FK_Reference_10 foreign key (pj, gr) references pj_gr (pj, gr) on delete >restrict on update restrict;
@@ -40,7 +40,8 @@
alter table pj_usr add constraint FK_Reference_7 foreign key (usr) references usr (usr) on delete restrict on update restrict;
alter table pj_usr_auth add constraint FK_Reference_11 foreign key (pj) references pj (pj) on delete restrict on update restrict;
alter table pj_usr_auth add constraint FK_Reference_8 foreign key (usr) references usr (usr) on delete restrict on update restrict;
- ……
+
+```
## 3、附录
Centos安装apache+svn结合的SVN服务器请参考[Centos安装apache+svn结合的SVN服务器](fl.md)
From f963a75393dd7a7aacb0f74d8477e6f92ff74723 Mon Sep 17 00:00:00 2001
From: rekoe
Date: Wed, 30 Mar 2016 10:38:51 +0800
Subject: [PATCH 5/7] add
---
.../webapp/WEB-INF/template/admin/common/project_open.ftl | 8 ++++++++
1 file changed, 8 insertions(+)
create mode 100644 src/main/webapp/WEB-INF/template/admin/common/project_open.ftl
diff --git a/src/main/webapp/WEB-INF/template/admin/common/project_open.ftl b/src/main/webapp/WEB-INF/template/admin/common/project_open.ftl
new file mode 100644
index 0000000..0d6cd36
--- /dev/null
+++ b/src/main/webapp/WEB-INF/template/admin/common/project_open.ftl
@@ -0,0 +1,8 @@
+${name}: 您好
+
+ 您在项目《${project}》申请的svn信息如下
+ 地址:${url}
+ 账号:${usr}
+ 密码:${pwd }
+ 密码信息请妥善保管。系统邮件请勿回复
+
\ No newline at end of file
From 053ceaadeaa8ff57988ef455207b15e7361f799b Mon Sep 17 00:00:00 2001
From: rekoe
Date: Thu, 31 Mar 2016 14:36:21 +0800
Subject: [PATCH 6/7] fix
---
pom.xml | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index 2c0f2bb..e6e7659 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,6 +11,13 @@
UTF-8
+
+ ossrh
+ https://oss.sonatype.org/content/repositories/snapshots
+
+ true
+
+
@@ -32,7 +39,7 @@
com.alibaba
druid
- 1.0.17
+ 1.0.18
jconsole
@@ -52,7 +59,7 @@
org.nutz
nutz
- 1.r.54.r5
+ 1.r.56-SNAPSHOT
org.nutz
From 8ce1930813956133fc6ce7af16b76da3754f437e Mon Sep 17 00:00:00 2001
From: rekoe
Date: Thu, 31 Mar 2016 15:12:57 +0800
Subject: [PATCH 7/7] fix
---
pom.xml | 10 +++++-----
src/main/resources/conf.properties | 14 +++++++-------
2 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/pom.xml b/pom.xml
index e6e7659..b72be24 100644
--- a/pom.xml
+++ b/pom.xml
@@ -202,16 +202,16 @@
src/main/java
+ rk_svnadmin
src/main/resources
- com/rekoe/mvc/*.*
+ com/shanggame/mvc/*.*
false
- rk_svnadmin
org.apache.maven.plugins
@@ -263,9 +263,9 @@
WEB-INF/classes
msg/**/*
- log4j.properties
- oauth_consumer.properties
- quartz.properties
+ ioc/**/*
+ *.properties
+ init_system_h2.sql
shiro.ini
ehcache.xml
diff --git a/src/main/resources/conf.properties b/src/main/resources/conf.properties
index 83bc27a..1916c06 100644
--- a/src/main/resources/conf.properties
+++ b/src/main/resources/conf.properties
@@ -1,11 +1,11 @@
-db.url=jdbc:mysql://127.0.0.1:3306/rk_svnadmin?useUnicode=true&characterEncoding=utf-8
+db.url=jdbc:mysql://192.168.1.223:3306/rk_svnadmin?useUnicode=true&characterEncoding=utf-8
db.username=root
-db.password=
+db.password=root
db.maxActive=50
-mail.HostName=smtp.exmail.qq.com
+
+mail.HostName=smtp.mxhichina.com
mail.SmtpPort=465
-mail.UserName=nutzbook@wendal.net
-mail.Password=book@2015
+mail.UserName=webmaster@rekoe.com
+mail.Password=Rk@5382211
mail.SSLOnConnect=true
-mail.From=nutzbook@wendal.net
-mail.to=koukou890@qq.com
\ No newline at end of file
+mail.From=webmaster@rekoe.com
\ No newline at end of file