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/> <#t/> + <@p.column title="密码重置" align="center"> + 密码重置<#rt/> + <#t/> 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