removed plugin-backend related classes and configuration, because the backend has moved to its own repository

This commit is contained in:
Sebastian Sdorra
2017-07-05 08:04:59 +02:00
parent 244e9ba297
commit 20f84f82f4
3 changed files with 0 additions and 600 deletions

View File

@@ -1,165 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>scm</artifactId>
<groupId>sonia.scm</groupId>
<version>1.55-SNAPSHOT</version>
</parent>
<groupId>sonia.scm</groupId>
<artifactId>scm-plugin-backend</artifactId>
<packaging>war</packaging>
<version>1.55-SNAPSHOT</version>
<name>${project.artifactId}</name>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<!-- fix javadoc -->
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
<scope>provided</scope>
</dependency>
<!-- logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>${freemarker.version}</version>
</dependency>
<dependency>
<groupId>sonia.scm</groupId>
<artifactId>scm-core</artifactId>
<version>1.55-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-guice</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>rome</groupId>
<artifactId>rome</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>${ehcache.version}</version>
</dependency>
<dependency>
<groupId>org.imgscalr</groupId>
<artifactId>imgscalr-lib</artifactId>
<version>4.2</version>
</dependency>
<!-- security -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>${shiro.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-guice</artifactId>
<version>${shiro.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-ehcache</artifactId>
<version>${shiro.version}</version>
</dependency>
</dependencies>
<properties>
<sonar.exclusions>src/main/webapp/template/**</sonar.exclusions>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.mycila.maven-license-plugin</groupId>
<artifactId>maven-license-plugin</artifactId>
<version>1.9.0</version>
<configuration>
<header>http://download.scm-manager.org/licenses/mvn-license.txt</header>
<includes>
<include>src/**</include>
<include>**/test/**</include>
</includes>
<excludes>
<exclude>target/**</exclude>
<exclude>.hg/**</exclude>
<exclude>**/html5.js</exclude>
<exclude>**/*.html</exclude>
<exclude>**/fancybox/**</exclude>
</excludes>
<strictCheck>true</strictCheck>
</configuration>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
<configuration>
<stopPort>8004</stopPort>
<stopKey>STOP</stopKey>
<webApp>
<contextPath>/scm-plugin-backend</contextPath>
</webApp>
<source>${project.build.javaLevel}</source>
<target>${project.build.javaLevel}</target>
<encoding>${project.build.sourceEncoding}</encoding>
<scanIntervalSeconds>0</scanIntervalSeconds>
</configuration>
</plugin>
</plugins>
<finalName>scm-plugin-backend</finalName>
</build>
</project>

View File

@@ -1,231 +0,0 @@
/**
* 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.plugin;
//~--- non-JDK imports --------------------------------------------------------
import com.google.common.base.Objects;
import org.apache.shiro.authc.SaltedAuthenticationInfo;
import org.apache.shiro.codec.Base64;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.SimplePrincipalCollection;
import org.apache.shiro.util.ByteSource;
//~--- JDK imports ------------------------------------------------------------
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
/**
*
* @author Sebastian Sdorra
*/
@XmlRootElement(name = "admin-account")
@XmlAccessorType(XmlAccessType.FIELD)
public class AdminAccountConfiguration implements SaltedAuthenticationInfo
{
/** Field description */
private static final long serialVersionUID = -8678832281151044462L;
//~--- constructors ---------------------------------------------------------
/**
* Constructs ...
*
*/
public AdminAccountConfiguration() {}
/**
* Constructs ...
*
*
* @param username
* @param salt
* @param password
*/
public AdminAccountConfiguration(String username, String salt,
String password)
{
this.username = username;
this.salt = salt;
this.password = password;
}
//~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @param obj
*
* @return
*/
@Override
public boolean equals(Object obj)
{
if (obj == null)
{
return false;
}
if (getClass() != obj.getClass())
{
return false;
}
final AdminAccountConfiguration other = (AdminAccountConfiguration) obj;
return Objects.equal(username, other.username)
&& Objects.equal(salt, other.salt)
&& Objects.equal(password, other.password);
}
/**
* Method description
*
*
* @return
*/
@Override
public int hashCode()
{
return Objects.hashCode(username, salt, password);
}
/**
* Method description
*
*
* @return
*/
@Override
@SuppressWarnings("squid:S2068")
public String toString()
{
//J-
return Objects.toStringHelper(this)
.add("username", username)
.add("salt", "xxx")
.add("password", "xxx")
.toString();
//J+
}
//~--- get methods ----------------------------------------------------------
/**
* Method description
*
*
* @return
*/
@Override
public Object getCredentials()
{
return password;
}
/**
* Method description
*
*
* @return
*/
@Override
public ByteSource getCredentialsSalt()
{
return ByteSource.Util.bytes(Base64.decode(salt));
}
/**
* Method description
*
*
* @return
*/
public String getPassword()
{
return password;
}
/**
* Method description
*
*
* @return
*/
@Override
public PrincipalCollection getPrincipals()
{
// TODO
return new SimplePrincipalCollection(username, "scm-backend");
}
/**
* Method description
*
*
* @return
*/
public String getSalt()
{
return salt;
}
/**
* Method description
*
*
* @return
*/
public String getUsername()
{
return username;
}
//~--- fields ---------------------------------------------------------------
/** Field description */
private String password;
/** Field description */
private String salt;
/** Field description */
private String username;
}

View File

@@ -1,204 +0,0 @@
/**
* 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.plugin.security;
//~--- non-JDK imports --------------------------------------------------------
import com.google.inject.name.Named;
import com.google.inject.name.Names;
import org.apache.shiro.authc.credential.CredentialsMatcher;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.cache.CacheManager;
import org.apache.shiro.crypto.RandomNumberGenerator;
import org.apache.shiro.crypto.SecureRandomNumberGenerator;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.guice.web.ShiroWebModule;
import org.apache.shiro.util.ByteSource;
import sonia.scm.plugin.Roles;
//~--- JDK imports ------------------------------------------------------------
import javax.servlet.ServletContext;
import javax.swing.JOptionPane;
/**
*
* @author Sebastian Sdorra
*/
public class SecurityModule extends ShiroWebModule
{
/** Field description */
private static final String ATTRIBUTE_FAILURE = "shiroLoginFailure";
/** Field description */
private static final String HASH_ALGORITHM = "SHA-256";
/** Field description */
private static final int HASH_ITERATIONS = 1024;
/** Field description */
private static final String PAGE_LOGIN = "/page/login.html";
/** Field description */
private static final String PAGE_SUCCESS = "/admin/index.html";
/** Field description */
private static final String PAGE_UNAUTHORIZED = "/error/unauthorized.html";
/** Field description */
@SuppressWarnings("squid:S2068")
private static final String PARAM_PASSWORD = "password";
/** Field description */
private static final String PARAM_REMEMBERME = "rememberme";
/** Field description */
private static final String PARAM_USERNAME = "username";
/** Field description */
private static final String PATTERN_ADMIN = "/admin/**";
/** Field description */
private static final Named NAMED_USERNAMEPARAM =
Names.named("shiro.usernameParam");
/** Field description */
private static final Named NAMED_UNAUTHORIZEDURL =
Names.named("shiro.unauthorizedUrl");
/** Field description */
private static final Named NAMED_SUCCESSURL = Names.named("shiro.successUrl");
/** Field description */
private static final Named NAMED_REMEMBERMEPARAM =
Names.named("shiro.rememberMeParam");
/** Field description */
private static final Named NAMED_PASSWORDPARAM =
Names.named("shiro.passwordParam");
/** Field description */
private static final Named NAMED_LOGINURL = Names.named("shiro.loginUrl");
/** Field description */
private static final Named NAMED_FAILUREKEYATTRIBUTE =
Names.named("shiro.failureKeyAttribute");
//~--- constructors ---------------------------------------------------------
/**
* Constructs ...
*
*
* @param servletContext
*/
public SecurityModule(ServletContext servletContext)
{
super(servletContext);
}
//~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @param args
*/
public static void main(String[] args)
{
String value = JOptionPane.showInputDialog("Password");
RandomNumberGenerator rng = new SecureRandomNumberGenerator();
ByteSource salt = rng.nextBytes();
SimpleHash hash = new SimpleHash(HASH_ALGORITHM, value, salt,
HASH_ITERATIONS);
System.out.append("Salt: ").println(salt.toBase64());
System.out.append("Hash: ").println(hash.toBase64());
}
/**
* Method description
*
*/
@Override
protected void configureShiroWeb()
{
bindConstants();
bindCredentialsMatcher();
// bind cache manager
bind(CacheManager.class).toProvider(CacheManagerProvider.class);
// bind realm
bindRealm().to(DefaultAdminRealm.class);
// add filters
addFilterChain(PAGE_LOGIN, AUTHC);
addFilterChain(PATTERN_ADMIN, AUTHC, config(ROLES, Roles.ADMIN));
}
/**
* Method description
*
*/
private void bindConstants()
{
bindConstant().annotatedWith(NAMED_LOGINURL).to(PAGE_LOGIN);
bindConstant().annotatedWith(NAMED_USERNAMEPARAM).to(PARAM_USERNAME);
bindConstant().annotatedWith(NAMED_PASSWORDPARAM).to(PARAM_PASSWORD);
bindConstant().annotatedWith(NAMED_REMEMBERMEPARAM).to(PARAM_REMEMBERME);
bindConstant().annotatedWith(NAMED_SUCCESSURL).to(PAGE_SUCCESS);
bindConstant().annotatedWith(NAMED_UNAUTHORIZEDURL).to(PAGE_UNAUTHORIZED);
bindConstant().annotatedWith(NAMED_FAILUREKEYATTRIBUTE).to(
ATTRIBUTE_FAILURE);
}
/**
* Method description
*
*/
private void bindCredentialsMatcher()
{
HashedCredentialsMatcher matcher =
new HashedCredentialsMatcher(HASH_ALGORITHM);
matcher.setHashIterations(HASH_ITERATIONS);
matcher.setStoredCredentialsHexEncoded(false);
bind(CredentialsMatcher.class).toInstance(matcher);
}
}