From 1db4359cb9ab6664f193c8f6a4ef55dea2e3f1b4 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 20 Jul 2014 13:48:06 +0200 Subject: [PATCH] added cli sub command to encrypt passwords --- .../sonia/scm/cli/cmd/EncryptSubCommand.java | 98 +++++++++++++++++++ .../services/sonia.scm.cli.cmd.SubCommand | 3 + .../resources/sonia/resources/i18n.properties | 7 +- .../sonia/scm/client/ScmClientSession.java | 8 ++ .../scm/client/SecurityClientHandler.java | 51 ++++++++++ .../sonia/scm/client/JerseyClientSession.java | 14 ++- .../client/JerseySecurityClientHandler.java | 75 ++++++++++++++ .../scm/url/RestSecurityUrlProvider.java | 80 +++++++++++++++ .../java/sonia/scm/url/RestUrlProvider.java | 12 +++ .../sonia/scm/url/SecurityUrlProvider.java | 49 ++++++++++ .../main/java/sonia/scm/url/UrlProvider.java | 10 ++ .../java/sonia/scm/url/WUIUrlProvider.java | 13 +++ .../api/rest/resources/CipherResource.java | 80 +++++++++++++++ 13 files changed, 498 insertions(+), 2 deletions(-) create mode 100644 scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/EncryptSubCommand.java create mode 100644 scm-clients/scm-client-api/src/main/java/sonia/scm/client/SecurityClientHandler.java create mode 100644 scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseySecurityClientHandler.java create mode 100644 scm-core/src/main/java/sonia/scm/url/RestSecurityUrlProvider.java create mode 100644 scm-core/src/main/java/sonia/scm/url/SecurityUrlProvider.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/rest/resources/CipherResource.java 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/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..e0d5d85e33 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,9 @@ sonia.scm.cli.cmd.ModifyGroupSubCommand sonia.scm.cli.cmd.AddMembersSubCommand sonia.scm.cli.cmd.DeleteMembersSubCommand +# security +sonia.scm.cli.cmd.EncryptSubCommand + # 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..ce0fde03e9 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,6 @@ 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 \ 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..01d6305cb3 --- /dev/null +++ b/scm-clients/scm-client-api/src/main/java/sonia/scm/client/SecurityClientHandler.java @@ -0,0 +1,51 @@ +/** + * 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); +} 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..31d3728184 --- /dev/null +++ b/scm-clients/scm-client-impl/src/main/java/sonia/scm/client/JerseySecurityClientHandler.java @@ -0,0 +1,75 @@ +/** + * 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); + } + + //~--- 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..08bb2aff43 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/url/RestSecurityUrlProvider.java @@ -0,0 +1,80 @@ +/** + * 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"; + + //~--- 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); + } + + //~--- 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..69212ebd2d --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/url/SecurityUrlProvider.java @@ -0,0 +1,49 @@ +/** + * 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 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-webapp/src/main/java/sonia/scm/api/rest/resources/CipherResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/CipherResource.java new file mode 100644 index 0000000000..d72c9ea6aa --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/CipherResource.java @@ -0,0 +1,80 @@ +/** + * 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.api.rest.resources; + +//~--- non-JDK imports -------------------------------------------------------- + +import com.google.common.base.Preconditions; +import com.google.common.base.Strings; + +import org.apache.shiro.SecurityUtils; + +import sonia.scm.security.CipherUtil; +import sonia.scm.security.Role; + +//~--- JDK imports ------------------------------------------------------------ + +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +/** + * + * @author Sebastian Sdorra + * @since 1.41 + */ +@Path("security/cipher") +public class CipherResource +{ + + /** + * Method description + * + * + * @param value + * + * @return + */ + @POST + @Path("encrypt") + @Produces(MediaType.TEXT_PLAIN) + public String encrypt(String value) + { + SecurityUtils.getSubject().checkRole(Role.ADMIN); + + Preconditions.checkArgument(!Strings.isNullOrEmpty(value), + "value is required"); + + return CipherUtil.getInstance().encode(value); + } +}