Author: kcardineaud Date: 2011-08-09 11:22:24 +0200 (Tue, 09 Aug 2011) New Revision: 208 Url: http://nuiton.org/repositories/revision/scmwebeditor/208 Log: Authentification is required only one time for each repository (only if the repository is not read-protected) Modified: trunk/src/main/java/org/nuiton/scmwebeditor/ScmSession.java trunk/src/main/java/org/nuiton/scmwebeditor/SvnConnection.java trunk/src/main/java/org/nuiton/scmwebeditor/actions/ResetAction.java trunk/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorCommitAction.java trunk/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorMainAction.java trunk/src/main/java/org/nuiton/scmwebeditor/actions/UploadAction.java trunk/src/main/webapp/WEB-INF/content/modificationViewer.jsp trunk/src/main/webapp/WEB-INF/content/uploadForm.jsp Modified: trunk/src/main/java/org/nuiton/scmwebeditor/ScmSession.java =================================================================== --- trunk/src/main/java/org/nuiton/scmwebeditor/ScmSession.java 2011-08-08 14:58:50 UTC (rev 207) +++ trunk/src/main/java/org/nuiton/scmwebeditor/ScmSession.java 2011-08-09 09:22:24 UTC (rev 208) @@ -39,5 +39,10 @@ } } + public String getUUID(String address) { + SvnConnection svnConnection = new SvnConnection(address); + return svnConnection.getUUID(); + } + } Modified: trunk/src/main/java/org/nuiton/scmwebeditor/SvnConnection.java =================================================================== --- trunk/src/main/java/org/nuiton/scmwebeditor/SvnConnection.java 2011-08-08 14:58:50 UTC (rev 207) +++ trunk/src/main/java/org/nuiton/scmwebeditor/SvnConnection.java 2011-08-09 09:22:24 UTC (rev 208) @@ -32,6 +32,8 @@ import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager; import org.tmatesoft.svn.core.internal.wc.DefaultSVNOptions; +import org.tmatesoft.svn.core.io.SVNRepository; +import org.tmatesoft.svn.core.io.SVNRepositoryFactory; import org.tmatesoft.svn.core.wc.SVNClientManager; import org.tmatesoft.svn.core.wc.SVNWCUtil; @@ -43,6 +45,10 @@ private static final Log log = LogFactory.getLog(SvnConnection.class); /** + * full svn path + */ + protected String addressSvn; + /** * svn path without fileName */ protected String svnPath; @@ -79,6 +85,8 @@ public SvnConnection ( String address) throws StringIndexOutOfBoundsException { + this.addressSvn = address; + this.svnPath = address.substring(0,address.lastIndexOf("/")); this.fileName = address.substring(address.lastIndexOf("/")+1); @@ -101,6 +109,25 @@ setAuthManager(SVNWCUtil.createDefaultAuthenticationManager(login, password)); setManager(SVNClientManager.newInstance(getSvnOption(), getAuthManager())); } + + public String getUUID() { + String repositoryUUID = null; + try { + SVNRepository repository = SVNRepositoryFactory.create(SVNURL.parseURIDecoded(addressSvn)); + ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(); + repository.setAuthenticationManager(authManager); + + repositoryUUID = repository.getRepositoryUUID(true); + } + catch (SVNException e) { + if(log.isDebugEnabled()) { + log.debug("Can't get UUID"); + } + return null; + } + + return repositoryUUID; + } public ISVNAuthenticationManager getAuthManager() { return authManager; Modified: trunk/src/main/java/org/nuiton/scmwebeditor/actions/ResetAction.java =================================================================== --- trunk/src/main/java/org/nuiton/scmwebeditor/actions/ResetAction.java 2011-08-08 14:58:50 UTC (rev 207) +++ trunk/src/main/java/org/nuiton/scmwebeditor/actions/ResetAction.java 2011-08-09 09:22:24 UTC (rev 208) @@ -59,10 +59,10 @@ public String execute() { - SvnConnection svnSess = null; + SvnConnection svnConn = null; try { - svnSess = new SvnConnection(address); + svnConn = new SvnConnection(address); } catch (StringIndexOutOfBoundsException e) { if(log.isErrorEnabled()) { log.error("Can't reach the svn repository"); @@ -71,17 +71,24 @@ return "errorPath"; } - String url = svnSess.getSvnPath(); - String file = svnSess.getFileName(); + String url = svnConn.getSvnPath(); + String file = svnConn.getFileName(); String login = this.username; String password = this.pw; + //Si le repo n'est pas protege en ecriture on recupere sont UUID + String repositoryUUID = svnConn.getUUID(); + if (repositoryUUID==null) { + repositoryUUID=address; + } + + if(login==null && password==null) { - if(getScmSession().getUsername(address)!=null && getScmSession().getPassword(address)!=null) { + if(getScmSession().getUsername(repositoryUUID)!=null && getScmSession().getPassword(repositoryUUID)!=null) { //On recupère les identifiants en session - login = getScmSession().getUsername(address); - password = getScmSession().getPassword(address); + login = getScmSession().getUsername(repositoryUUID); + password = getScmSession().getPassword(repositoryUUID); } else { login = "anonymous"; @@ -89,13 +96,12 @@ } } else { - getScmSession().addScmUser(address, login , password); + getScmSession().addScmUser(repositoryUUID, login , password); } + - SVNRepository repository = null; - try { - repository = SVNRepositoryFactory.create( SVNURL.parseURIEncoded( url ) ); + SVNRepository repository = SVNRepositoryFactory.create( SVNURL.parseURIEncoded( url ) ); ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager( login , password ); repository.setAuthenticationManager( authManager ); @@ -138,10 +144,6 @@ return "errorPath"; } - if(log.isInfoEnabled()) { - - } - return Action.SUCCESS; Modified: trunk/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorCommitAction.java =================================================================== --- trunk/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorCommitAction.java 2011-08-08 14:58:50 UTC (rev 207) +++ trunk/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorCommitAction.java 2011-08-09 09:22:24 UTC (rev 208) @@ -150,12 +150,11 @@ - SvnConnection svnSess = null; + SvnConnection svnConn = null; - log.info("ADDRESS : "+address); try { - svnSess = new SvnConnection(address); + svnConn = new SvnConnection(address); } catch (StringIndexOutOfBoundsException e) { if(log.isDebugEnabled()) { log.debug("Parameter is not valid ",e); @@ -167,11 +166,18 @@ String login = this.getUsername(); String password = this.getPw(); + //Si le repo n'est pas protege en ecriture on recupere sont UUID + String repositoryUUID = svnConn.getUUID(); + if (repositoryUUID==null) { + repositoryUUID=address; + } + + if(login==null && password==null) { - if(getScmSession().getUsername(address)!=null && getScmSession().getPassword(address)!=null) { + if(getScmSession().getUsername(repositoryUUID)!=null && getScmSession().getPassword(repositoryUUID)!=null) { //On recupère les identifiants en session - login = getScmSession().getUsername(address); - password = getScmSession().getPassword(address); + login = getScmSession().getUsername(repositoryUUID); + password = getScmSession().getPassword(repositoryUUID); } else { login = "anonymous"; @@ -179,11 +185,11 @@ } } else { - getScmSession().addScmUser(address, login , password); + getScmSession().addScmUser(repositoryUUID, login , password); } - svnSess.updateAuthentication( login, password); + svnConn.updateAuthentication( login, password); File checkoutdir = null; try { @@ -198,13 +204,13 @@ // Avant le commit, il faut checkout le repertoire try { - checkout(svnSess, checkoutdir); + checkout(svnConn, checkoutdir); } catch (SVNAuthenticationException authexep) { request.setAttribute(PARAMETER_ADDRESS, address); // if svn authentication failed user is redirected on login page if(log.isDebugEnabled()) { - log.debug("Private SCM on reading " + svnSess.getRemoteUrl()); + log.debug("Private SCM on reading " + svnConn.getRemoteUrl()); } //On supprime le repertoire temporaire delTempDirectory(checkoutdir); @@ -218,7 +224,7 @@ } - File checkOutFile = new File(checkoutdir, svnSess.getFileName()); + File checkOutFile = new File(checkoutdir, svnConn.getFileName()); lastText=newText; @@ -248,9 +254,9 @@ /* * Commit process */ - File pathToFile = new File(checkoutdir, svnSess.getFileName()); + File pathToFile = new File(checkoutdir, svnConn.getFileName()); - SVNCommitClient commitClient = new SVNCommitClient(svnSess.getManager(), svnSess.getSvnOption()); + SVNCommitClient commitClient = new SVNCommitClient(svnConn.getManager(), svnConn.getSvnOption()); try { FileUtils.writeStringToFile(pathToFile, newText); } catch (IOException e) { @@ -310,7 +316,7 @@ delTempDirectory(checkoutdir); if(log.isInfoEnabled()) { - log.info(username + " with IP "+request.getRemoteAddr()+" commit the file "+address+" with message : "+commitMessage); + log.info(login + " with IP "+request.getRemoteAddr()+" commit the file "+address+" with message : "+commitMessage); } return "success"; Modified: trunk/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorMainAction.java =================================================================== --- trunk/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorMainAction.java 2011-08-08 14:58:50 UTC (rev 207) +++ trunk/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorMainAction.java 2011-08-09 09:22:24 UTC (rev 208) @@ -231,14 +231,21 @@ String url = svnConn.getSvnPath(); String file = svnConn.getFileName(); + //Si le repo n'est pas protege en ecriture on recupere sont UUID + String repositoryUUID = svnConn.getUUID(); + if (repositoryUUID==null) { + repositoryUUID=address; + } - log.info("login : "+login+" password : "+password); - + if(log.isDebugEnabled()) { + log.debug("Login : "+login); + } + if(login==null && password==null) { - if(getScmSession().getUsername(address)!=null && getScmSession().getPassword(address)!=null) { + if(getScmSession().getUsername(repositoryUUID)!=null && getScmSession().getPassword(repositoryUUID)!=null) { //On recupère les identifiants en session - login = getScmSession().getUsername(address); - password = getScmSession().getPassword(address); + login = getScmSession().getUsername(repositoryUUID); + password = getScmSession().getPassword(repositoryUUID); } else { login = "anonymous"; @@ -246,7 +253,7 @@ } } else { - getScmSession().addScmUser(address, login , password); + getScmSession().addScmUser(repositoryUUID, login , password); } svnConn.updateAuthentication(login, password); Modified: trunk/src/main/java/org/nuiton/scmwebeditor/actions/UploadAction.java =================================================================== --- trunk/src/main/java/org/nuiton/scmwebeditor/actions/UploadAction.java 2011-08-08 14:58:50 UTC (rev 207) +++ trunk/src/main/java/org/nuiton/scmwebeditor/actions/UploadAction.java 2011-08-09 09:22:24 UTC (rev 208) @@ -106,10 +106,10 @@ } - SvnConnection svnSess = null; + SvnConnection svnConn = null; try { - svnSess = new SvnConnection(address); + svnConn = new SvnConnection(address); } catch (StringIndexOutOfBoundsException e) { if(log.isErrorEnabled()) { @@ -123,11 +123,18 @@ String login = this.getUsername(); String password = this.getPw(); + //Si le repo n'est pas protege en ecriture on recupere sont UUID + String repositoryUUID = svnConn.getUUID(); + if (repositoryUUID==null) { + repositoryUUID=address; + } + + if(login==null && password==null) { - if(getScmSession().getUsername(address)!=null && getScmSession().getPassword(address)!=null) { + if(getScmSession().getUsername(repositoryUUID)!=null && getScmSession().getPassword(repositoryUUID)!=null) { //On recupère les identifiants en session - login = getScmSession().getUsername(address); - password = getScmSession().getPassword(address); + login = getScmSession().getUsername(repositoryUUID); + password = getScmSession().getPassword(repositoryUUID); } else { login = "anonymous"; @@ -135,21 +142,21 @@ } } else { - getScmSession().addScmUser(address, login , password); + getScmSession().addScmUser(repositoryUUID, login , password); } - svnSess.updateAuthentication( login, password); + svnConn.updateAuthentication( login, password); /* * Checkout process */ - SVNUpdateClient upclient = new SVNUpdateClient(svnSess.getManager(), svnSess.getSvnOption()); + SVNUpdateClient upclient = new SVNUpdateClient(svnConn.getManager(), svnConn.getSvnOption()); File checkoutDir = null; try { checkoutDir = FileUtil.createTempDirectory("scm_", ""); - svnSess.createCheckoutdir(); + svnConn.createCheckoutdir(); } catch (IOException e1) { if(log.isErrorEnabled()) { log.error("Can't create checkoutDir",e1); @@ -164,15 +171,15 @@ try { if (log.isDebugEnabled()) { - log.debug("Do Checkout of " + svnSess.getRemoteUrl()); + log.debug("Do Checkout of " + svnConn.getRemoteUrl()); } - upclient.doCheckout(svnSess.getRemoteUrl(), checkoutDir, + upclient.doCheckout(svnConn.getRemoteUrl(), checkoutDir, SVNRevision.HEAD, SVNRevision.HEAD, SVNDepth.INFINITY, false); } catch (SVNAuthenticationException authexep) { // if svn authentication failed user is redirected on login page if(log.isDebugEnabled()) { - log.debug("Private SCM on reading " + svnSess.getRemoteUrl()); + log.debug("Private SCM on reading " + svnConn.getRemoteUrl()); } //On supprime le repertoire temporaire delTempDirectory(checkoutDir); @@ -221,7 +228,7 @@ //Commit process - SVNClientManager manager = svnSess.getManager(); + SVNClientManager manager = svnConn.getManager(); try { Modified: trunk/src/main/webapp/WEB-INF/content/modificationViewer.jsp =================================================================== --- trunk/src/main/webapp/WEB-INF/content/modificationViewer.jsp 2011-08-08 14:58:50 UTC (rev 207) +++ trunk/src/main/webapp/WEB-INF/content/modificationViewer.jsp 2011-08-09 09:22:24 UTC (rev 208) @@ -165,11 +165,19 @@ String passwordSvn = null; if(obj!=null) { ScmSession scmSession = (ScmSession) obj; + if(request.getAttribute("address")!=null) { String address = request.getAttribute("address").toString(); + address = scmSession.getUUID(address); + + if(address==null) { + address = request.getAttribute("address").toString(); + } usernameSvn = scmSession.getUsername(address); passwordSvn = scmSession.getPassword(address); + } + } %> Modified: trunk/src/main/webapp/WEB-INF/content/uploadForm.jsp =================================================================== --- trunk/src/main/webapp/WEB-INF/content/uploadForm.jsp 2011-08-08 14:58:50 UTC (rev 207) +++ trunk/src/main/webapp/WEB-INF/content/uploadForm.jsp 2011-08-09 09:22:24 UTC (rev 208) @@ -22,6 +22,11 @@ ScmSession scmSession = (ScmSession) obj; if(request.getParameter("address")!=null) { String address = request.getParameter("address").toString(); + address = scmSession.getUUID(address); + + if(address==null) { + address = request.getParameter("address").toString(); + } usernameSvn = scmSession.getUsername(address); passwordSvn = scmSession.getPassword(address); }