diff --git a/pom.xml b/pom.xml
index 0ff3c26906..23ea8daf86 100644
--- a/pom.xml
+++ b/pom.xml
@@ -274,7 +274,7 @@
false
true
- release,APIviz,doc
+ release,APIviz,doc,nativepkg
@{project.version}
true
@@ -459,8 +459,8 @@
1.2.3
- 3.3.2.201404171909-r
- 1.8.5-scm1
+ 3.4.1.201406201815-r
+ 1.8.5-scm2
16.0.1
diff --git a/scm-clients/scm-cli-client/pom.xml b/scm-clients/scm-cli-client/pom.xml
index 44cb8e0d20..50b3c03c9d 100644
--- a/scm-clients/scm-cli-client/pom.xml
+++ b/scm-clients/scm-cli-client/pom.xml
@@ -1,54 +1,54 @@
-
+
4.0.0
-
+
scm-clients
sonia.scm.clients
2.0.0-SNAPSHOT
-
+
sonia.scm.clients
scm-cli-client
2.0.0-SNAPSHOT
scm-cli-client
-
+
-
+
javax.servlet
servlet-api
${servlet.version}
-
-
+
+
javax.transaction
jta
1.1
provided
-
+
sonia.scm.clients
scm-client-impl
2.0.0-SNAPSHOT
-
+
args4j
args4j
- 2.0.26
+ 2.0.28
-
+
ch.qos.logback
logback-classic
${logback.version}
-
+
org.freemarker
freemarker
@@ -56,10 +56,10 @@
-
+
-
+
com.mycila.maven-license-plugin
maven-license-plugin
@@ -78,7 +78,7 @@
true
-
+
org.apache.maven.plugins
maven-assembly-plugin
@@ -102,18 +102,18 @@
-
+
-
+
-
+
it
-
+
-
+
org.apache.maven.plugins
maven-dependency-plugin
@@ -139,7 +139,7 @@
-
+
org.apache.maven.plugins
maven-failsafe-plugin
@@ -164,7 +164,7 @@
-
+
org.mortbay.jetty
jetty-maven-plugin
@@ -216,22 +216,22 @@
-
+
-
+
-
-
+
+
-
+
maven.jenkins-ci.org
jenkins release repository
http://maven.jenkins-ci.org/content/repositories/releases/
-
+
-
+
diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/EncryptSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/EncryptSubCommand.java
new file mode 100644
index 0000000000..af76698062
--- /dev/null
+++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/EncryptSubCommand.java
@@ -0,0 +1,98 @@
+/**
+ * Copyright (c) 2010, Sebastian Sdorra All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer. 2. Redistributions in
+ * binary form must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution. 3. Neither the name of SCM-Manager;
+ * nor the names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * http://bitbucket.org/sdorra/scm-manager
+ *
+ */
+
+
+
+package sonia.scm.cli.cmd;
+
+//~--- non-JDK imports --------------------------------------------------------
+
+import org.kohsuke.args4j.Argument;
+
+/**
+ *
+ * @author Sebastian Sdorra
+ * @since 1.41
+ */
+@Command(
+ name = "encrypt",
+ usage = "usageEncrypt",
+ group = "security"
+)
+public class EncryptSubCommand extends SubCommand
+{
+
+ /**
+ * Method description
+ *
+ *
+ * @return
+ */
+ public String getValue()
+ {
+ return value;
+ }
+
+ //~--- set methods ----------------------------------------------------------
+
+ /**
+ * Method description
+ *
+ *
+ * @param value
+ */
+ public void setValue(String value)
+ {
+ this.value = value;
+ }
+
+ //~--- methods --------------------------------------------------------------
+
+ /**
+ * Method description
+ *
+ */
+ @Override
+ protected void run()
+ {
+ String enc = createSession().getSecurityHandler().encrypt(value);
+
+ output.println(enc);
+ }
+
+ //~--- fields ---------------------------------------------------------------
+
+ /** Field description */
+ @Argument(
+ usage = "optionEncryptValue",
+ metaVar = "value",
+ required = true
+ )
+ private String value;
+}
diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GenerateKeySubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GenerateKeySubCommand.java
new file mode 100644
index 0000000000..b8658391b0
--- /dev/null
+++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GenerateKeySubCommand.java
@@ -0,0 +1,55 @@
+/**
+ * Copyright (c) 2010, Sebastian Sdorra All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer. 2. Redistributions in
+ * binary form must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution. 3. Neither the name of SCM-Manager;
+ * nor the names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * http://bitbucket.org/sdorra/scm-manager
+ *
+ */
+
+
+
+package sonia.scm.cli.cmd;
+
+/**
+ *
+ * @author Sebastian Sdorra
+ */
+@Command(
+ name = "generate-key",
+ usage = "usageGenerateKey",
+ group = "security"
+)
+public class GenerateKeySubCommand extends SubCommand
+{
+
+ /**
+ * Method description
+ *
+ */
+ @Override
+ protected void run()
+ {
+ output.println(createSession().getSecurityHandler().generateKey());
+ }
+}
diff --git a/scm-clients/scm-cli-client/src/main/resources/META-INF/services/sonia.scm.cli.cmd.SubCommand b/scm-clients/scm-cli-client/src/main/resources/META-INF/services/sonia.scm.cli.cmd.SubCommand
index 73e50f8940..b4d344adae 100644
--- a/scm-clients/scm-cli-client/src/main/resources/META-INF/services/sonia.scm.cli.cmd.SubCommand
+++ b/scm-clients/scm-cli-client/src/main/resources/META-INF/services/sonia.scm.cli.cmd.SubCommand
@@ -60,6 +60,10 @@ sonia.scm.cli.cmd.ModifyGroupSubCommand
sonia.scm.cli.cmd.AddMembersSubCommand
sonia.scm.cli.cmd.DeleteMembersSubCommand
+# security
+sonia.scm.cli.cmd.EncryptSubCommand
+sonia.scm.cli.cmd.GenerateKeySubCommand
+
# misc
sonia.scm.cli.cmd.VersionSubCommand
sonia.scm.cli.cmd.ServerVersionSubCommand
diff --git a/scm-clients/scm-cli-client/src/main/resources/sonia/resources/i18n.properties b/scm-clients/scm-cli-client/src/main/resources/sonia/resources/i18n.properties
index d5c707f090..69d88b2cfe 100644
--- a/scm-clients/scm-cli-client/src/main/resources/sonia/resources/i18n.properties
+++ b/scm-clients/scm-cli-client/src/main/resources/sonia/resources/i18n.properties
@@ -68,6 +68,8 @@ optionGroupDescription = Description
optionGroupType = Type
optionGroupMember = Member
+optionEncryptValue = value to encrypt
+
repositoryNotFound = The repository is not available
userNotFound = The user could not be found
groupNotFoun = The group could not be found
@@ -85,6 +87,7 @@ misc = Miscellaneous
repository = Repository
group = Group
user = User
+security = Security
level = Logging-Level
boolean = true or false
@@ -114,4 +117,7 @@ usageModifyUser = Modify a user
usageModifyRepository = Modify a repository
usageStoreConfig = Stores the current configuration
usageVersion = Show the version of scm-cli-client
-usageServerVersion = Show the version of the scm-manager
\ No newline at end of file
+usageServerVersion = Show the version of the scm-manager
+
+usageEncrypt = Encrypts the given value
+usageGenerateKey = Generates a unique key
\ No newline at end of file
diff --git a/scm-clients/scm-client-api/src/main/java/sonia/scm/client/ScmClientSession.java b/scm-clients/scm-client-api/src/main/java/sonia/scm/client/ScmClientSession.java
index 7e39258390..7f58a94852 100644
--- a/scm-clients/scm-client-api/src/main/java/sonia/scm/client/ScmClientSession.java
+++ b/scm-clients/scm-client-api/src/main/java/sonia/scm/client/ScmClientSession.java
@@ -73,6 +73,14 @@ public interface ScmClientSession extends Closeable
*/
public RepositoryClientHandler getRepositoryHandler();
+ /**
+ * Method description
+ *
+ *
+ * @return
+ */
+ public SecurityClientHandler getSecurityHandler();
+
/**
* Method description
*
diff --git a/scm-clients/scm-client-api/src/main/java/sonia/scm/client/SecurityClientHandler.java b/scm-clients/scm-client-api/src/main/java/sonia/scm/client/SecurityClientHandler.java
new file mode 100644
index 0000000000..a0131a7f1c
--- /dev/null
+++ b/scm-clients/scm-client-api/src/main/java/sonia/scm/client/SecurityClientHandler.java
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2010, Sebastian Sdorra All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer. 2. Redistributions in
+ * binary form must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution. 3. Neither the name of SCM-Manager;
+ * nor the names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * http://bitbucket.org/sdorra/scm-manager
+ *
+ */
+
+
+
+package sonia.scm.client;
+
+/**
+ *
+ * @author Sebastian Sdorra
+ * @since 1.41
+ */
+public interface SecurityClientHandler
+{
+
+ /**
+ * Method description
+ *
+ *
+ * @param value
+ *
+ * @return
+ */
+ public String encrypt(String value);
+
+ /**
+ * Method description
+ *
+ *
+ * @return
+ */
+ public String generateKey();
+}
diff --git a/scm-clients/scm-client-impl/pom.xml b/scm-clients/scm-client-impl/pom.xml
index e9c7551c7d..8bfe7af4a9 100644
--- a/scm-clients/scm-client-impl/pom.xml
+++ b/scm-clients/scm-client-impl/pom.xml
@@ -45,30 +45,6 @@
${jersey.version}
-
- sonia.net.ahc
- jersey-ahc-client
- 1.0.2.1
-
-
- jaxb-api
- javax.xml.bind
-
-
- jaxb-impl
- com.sun.xml.bind
-
-
- stax-api
- stax
-
-
- jersey-json
- com.sun.jersey
-
-
-
-
@@ -101,7 +77,13 @@
Sonatype
Sonatype Release
- http://oss.sonatype.org/content/repositories/releases
+ http://oss.sonatype.org/content/repositories/releases
+
+
+
+ maven.scm-manager.org
+ scm-manager release repository
+ http://maven.scm-manager.org/nexus/content/groups/public
diff --git a/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseyClientProvider.java b/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseyClientProvider.java
index 8c38f83eb1..48111de0d8 100644
--- a/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseyClientProvider.java
+++ b/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseyClientProvider.java
@@ -38,9 +38,6 @@ package sonia.scm.client;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.sonatype.spice.jersey.client.ahc.AhcHttpClient;
-import org.sonatype.spice.jersey.client.ahc.config.DefaultAhcConfig;
-
import sonia.scm.ScmState;
import sonia.scm.url.UrlProvider;
import sonia.scm.url.UrlProviderFactory;
@@ -49,11 +46,20 @@ import sonia.scm.util.Util;
//~--- JDK imports ------------------------------------------------------------
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientHandlerException;
+import com.sun.jersey.api.client.ClientRequest;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.filter.ClientFilter;
import com.sun.jersey.core.util.MultivaluedMapImpl;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.NewCookie;
/**
*
@@ -100,7 +106,7 @@ public class JerseyClientProvider implements ScmClientProvider
*/
@Override
public JerseyClientSession createSession(String url, String username,
- String password)
+ String password)
{
AssertUtil.assertIsNotEmpty(url);
@@ -111,59 +117,24 @@ public class JerseyClientProvider implements ScmClientProvider
user = username;
}
- if (logger.isInfoEnabled())
- {
- logger.info("create new session for {} with username {}", url, user);
- }
+ logger.info("create new session for {} with username {}", url, user);
UrlProvider urlProvider = UrlProviderFactory.createUrlProvider(url,
UrlProviderFactory.TYPE_RESTAPI_XML);
- DefaultAhcConfig config = new DefaultAhcConfig();
- AhcHttpClient client = AhcHttpClient.create(config);
- ClientResponse response = null;
+
+ Client client = Client.create();
+
+ client.addFilter(new CookieClientFilter());
+
+ ClientResponse response;
if (Util.isNotEmpty(username) && Util.isNotEmpty(password))
{
- String authUrl = urlProvider.getAuthenticationUrl();
-
- if (logger.isDebugEnabled())
- {
- logger.debug("try login at {}", authUrl);
- }
-
- WebResource resource = ClientUtil.createResource(client, authUrl,
- enableLogging);
-
- if (logger.isDebugEnabled())
- {
- logger.debug("try login for {}", username);
- }
-
- MultivaluedMap formData = new MultivaluedMapImpl();
-
- formData.add("username", username);
- formData.add("password", password);
- response = resource.type("application/x-www-form-urlencoded").post(
- ClientResponse.class, formData);
+ response = login(urlProvider, client, username, password);
}
else
{
- String stateUrl = urlProvider.getStateUrl();
-
- if (logger.isDebugEnabled())
- {
- logger.debug("retrive state from {}", stateUrl);
- }
-
- WebResource resource = ClientUtil.createResource(client, stateUrl,
- enableLogging);
-
- if (logger.isDebugEnabled())
- {
- logger.debug("try anonymous login");
- }
-
- response = resource.get(ClientResponse.class);
+ response = state(urlProvider, client);
}
ClientUtil.checkResponse(response);
@@ -172,10 +143,7 @@ public class JerseyClientProvider implements ScmClientProvider
if (!state.isSuccess())
{
- if (logger.isWarnEnabled())
- {
- logger.warn("server returned state failed");
- }
+ logger.warn("server returned state failed");
throw new ScmClientException("create ScmClientSession failed");
}
@@ -187,6 +155,122 @@ public class JerseyClientProvider implements ScmClientProvider
return new JerseyClientSession(client, urlProvider, state);
}
+ /**
+ * Method description
+ *
+ *
+ * @param urlProvider
+ * @param client
+ * @param username
+ * @param password
+ *
+ * @return
+ */
+ private ClientResponse login(UrlProvider urlProvider, Client client,
+ String username, String password)
+ {
+ String authUrl = urlProvider.getAuthenticationUrl();
+
+ if (logger.isDebugEnabled())
+ {
+ logger.debug("try login at {}", authUrl);
+ }
+
+ WebResource resource = ClientUtil.createResource(client, authUrl,
+ enableLogging);
+
+ if (logger.isDebugEnabled())
+ {
+ logger.debug("try login for {}", username);
+ }
+
+ MultivaluedMap formData = new MultivaluedMapImpl();
+
+ formData.add("username", username);
+ formData.add("password", password);
+
+ return resource.type("application/x-www-form-urlencoded").post(
+ ClientResponse.class, formData);
+ }
+
+ /**
+ * Method description
+ *
+ *
+ * @param urlProvider
+ * @param client
+ *
+ * @return
+ */
+ private ClientResponse state(UrlProvider urlProvider, Client client)
+ {
+ String stateUrl = urlProvider.getStateUrl();
+
+ if (logger.isDebugEnabled())
+ {
+ logger.debug("retrive state from {}", stateUrl);
+ }
+
+ WebResource resource = ClientUtil.createResource(client, stateUrl,
+ enableLogging);
+
+ if (logger.isDebugEnabled())
+ {
+ logger.debug("try anonymous login");
+ }
+
+ return resource.get(ClientResponse.class);
+ }
+
+ //~--- inner classes --------------------------------------------------------
+
+ /**
+ * Class description
+ *
+ *
+ * @version Enter version here..., 14/07/05
+ * @author Enter your name here...
+ */
+ private class CookieClientFilter extends ClientFilter
+ {
+
+ /**
+ * Method description
+ *
+ *
+ * @param request
+ *
+ * @return
+ *
+ * @throws ClientHandlerException
+ */
+ @Override
+ public ClientResponse handle(ClientRequest request)
+ throws ClientHandlerException
+ {
+ for (NewCookie c : cookies)
+ {
+ request.getHeaders().putSingle("Cookie", c);
+ }
+
+ ClientResponse response = getNext().handle(request);
+
+ if (response.getCookies() != null)
+ {
+ cookies.addAll(response.getCookies());
+ }
+
+ return response;
+ }
+
+ //~--- fields -------------------------------------------------------------
+
+ /** Field description */
+ private final List cookies =
+ Collections.synchronizedList(new ArrayList());
+ }
+
+
//~--- fields ---------------------------------------------------------------
/** Field description */
diff --git a/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseyClientSession.java b/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseyClientSession.java
index 7e662bc938..46eeb7d222 100644
--- a/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseyClientSession.java
+++ b/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseyClientSession.java
@@ -67,7 +67,7 @@ public class JerseyClientSession implements ScmClientSession
* @param state
*/
public JerseyClientSession(Client client, UrlProvider urlProvider,
- ScmState state)
+ ScmState state)
{
this.client = client;
this.urlProvider = urlProvider;
@@ -129,6 +129,18 @@ public class JerseyClientSession implements ScmClientSession
return new JerseyRepositoryClientHandler(this);
}
+ /**
+ * Method description
+ *
+ *
+ * @return
+ */
+ @Override
+ public SecurityClientHandler getSecurityHandler()
+ {
+ return new JerseySecurityClientHandler(this);
+ }
+
/**
* Method description
*
diff --git a/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseySecurityClientHandler.java b/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseySecurityClientHandler.java
new file mode 100644
index 0000000000..5f24752078
--- /dev/null
+++ b/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseySecurityClientHandler.java
@@ -0,0 +1,90 @@
+/**
+ * Copyright (c) 2010, Sebastian Sdorra All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer. 2. Redistributions in
+ * binary form must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution. 3. Neither the name of SCM-Manager;
+ * nor the names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * http://bitbucket.org/sdorra/scm-manager
+ *
+ */
+
+
+
+package sonia.scm.client;
+
+/**
+ *
+ * @author Sebastian Sdorra
+ */
+public class JerseySecurityClientHandler implements SecurityClientHandler
+{
+
+ /**
+ * Constructs ...
+ *
+ *
+ * @param session
+ */
+ JerseySecurityClientHandler(JerseyClientSession session)
+ {
+ this.session = session;
+ }
+
+ //~--- methods --------------------------------------------------------------
+
+ /**
+ * Method description
+ *
+ *
+ * @param value
+ *
+ * @return
+ */
+ @Override
+ public String encrypt(String value)
+ {
+ String url =
+ session.getUrlProvider().getSecurityUrlProvider().getEncryptUrl();
+
+ return session.getClient().resource(url).post(String.class, value);
+ }
+
+ /**
+ * Method description
+ *
+ *
+ * @return
+ */
+ @Override
+ public String generateKey()
+ {
+ String url =
+ session.getUrlProvider().getSecurityUrlProvider().getGenerateKeyUrl();
+
+ return session.getClient().resource(url).get(String.class);
+ }
+
+ //~--- fields ---------------------------------------------------------------
+
+ /** Field description */
+ private final JerseyClientSession session;
+}
diff --git a/scm-core/src/main/java/sonia/scm/url/RestSecurityUrlProvider.java b/scm-core/src/main/java/sonia/scm/url/RestSecurityUrlProvider.java
new file mode 100644
index 0000000000..513f728708
--- /dev/null
+++ b/scm-core/src/main/java/sonia/scm/url/RestSecurityUrlProvider.java
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2010, Sebastian Sdorra All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer. 2. Redistributions in
+ * binary form must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution. 3. Neither the name of SCM-Manager;
+ * nor the names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * http://bitbucket.org/sdorra/scm-manager
+ *
+ */
+
+
+
+package sonia.scm.url;
+
+//~--- non-JDK imports --------------------------------------------------------
+
+import sonia.scm.util.HttpUtil;
+
+/**
+ *
+ * @author Sebastian Sdorra
+ * @since 1.41
+ */
+public class RestSecurityUrlProvider implements SecurityUrlProvider
+{
+
+ /** Field description */
+ private static final String PATH_ENCRYPT = "security/cipher/encrypt";
+
+ /** Field description */
+ private static final String PATH_KEY = "security/key";
+
+ //~--- constructors ---------------------------------------------------------
+
+ /**
+ * Constructs ...
+ *
+ *
+ * @param baseUrl
+ */
+ public RestSecurityUrlProvider(String baseUrl)
+ {
+ this.baseUrl = baseUrl;
+ }
+
+ //~--- get methods ----------------------------------------------------------
+
+ /**
+ * Method description
+ *
+ *
+ * @return
+ */
+ @Override
+ public String getEncryptUrl()
+ {
+ return HttpUtil.append(baseUrl, PATH_ENCRYPT);
+ }
+
+ /**
+ * Method description
+ *
+ *
+ * @return
+ */
+ @Override
+ public String getGenerateKeyUrl()
+ {
+ return HttpUtil.append(baseUrl, PATH_KEY);
+ }
+
+ //~--- fields ---------------------------------------------------------------
+
+ /** Field description */
+ private final String baseUrl;
+}
diff --git a/scm-core/src/main/java/sonia/scm/url/RestUrlProvider.java b/scm-core/src/main/java/sonia/scm/url/RestUrlProvider.java
index 1d60f2a91b..cb0b3de82d 100644
--- a/scm-core/src/main/java/sonia/scm/url/RestUrlProvider.java
+++ b/scm-core/src/main/java/sonia/scm/url/RestUrlProvider.java
@@ -130,6 +130,18 @@ public class RestUrlProvider implements UrlProvider
return new RestRepositoryUrlProvider(baseUrl, PART_REPOSITORIES, extension);
}
+ /**
+ * Method description
+ *
+ *
+ * @return
+ */
+ @Override
+ public SecurityUrlProvider getSecurityUrlProvider()
+ {
+ return new RestSecurityUrlProvider(baseUrl);
+ }
+
/**
* Method description
*
diff --git a/scm-core/src/main/java/sonia/scm/url/SecurityUrlProvider.java b/scm-core/src/main/java/sonia/scm/url/SecurityUrlProvider.java
new file mode 100644
index 0000000000..e000c9b754
--- /dev/null
+++ b/scm-core/src/main/java/sonia/scm/url/SecurityUrlProvider.java
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2010, Sebastian Sdorra All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer. 2. Redistributions in
+ * binary form must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution. 3. Neither the name of SCM-Manager;
+ * nor the names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * http://bitbucket.org/sdorra/scm-manager
+ *
+ */
+
+
+
+package sonia.scm.url;
+
+/**
+ *
+ * @author Sebastian Sdorra
+ * @since 1.41
+ */
+public interface SecurityUrlProvider
+{
+
+ /**
+ * Method description
+ *
+ *
+ * @return
+ */
+ public String getGenerateKeyUrl();
+
+ //~--- get methods ----------------------------------------------------------
+
+ /**
+ * Method description
+ *
+ *
+ * @return
+ */
+ public String getEncryptUrl();
+}
diff --git a/scm-core/src/main/java/sonia/scm/url/UrlProvider.java b/scm-core/src/main/java/sonia/scm/url/UrlProvider.java
index 694ea1b698..e6c3e4911a 100644
--- a/scm-core/src/main/java/sonia/scm/url/UrlProvider.java
+++ b/scm-core/src/main/java/sonia/scm/url/UrlProvider.java
@@ -72,6 +72,16 @@ public interface UrlProvider
*/
public RepositoryUrlProvider getRepositoryUrlProvider();
+ /**
+ * Method description
+ *
+ *
+ * @return
+ *
+ * @since 1.41
+ */
+ public SecurityUrlProvider getSecurityUrlProvider();
+
/**
* Method description
*
diff --git a/scm-core/src/main/java/sonia/scm/url/WUIUrlProvider.java b/scm-core/src/main/java/sonia/scm/url/WUIUrlProvider.java
index 0c92fcb406..e6a8388e0d 100644
--- a/scm-core/src/main/java/sonia/scm/url/WUIUrlProvider.java
+++ b/scm-core/src/main/java/sonia/scm/url/WUIUrlProvider.java
@@ -124,6 +124,19 @@ public class WUIUrlProvider implements UrlProvider
return new WUIRepositoryUrlProvider(baseUrl, COMPONENT_REPOSITORY);
}
+ /**
+ * Method description
+ *
+ *
+ * @return
+ */
+ @Override
+ public SecurityUrlProvider getSecurityUrlProvider()
+ {
+ throw new UnsupportedOperationException(
+ "this provider does not support security url provider.");
+ }
+
/**
* Returns the baseUrl, because there is no state url.
*
diff --git a/scm-plugin-backend/src/main/webapp/WEB-INF/ftl/template/footer.html b/scm-plugin-backend/src/main/webapp/WEB-INF/ftl/template/footer.html
index a235efd5d9..d511f70a38 100644
--- a/scm-plugin-backend/src/main/webapp/WEB-INF/ftl/template/footer.html
+++ b/scm-plugin-backend/src/main/webapp/WEB-INF/ftl/template/footer.html
@@ -8,7 +8,7 @@
-
- Download
+ Download
-
Issue Tracker
@@ -37,22 +37,33 @@
-
@@ -67,7 +78,7 @@
-
-
+
@@ -84,8 +95,8 @@
-
-
+
+