mirror of
https://github.com/AuthMe/AuthMeReloaded.git
synced 2025-02-01 20:41:28 +01:00
First Commit - 2.7.10b1
This commit is contained in:
parent
ae6303b9ed
commit
ba82d946c4
BIN
lib/ChestShop.jar
Normal file
BIN
lib/ChestShop.jar
Normal file
Binary file not shown.
BIN
lib/Citizens.jar
Normal file
BIN
lib/Citizens.jar
Normal file
Binary file not shown.
BIN
lib/CombatTag-5.4.jar
Normal file
BIN
lib/CombatTag-5.4.jar
Normal file
Binary file not shown.
BIN
lib/Multiverse-Core-2.5.jar
Normal file
BIN
lib/Multiverse-Core-2.5.jar
Normal file
Binary file not shown.
BIN
lib/Notifications.jar
Normal file
BIN
lib/Notifications.jar
Normal file
Binary file not shown.
BIN
lib/SpoutPlugin.jar
Normal file
BIN
lib/SpoutPlugin.jar
Normal file
Binary file not shown.
BIN
lib/Vault.jar
Normal file
BIN
lib/Vault.jar
Normal file
Binary file not shown.
BIN
lib/bukkit-1.4.7-R1.0.jar
Normal file
BIN
lib/bukkit-1.4.7-R1.0.jar
Normal file
Binary file not shown.
BIN
lib/bungeecord-api-1.4.7-20130228.060400-44.jar
Normal file
BIN
lib/bungeecord-api-1.4.7-20130228.060400-44.jar
Normal file
Binary file not shown.
BIN
lib/citizensapi-2.0.6-SNAPSHOT.jar
Normal file
BIN
lib/citizensapi-2.0.6-SNAPSHOT.jar
Normal file
Binary file not shown.
BIN
lib/h2-1.3.164.jar
Normal file
BIN
lib/h2-1.3.164.jar
Normal file
Binary file not shown.
BIN
lib/mail.jar
Normal file
BIN
lib/mail.jar
Normal file
Binary file not shown.
BIN
lib/mysql-connector-java.jar
Normal file
BIN
lib/mysql-connector-java.jar
Normal file
Binary file not shown.
BIN
lib/sqlite-jdbc.jar
Normal file
BIN
lib/sqlite-jdbc.jar
Normal file
Binary file not shown.
BIN
lib/xAuth.jar
Normal file
BIN
lib/xAuth.jar
Normal file
Binary file not shown.
137
pom.xml
Normal file
137
pom.xml
Normal file
@ -0,0 +1,137 @@
|
||||
<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/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>uk.org.whoami.authme.AuthMe</groupId>
|
||||
<artifactId>AuthMe</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>AuthMe</name>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<manifest.file>src/main/resources/META-INF/MANIFEST.MF</manifest.file>
|
||||
</properties>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>Bukkit</id>
|
||||
<name>Bukkit</name>
|
||||
<url>http://repo.bukkit.org/content/groups/public/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.2</version>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifestFile>${manifest.file}</manifestFile>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<version>2.7.10b2</version>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.bukkit</groupId>
|
||||
<artifactId>bukkit</artifactId>
|
||||
<version>1.4.7-R1.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.milkbowl.vault</groupId>
|
||||
<artifactId>Vault</artifactId>
|
||||
<version>1.2.23-SNAPSHOT</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/lib/Vault.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.citizensnpcs</groupId>
|
||||
<artifactId>citizensapi</artifactId>
|
||||
<version>2.0.6-SNAPSHOT</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/lib/citizensapi-2.0.6-SNAPSHOT.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.citizensnpcs</groupId>
|
||||
<artifactId>Citizens</artifactId>
|
||||
<version>1.2.1</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/lib/Citizens.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.getSpout</groupId>
|
||||
<artifactId>SpoutPlugin</artifactId>
|
||||
<version>1.4.7-R1.0-SNAPSHOT</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/lib/SpoutPlugin.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.trc202</groupId>
|
||||
<artifactId>CombatTag</artifactId>
|
||||
<version>5.4</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/lib/CombatTag-5.4.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>5.1.6</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/lib/mysql-connector-java.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.xerial</groupId>
|
||||
<artifactId>sqlite-jdbc</artifactId>
|
||||
<version>3.7.2</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/lib/sqlite-jdbc.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>me.muizers</groupId>
|
||||
<artifactId>Notifications</artifactId>
|
||||
<version>1.1</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/lib/Notifications.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.Acrobot</groupId>
|
||||
<artifactId>ChestShop</artifactId>
|
||||
<version>3.50 t0047</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/lib/ChestShop.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.h2</groupId>
|
||||
<artifactId>h2</artifactId>
|
||||
<version>1.3.164</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/lib/h2-1.3.164.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.cypherx</groupId>
|
||||
<artifactId>xauth</artifactId>
|
||||
<version>2.0.26</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/lib/xAuth.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.onarandombox</groupId>
|
||||
<artifactId>MultiverseCore</artifactId>
|
||||
<version>2.5-b654</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/lib/Multiverse-Core-2.5.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-api</artifactId>
|
||||
<version>1.4.7-SNAPSHOT</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/lib/bungeecord-api-1.4.7-20130228.060400-44.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sun.mail</groupId>
|
||||
<artifactId>javax.mail</artifactId>
|
||||
<version>1.4.5</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/lib/mail.jar</systemPath>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
59
scripts/auth_db_to_mysql.pl
Normal file
59
scripts/auth_db_to_mysql.pl
Normal file
@ -0,0 +1,59 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use DBI;
|
||||
|
||||
##############################
|
||||
# EDIT THESE CONFIG SETTINGS #
|
||||
##############################
|
||||
|
||||
my $host = "localhost";
|
||||
my $database = "authme";
|
||||
my $username = "authme";
|
||||
my $password = "password";
|
||||
my $auth_file = "/opt/craftbukkit/plugins/auths.db";
|
||||
|
||||
###############################
|
||||
# DO NOT EDIT BELOW THIS LINE #
|
||||
###############################
|
||||
|
||||
open FILE, "$auth_file" or die $!;
|
||||
my $dbh = DBI->connect("DBI:mysql:$database;host=$host", "$username", "$password") or die "Could not connect to database: $DBI::errstr";
|
||||
|
||||
$dbh->do('CREATE TABLE `authme` (
|
||||
`id` INTEGER AUTO_INCREMENT,
|
||||
`username` VARCHAR(255) NOT NULL,
|
||||
`password` VARCHAR(255) NOT NULL,
|
||||
`ip` VARCHAR(40) NOT NULL,
|
||||
`lastlogin` BIGINT,
|
||||
CONSTRAINT `table_const_prim` PRIMARY KEY (`id`));');
|
||||
|
||||
my $st = 'INSERT INTO `authme` (`username`, `password`, `ip`, `lastlogin`) VALUES ';
|
||||
my $i = 0;
|
||||
|
||||
while(<FILE>) {
|
||||
if($i == 1000) {
|
||||
$i = 0;
|
||||
$dbh->do($st);
|
||||
$st = 'INSERT INTO `authme` (`username`, `password`, `ip`, `lastlogin`) VALUES ';
|
||||
}
|
||||
my @auth = split(':');
|
||||
|
||||
if($i != 0) {
|
||||
$st .= ", ";
|
||||
}
|
||||
|
||||
$st .= "(\"$auth[0]\", \"$auth[1]\", ";
|
||||
$st .= "\"" . ($auth[2] || '198.18.0.1') . "\", ";
|
||||
$st .= ($auth[3] || '0') . ")";
|
||||
$i++;
|
||||
}
|
||||
|
||||
if($i > 0) {
|
||||
$dbh->do($st);
|
||||
}
|
||||
|
||||
$dbh->disconnect();
|
||||
close FILE;
|
||||
|
501
src/main/java/uk/org/whoami/authme/AuthMe.java
Normal file
501
src/main/java/uk/org/whoami/authme/AuthMe.java
Normal file
@ -0,0 +1,501 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import uk.org.whoami.authme.api.API;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.cache.backup.FileCache;
|
||||
import uk.org.whoami.authme.cache.limbo.LimboCache;
|
||||
import uk.org.whoami.authme.cache.limbo.LimboPlayer;
|
||||
import uk.org.whoami.authme.commands.AdminCommand;
|
||||
import uk.org.whoami.authme.commands.CaptchaCommand;
|
||||
import uk.org.whoami.authme.commands.ChangePasswordCommand;
|
||||
import uk.org.whoami.authme.commands.EmailCommand;
|
||||
import uk.org.whoami.authme.commands.LoginCommand;
|
||||
import uk.org.whoami.authme.commands.LogoutCommand;
|
||||
import uk.org.whoami.authme.commands.RegisterCommand;
|
||||
import uk.org.whoami.authme.commands.UnregisterCommand;
|
||||
import uk.org.whoami.authme.datasource.CacheDataSource;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
import uk.org.whoami.authme.datasource.FileDataSource;
|
||||
import uk.org.whoami.authme.datasource.MiniConnectionPoolManager.TimeoutException;
|
||||
import uk.org.whoami.authme.datasource.MySQLDataSource;
|
||||
import uk.org.whoami.authme.listener.AuthMeBlockListener;
|
||||
import uk.org.whoami.authme.listener.AuthMeChestShopListener;
|
||||
import uk.org.whoami.authme.listener.AuthMeEntityListener;
|
||||
import uk.org.whoami.authme.listener.AuthMePlayerListener;
|
||||
import uk.org.whoami.authme.listener.AuthMeSpoutListener;
|
||||
import uk.org.whoami.authme.plugin.manager.CitizensCommunicator;
|
||||
import uk.org.whoami.authme.plugin.manager.CombatTagComunicator;
|
||||
import uk.org.whoami.authme.settings.Messages;
|
||||
import uk.org.whoami.authme.settings.PlayersLogs;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
import me.muizers.Notifications.Notifications;
|
||||
import net.citizensnpcs.Citizens;
|
||||
import net.milkbowl.vault.permission.Permission;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Server;
|
||||
|
||||
import com.onarandombox.MultiverseCore.MultiverseCore;
|
||||
|
||||
import uk.org.whoami.authme.commands.PasspartuCommand;
|
||||
import uk.org.whoami.authme.datasource.SqliteDataSource;
|
||||
import uk.org.whoami.authme.filter.ConsoleFilter;
|
||||
|
||||
public class AuthMe extends JavaPlugin {
|
||||
|
||||
public DataSource database = null;
|
||||
private Settings settings;
|
||||
private Messages m;
|
||||
private PlayersLogs pllog;
|
||||
public Management management;
|
||||
public static Server server;
|
||||
public static Plugin authme;
|
||||
public static Permission permission;
|
||||
private static AuthMe instance;
|
||||
private Utils utils = Utils.getInstance();
|
||||
private JavaPlugin plugin;
|
||||
private FileCache playerBackup = new FileCache();
|
||||
public CitizensCommunicator citizens;
|
||||
public SendMailSSL mail = null;
|
||||
public int CitizensVersion = 0;
|
||||
public int CombatTag = 0;
|
||||
public double ChestShop = 0;
|
||||
public boolean BungeeCord = false;
|
||||
public Notifications notifications;
|
||||
public API api;
|
||||
public HashMap<String, Integer> captcha = new HashMap<String, Integer>();
|
||||
public HashMap<String, String> cap = new HashMap<String, String>();
|
||||
public MultiverseCore mv = null;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
instance = this;
|
||||
authme = instance;
|
||||
|
||||
citizens = new CitizensCommunicator(this);
|
||||
|
||||
settings = new Settings(this);
|
||||
settings.loadConfigOptions();
|
||||
|
||||
setMessages(Messages.getInstance());
|
||||
pllog = PlayersLogs.getInstance();
|
||||
|
||||
server = getServer();
|
||||
|
||||
|
||||
//Set Console Filter
|
||||
if (Settings.removePassword)
|
||||
Bukkit.getLogger().setFilter(new ConsoleFilter());
|
||||
|
||||
|
||||
//Load MailApi
|
||||
File mailFile = new File("lib", "mail.jar");
|
||||
if (mailFile.exists()) {
|
||||
//Set SMTP
|
||||
mail = new SendMailSSL(this);
|
||||
} else {
|
||||
mail = null;
|
||||
}
|
||||
|
||||
//Check Citizens Version
|
||||
citizensVersion();
|
||||
|
||||
//Check Combat Tag Version
|
||||
combatTag();
|
||||
|
||||
//Check Notifications
|
||||
checkNotifications();
|
||||
|
||||
//Check Multiverse
|
||||
checkMultiverse();
|
||||
|
||||
//Check ChestShop
|
||||
checkChestShop();
|
||||
|
||||
/*
|
||||
* Back style on start if avaible
|
||||
*/
|
||||
if(Settings.isBackupActivated && Settings.isBackupOnStart) {
|
||||
Boolean Backup = new PerformBackup(this).DoBackup();
|
||||
if(Backup) ConsoleLogger.info("Backup Complete");
|
||||
else ConsoleLogger.showError("Error while making Backup");
|
||||
}
|
||||
|
||||
/*
|
||||
* Backend MYSQL - FILE - SQLITE
|
||||
*/
|
||||
switch (Settings.getDataSource) {
|
||||
case FILE:
|
||||
try {
|
||||
database = new FileDataSource();
|
||||
} catch (IOException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
if (Settings.isStopEnabled) {
|
||||
ConsoleLogger.showError("Can't use FLAT FILE... SHUTDOWN...");
|
||||
server.shutdown();
|
||||
}
|
||||
if (!Settings.isStopEnabled)
|
||||
this.getServer().getPluginManager().disablePlugin(this);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case MYSQL:
|
||||
try {
|
||||
database = new MySQLDataSource();
|
||||
} catch (ClassNotFoundException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
if (Settings.isStopEnabled) {
|
||||
ConsoleLogger.showError("Can't use MySQL... Please input correct MySQL informations ! SHUTDOWN...");
|
||||
server.shutdown();
|
||||
}
|
||||
if (!Settings.isStopEnabled)
|
||||
this.getServer().getPluginManager().disablePlugin(this);
|
||||
return;
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
if (Settings.isStopEnabled) {
|
||||
ConsoleLogger.showError("Can't use MySQL... Please input correct MySQL informations ! SHUTDOWN...");
|
||||
server.shutdown();
|
||||
}
|
||||
if (!Settings.isStopEnabled)
|
||||
this.getServer().getPluginManager().disablePlugin(this);
|
||||
return;
|
||||
} catch(TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
if (Settings.isStopEnabled) {
|
||||
ConsoleLogger.showError("Can't use MySQL... Please input correct MySQL informations ! SHUTDOWN...");
|
||||
server.shutdown();
|
||||
}
|
||||
if (!Settings.isStopEnabled)
|
||||
this.getServer().getPluginManager().disablePlugin(this);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case SQLITE:
|
||||
try {
|
||||
database = new SqliteDataSource();
|
||||
} catch (ClassNotFoundException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
if (Settings.isStopEnabled) {
|
||||
ConsoleLogger.showError("Can't use SQLITE... ! SHUTDOWN...");
|
||||
server.shutdown();
|
||||
}
|
||||
if (!Settings.isStopEnabled)
|
||||
this.getServer().getPluginManager().disablePlugin(this);
|
||||
return;
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
if (Settings.isStopEnabled) {
|
||||
ConsoleLogger.showError("Can't use SQLITE... ! SHUTDOWN...");
|
||||
server.shutdown();
|
||||
}
|
||||
if (!Settings.isStopEnabled)
|
||||
this.getServer().getPluginManager().disablePlugin(this);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (Settings.isCachingEnabled) {
|
||||
database = new CacheDataSource(this, database);
|
||||
}
|
||||
|
||||
api = new API(this, database);
|
||||
|
||||
management = new Management(database, this);
|
||||
|
||||
PluginManager pm = getServer().getPluginManager();
|
||||
if (pm.isPluginEnabled("Spout")) {
|
||||
pm.registerEvents(new AuthMeSpoutListener(database), this);
|
||||
ConsoleLogger.info("Successfully hook with Spout!");
|
||||
}
|
||||
pm.registerEvents(new AuthMePlayerListener(this,database),this);
|
||||
pm.registerEvents(new AuthMeBlockListener(database, this),this);
|
||||
pm.registerEvents(new AuthMeEntityListener(database, this),this);
|
||||
if (ChestShop != 0) {
|
||||
pm.registerEvents(new AuthMeChestShopListener(database, this), this);
|
||||
ConsoleLogger.info("Successfully hook with ChestShop!");
|
||||
}
|
||||
|
||||
|
||||
//Find Permissions
|
||||
if(Settings.isPermissionCheckEnabled) {
|
||||
RegisteredServiceProvider<Permission> permissionProvider =
|
||||
getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class);
|
||||
if (permissionProvider != null)
|
||||
permission = permissionProvider.getProvider();
|
||||
else {
|
||||
|
||||
ConsoleLogger.showError("Vault and Permissions plugins is needed for enable AuthMe Reloaded!");
|
||||
this.getServer().getPluginManager().disablePlugin(this);
|
||||
}
|
||||
}
|
||||
|
||||
this.getCommand("authme").setExecutor(new AdminCommand(this, database));
|
||||
this.getCommand("register").setExecutor(new RegisterCommand(database, this));
|
||||
this.getCommand("login").setExecutor(new LoginCommand(this));
|
||||
this.getCommand("changepassword").setExecutor(new ChangePasswordCommand(database, this));
|
||||
this.getCommand("logout").setExecutor(new LogoutCommand(this,database));
|
||||
this.getCommand("unregister").setExecutor(new UnregisterCommand(this, database));
|
||||
this.getCommand("passpartu").setExecutor(new PasspartuCommand(database, this));
|
||||
this.getCommand("email").setExecutor(new EmailCommand(this, database));
|
||||
this.getCommand("captcha").setExecutor(new CaptchaCommand(this));
|
||||
|
||||
if(!Settings.isForceSingleSessionEnabled) {
|
||||
ConsoleLogger.showError("ATTENTION by disabling ForceSingleSession, your server protection is set to low");
|
||||
}
|
||||
|
||||
if (Settings.reloadSupport)
|
||||
try {
|
||||
if (!new File(getDataFolder() + File.separator + "players.yml").exists()) {
|
||||
pllog = new PlayersLogs();
|
||||
}
|
||||
onReload();
|
||||
if (server.getOnlinePlayers().length < 1) {
|
||||
try {
|
||||
PlayersLogs.players.clear();
|
||||
pllog.save();
|
||||
} catch (NullPointerException npe) {
|
||||
}
|
||||
}
|
||||
} catch (NullPointerException ex) {
|
||||
|
||||
}
|
||||
|
||||
ConsoleLogger.info("Authme " + this.getDescription().getVersion() + " enabled");
|
||||
}
|
||||
|
||||
|
||||
private void checkChestShop() {
|
||||
if (!Settings.chestshop) {
|
||||
this.ChestShop = 0;
|
||||
return;
|
||||
}
|
||||
if (this.getServer().getPluginManager().isPluginEnabled("ChestShop")) {
|
||||
try {
|
||||
String ver = com.Acrobot.ChestShop.ChestShop.getVersion();
|
||||
try {
|
||||
double version = Double.valueOf(ver.split(" ")[0]);
|
||||
if (version >= 3.50) {
|
||||
this.ChestShop = version;
|
||||
} else {
|
||||
ConsoleLogger.showError("Please Update your ChestShop version!");
|
||||
}
|
||||
} catch (NumberFormatException nfe) {
|
||||
try {
|
||||
double version = Double.valueOf(ver.split("t")[0]);
|
||||
if (version >= 3.50) {
|
||||
this.ChestShop = version;
|
||||
} else {
|
||||
ConsoleLogger.showError("Please Update your ChestShop version!");
|
||||
}
|
||||
} catch (NumberFormatException nfee) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} catch (NullPointerException npe) {}
|
||||
catch (NoClassDefFoundError ncdfe) {}
|
||||
catch (ClassCastException cce) {}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void checkMultiverse() {
|
||||
if(!Settings.multiverse) {
|
||||
mv = null;
|
||||
return;
|
||||
}
|
||||
if (this.getServer().getPluginManager().getPlugin("Multiverse-Core") != null && this.getServer().getPluginManager().getPlugin("Multiverse-Core").isEnabled()) {
|
||||
try {
|
||||
mv = (MultiverseCore) this.getServer().getPluginManager().getPlugin("Multiverse-Core");
|
||||
ConsoleLogger.info("Hook with Multiverse-Core for SpawnLocations");
|
||||
} catch (NullPointerException npe) {
|
||||
mv = null;
|
||||
} catch (ClassCastException cce) {
|
||||
mv = null;
|
||||
} catch (NoClassDefFoundError ncdfe) {
|
||||
mv = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void checkNotifications() {
|
||||
if (!Settings.notifications) {
|
||||
this.notifications = null;
|
||||
return;
|
||||
}
|
||||
if (this.getServer().getPluginManager().getPlugin("Notifications") != null && this.getServer().getPluginManager().getPlugin("Notifications").isEnabled()) {
|
||||
this.notifications = (Notifications) this.getServer().getPluginManager().getPlugin("Notifications");
|
||||
ConsoleLogger.info("Successfully hook with Notifications");
|
||||
} else {
|
||||
this.notifications = null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void combatTag() {
|
||||
if (this.getServer().getPluginManager().getPlugin("CombatTag") != null && this.getServer().getPluginManager().getPlugin("CombatTag").isEnabled()) {
|
||||
this.CombatTag = 1;
|
||||
} else {
|
||||
this.CombatTag = 0;
|
||||
}
|
||||
}
|
||||
|
||||
private void citizensVersion() {
|
||||
if (this.getServer().getPluginManager().getPlugin("Citizens") != null && this.getServer().getPluginManager().getPlugin("Citizens").isEnabled()) {
|
||||
Citizens cit = (Citizens) this.getServer().getPluginManager().getPlugin("Citizens");
|
||||
String ver = cit.getDescription().getVersion();
|
||||
String[] args = ver.split("\\.");
|
||||
if (args[0].contains("1")) {
|
||||
this.CitizensVersion = 1;
|
||||
} else {
|
||||
this.CitizensVersion = 2;
|
||||
}
|
||||
} else {
|
||||
this.CitizensVersion = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
if (Bukkit.getOnlinePlayers() != null)
|
||||
for(Player player : Bukkit.getOnlinePlayers()) {
|
||||
this.savePlayer(player);
|
||||
}
|
||||
pllog.save();
|
||||
|
||||
if (database != null) {
|
||||
database.close();
|
||||
}
|
||||
//utils = Utils.getInstance();
|
||||
|
||||
/*
|
||||
* Back style on start if avaible
|
||||
*/
|
||||
if(Settings.isBackupActivated && Settings.isBackupOnStop) {
|
||||
Boolean Backup = new PerformBackup(this).DoBackup();
|
||||
if(Backup) ConsoleLogger.info("Backup Complete");
|
||||
else ConsoleLogger.showError("Error while making Backup");
|
||||
}
|
||||
ConsoleLogger.info("Authme " + this.getDescription().getVersion() + " disabled");
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void onReload() {
|
||||
try {
|
||||
if (Bukkit.getServer().getOnlinePlayers() != null && !PlayersLogs.players.isEmpty()) {
|
||||
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
|
||||
if (PlayersLogs.players.contains(player.getName())) {
|
||||
String name = player.getName().toLowerCase();
|
||||
PlayerAuth pAuth = database.getAuth(name);
|
||||
// if Mysql is unavaible
|
||||
if(pAuth == null)
|
||||
break;
|
||||
PlayerAuth auth = new PlayerAuth(name, pAuth.getHash(), pAuth.getIp(), new Date().getTime());
|
||||
database.updateSession(auth);
|
||||
PlayerCache.getInstance().addPlayer(auth);
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
} catch (NullPointerException ex) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public static AuthMe getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
public void savePlayer(Player player) throws IllegalStateException, NullPointerException {
|
||||
try {
|
||||
if ((citizens.isNPC(player, this)) || (Utils.getInstance().isUnrestricted(player)) || (CombatTagComunicator.isNPC(player))) {
|
||||
return;
|
||||
}
|
||||
} catch (Exception e) { }
|
||||
|
||||
try {
|
||||
String name = player.getName().toLowerCase();
|
||||
if ((PlayerCache.getInstance().isAuthenticated(name)) && (!player.isDead()) &&
|
||||
(Settings.isSaveQuitLocationEnabled.booleanValue())) {
|
||||
PlayerAuth auth = new PlayerAuth(player.getName().toLowerCase(), (int)player.getLocation().getX(), (int)player.getLocation().getY(), (int)player.getLocation().getZ());
|
||||
this.database.updateQuitLoc(auth);
|
||||
}
|
||||
|
||||
if (LimboCache.getInstance().hasLimboPlayer(name))
|
||||
{
|
||||
LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name);
|
||||
if (Settings.protectInventoryBeforeLogInEnabled.booleanValue()) {
|
||||
player.getInventory().setArmorContents(limbo.getArmour());
|
||||
player.getInventory().setContents(limbo.getInventory());
|
||||
}
|
||||
if (!limbo.getLoc().getChunk().isLoaded()) {
|
||||
limbo.getLoc().getChunk().load();
|
||||
}
|
||||
player.teleport(limbo.getLoc());
|
||||
this.utils.addNormal(player, limbo.getGroup());
|
||||
player.setOp(limbo.getOperator());
|
||||
|
||||
this.plugin.getServer().getScheduler().cancelTask(limbo.getTimeoutTaskId());
|
||||
LimboCache.getInstance().deleteLimboPlayer(name);
|
||||
if (this.playerBackup.doesCacheExist(name)) {
|
||||
this.playerBackup.removeCache(name);
|
||||
}
|
||||
}
|
||||
|
||||
PlayerCache.getInstance().removePlayer(name);
|
||||
player.saveData();
|
||||
} catch (Exception ex) {
|
||||
}
|
||||
}
|
||||
|
||||
public void setCitizensCommunicator(CitizensCommunicator citizens) {
|
||||
this.citizens = citizens;
|
||||
}
|
||||
|
||||
public CitizensCommunicator getCitizensCommunicator() {
|
||||
return citizens;
|
||||
}
|
||||
|
||||
public void setMessages(Messages m) {
|
||||
this.m = m;
|
||||
}
|
||||
|
||||
public Messages getMessages() {
|
||||
return m;
|
||||
}
|
||||
|
||||
}
|
32
src/main/java/uk/org/whoami/authme/ConsoleLogger.java
Normal file
32
src/main/java/uk/org/whoami/authme/ConsoleLogger.java
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class ConsoleLogger {
|
||||
|
||||
private static final Logger log = Logger.getLogger("Minecraft");
|
||||
|
||||
public static void info(String message) {
|
||||
log.info("[AuthMe] " + message);
|
||||
}
|
||||
|
||||
public static void showError(String message) {
|
||||
log.severe("[AuthMe] ERROR: " + message);
|
||||
}
|
||||
}
|
75
src/main/java/uk/org/whoami/authme/LogActions.java
Normal file
75
src/main/java/uk/org/whoami/authme/LogActions.java
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package uk.org.whoami.authme;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author stefano
|
||||
*/
|
||||
public class LogActions {
|
||||
|
||||
private boolean logData;
|
||||
private File dataLog;
|
||||
private boolean logMessages;
|
||||
private File messageLog;
|
||||
private String dataFolder;
|
||||
private String dLog,mLog;
|
||||
|
||||
public LogActions() {
|
||||
try {
|
||||
if (logData)
|
||||
this.dataLog = new File(dataFolder, dLog);
|
||||
if (logMessages)
|
||||
this.messageLog = new File(dataFolder, mLog);
|
||||
} catch (Exception e){
|
||||
|
||||
ConsoleLogger.showError("[AuthMe] Error opening logfiles; bad filename?");
|
||||
if (logData)
|
||||
this.dataLog = new File(dataFolder, "death_data.log");
|
||||
if (logMessages)
|
||||
this.messageLog = new File(dataFolder, "death_messages.log");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private void initFiles() {
|
||||
if (logData && !this.dataLog.exists()) {
|
||||
try {
|
||||
this.dataLog.createNewFile();
|
||||
BufferedWriter writer = new BufferedWriter(new FileWriter(this.dataLog,true));
|
||||
writer.write("#AuthMe Registration Log - This file stores serialized data on player regitration, changepassword and unregistration:");
|
||||
writer.newLine();
|
||||
writer.write("#Date | Time | Player | ip | Action [Register|ChangePassword|Unregister]");
|
||||
writer.newLine();
|
||||
writer.write("#Dont remove this file if you want to store all Registration Action");
|
||||
writer.newLine();
|
||||
writer.write("#If This file will become too big, rename it and let plugin create new one");
|
||||
writer.newLine();
|
||||
writer.close();
|
||||
} catch (IOException e) {
|
||||
ConsoleLogger.showError("[AuthMe] Error writing data log: ");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
if (logMessages && !this.messageLog.exists()) {
|
||||
try {
|
||||
this.messageLog.createNewFile();
|
||||
BufferedWriter writer = new BufferedWriter(new FileWriter(this.messageLog,true));
|
||||
writer.write("#AuthMe Multiple Access Log - This file stores player Login, Wrong Password and Error");
|
||||
writer.newLine();
|
||||
writer.close();
|
||||
} catch (IOException e) {
|
||||
ConsoleLogger.showError("[AuthMe] Error writing message log: ");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
427
src/main/java/uk/org/whoami/authme/Management.java
Normal file
427
src/main/java/uk/org/whoami/authme/Management.java
Normal file
@ -0,0 +1,427 @@
|
||||
package uk.org.whoami.authme;
|
||||
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import me.muizers.Notifications.Notification;
|
||||
import net.md_5.bungee.api.connection.ConnectedPlayer;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
|
||||
import uk.org.whoami.authme.api.API;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.cache.backup.FileCache;
|
||||
import uk.org.whoami.authme.cache.limbo.LimboCache;
|
||||
import uk.org.whoami.authme.cache.limbo.LimboPlayer;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
import uk.org.whoami.authme.events.AuthMeTeleportEvent;
|
||||
import uk.org.whoami.authme.events.LoginEvent;
|
||||
import uk.org.whoami.authme.events.RestoreInventoryEvent;
|
||||
import uk.org.whoami.authme.events.SpawnTeleportEvent;
|
||||
import uk.org.whoami.authme.listener.AuthMePlayerListener;
|
||||
import uk.org.whoami.authme.security.PasswordSecurity;
|
||||
import uk.org.whoami.authme.security.RandomString;
|
||||
import uk.org.whoami.authme.settings.Messages;
|
||||
import uk.org.whoami.authme.settings.PlayersLogs;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
public class Management {
|
||||
|
||||
private Messages m = Messages.getInstance();
|
||||
private PlayersLogs pllog = PlayersLogs.getInstance();
|
||||
private Utils utils = Utils.getInstance();
|
||||
private FileCache playerCache = new FileCache();
|
||||
private DataSource database;
|
||||
public AuthMe plugin;
|
||||
private boolean passpartu = false;
|
||||
public static RandomString rdm = new RandomString(Settings.captchaLength);
|
||||
public PluginManager pm;
|
||||
|
||||
public Management(DataSource database, AuthMe plugin) {
|
||||
this.database = database;
|
||||
this.plugin = plugin;
|
||||
this.pm = plugin.getServer().getPluginManager();
|
||||
}
|
||||
|
||||
public Management(DataSource database, boolean passpartu, AuthMe plugin) {
|
||||
this.database = database;
|
||||
this.passpartu = passpartu;
|
||||
this.plugin = plugin;
|
||||
this.pm = plugin.getServer().getPluginManager();
|
||||
}
|
||||
|
||||
public String performLogin(Player player, String password) {
|
||||
|
||||
String name = player.getName().toLowerCase();
|
||||
String ip = player.getAddress().getAddress().getHostAddress();
|
||||
if (Settings.bungee && player instanceof ProxiedPlayer) {
|
||||
ProxiedPlayer pPlayer = (ProxiedPlayer) player;
|
||||
ip = pPlayer.getAddress().getAddress().getHostAddress();
|
||||
} else if (Settings.bungee && player instanceof ConnectedPlayer) {
|
||||
ConnectedPlayer cPlayer = (ConnectedPlayer) player;
|
||||
ip = cPlayer.getAddress().getAddress().getHostAddress();
|
||||
}
|
||||
World world = player.getWorld();
|
||||
Location spawnLoc = world.getSpawnLocation();
|
||||
if (plugin.mv != null) {
|
||||
try {
|
||||
spawnLoc = plugin.mv.getMVWorldManager().getMVWorld(world).getSpawnLocation();
|
||||
} catch (NullPointerException npe) {
|
||||
} catch (ClassCastException cce) {
|
||||
} catch (NoClassDefFoundError ncdfe) {
|
||||
}
|
||||
}
|
||||
|
||||
if (PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
return m._("logged_in");
|
||||
|
||||
}
|
||||
|
||||
if (!database.isAuthAvailable(player.getName().toLowerCase())) {
|
||||
return m._("user_unknown");
|
||||
}
|
||||
|
||||
PlayerAuth pAuth = database.getAuth(name);
|
||||
// if Mysql is unavaible
|
||||
if(pAuth == null)
|
||||
return m._("user_unknown");
|
||||
|
||||
//if columnGroup is set
|
||||
if(!Settings.getMySQLColumnGroup.isEmpty() && pAuth.getGroupId() == Settings.getNonActivatedGroup) {
|
||||
return m._("vb_nonActiv");
|
||||
}
|
||||
|
||||
String hash = pAuth.getHash();
|
||||
String email = pAuth.getEmail();
|
||||
|
||||
|
||||
try {
|
||||
if(!passpartu) {
|
||||
if (Settings.useCaptcha) {
|
||||
if(!plugin.captcha.containsKey(name)) {
|
||||
plugin.captcha.put(name, 1);
|
||||
} else {
|
||||
int i = plugin.captcha.get(name) + 1;
|
||||
plugin.captcha.remove(name);
|
||||
plugin.captcha.put(name, i);
|
||||
}
|
||||
|
||||
if(plugin.captcha.containsKey(name) && plugin.captcha.get(name) > Settings.maxLoginTry) {
|
||||
player.sendMessage(m._("need_captcha"));
|
||||
plugin.cap.put(name, rdm.nextString());
|
||||
return "Type : /captcha " + plugin.cap.get(name);
|
||||
} else if (plugin.captcha.containsKey(name) && plugin.captcha.get(name) > Settings.maxLoginTry) {
|
||||
try {
|
||||
plugin.captcha.remove(name);
|
||||
plugin.cap.remove(name);
|
||||
} catch (NullPointerException npe) {
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if (PasswordSecurity.comparePasswordWithHash(password, hash, name)) {
|
||||
PlayerAuth auth = new PlayerAuth(name, hash, ip, new Date().getTime(), email);
|
||||
|
||||
database.updateSession(auth);
|
||||
PlayerCache.getInstance().addPlayer(auth);
|
||||
LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name);
|
||||
if (limbo != null) {
|
||||
|
||||
|
||||
player.setOp(limbo.getOperator());
|
||||
|
||||
this.utils.addNormal(player, limbo.getGroup());
|
||||
|
||||
|
||||
if ((Settings.isTeleportToSpawnEnabled.booleanValue()) && (!Settings.isForceSpawnLocOnJoinEnabled.booleanValue() && Settings.getForcedWorlds.contains(player.getWorld().getName())))
|
||||
{
|
||||
if ((Settings.isSaveQuitLocationEnabled.booleanValue()) && (this.database.getAuth(name).getQuitLocY() != 0))
|
||||
{
|
||||
this.utils.packCoords(this.database.getAuth(name).getQuitLocX(), this.database.getAuth(name).getQuitLocY(), this.database.getAuth(name).getQuitLocZ(), player);
|
||||
}
|
||||
else {
|
||||
|
||||
AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, limbo.getLoc());
|
||||
pm.callEvent(tpEvent);
|
||||
if(!tpEvent.isCancelled()) {
|
||||
if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) {
|
||||
tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load();
|
||||
}
|
||||
player.teleport(tpEvent.getTo());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else if (Settings.isForceSpawnLocOnJoinEnabled.booleanValue() && Settings.getForcedWorlds.contains(player.getWorld().getName())) {
|
||||
SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, player.getLocation(), spawnLoc, true);
|
||||
pm.callEvent(tpEvent);
|
||||
if(!tpEvent.isCancelled()) {
|
||||
if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) {
|
||||
tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load();
|
||||
}
|
||||
player.teleport(tpEvent.getTo());
|
||||
}
|
||||
}
|
||||
else if ((Settings.isSaveQuitLocationEnabled.booleanValue()) && (this.database.getAuth(name).getQuitLocY() != 0))
|
||||
{
|
||||
this.utils.packCoords(this.database.getAuth(name).getQuitLocX(), this.database.getAuth(name).getQuitLocY(), this.database.getAuth(name).getQuitLocZ(), player);
|
||||
}
|
||||
else {
|
||||
AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, limbo.getLoc());
|
||||
pm.callEvent(tpEvent);
|
||||
if(!tpEvent.isCancelled()) {
|
||||
if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) {
|
||||
tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load();
|
||||
}
|
||||
player.teleport(tpEvent.getTo());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
player.setGameMode(GameMode.getByValue(limbo.getGameMode()));
|
||||
|
||||
if (Settings.protectInventoryBeforeLogInEnabled.booleanValue() && player.hasPlayedBefore()) {
|
||||
RestoreInventoryEvent event = new RestoreInventoryEvent(player, limbo.getInventory(), limbo.getArmour());
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
API.setPlayerInventory(player, limbo.getInventory(), limbo.getArmour());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
player.getServer().getScheduler().cancelTask(limbo.getTimeoutTaskId());
|
||||
player.getServer().getScheduler().cancelTask(limbo.getMessageTaskId());
|
||||
LimboCache.getInstance().deleteLimboPlayer(name);
|
||||
if (this.playerCache.doesCacheExist(name)) {
|
||||
this.playerCache.removeCache(name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Little Work Around under Registration Group Switching for admins that
|
||||
* add Registration thru a web Scripts.
|
||||
*/
|
||||
if ( Settings.isPermissionCheckEnabled && AuthMe.permission.playerInGroup(player, Settings.unRegisteredGroup) && !Settings.unRegisteredGroup.isEmpty() ) {
|
||||
AuthMe.permission.playerRemoveGroup(player.getWorld(), player.getName(), Settings.unRegisteredGroup);
|
||||
AuthMe.permission.playerAddGroup(player.getWorld(), player.getName(), Settings.getRegisteredGroup);
|
||||
}
|
||||
|
||||
try {
|
||||
if (!PlayersLogs.players.contains(player.getName()))
|
||||
PlayersLogs.players.add(player.getName());
|
||||
pllog.save();
|
||||
} catch (NullPointerException ex) {
|
||||
|
||||
}
|
||||
|
||||
Bukkit.getServer().getPluginManager().callEvent(new LoginEvent(player, true));
|
||||
if (Settings.useCaptcha) {
|
||||
if(plugin.captcha.containsKey(name)) {
|
||||
plugin.captcha.remove(name);
|
||||
}
|
||||
if(plugin.cap.containsKey(name)) {
|
||||
plugin.cap.containsKey(name);
|
||||
}
|
||||
}
|
||||
player.sendMessage(m._("login"));
|
||||
displayOtherAccounts(auth);
|
||||
if(!Settings.noConsoleSpam)
|
||||
ConsoleLogger.info(player.getDisplayName() + " logged in!");
|
||||
if(plugin.notifications != null) {
|
||||
plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " logged in!"));
|
||||
}
|
||||
player.saveData();
|
||||
|
||||
} else {
|
||||
if (!Settings.noConsoleSpam)
|
||||
ConsoleLogger.info(player.getDisplayName() + " used the wrong password");
|
||||
if (Settings.isKickOnWrongPasswordEnabled) {
|
||||
int gm = AuthMePlayerListener.gameMode.get(name);
|
||||
player.setGameMode(GameMode.getByValue(gm));
|
||||
player.kickPlayer(m._("wrong_pwd"));
|
||||
} else {
|
||||
return (m._("wrong_pwd"));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// need for bypass password check if passpartu command is enabled
|
||||
PlayerAuth auth = new PlayerAuth(name, hash, ip, new Date().getTime(), email);
|
||||
database.updateSession(auth);
|
||||
PlayerCache.getInstance().addPlayer(auth);
|
||||
LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name);
|
||||
if (limbo != null) {
|
||||
|
||||
|
||||
player.setOp(limbo.getOperator());
|
||||
|
||||
this.utils.addNormal(player, limbo.getGroup());
|
||||
|
||||
|
||||
if ((Settings.isTeleportToSpawnEnabled.booleanValue()) && (!Settings.isForceSpawnLocOnJoinEnabled.booleanValue() && Settings.getForcedWorlds.contains(player.getWorld().getName())))
|
||||
{
|
||||
if ((Settings.isSaveQuitLocationEnabled.booleanValue()) && (this.database.getAuth(name).getQuitLocY() != 0)) {
|
||||
Location quitLoc = new Location(player.getWorld(), this.database.getAuth(name).getQuitLocX() + 0.5D, this.database.getAuth(name).getQuitLocY() + 0.5D, this.database.getAuth(name).getQuitLocZ() + 0.5D);
|
||||
AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, quitLoc);
|
||||
pm.callEvent(tpEvent);
|
||||
if(!tpEvent.isCancelled()) {
|
||||
if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) {
|
||||
tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load();
|
||||
}
|
||||
player.teleport(tpEvent.getTo());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, limbo.getLoc());
|
||||
pm.callEvent(tpEvent);
|
||||
if(!tpEvent.isCancelled()) {
|
||||
if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) {
|
||||
tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load();
|
||||
}
|
||||
player.teleport(tpEvent.getTo());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else if (Settings.isForceSpawnLocOnJoinEnabled.booleanValue() && Settings.getForcedWorlds.contains(player.getWorld().getName())) {
|
||||
|
||||
SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, player.getLocation(), spawnLoc, true);
|
||||
pm.callEvent(tpEvent);
|
||||
if(!tpEvent.isCancelled()) {
|
||||
if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) {
|
||||
tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load();
|
||||
}
|
||||
player.teleport(tpEvent.getTo());
|
||||
}
|
||||
}
|
||||
else if ((Settings.isSaveQuitLocationEnabled.booleanValue()) && (this.database.getAuth(name).getQuitLocY() != 0)) {
|
||||
Location quitLoc = new Location(player.getWorld(), this.database.getAuth(name).getQuitLocX() + 0.5D, this.database.getAuth(name).getQuitLocY() + 0.5D, this.database.getAuth(name).getQuitLocZ() + 0.5D);
|
||||
AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, quitLoc);
|
||||
pm.callEvent(tpEvent);
|
||||
if(!tpEvent.isCancelled()) {
|
||||
if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) {
|
||||
tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load();
|
||||
}
|
||||
player.teleport(tpEvent.getTo());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, limbo.getLoc());
|
||||
pm.callEvent(tpEvent);
|
||||
if(!tpEvent.isCancelled()) {
|
||||
if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) {
|
||||
tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load();
|
||||
}
|
||||
player.teleport(tpEvent.getTo());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
player.setGameMode(GameMode.getByValue(limbo.getGameMode()));
|
||||
|
||||
if (Settings.protectInventoryBeforeLogInEnabled.booleanValue() && player.hasPlayedBefore()) {
|
||||
RestoreInventoryEvent event = new RestoreInventoryEvent(player, limbo.getInventory(), limbo.getArmour());
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
API.setPlayerInventory(player, limbo.getInventory(), limbo.getArmour());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
player.getServer().getScheduler().cancelTask(limbo.getTimeoutTaskId());
|
||||
player.getServer().getScheduler().cancelTask(limbo.getMessageTaskId());
|
||||
LimboCache.getInstance().deleteLimboPlayer(name);
|
||||
if (this.playerCache.doesCacheExist(name)) {
|
||||
this.playerCache.removeCache(name);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Little Work Around under Registration Group Switching for admins that
|
||||
* add Registration thru a web Scripts.
|
||||
*/
|
||||
if ( Settings.isPermissionCheckEnabled && AuthMe.permission.playerInGroup(player, Settings.unRegisteredGroup) && !Settings.unRegisteredGroup.isEmpty() ) {
|
||||
AuthMe.permission.playerRemoveGroup(player.getWorld(), player.getName(), Settings.unRegisteredGroup);
|
||||
AuthMe.permission.playerAddGroup(player.getWorld(), player.getName(), Settings.getRegisteredGroup);
|
||||
}
|
||||
|
||||
try {
|
||||
if (!PlayersLogs.players.contains(player.getName()))
|
||||
PlayersLogs.players.add(player.getName());
|
||||
pllog.save();
|
||||
} catch (NullPointerException ex) { }
|
||||
|
||||
Bukkit.getServer().getPluginManager().callEvent(new LoginEvent(player, true));
|
||||
if (Settings.useCaptcha) {
|
||||
if(plugin.captcha.containsKey(name)) {
|
||||
plugin.captcha.remove(name);
|
||||
}
|
||||
if(plugin.cap.containsKey(name)) {
|
||||
plugin.cap.containsKey(name);
|
||||
}
|
||||
}
|
||||
player.sendMessage(m._("login"));
|
||||
displayOtherAccounts(auth);
|
||||
if(!Settings.noConsoleSpam)
|
||||
ConsoleLogger.info(player.getDisplayName() + " logged in!");
|
||||
if(plugin.notifications != null) {
|
||||
plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " logged in!"));
|
||||
}
|
||||
player.saveData();
|
||||
this.passpartu = false;
|
||||
}
|
||||
|
||||
} catch (NoSuchAlgorithmException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return (m._("error"));
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
private void displayOtherAccounts(PlayerAuth auth) {
|
||||
if (!Settings.displayOtherAccounts) {
|
||||
return;
|
||||
}
|
||||
if (auth == null) {
|
||||
return;
|
||||
}
|
||||
if (this.database.getAllAuthsByName(auth).isEmpty() || this.database.getAllAuthsByName(auth) == null) {
|
||||
return;
|
||||
}
|
||||
if(this.database.getAllAuthsByName(auth).size() == 1) {
|
||||
return;
|
||||
}
|
||||
List<String> accountList = this.database.getAllAuthsByName(auth);
|
||||
String message = "[AuthMe] ";
|
||||
int i = 0;
|
||||
for (String account : accountList) {
|
||||
i++;
|
||||
message = message + account;
|
||||
if (i != accountList.size()) {
|
||||
message = message + ", ";
|
||||
} else {
|
||||
message = message + ".";
|
||||
}
|
||||
|
||||
}
|
||||
for (Player player : AuthMe.getInstance().getServer().getOnlinePlayers()) {
|
||||
if (player.hasPermission("authme.seeOtherAccounts")) {
|
||||
player.sendMessage("[AuthMe] The player " + auth.getNickname() + " has " + String.valueOf(accountList.size()) + " accounts");
|
||||
player.sendMessage(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
160
src/main/java/uk/org/whoami/authme/PerformBackup.java
Normal file
160
src/main/java/uk/org/whoami/authme/PerformBackup.java
Normal file
@ -0,0 +1,160 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package uk.org.whoami.authme;
|
||||
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author stefano
|
||||
*/
|
||||
public class PerformBackup {
|
||||
|
||||
private String dbName = Settings.getMySQLDatabase;
|
||||
private String dbUserName = Settings.getMySQLUsername;
|
||||
private String dbPassword = Settings.getMySQLPassword;
|
||||
private String tblname = Settings.getMySQLTablename;
|
||||
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd_HH-mm");
|
||||
String dateString = format.format( new Date() );
|
||||
private String path = AuthMe.getInstance().getDataFolder()+"/backups/backup"+dateString;
|
||||
private AuthMe instance;
|
||||
|
||||
public PerformBackup(AuthMe instance) {
|
||||
this.setInstance(instance);
|
||||
|
||||
}
|
||||
|
||||
public boolean DoBackup() {
|
||||
|
||||
switch(Settings.getDataSource) {
|
||||
case FILE: return FileBackup("auths.db");
|
||||
|
||||
case MYSQL: return MySqlBackup();
|
||||
|
||||
case SQLITE: return FileBackup(Settings.getMySQLDatabase+".db");
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean MySqlBackup() {
|
||||
File dirBackup = new File(AuthMe.getInstance().getDataFolder()+"/backups");
|
||||
|
||||
if(!dirBackup.exists())
|
||||
dirBackup.mkdir();
|
||||
if(checkWindows(Settings.backupWindowsPath)) {
|
||||
String executeCmd = Settings.backupWindowsPath+"\\bin\\mysqldump.exe -u " + dbUserName + " -p" + dbPassword + " " + dbName + " --tables " + tblname + " -r " + path+".sql";
|
||||
//ConsoleLogger.info(executeCmd);
|
||||
Process runtimeProcess;
|
||||
try {
|
||||
//System.out.println("path "+path+" cmd "+executeCmd);
|
||||
runtimeProcess = Runtime.getRuntime().exec(executeCmd);
|
||||
int processComplete = runtimeProcess.waitFor();
|
||||
|
||||
if (processComplete == 0) {
|
||||
ConsoleLogger.info("Backup created successfully");
|
||||
return true;
|
||||
} else {
|
||||
ConsoleLogger.info("Could not create the backup");
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
String executeCmd = "mysqldump -u " + dbUserName + " -p" + dbPassword + " " + dbName + " --tables " + tblname + " -r " + path+".sql";
|
||||
Process runtimeProcess;
|
||||
try {
|
||||
//System.out.println("path "+path+" cmd "+executeCmd);
|
||||
runtimeProcess = Runtime.getRuntime().exec(executeCmd);
|
||||
int processComplete = runtimeProcess.waitFor();
|
||||
|
||||
if (processComplete == 0) {
|
||||
ConsoleLogger.info("Backup created successfully");
|
||||
return true;
|
||||
} else {
|
||||
ConsoleLogger.info("Could not create the backup");
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean FileBackup(String backend) {
|
||||
File dirBackup = new File(AuthMe.getInstance().getDataFolder()+"/backups");
|
||||
|
||||
if(!dirBackup.exists())
|
||||
dirBackup.mkdir();
|
||||
|
||||
try {
|
||||
|
||||
copy(new File("plugins/AuthMe/"+backend),new File(path+".db"));
|
||||
return true;
|
||||
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if we are under Windows and correct location
|
||||
* of mysqldump.exe otherwise return error.
|
||||
*/
|
||||
private boolean checkWindows(String windowsPath) {
|
||||
String isWin = System.getProperty("os.name").toLowerCase();
|
||||
|
||||
if(isWin.indexOf("win") >= 0) {
|
||||
//ConsoleLogger.info(windowsPath+"\\bin\\mysqldump.exe");
|
||||
if(new File(windowsPath+"\\bin\\mysqldump.exe").exists()) {
|
||||
return true;
|
||||
} else {
|
||||
ConsoleLogger.showError("Mysql Windows Path is incorrect please check it");
|
||||
return true;
|
||||
}
|
||||
} else return false;
|
||||
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Copyr src bytefile into dst file
|
||||
*/
|
||||
void copy(File src, File dst) throws IOException {
|
||||
InputStream in = new FileInputStream(src);
|
||||
OutputStream out = new FileOutputStream(dst);
|
||||
|
||||
// Transfer bytes from in to out
|
||||
byte[] buf = new byte[1024];
|
||||
int len;
|
||||
while ((len = in.read(buf)) > 0) {
|
||||
out.write(buf, 0, len);
|
||||
}
|
||||
in.close();
|
||||
out.close();
|
||||
}
|
||||
|
||||
public void setInstance(AuthMe instance) {
|
||||
this.instance = instance;
|
||||
}
|
||||
|
||||
public AuthMe getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
}
|
88
src/main/java/uk/org/whoami/authme/SendMailSSL.java
Normal file
88
src/main/java/uk/org/whoami/authme/SendMailSSL.java
Normal file
@ -0,0 +1,88 @@
|
||||
package uk.org.whoami.authme;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.Properties;
|
||||
import javax.mail.Message;
|
||||
import javax.mail.MessagingException;
|
||||
import javax.mail.PasswordAuthentication;
|
||||
import javax.mail.Session;
|
||||
import javax.mail.Transport;
|
||||
import javax.mail.internet.InternetAddress;
|
||||
import javax.mail.internet.MimeMessage;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
public class SendMailSSL {
|
||||
|
||||
public AuthMe instance;
|
||||
|
||||
public SendMailSSL(AuthMe instance) {
|
||||
this.instance = instance;
|
||||
}
|
||||
public void main(final PlayerAuth auth, final String newPass) {
|
||||
|
||||
String sendername;
|
||||
|
||||
if (Settings.getmailSenderName.isEmpty() || Settings.getmailSenderName == null) {
|
||||
sendername = Settings.getmailAccount;
|
||||
} else {
|
||||
sendername = Settings.getmailSenderName;
|
||||
}
|
||||
|
||||
Properties props = new Properties();
|
||||
props.put("mail.smtp.host", Settings.getmailSMTP);
|
||||
props.put("mail.smtp.socketFactory.port", String.valueOf(Settings.getMailPort));
|
||||
props.put("mail.smtp.socketFactory.class",
|
||||
"javax.net.ssl.SSLSocketFactory");
|
||||
props.put("mail.smtp.auth", "true");
|
||||
props.put("mail.smtp.port", String.valueOf(Settings.getMailPort));
|
||||
|
||||
Session session = Session.getInstance(props,
|
||||
new javax.mail.Authenticator() {
|
||||
protected PasswordAuthentication getPasswordAuthentication() {
|
||||
return new PasswordAuthentication(Settings.getmailAccount,Settings.getmailPassword);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
|
||||
final Message message = new MimeMessage(session);
|
||||
try {
|
||||
message.setFrom(new InternetAddress(Settings.getmailAccount, sendername));
|
||||
} catch (UnsupportedEncodingException uee) {
|
||||
message.setFrom(new InternetAddress(Settings.getmailAccount));
|
||||
}
|
||||
message.setRecipients(Message.RecipientType.TO,
|
||||
InternetAddress.parse(auth.getEmail()));
|
||||
message.setSubject(Settings.getMailSubject);
|
||||
String text = Settings.getMailText;
|
||||
text = text.replaceAll("<playername>", auth.getNickname());
|
||||
text = text.replaceAll("<servername>", instance.getServer().getServerName());
|
||||
text = text.replaceAll("<generatedpass>", newPass);
|
||||
message.setText(text);
|
||||
|
||||
Bukkit.getScheduler().runTaskAsynchronously(instance, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Transport.send(message);
|
||||
} catch (MessagingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if(!Settings.noConsoleSpam)
|
||||
ConsoleLogger.info("Email sent to : " + auth.getNickname());
|
||||
|
||||
} catch (MessagingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
270
src/main/java/uk/org/whoami/authme/Utils.java
Normal file
270
src/main/java/uk/org/whoami/authme/Utils.java
Normal file
@ -0,0 +1,270 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package uk.org.whoami.authme;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.util.Iterator;
|
||||
import java.util.Random;
|
||||
import java.util.Scanner;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import uk.org.whoami.authme.events.AuthMeTeleportEvent;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author stefano
|
||||
*/
|
||||
public class Utils {
|
||||
//private Settings settings = Settings.getInstance();
|
||||
private String currentGroup;
|
||||
private static Utils singleton;
|
||||
private String unLoggedGroup = Settings.getUnloggedinGroup;
|
||||
BukkitTask id;
|
||||
/*
|
||||
public Utils(Player player) {
|
||||
this.player = player;
|
||||
|
||||
}
|
||||
*/
|
||||
public void setGroup(Player player, groupType group) {
|
||||
if (!player.isOnline())
|
||||
return;
|
||||
if(!Settings.isPermissionCheckEnabled)
|
||||
return;
|
||||
|
||||
switch(group) {
|
||||
case UNREGISTERED: {
|
||||
currentGroup = AuthMe.permission.getPrimaryGroup(player);
|
||||
AuthMe.permission.playerRemoveGroup(player, currentGroup);
|
||||
AuthMe.permission.playerAddGroup(player, Settings.unRegisteredGroup);
|
||||
break;
|
||||
}
|
||||
case REGISTERED: {
|
||||
currentGroup = AuthMe.permission.getPrimaryGroup(player);
|
||||
AuthMe.permission.playerRemoveGroup(player, currentGroup);
|
||||
AuthMe.permission.playerAddGroup(player, Settings.getRegisteredGroup);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
public String removeAll(Player player) {
|
||||
if(!Utils.getInstance().useGroupSystem()){
|
||||
return null;
|
||||
}
|
||||
|
||||
if( !Settings.getJoinPermissions.isEmpty() ) {
|
||||
hasPermOnJoin(player);
|
||||
}
|
||||
|
||||
this.currentGroup = AuthMe.permission.getPrimaryGroup(player.getWorld(),player.getName().toString());
|
||||
//System.out.println("current grop" + currentGroup);
|
||||
if(AuthMe.permission.playerRemoveGroup(player.getWorld(),player.getName().toString(), currentGroup) && AuthMe.permission.playerAddGroup(player.getWorld(),player.getName().toString(),this.unLoggedGroup)) {
|
||||
|
||||
return currentGroup;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
public boolean addNormal(Player player, String group) {
|
||||
if(!Utils.getInstance().useGroupSystem()){
|
||||
return false;
|
||||
}
|
||||
// System.out.println("in add normal");
|
||||
/* if (AuthMe.permission.playerRemove(this.player, "-*"))
|
||||
return true;
|
||||
*/
|
||||
if(AuthMe.permission.playerRemoveGroup(player.getWorld(),player.getName().toString(),this.unLoggedGroup) && AuthMe.permission.playerAddGroup(player.getWorld(),player.getName().toString(),group)) {
|
||||
//System.out.println("vecchio "+this.unLoggedGroup+ "nuovo" + group);
|
||||
return true;
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private String hasPermOnJoin(Player player) {
|
||||
/* if(Settings.getJoinPermissions.isEmpty())
|
||||
return null; */
|
||||
Iterator<String> iter = Settings.getJoinPermissions.iterator();
|
||||
while (iter.hasNext()) {
|
||||
String permission = iter.next();
|
||||
// System.out.println("permissions? "+ permission);
|
||||
|
||||
if(AuthMe.permission.playerHas(player, permission)){
|
||||
// System.out.println("player has permissions " +permission);
|
||||
AuthMe.permission.playerAddTransient(player, permission);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isUnrestricted(Player player) {
|
||||
|
||||
|
||||
if(Settings.getUnrestrictedName.isEmpty() || Settings.getUnrestrictedName == null)
|
||||
return false;
|
||||
|
||||
// System.out.println("name to escape "+player.getName());
|
||||
if(Settings.getUnrestrictedName.contains(player.getName())) {
|
||||
// System.out.println("name to escape correctly"+player.getName());
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
|
||||
}
|
||||
public static Utils getInstance() {
|
||||
|
||||
singleton = new Utils();
|
||||
|
||||
return singleton;
|
||||
}
|
||||
|
||||
private boolean useGroupSystem() {
|
||||
|
||||
if(Settings.isPermissionCheckEnabled && !Settings.getUnloggedinGroup.isEmpty()) {
|
||||
return true;
|
||||
} return false;
|
||||
|
||||
}
|
||||
|
||||
public void packCoords(int x, int y, int z, final Player pl)
|
||||
{
|
||||
final World world = pl.getWorld();
|
||||
final int fY = y;
|
||||
final Location loc = new Location(world, x + 0.5D, y + 0.6D, z + 0.5D);
|
||||
|
||||
AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(pl, loc);
|
||||
AuthMe.getInstance().getServer().getPluginManager().callEvent(tpEvent);
|
||||
if(!tpEvent.isCancelled()) {
|
||||
if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) {
|
||||
tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load();
|
||||
}
|
||||
pl.teleport(tpEvent.getTo());
|
||||
}
|
||||
|
||||
id = Bukkit.getScheduler().runTaskTimerAsynchronously(AuthMe.authme, new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run() {
|
||||
int current = (int)pl.getLocation().getY();
|
||||
World currentWorld = pl.getWorld();
|
||||
|
||||
if (current != fY && world.getName() == currentWorld.getName()) {
|
||||
pl.teleport(loc);
|
||||
}
|
||||
}
|
||||
|
||||
}, 1L, 20L);
|
||||
|
||||
|
||||
Bukkit.getScheduler().runTaskLaterAsynchronously(AuthMe.authme, new Runnable()
|
||||
{
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
id.cancel();
|
||||
|
||||
}
|
||||
|
||||
}, 60L);
|
||||
}
|
||||
|
||||
/*
|
||||
* Random Token for passpartu
|
||||
*
|
||||
*/
|
||||
public boolean obtainToken() {
|
||||
File file = new File("plugins/AuthMe/passpartu.token");
|
||||
|
||||
if (file.exists())
|
||||
file.delete();
|
||||
|
||||
FileWriter writer = null;
|
||||
try {
|
||||
file.createNewFile();
|
||||
writer = new FileWriter(file);
|
||||
String token = generateToken();
|
||||
writer.write(token+":"+System.currentTimeMillis()/1000+"\r\n");
|
||||
writer.flush();
|
||||
System.out.println("[AuthMe] Security passpartu token: "+ token);
|
||||
writer.close();
|
||||
return true;
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read Toekn
|
||||
*/
|
||||
public boolean readToken(String inputToken) {
|
||||
File file = new File("plugins/AuthMe/passpartu.token");
|
||||
|
||||
if (!file.exists())
|
||||
return false;
|
||||
|
||||
if (inputToken.isEmpty() )
|
||||
return false;
|
||||
|
||||
Scanner reader = null;
|
||||
try {
|
||||
reader = new Scanner(file);
|
||||
|
||||
while (reader.hasNextLine()) {
|
||||
final String line = reader.nextLine();
|
||||
|
||||
if (line.contains(":")) {
|
||||
String[] tokenInfo = line.split(":");
|
||||
//System.err.println("Authme input token "+inputToken+" saved token "+tokenInfo[0]);
|
||||
//System.err.println("Authme time "+System.currentTimeMillis()/1000+"saved time "+Integer.parseInt(tokenInfo[1]));
|
||||
if(tokenInfo[0].equals(inputToken) && System.currentTimeMillis()/1000-30 <= Integer.parseInt(tokenInfo[1]) ) {
|
||||
file.delete();
|
||||
reader.close();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
reader.close();
|
||||
return false;
|
||||
}
|
||||
/*
|
||||
* Generate Random Token
|
||||
*/
|
||||
private String generateToken() {
|
||||
// obtain new random token
|
||||
Random rnd = new Random ();
|
||||
char[] arr = new char[5];
|
||||
|
||||
for (int i=0; i<5; i++) {
|
||||
int n = rnd.nextInt (36);
|
||||
arr[i] = (char) (n < 10 ? '0'+n : 'a'+n-10);
|
||||
}
|
||||
|
||||
return new String(arr);
|
||||
}
|
||||
public enum groupType {
|
||||
UNREGISTERED, REGISTERED, NOTLOGGEDIN, LOGGEDIN
|
||||
}
|
||||
|
||||
}
|
191
src/main/java/uk/org/whoami/authme/api/API.java
Normal file
191
src/main/java/uk/org/whoami/authme/api/API.java
Normal file
@ -0,0 +1,191 @@
|
||||
package uk.org.whoami.authme.api;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.Utils;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
import uk.org.whoami.authme.datasource.DataSource.DataSourceType;
|
||||
import uk.org.whoami.authme.security.PasswordSecurity.HashAlgorithm;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
public class API {
|
||||
|
||||
public AuthMe instance;
|
||||
public DataSource database;
|
||||
|
||||
public API(AuthMe instance, DataSource database) {
|
||||
this.instance = instance;
|
||||
this.database = database;
|
||||
}
|
||||
/**
|
||||
* Hook into AuthMe
|
||||
* @return AuthMe instance
|
||||
*/
|
||||
public static AuthMe hookAuthMe() {
|
||||
Plugin plugin = Bukkit.getServer().getPluginManager().getPlugin("AuthMe");
|
||||
if (plugin == null && !(plugin instanceof AuthMe)) {
|
||||
return null;
|
||||
}
|
||||
return (AuthMe) plugin;
|
||||
}
|
||||
|
||||
public AuthMe getPlugin() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param player
|
||||
* @return true if player is authenticate
|
||||
*/
|
||||
public static boolean isAuthenticated(Player player) {
|
||||
return PlayerCache.getInstance().isAuthenticated(player.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param player
|
||||
* @return true if player is a npc
|
||||
*/
|
||||
public boolean isaNPC(Player player) {
|
||||
return instance.getCitizensCommunicator().isNPC(player, instance);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param player
|
||||
* @return true if the player is unrestricted
|
||||
*/
|
||||
public static boolean isUnrestricted(Player player) {
|
||||
return Utils.getInstance().isUnrestricted(player);
|
||||
}
|
||||
|
||||
public static boolean isChatAllowed() {
|
||||
return Settings.isChatAllowed;
|
||||
}
|
||||
|
||||
public static boolean isAllowRestrictedIp() {
|
||||
return Settings.isAllowRestrictedIp;
|
||||
}
|
||||
|
||||
public static boolean isBackupActivated() {
|
||||
return Settings.isBackupActivated;
|
||||
}
|
||||
|
||||
public static boolean isForceSpawnLocOnJoinEnabled() {
|
||||
return Settings.isForceSpawnLocOnJoinEnabled;
|
||||
}
|
||||
|
||||
public static DataSourceType getDataSource() {
|
||||
return Settings.getDataSource;
|
||||
}
|
||||
|
||||
public static int getMovementRadius() {
|
||||
return Settings.getMovementRadius;
|
||||
}
|
||||
|
||||
public static List<String> getJoinPermissions() {
|
||||
return Settings.getJoinPermissions;
|
||||
}
|
||||
|
||||
public static Boolean isPasspartuEnable() {
|
||||
return Settings.enablePasspartu;
|
||||
}
|
||||
|
||||
public static String getcUnrestrictedName() {
|
||||
return Settings.getcUnrestrictedName;
|
||||
}
|
||||
|
||||
public static Boolean getEnablePasswordVerifier() {
|
||||
return Settings.getEnablePasswordVerifier;
|
||||
}
|
||||
|
||||
public static int getMaxNickLength() {
|
||||
return Settings.getMaxNickLength;
|
||||
}
|
||||
|
||||
public static int getMinNickLength() {
|
||||
return Settings.getMinNickLength;
|
||||
}
|
||||
|
||||
public static Array getLastLocationColumns() {
|
||||
Array columns = null;
|
||||
Array.set(columns, 0, Settings.getMySQLlastlocX);
|
||||
Array.set(columns, 1, Settings.getMySQLlastlocY);
|
||||
Array.set(columns, 2, Settings.getMySQLlastlocZ);
|
||||
return columns;
|
||||
}
|
||||
|
||||
public static Location getLastLocation(Player player) {
|
||||
try {
|
||||
PlayerAuth auth = PlayerCache.getInstance().getAuth(player.getName());
|
||||
|
||||
if (auth != null) {
|
||||
Location loc = new Location(player.getWorld(), auth.getQuitLocX(), auth.getQuitLocY() , auth.getQuitLocZ());
|
||||
return loc;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
} catch (NullPointerException ex) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static String getNickRegex() {
|
||||
return Settings.getNickRegex;
|
||||
}
|
||||
|
||||
public static int getPasswordMinLen() {
|
||||
return Settings.getPasswordMinLen;
|
||||
}
|
||||
|
||||
public static HashAlgorithm getPasswordHash() {
|
||||
return Settings.getPasswordHash;
|
||||
}
|
||||
|
||||
public static int getRegistrationTimeout() {
|
||||
return Settings.getRegistrationTimeout;
|
||||
}
|
||||
|
||||
public static int getSessionTimeout() {
|
||||
return Settings.getSessionTimeout;
|
||||
}
|
||||
|
||||
public static String getUnloggedinGroup() {
|
||||
return Settings.getUnloggedinGroup;
|
||||
}
|
||||
|
||||
public static void setPlayerInventory(Player player, ItemStack[] content, ItemStack[] armor) {
|
||||
try {
|
||||
player.getInventory().setContents(content);
|
||||
player.getInventory().setArmorContents(armor);
|
||||
} catch (NullPointerException npe) {
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void saveAuth(final PlayerAuth auth) {
|
||||
instance.getServer().getScheduler().runTask(instance, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
database.saveAuth(auth);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
223
src/main/java/uk/org/whoami/authme/cache/auth/PlayerAuth.java
vendored
Normal file
223
src/main/java/uk/org/whoami/authme/cache/auth/PlayerAuth.java
vendored
Normal file
@ -0,0 +1,223 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.cache.auth;
|
||||
|
||||
import uk.org.whoami.authme.security.PasswordSecurity;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
|
||||
public class PlayerAuth {
|
||||
|
||||
private String nickname;
|
||||
private String hash;
|
||||
private String ip = "198.18.0.1";
|
||||
private long lastLogin;
|
||||
private int x = 0;
|
||||
private int y = 0;
|
||||
private int z = 0;
|
||||
private String salt = "";
|
||||
private String vBhash = null;
|
||||
private int groupId;
|
||||
private String email = "your@email.com";
|
||||
|
||||
public PlayerAuth(String nickname, String hash, String ip, long lastLogin) {
|
||||
this.nickname = nickname;
|
||||
this.hash = hash;
|
||||
this.ip = ip;
|
||||
this.lastLogin = lastLogin;
|
||||
}
|
||||
|
||||
public PlayerAuth(String nickname, String hash, String ip, long lastLogin, String email) {
|
||||
this.nickname = nickname;
|
||||
this.hash = hash;
|
||||
this.ip = ip;
|
||||
this.lastLogin = lastLogin;
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
public PlayerAuth(String nickname, int x, int y, int z) {
|
||||
this.nickname = nickname;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
public PlayerAuth(String nickname, String hash, String ip, long lastLogin, int x, int y, int z, String email) {
|
||||
this.nickname = nickname;
|
||||
this.hash = hash;
|
||||
this.ip = ip;
|
||||
this.lastLogin = lastLogin;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
//
|
||||
// This constructor is needed for Vbulletin board Auth!
|
||||
//
|
||||
public PlayerAuth(String nickname, String hash, String salt, int groupId, String ip, long lastLogin, int x, int y, int z, String email) {
|
||||
this.nickname = nickname;
|
||||
this.hash = hash;
|
||||
this.ip = ip;
|
||||
this.lastLogin = lastLogin;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
this.salt = salt;
|
||||
this.groupId = groupId;
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
// IPB Constructor with groups
|
||||
public PlayerAuth(String nickname, String hash, String salt, int groupId , String ip, long lastLogin) {
|
||||
this.nickname = nickname;
|
||||
this.hash = hash;
|
||||
this.ip = ip;
|
||||
this.lastLogin = lastLogin;
|
||||
this.salt = salt;
|
||||
this.groupId = groupId;
|
||||
}
|
||||
|
||||
// IPB Constructor without groups
|
||||
public PlayerAuth(String nickname, String hash, String salt, String ip, long lastLogin) {
|
||||
this.nickname = nickname;
|
||||
this.hash = hash;
|
||||
this.ip = ip;
|
||||
this.lastLogin = lastLogin;
|
||||
this.salt = salt;
|
||||
}
|
||||
|
||||
public PlayerAuth(String nickname, String hash, String salt, String ip, long lastLogin, int x, int y, int z, String email) {
|
||||
this.nickname = nickname;
|
||||
this.hash = hash;
|
||||
this.ip = ip;
|
||||
this.lastLogin = lastLogin;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
this.salt = salt;
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
|
||||
public PlayerAuth(String nickname, String hash, String ip, long lastLogin, int x, int y, int z) {
|
||||
this.nickname = nickname;
|
||||
this.hash = hash;
|
||||
this.ip = ip;
|
||||
this.lastLogin = lastLogin;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
this.email = "your@email.com";
|
||||
}
|
||||
|
||||
|
||||
public String getIp() {
|
||||
return ip;
|
||||
}
|
||||
|
||||
public String getNickname() {
|
||||
return nickname;
|
||||
}
|
||||
|
||||
public String getHash() {
|
||||
if(!salt.isEmpty() && Settings.getPasswordHash == PasswordSecurity.HashAlgorithm.MD5VB) {
|
||||
vBhash = "$MD5vb$"+salt+"$"+hash;
|
||||
// Compose Vbullettin Hash System!
|
||||
return vBhash;
|
||||
}
|
||||
else {
|
||||
return hash;
|
||||
}
|
||||
}
|
||||
|
||||
//Get Salt
|
||||
public String getSalt() {
|
||||
return this.salt;
|
||||
}
|
||||
|
||||
//
|
||||
// GroupId for unactivated User on Vbullettin Board
|
||||
//
|
||||
public int getGroupId() {
|
||||
return groupId;
|
||||
}
|
||||
|
||||
public int getQuitLocX() {
|
||||
return x;
|
||||
}
|
||||
public int getQuitLocY() {
|
||||
return y;
|
||||
}
|
||||
public int getQuitLocZ() {
|
||||
return z;
|
||||
}
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
public void setQuitLocX(int x) {
|
||||
this.x = x;
|
||||
}
|
||||
public void setQuitLocY(int y) {
|
||||
this.y = y;
|
||||
}
|
||||
public void setQuitLocZ(int z) {
|
||||
this.z = z;
|
||||
}
|
||||
public long getLastLogin() {
|
||||
return lastLogin;
|
||||
}
|
||||
|
||||
public void setHash(String hash) {
|
||||
this.hash = hash;
|
||||
}
|
||||
|
||||
public void setIp(String ip) {
|
||||
this.ip = ip;
|
||||
}
|
||||
|
||||
public void setLastLogin(long lastLogin) {
|
||||
this.lastLogin = lastLogin;
|
||||
}
|
||||
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
public void setSalt(String salt) {
|
||||
this.salt = salt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof PlayerAuth)) {
|
||||
return false;
|
||||
}
|
||||
PlayerAuth other = (PlayerAuth) obj;
|
||||
|
||||
return other.getIp().equals(this.ip) && other.getNickname().equals(this.nickname);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hashCode = 7;
|
||||
hashCode = 71 * hashCode + (this.nickname != null ? this.nickname.hashCode() : 0);
|
||||
hashCode = 71 * hashCode + (this.ip != null ? this.ip.hashCode() : 0);
|
||||
return hashCode;
|
||||
}
|
||||
}
|
57
src/main/java/uk/org/whoami/authme/cache/auth/PlayerCache.java
vendored
Normal file
57
src/main/java/uk/org/whoami/authme/cache/auth/PlayerCache.java
vendored
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.cache.auth;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
public class PlayerCache {
|
||||
|
||||
private static PlayerCache singleton = null;
|
||||
private HashMap<String, PlayerAuth> cache;
|
||||
|
||||
private PlayerCache() {
|
||||
cache = new HashMap<String, PlayerAuth>();
|
||||
}
|
||||
|
||||
public void addPlayer(PlayerAuth auth) {
|
||||
cache.put(auth.getNickname(), auth);
|
||||
}
|
||||
|
||||
public void updatePlayer(PlayerAuth auth) {
|
||||
cache.remove(auth.getNickname());
|
||||
cache.put(auth.getNickname(), auth);
|
||||
}
|
||||
|
||||
public void removePlayer(String user) {
|
||||
cache.remove(user);
|
||||
}
|
||||
|
||||
public boolean isAuthenticated(String user) {
|
||||
return cache.containsKey(user);
|
||||
}
|
||||
|
||||
public PlayerAuth getAuth(String user) {
|
||||
return cache.get(user);
|
||||
}
|
||||
|
||||
public static PlayerCache getInstance() {
|
||||
if (singleton == null) {
|
||||
singleton = new PlayerCache();
|
||||
}
|
||||
return singleton;
|
||||
}
|
||||
}
|
49
src/main/java/uk/org/whoami/authme/cache/backup/DataFileCache.java
vendored
Normal file
49
src/main/java/uk/org/whoami/authme/cache/backup/DataFileCache.java
vendored
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package uk.org.whoami.authme.cache.backup;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author stefano
|
||||
*/
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class DataFileCache {
|
||||
|
||||
|
||||
private ItemStack[] inventory;
|
||||
private ItemStack[] armor;
|
||||
private String group;
|
||||
private boolean operator;
|
||||
|
||||
public DataFileCache(ItemStack[] inventory, ItemStack[] armor){
|
||||
this.inventory = inventory;
|
||||
this.armor = armor;
|
||||
|
||||
}
|
||||
|
||||
public DataFileCache(ItemStack[] inventory, ItemStack[] armor, String group, boolean operator){
|
||||
this.inventory = inventory;
|
||||
this.armor = armor;
|
||||
this.group = group;
|
||||
this.operator = operator;
|
||||
}
|
||||
public ItemStack[] getInventory(){
|
||||
return inventory;
|
||||
}
|
||||
|
||||
public ItemStack[] getArmour(){
|
||||
return armor;
|
||||
}
|
||||
|
||||
public String getGroup(){
|
||||
return group;
|
||||
}
|
||||
|
||||
public Boolean getOperator(){
|
||||
return operator;
|
||||
}
|
||||
}
|
||||
|
228
src/main/java/uk/org/whoami/authme/cache/backup/FileCache.java
vendored
Normal file
228
src/main/java/uk/org/whoami/authme/cache/backup/FileCache.java
vendored
Normal file
@ -0,0 +1,228 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package uk.org.whoami.authme.cache.backup;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author stefano
|
||||
*/
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
|
||||
import java.util.Scanner;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import uk.org.whoami.authme.ConsoleLogger;
|
||||
|
||||
|
||||
public class FileCache {
|
||||
//private HashMap<Enchantment, Integer> ench;
|
||||
|
||||
|
||||
public FileCache() {
|
||||
final File folder = new File("cache");
|
||||
if (!folder.exists()) {
|
||||
folder.mkdirs();
|
||||
}
|
||||
}
|
||||
|
||||
public void createCache(String playername, DataFileCache playerData, String group, boolean operator) {
|
||||
final File file = new File("cache/" + playername
|
||||
+ ".cache");
|
||||
|
||||
if (file.exists()) {
|
||||
return;
|
||||
}
|
||||
|
||||
FileWriter writer = null;
|
||||
try {
|
||||
file.createNewFile();
|
||||
|
||||
writer = new FileWriter(file);
|
||||
|
||||
// put player group in cache
|
||||
// put if player is an op or not 1: is op 0: isnet op!
|
||||
// line format Group|OperatorStatus
|
||||
|
||||
if(operator)
|
||||
writer.write(group+";1\r\n");
|
||||
else writer.write(group+";0\r\n");
|
||||
|
||||
writer.flush();
|
||||
|
||||
ItemStack[] invstack = playerData.getInventory();
|
||||
|
||||
for (int i = 0; i < invstack.length; i++) {
|
||||
|
||||
int itemid = 0;
|
||||
int amount = 0;
|
||||
int durability = 0;
|
||||
String enchList = "";
|
||||
//ench = new HashMap<Enchantment, Integer>();
|
||||
|
||||
if (invstack[i] != null) {
|
||||
itemid = invstack[i].getTypeId();
|
||||
amount = invstack[i].getAmount();
|
||||
durability = invstack[i].getDurability();
|
||||
|
||||
|
||||
for(Enchantment e : invstack[i].getEnchantments().keySet())
|
||||
{
|
||||
try {
|
||||
enchList = enchList.concat(e.getName()+":"+invstack[i].getEnchantmentLevel(e)+":");
|
||||
} catch (NullPointerException npe) {
|
||||
ConsoleLogger.showError(npe.getMessage());
|
||||
ConsoleLogger.showError("The player " + playername + " has an illegaly enchant, Check Him !");
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
writer.write("i" + ":" + itemid + ":" + amount + ":"
|
||||
+ durability + ":"+ enchList + "\r\n");
|
||||
writer.flush();
|
||||
}
|
||||
|
||||
ItemStack[] armorstack = playerData.getArmour();
|
||||
|
||||
for (int i = 0; i < armorstack.length; i++) {
|
||||
int itemid = 0;
|
||||
int amount = 0;
|
||||
int durability = 0;
|
||||
String enchList = "";
|
||||
|
||||
if (armorstack[i] != null) {
|
||||
itemid = armorstack[i].getTypeId();
|
||||
amount = armorstack[i].getAmount();
|
||||
durability = armorstack[i].getDurability();
|
||||
|
||||
for(Enchantment e : armorstack[i].getEnchantments().keySet())
|
||||
{
|
||||
try {
|
||||
enchList = enchList.concat(e.getName()+":"+armorstack[i].getEnchantmentLevel(e)+":");
|
||||
} catch (NullPointerException npe) {
|
||||
ConsoleLogger.showError(npe.getMessage());
|
||||
ConsoleLogger.showError("The player " + playername + " has an illegaly enchant, Check Him !");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
writer.write("w" + ":" + itemid + ":" + amount + ":"
|
||||
+ durability + ":"+ enchList + "\r\n");
|
||||
writer.flush();
|
||||
}
|
||||
|
||||
writer.close();
|
||||
} catch (final Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public DataFileCache readCache(String playername) {
|
||||
final File file = new File("cache/" + playername
|
||||
+ ".cache");
|
||||
|
||||
ItemStack[] stacki = new ItemStack[36];
|
||||
ItemStack[] stacka = new ItemStack[4];
|
||||
String group = null;
|
||||
boolean op = false;
|
||||
|
||||
if (!file.exists()) {
|
||||
return new DataFileCache(stacki, stacka);
|
||||
}
|
||||
|
||||
Scanner reader = null;
|
||||
try {
|
||||
reader = new Scanner(file);
|
||||
|
||||
int i = 0;
|
||||
int a = 0;
|
||||
while (reader.hasNextLine()) {
|
||||
final String line = reader.nextLine();
|
||||
|
||||
if (!line.contains(":")) {
|
||||
// the fist line rapresent the player group and operator status
|
||||
final String[] playerInfo = line.split(";");
|
||||
group = playerInfo[0];
|
||||
|
||||
if (Integer.parseInt(playerInfo[1]) == 1) {
|
||||
op = true;
|
||||
} else op = false;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
final String[] in = line.split(":");
|
||||
|
||||
/*if (in.length != 4) {
|
||||
continue;
|
||||
} */
|
||||
|
||||
if (!in[0].equals("i") && !in[0].equals("w")) {
|
||||
continue;
|
||||
}
|
||||
// can enchant item? size ofstring in file - 4 all / 2 = number of enchant
|
||||
if (in[0].equals("i")) {
|
||||
stacki[i] = new ItemStack(Integer.parseInt(in[1]),
|
||||
Integer.parseInt(in[2]), Short.parseShort((in[3])));
|
||||
// qui c'e' un problema serio!
|
||||
if(in.length > 4 && !in[4].isEmpty()) {
|
||||
for(int k=4;k<in.length-1;k++) {
|
||||
//System.out.println("enchant "+in[k]);
|
||||
stacki[i].addUnsafeEnchantment(Enchantment.getByName(in[k]) ,Integer.parseInt(in[k+1]));
|
||||
k++;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
} else {
|
||||
stacka[a] = new ItemStack(Integer.parseInt(in[1]),
|
||||
Integer.parseInt(in[2]), Short.parseShort((in[3])));
|
||||
if(in.length > 4 && !in[4].isEmpty()) {
|
||||
for(int k=4;k<in.length-1;k++) {
|
||||
//System.out.println("enchant "+in[k]);
|
||||
stacka[a].addUnsafeEnchantment(Enchantment.getByName(in[k]) ,Integer.parseInt(in[k+1]));
|
||||
k++;
|
||||
}
|
||||
}
|
||||
a++;
|
||||
}
|
||||
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if (reader != null) {
|
||||
reader.close();
|
||||
}
|
||||
}
|
||||
return new DataFileCache(stacki, stacka, group, op);
|
||||
}
|
||||
|
||||
public void removeCache(String playername) {
|
||||
final File file = new File("cache/" + playername
|
||||
+ ".cache");
|
||||
|
||||
if (file.exists()) {
|
||||
file.delete();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean doesCacheExist(String playername) {
|
||||
final File file = new File("cache/" + playername
|
||||
+ ".cache");
|
||||
|
||||
if (file.exists()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
147
src/main/java/uk/org/whoami/authme/cache/limbo/LimboCache.java
vendored
Normal file
147
src/main/java/uk/org/whoami/authme/cache/limbo/LimboCache.java
vendored
Normal file
@ -0,0 +1,147 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.cache.limbo;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.cache.backup.FileCache;
|
||||
import uk.org.whoami.authme.events.ResetInventoryEvent;
|
||||
import uk.org.whoami.authme.events.StoreInventoryEvent;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
public class LimboCache {
|
||||
|
||||
private static LimboCache singleton = null;
|
||||
private HashMap<String, LimboPlayer> cache;
|
||||
private FileCache playerData = new FileCache();
|
||||
public AuthMe plugin;
|
||||
|
||||
private LimboCache(AuthMe plugin) {
|
||||
this.plugin = plugin;
|
||||
this.cache = new HashMap<String, LimboPlayer>();
|
||||
}
|
||||
|
||||
public void addLimboPlayer(Player player) {
|
||||
String name = player.getName().toLowerCase();
|
||||
Location loc = player.getLocation();
|
||||
int gameMode = player.getGameMode().getValue();
|
||||
ItemStack[] arm;
|
||||
ItemStack[] inv;
|
||||
boolean operator;
|
||||
String playerGroup = "";
|
||||
|
||||
if (playerData.doesCacheExist(name)) {
|
||||
StoreInventoryEvent event = new StoreInventoryEvent(player, playerData);
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled() && event.getInventory() != null && event.getArmor() != null) {
|
||||
inv = event.getInventory();
|
||||
arm = event.getArmor();
|
||||
} else {
|
||||
inv = null;
|
||||
arm = null;
|
||||
}
|
||||
playerGroup = playerData.readCache(name).getGroup();
|
||||
operator = playerData.readCache(name).getOperator();
|
||||
} else {
|
||||
StoreInventoryEvent event = new StoreInventoryEvent(player);
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled() && event.getInventory() != null && event.getArmor() != null) {
|
||||
inv = event.getInventory();
|
||||
arm = event.getArmor();
|
||||
} else {
|
||||
inv = null;
|
||||
arm = null;
|
||||
}
|
||||
|
||||
if(player.isOp() ) {
|
||||
operator = true;
|
||||
} else {
|
||||
operator = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(Settings.isForceSurvivalModeEnabled) {
|
||||
if(Settings.isResetInventoryIfCreative && gameMode != 0 ) {
|
||||
ResetInventoryEvent event = new ResetInventoryEvent(player);
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
player.sendMessage("Your inventory has been cleaned!");
|
||||
}
|
||||
}
|
||||
gameMode = 0;
|
||||
}
|
||||
if(player.isDead()) {
|
||||
loc = player.getWorld().getSpawnLocation();
|
||||
if (plugin.mv != null)
|
||||
{
|
||||
try {
|
||||
loc = plugin.mv.getMVWorldManager().getMVWorld(player.getWorld().getName()).getSpawnLocation();
|
||||
} catch (NullPointerException npe) {}
|
||||
}
|
||||
|
||||
}
|
||||
try {
|
||||
if(cache.containsKey(name) && playerGroup.isEmpty()) {
|
||||
LimboPlayer groupLimbo = cache.get(name);
|
||||
playerGroup = groupLimbo.getGroup();
|
||||
}
|
||||
} catch (NullPointerException ex) {
|
||||
}
|
||||
|
||||
cache.put(player.getName().toLowerCase(), new LimboPlayer(name, loc, inv, arm, gameMode, operator, playerGroup));
|
||||
}
|
||||
|
||||
public void addLimboPlayer(Player player, String group) {
|
||||
|
||||
cache.put(player.getName().toLowerCase(), new LimboPlayer(player.getName().toLowerCase(), group));
|
||||
}
|
||||
|
||||
public void deleteLimboPlayer(String name) {
|
||||
cache.remove(name);
|
||||
}
|
||||
|
||||
public LimboPlayer getLimboPlayer(String name) {
|
||||
return cache.get(name);
|
||||
}
|
||||
|
||||
public boolean hasLimboPlayer(String name) {
|
||||
return cache.containsKey(name);
|
||||
}
|
||||
|
||||
|
||||
public static LimboCache getInstance() {
|
||||
if (singleton == null) {
|
||||
singleton = new LimboCache(AuthMe.getInstance());
|
||||
}
|
||||
return singleton;
|
||||
}
|
||||
|
||||
public void updateLimboPlayer(Player player) {
|
||||
if (this.hasLimboPlayer(player.getName().toLowerCase())) {
|
||||
this.deleteLimboPlayer(player.getName().toLowerCase());
|
||||
}
|
||||
this.addLimboPlayer(player);
|
||||
}
|
||||
}
|
102
src/main/java/uk/org/whoami/authme/cache/limbo/LimboPlayer.java
vendored
Normal file
102
src/main/java/uk/org/whoami/authme/cache/limbo/LimboPlayer.java
vendored
Normal file
@ -0,0 +1,102 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.cache.limbo;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class LimboPlayer {
|
||||
|
||||
private String name;
|
||||
private ItemStack[] inventory;
|
||||
private ItemStack[] armour;
|
||||
private Location loc = null;
|
||||
private int timeoutTaskId = -1;
|
||||
private int messageTaskId = -1;
|
||||
private int gameMode = 0;
|
||||
private boolean operator = false;
|
||||
private String group = null;
|
||||
|
||||
public LimboPlayer(String name, Location loc, ItemStack[] inventory, ItemStack[] armour, int gameMode, boolean operator, String group) {
|
||||
this.name = name;
|
||||
this.loc = loc;
|
||||
this.inventory = inventory;
|
||||
this.armour = armour;
|
||||
this.gameMode = gameMode;
|
||||
this.operator = operator;
|
||||
this.group = group;
|
||||
}
|
||||
|
||||
public LimboPlayer(String name, Location loc, int gameMode, boolean operator, String group) {
|
||||
this.name = name;
|
||||
this.loc = loc;
|
||||
this.gameMode = gameMode;
|
||||
this.operator = operator;
|
||||
this.group = group;
|
||||
}
|
||||
|
||||
public LimboPlayer(String name, String group) {
|
||||
this.name = name;
|
||||
this.group = group;
|
||||
}
|
||||
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public Location getLoc() {
|
||||
return loc;
|
||||
}
|
||||
|
||||
public ItemStack[] getArmour() {
|
||||
return armour;
|
||||
}
|
||||
|
||||
public ItemStack[] getInventory() {
|
||||
return inventory;
|
||||
}
|
||||
|
||||
public int getGameMode() {
|
||||
return gameMode;
|
||||
}
|
||||
|
||||
public boolean getOperator() {
|
||||
return operator;
|
||||
}
|
||||
|
||||
public String getGroup() {
|
||||
return group;
|
||||
}
|
||||
|
||||
public void setTimeoutTaskId(int i) {
|
||||
this.timeoutTaskId = i;
|
||||
}
|
||||
|
||||
public int getTimeoutTaskId() {
|
||||
return timeoutTaskId;
|
||||
}
|
||||
|
||||
public void setMessageTaskId(int messageTaskId) {
|
||||
this.messageTaskId = messageTaskId;
|
||||
}
|
||||
|
||||
public int getMessageTaskId() {
|
||||
return messageTaskId;
|
||||
}
|
||||
|
||||
}
|
405
src/main/java/uk/org/whoami/authme/commands/AdminCommand.java
Normal file
405
src/main/java/uk/org/whoami/authme/commands/AdminCommand.java
Normal file
@ -0,0 +1,405 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.commands;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.ConsoleLogger;
|
||||
import uk.org.whoami.authme.Utils;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.converter.FlatToSql;
|
||||
import uk.org.whoami.authme.converter.RakamakConverter;
|
||||
import uk.org.whoami.authme.converter.xAuthToFlat;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
import uk.org.whoami.authme.security.PasswordSecurity;
|
||||
import uk.org.whoami.authme.settings.Messages;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
import uk.org.whoami.authme.settings.SpoutCfg;
|
||||
|
||||
public class AdminCommand implements CommandExecutor {
|
||||
|
||||
public AuthMe plugin;
|
||||
|
||||
private Messages m = Messages.getInstance();
|
||||
private SpoutCfg s = SpoutCfg.getInstance();
|
||||
//private Settings settings = Settings.getInstance();
|
||||
public DataSource database;
|
||||
|
||||
public AdminCommand(AuthMe plugin, DataSource database) {
|
||||
this.database = database;
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) {
|
||||
if (args.length == 0) {
|
||||
sender.sendMessage("Usage: /authme reload - Reload the config");
|
||||
sender.sendMessage("/authme register <playername> <password> - Register a player");
|
||||
sender.sendMessage("/authme changepassword <playername> <password> - Change player password");
|
||||
sender.sendMessage("/authme unregister <playername> - Unregister a player");
|
||||
sender.sendMessage("/authme purge <days> - Purge Database");
|
||||
sender.sendMessage("/authme version - Get AuthMe version infos");
|
||||
sender.sendMessage("/authme lastlogin <playername> - Display Date about the Player's LastLogin");
|
||||
return true;
|
||||
}
|
||||
|
||||
if((sender instanceof ConsoleCommandSender) && args[0].equalsIgnoreCase("passpartuToken")) {
|
||||
if(args.length > 1) {
|
||||
System.out.println("[AuthMe] command usage: authme passpartuToken");
|
||||
return true;
|
||||
}
|
||||
|
||||
if(Utils.getInstance().obtainToken()) {
|
||||
System.out.println("[AuthMe] You have 30s for insert this token ingame with /passpartu [token]");
|
||||
} else {
|
||||
System.out.println("[AuthMe] Security error on passpartu token, redo it. ");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
if (!sender.hasPermission("authme.admin." + args[0].toLowerCase())) {
|
||||
sender.sendMessage(m._("no_perm"));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
if (args[0].equalsIgnoreCase("version")) {
|
||||
sender.sendMessage("AuthMe Version: "+AuthMe.getInstance().getDescription().getVersion());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
if (args[0].equalsIgnoreCase("purge")) {
|
||||
if (args.length != 2) {
|
||||
sender.sendMessage("Usage: /authme purge <DAYS>");
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
long days = Long.parseLong(args[1]) * 86400000;
|
||||
long until = new Date().getTime() - days;
|
||||
|
||||
sender.sendMessage("Deleted " + database.purgeDatabase(until) + " user accounts");
|
||||
|
||||
} catch (NumberFormatException e) {
|
||||
sender.sendMessage("Usage: /authme purge <DAYS>");
|
||||
return true;
|
||||
}
|
||||
} else if (args[0].equalsIgnoreCase("reload")) {
|
||||
database.reload();
|
||||
|
||||
//Trying to load config from JAR-Ressources, if config.yml doesn't exist...
|
||||
File newConfigFile = new File("plugins/AuthMe","config.yml");
|
||||
if (!newConfigFile.exists()) {
|
||||
InputStream fis = getClass().getResourceAsStream("/config.yml");
|
||||
FileOutputStream fos = null;
|
||||
try {
|
||||
fos = new FileOutputStream(newConfigFile);
|
||||
byte[] buf = new byte[1024];
|
||||
int i = 0;
|
||||
|
||||
while ((i = fis.read(buf)) != -1) {
|
||||
fos.write(buf, 0, i);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Failed to load config from JAR");
|
||||
} finally {
|
||||
try {
|
||||
if (fis != null) {
|
||||
fis.close();
|
||||
}
|
||||
if (fos != null) {
|
||||
fos.close();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
YamlConfiguration newConfig = YamlConfiguration.loadConfiguration(newConfigFile);
|
||||
Settings.reloadConfigOptions(newConfig);
|
||||
m.reload();
|
||||
s.reload();
|
||||
sender.sendMessage(m._("reload"));
|
||||
} else if (args[0].equalsIgnoreCase("lastlogin")) {
|
||||
if (args.length != 2) {
|
||||
sender.sendMessage("Usage: /authme lastlogin <playername>");
|
||||
return true;
|
||||
}
|
||||
try {
|
||||
if (database.getAuth(args[1].toLowerCase()) != null) {
|
||||
PlayerAuth player = database.getAuth(args[1].toLowerCase());
|
||||
long lastLogin = player.getLastLogin();
|
||||
Date d = new Date(lastLogin);
|
||||
final long diff = System.currentTimeMillis() - lastLogin;
|
||||
final String msg = (int)(diff / 86400000) + " days " + (int)(diff / 3600000 % 24) + " hours " + (int)(diff / 60000 % 60) + " mins " + (int)(diff / 1000 % 60) + " secs.";
|
||||
String lastIP = player.getIp();
|
||||
sender.sendMessage("[AuthMe] " + args[1].toLowerCase() + " lastlogin : " + d.toString());
|
||||
sender.sendMessage("[AuthMe] The player : " + player.getNickname() + " is unlogged since " + msg);
|
||||
sender.sendMessage("[AuthMe] LastPlayer IP : " + lastIP);
|
||||
}
|
||||
} catch (NullPointerException e) {
|
||||
sender.sendMessage("This player does not exist");
|
||||
}
|
||||
} else if (args[0].equalsIgnoreCase("accounts")) {
|
||||
if (args.length != 2) {
|
||||
sender.sendMessage("Usage: /authme accounts <playername>");
|
||||
sender.sendMessage("Or: /authme accounts <ip>");
|
||||
return true;
|
||||
}
|
||||
if (!args[1].contains(".")) {
|
||||
final CommandSender fSender = sender;
|
||||
final String[] arguments = args;
|
||||
Bukkit.getScheduler().runTask(plugin, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
PlayerAuth pAuth = null;
|
||||
String message = "[AuthMe] ";
|
||||
try {
|
||||
pAuth = database.getAuth(arguments[1].toLowerCase());
|
||||
} catch (NullPointerException npe){
|
||||
fSender.sendMessage("[AuthMe] This player is unknown");
|
||||
return;
|
||||
}
|
||||
if (pAuth != null) {
|
||||
List<String> accountList = database.getAllAuthsByName(pAuth);
|
||||
if (accountList.isEmpty() || accountList == null) {
|
||||
fSender.sendMessage("[AuthMe] This player is unknown");
|
||||
return;
|
||||
}
|
||||
if (accountList.size() == 1) {
|
||||
fSender.sendMessage("[AuthMe] " + arguments[1] + " is a single account player");
|
||||
return;
|
||||
}
|
||||
int i = 0;
|
||||
for (String account : accountList) {
|
||||
i++;
|
||||
message = message + account;
|
||||
if (i != accountList.size()) {
|
||||
message = message + ", ";
|
||||
} else {
|
||||
message = message + ".";
|
||||
}
|
||||
}
|
||||
fSender.sendMessage("[AuthMe] " + arguments[1] + " has " + String.valueOf(accountList.size()) + " accounts");
|
||||
fSender.sendMessage(message);
|
||||
} else {
|
||||
fSender.sendMessage("[AuthMe] This player is unknown");
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
return true;
|
||||
} else {
|
||||
final CommandSender fSender = sender;
|
||||
final String[] arguments = args;
|
||||
Bukkit.getScheduler().runTask(plugin, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
String message = "[AuthMe] ";
|
||||
if (arguments[1] != null) {
|
||||
List<String> accountList = database.getAllAuthsByIp(arguments[1]);
|
||||
if (accountList.isEmpty() || accountList == null) {
|
||||
fSender.sendMessage("[AuthMe] Please put a valid IP");
|
||||
return;
|
||||
}
|
||||
if (accountList.size() == 1) {
|
||||
fSender.sendMessage("[AuthMe] " + arguments[1] + " is a single account player");
|
||||
return;
|
||||
}
|
||||
int i = 0;
|
||||
for (String account : accountList) {
|
||||
i++;
|
||||
message = message + account;
|
||||
if (i != accountList.size()) {
|
||||
message = message + ", ";
|
||||
} else {
|
||||
message = message + ".";
|
||||
}
|
||||
}
|
||||
fSender.sendMessage("[AuthMe] " + arguments[1] + " has " + String.valueOf(accountList.size()) + " accounts");
|
||||
fSender.sendMessage(message);
|
||||
} else {
|
||||
fSender.sendMessage("[AuthMe] Please put a valid IP");
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
return true;
|
||||
}
|
||||
} else if (args[0].equalsIgnoreCase("register") || args[0].equalsIgnoreCase("reg")) {
|
||||
if (args.length != 3) {
|
||||
sender.sendMessage("Usage: /authme register playername password");
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
String name = args[1].toLowerCase();
|
||||
String hash = PasswordSecurity.getHash(Settings.getPasswordHash, args[2], name);
|
||||
|
||||
if (database.isAuthAvailable(name)) {
|
||||
sender.sendMessage(m._("user_regged"));
|
||||
return true;
|
||||
}
|
||||
|
||||
PlayerAuth auth = new PlayerAuth(name, hash, "198.18.0.1", 0);
|
||||
if (!database.saveAuth(auth)) {
|
||||
sender.sendMessage(m._("error"));
|
||||
return true;
|
||||
}
|
||||
sender.sendMessage(m._("registered"));
|
||||
ConsoleLogger.info(args[1] + " registered");
|
||||
} catch (NoSuchAlgorithmException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
sender.sendMessage(m._("error"));
|
||||
}
|
||||
} else if (args[0].equalsIgnoreCase("convertflattosql")) {
|
||||
try {
|
||||
FlatToSql.FlatToSqlConverter();
|
||||
if (sender instanceof Player)
|
||||
sender.sendMessage("[AuthMe] FlatFile converted to authme.sql file");
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NullPointerException ex) {
|
||||
System.out.println(ex.getMessage());
|
||||
}
|
||||
|
||||
} else if (args[0].equalsIgnoreCase("xauthimport")) {
|
||||
xAuthToFlat converter = new xAuthToFlat(plugin, database);
|
||||
if (converter.convert(sender)) {
|
||||
sender.sendMessage("[AuthMe] Successfull convert from xAuth database");
|
||||
} else {
|
||||
sender.sendMessage("[AuthMe] Error while trying to convert from xAuth database");
|
||||
}
|
||||
|
||||
} else if (args[0].equalsIgnoreCase("getemail")) {
|
||||
if (args.length != 2) {
|
||||
sender.sendMessage("Usage: /authme getemail playername");
|
||||
return true;
|
||||
}
|
||||
String playername = args[1].toLowerCase();
|
||||
PlayerAuth getAuth = PlayerCache.getInstance().getAuth(playername);
|
||||
sender.sendMessage("[AuthMe] " + args[1] + " email : " + getAuth.getEmail());
|
||||
return true;
|
||||
|
||||
} else if (args[0].equalsIgnoreCase("chgemail")) {
|
||||
if (args.length != 3) {
|
||||
sender.sendMessage("Usage: /authme chgemail playername email");
|
||||
return true;
|
||||
}
|
||||
String playername = args[1].toLowerCase();
|
||||
PlayerAuth getAuth = PlayerCache.getInstance().getAuth(playername);
|
||||
getAuth.setEmail(args[2]);
|
||||
if (!database.updateEmail(getAuth)) {
|
||||
sender.sendMessage(m._("error"));
|
||||
return true;
|
||||
}
|
||||
PlayerCache.getInstance().updatePlayer(getAuth);
|
||||
return true;
|
||||
|
||||
} else if (args[0].equalsIgnoreCase("convertfromrakamak")) {
|
||||
try {
|
||||
RakamakConverter.RakamakConvert();
|
||||
if (sender instanceof Player)
|
||||
sender.sendMessage("[AuthMe] Rakamak database converted to auths.db");
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NullPointerException ex) {
|
||||
System.out.println(ex.getMessage());
|
||||
}
|
||||
|
||||
} else if (args[0].equalsIgnoreCase("changepassword") || args[0].equalsIgnoreCase("cp")) {
|
||||
if (args.length != 3) {
|
||||
sender.sendMessage("Usage: /authme changepassword playername newpassword");
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
String name = args[1].toLowerCase();
|
||||
String hash = PasswordSecurity.getHash(Settings.getPasswordHash, args[2], name);
|
||||
|
||||
PlayerAuth auth = null;
|
||||
if (PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
auth = PlayerCache.getInstance().getAuth(name);
|
||||
} else if (database.isAuthAvailable(name)) {
|
||||
auth = database.getAuth(name);
|
||||
} else {
|
||||
sender.sendMessage(m._("unknown_user"));
|
||||
return true;
|
||||
}
|
||||
auth.setHash(hash);
|
||||
|
||||
if (!database.updatePassword(auth)) {
|
||||
sender.sendMessage(m._("error"));
|
||||
return true;
|
||||
}
|
||||
|
||||
sender.sendMessage("pwd_changed");
|
||||
ConsoleLogger.info(args[1] + "'s password changed");
|
||||
} catch (NoSuchAlgorithmException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
sender.sendMessage(m._("error"));
|
||||
}
|
||||
} else if (args[0].equalsIgnoreCase("unregister") || args[0].equalsIgnoreCase("unreg") || args[0].equalsIgnoreCase("del") ) {
|
||||
if (args.length != 2) {
|
||||
sender.sendMessage("Usage: /authme unregister playername");
|
||||
return true;
|
||||
}
|
||||
|
||||
String name = args[1].toLowerCase();
|
||||
|
||||
if (!database.removeAuth(name)) {
|
||||
sender.sendMessage(m._("error"));
|
||||
return true;
|
||||
}
|
||||
|
||||
PlayerCache.getInstance().removePlayer(name);
|
||||
sender.sendMessage("unregistered");
|
||||
|
||||
ConsoleLogger.info(args[1] + " unregistered");
|
||||
} else {
|
||||
sender.sendMessage("Usage: /authme reload|register playername password|changepassword playername password|unregister playername");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
package uk.org.whoami.authme.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.security.RandomString;
|
||||
import uk.org.whoami.authme.settings.Messages;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
public class CaptchaCommand implements CommandExecutor {
|
||||
|
||||
public AuthMe plugin;
|
||||
private Messages m = Messages.getInstance();
|
||||
public static RandomString rdm = new RandomString(Settings.captchaLength);
|
||||
|
||||
public CaptchaCommand(AuthMe plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmnd,
|
||||
String label, String[] args) {
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Player player = (Player) sender;
|
||||
String name = player.getName().toLowerCase();
|
||||
|
||||
|
||||
if (args.length == 0) {
|
||||
player.sendMessage(m._("usage_captcha"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
player.sendMessage(m._("logged_in"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!player.hasPermission("authme." + label.toLowerCase())) {
|
||||
player.sendMessage(m._("no_perm"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Settings.useCaptcha) {
|
||||
player.sendMessage(m._("usage_log"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if(!plugin.cap.containsKey(name)) {
|
||||
player.sendMessage(m._("usage_log"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if(Settings.useCaptcha && !args[0].equals(plugin.cap.get(name))) {
|
||||
plugin.cap.remove(name);
|
||||
plugin.cap.put(name, rdm.nextString());
|
||||
player.sendMessage(m._("wrong_captcha").replaceAll("THE_CAPTCHA", plugin.cap.get(name)));
|
||||
return true;
|
||||
}
|
||||
try {
|
||||
plugin.captcha.remove(name);
|
||||
plugin.cap.remove(name);
|
||||
} catch (NullPointerException npe) {
|
||||
}
|
||||
|
||||
player.sendMessage("Your captcha is correct");
|
||||
player.sendMessage(m._("login_msg"));
|
||||
return true;
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.commands;
|
||||
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
import me.muizers.Notifications.Notification;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.ConsoleLogger;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
import uk.org.whoami.authme.security.PasswordSecurity;
|
||||
import uk.org.whoami.authme.settings.Messages;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
public class ChangePasswordCommand implements CommandExecutor {
|
||||
|
||||
private Messages m = Messages.getInstance();
|
||||
//private Settings settings = Settings.getInstance();
|
||||
private DataSource database;
|
||||
public AuthMe plugin;
|
||||
|
||||
public ChangePasswordCommand(DataSource database, AuthMe plugin) {
|
||||
this.database = database;
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) {
|
||||
if (!(sender instanceof Player)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!sender.hasPermission("authme." + label.toLowerCase())) {
|
||||
sender.sendMessage(m._("no_perm"));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player player = (Player) sender;
|
||||
String name = player.getName().toLowerCase();
|
||||
if (!PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
player.sendMessage(m._("not_logged_in"));
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// Check to prevent Changing Password if is active VBullettin system
|
||||
//
|
||||
if(!Settings.getMySQLColumnSalt.isEmpty()) {
|
||||
player.sendMessage(m._("You can Change Your Password on Forum panel!"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length != 2) {
|
||||
player.sendMessage(m._("usage_changepassword"));
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
String hashnew = PasswordSecurity.getHash(Settings.getPasswordHash, args[1], name);
|
||||
|
||||
if (PasswordSecurity.comparePasswordWithHash(args[0], PlayerCache.getInstance().getAuth(name).getHash(), name)) {
|
||||
PlayerAuth auth = PlayerCache.getInstance().getAuth(name);
|
||||
auth.setHash(hashnew);
|
||||
if (!database.updatePassword(auth)) {
|
||||
player.sendMessage(m._("error"));
|
||||
return true;
|
||||
}
|
||||
PlayerCache.getInstance().updatePlayer(auth);
|
||||
player.sendMessage(m._("pwd_changed"));
|
||||
ConsoleLogger.info(player.getName() + " changed his password");
|
||||
if(plugin.notifications != null) {
|
||||
plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " change his password!"));
|
||||
}
|
||||
} else {
|
||||
player.sendMessage(m._("wrong_pwd"));
|
||||
}
|
||||
} catch (NoSuchAlgorithmException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
sender.sendMessage(m._("error"));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
204
src/main/java/uk/org/whoami/authme/commands/EmailCommand.java
Normal file
204
src/main/java/uk/org/whoami/authme/commands/EmailCommand.java
Normal file
@ -0,0 +1,204 @@
|
||||
/*
|
||||
* Copyright 2012 darkwarriors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package uk.org.whoami.authme.commands;
|
||||
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.ConsoleLogger;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
import uk.org.whoami.authme.security.PasswordSecurity;
|
||||
import uk.org.whoami.authme.security.RandomString;
|
||||
import uk.org.whoami.authme.settings.Messages;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author darkwarriors
|
||||
*/
|
||||
public class EmailCommand implements CommandExecutor {
|
||||
|
||||
public AuthMe plugin;
|
||||
private DataSource data;
|
||||
private Messages m = Messages.getInstance();
|
||||
|
||||
public EmailCommand(AuthMe plugin, DataSource data) {
|
||||
this.plugin = plugin;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) {
|
||||
if (!(sender instanceof Player)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!sender.hasPermission("authme." + label.toLowerCase())) {
|
||||
sender.sendMessage(m._("no_perm"));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player player = (Player) sender;
|
||||
String name = player.getName().toLowerCase();
|
||||
|
||||
if (args.length == 0) {
|
||||
player.sendMessage("usage: /email add <Email> <confirmEmail> ");
|
||||
player.sendMessage("usage: /email change <old> <new> ");
|
||||
player.sendMessage("usage: /email recovery <Email>");
|
||||
return true;
|
||||
}
|
||||
|
||||
if(args[0].equalsIgnoreCase("add")) {
|
||||
if (args.length != 3) {
|
||||
player.sendMessage("[AuthMe] /email add <Email> <confirmEmail>");
|
||||
return true;
|
||||
}
|
||||
if(args[1].equals(args[2]) && PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
PlayerAuth auth = PlayerCache.getInstance().getAuth(name);
|
||||
if (auth.getEmail() == null || !auth.getEmail().contains("your@email.com")) {
|
||||
player.sendMessage("[AuthMe] /email change <old> <new>");
|
||||
return true;
|
||||
}
|
||||
if (!args[1].contains("@")) {
|
||||
player.sendMessage("[AuthMe] Invalid Email !");
|
||||
return true;
|
||||
}
|
||||
auth.setEmail(args[1]);
|
||||
if (!data.updateEmail(auth)) {
|
||||
player.sendMessage(m._("error"));
|
||||
return true;
|
||||
}
|
||||
PlayerCache.getInstance().updatePlayer(auth);
|
||||
player.sendMessage("[AuthMe] Email Added !");
|
||||
player.sendMessage(auth.getEmail());
|
||||
} else if (PlayerCache.getInstance().isAuthenticated(name)){
|
||||
player.sendMessage("[AuthMe] Confirm your Email ! ");
|
||||
} else {
|
||||
if (!data.isAuthAvailable(name)) {
|
||||
player.sendMessage(m._("login_msg"));
|
||||
} else {
|
||||
player.sendMessage(m._("reg_msg"));
|
||||
}
|
||||
}
|
||||
} else if(args[0].equalsIgnoreCase("change") && args.length == 3 ) {
|
||||
if(PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
PlayerAuth auth = PlayerCache.getInstance().getAuth(name);
|
||||
if (auth.getEmail() == null || auth.getEmail() == "your@email.com") {
|
||||
player.sendMessage("[AuthMe] Please use : /email add <email> <confirmEmail>");
|
||||
return true;
|
||||
}
|
||||
if (args[1] != auth.getEmail()) {
|
||||
player.sendMessage("[AuthMe] Invalid Email !");
|
||||
return true;
|
||||
}
|
||||
if (!args[2].contains("@")) {
|
||||
player.sendMessage("[AuthMe] New Email is Invalid !");
|
||||
return true;
|
||||
}
|
||||
auth.setEmail(args[2]);
|
||||
if (!data.updateEmail(auth)) {
|
||||
player.sendMessage("[AuthMe] /email command only available with MySQL and SQLite");
|
||||
return true;
|
||||
}
|
||||
PlayerCache.getInstance().updatePlayer(auth);
|
||||
player.sendMessage("[AuthMe] Email Change !");
|
||||
player.sendMessage("[AuthMe] Your Email : " + auth.getEmail());
|
||||
} else if (PlayerCache.getInstance().isAuthenticated(name)){
|
||||
player.sendMessage("[AuthMe] Confirm your Email ! ");
|
||||
} else {
|
||||
if (!data.isAuthAvailable(name)) {
|
||||
player.sendMessage(m._("login_msg"));
|
||||
} else {
|
||||
player.sendMessage(m._("reg_msg"));
|
||||
}
|
||||
}
|
||||
}
|
||||
if(args[0].equalsIgnoreCase("recovery")) {
|
||||
if (args.length != 2) {
|
||||
player.sendMessage("usage: /email recovery <Email>");
|
||||
return true;
|
||||
}
|
||||
if (plugin.mail == null) {
|
||||
player.sendMessage(m._("error"));
|
||||
ConsoleLogger.info("Missed mail.jar in lib folder");
|
||||
return true;
|
||||
}
|
||||
if (data.isAuthAvailable(name)) {
|
||||
if (PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
player.sendMessage(m._("logged_in"));
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
RandomString rand = new RandomString(Settings.getRecoveryPassLength);
|
||||
String thePass = rand.nextString();
|
||||
String hashnew = PasswordSecurity.getHash(Settings.getPasswordHash, thePass, name);
|
||||
PlayerAuth auth = null;
|
||||
if (PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
auth = PlayerCache.getInstance().getAuth(name);
|
||||
} else if (data.isAuthAvailable(name)) {
|
||||
auth = data.getAuth(name);
|
||||
} else {
|
||||
sender.sendMessage(m._("unknown_user"));
|
||||
return true;
|
||||
}
|
||||
if (Settings.getmailAccount == "" || Settings.getmailAccount.isEmpty()) {
|
||||
player.sendMessage(m._("error"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!args[1].equalsIgnoreCase(auth.getEmail())) {
|
||||
player.sendMessage("[AuthMe] Invalid Email");
|
||||
return true;
|
||||
}
|
||||
|
||||
final String finalhashnew = hashnew;
|
||||
final PlayerAuth finalauth = auth;
|
||||
|
||||
Bukkit.getScheduler().runTask(plugin, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
finalauth.setHash(finalhashnew);
|
||||
data.updatePassword(finalauth);
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
plugin.mail.main(auth, thePass);
|
||||
player.sendMessage("[AuthMe] Recovery Email Send !");
|
||||
} catch (NoSuchAlgorithmException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
sender.sendMessage(m._("error"));
|
||||
} catch (NoClassDefFoundError ncdfe) {
|
||||
ConsoleLogger.showError(ncdfe.getMessage());
|
||||
sender.sendMessage(m._("error"));
|
||||
}
|
||||
} else {
|
||||
player.sendMessage(m._("reg_msg"));
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.settings.Messages;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
public class LoginCommand implements CommandExecutor {
|
||||
|
||||
private AuthMe plugin;
|
||||
private Messages m = Messages.getInstance();
|
||||
|
||||
public LoginCommand(AuthMe plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmnd, String label, final String[] args) {
|
||||
if (!(sender instanceof Player)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(!Settings.useCaptcha) {
|
||||
|
||||
}
|
||||
|
||||
final Player player = (Player) sender;
|
||||
|
||||
if (args.length == 0) {
|
||||
player.sendMessage(m._("usage_log"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!player.hasPermission("authme." + label.toLowerCase())) {
|
||||
player.sendMessage(m._("no_perm"));
|
||||
return true;
|
||||
}
|
||||
|
||||
String result = plugin.management.performLogin(player, args[0]);
|
||||
if (result != "") player.sendMessage(result);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
133
src/main/java/uk/org/whoami/authme/commands/LogoutCommand.java
Normal file
133
src/main/java/uk/org/whoami/authme/commands/LogoutCommand.java
Normal file
@ -0,0 +1,133 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.commands;
|
||||
|
||||
import me.muizers.Notifications.Notification;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.Utils;
|
||||
import uk.org.whoami.authme.ConsoleLogger;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.cache.backup.DataFileCache;
|
||||
import uk.org.whoami.authme.cache.backup.FileCache;
|
||||
import uk.org.whoami.authme.cache.limbo.LimboCache;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
import uk.org.whoami.authme.events.AuthMeTeleportEvent;
|
||||
import uk.org.whoami.authme.settings.Messages;
|
||||
import uk.org.whoami.authme.settings.PlayersLogs;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
import uk.org.whoami.authme.task.MessageTask;
|
||||
import uk.org.whoami.authme.task.TimeoutTask;
|
||||
|
||||
public class LogoutCommand implements CommandExecutor {
|
||||
|
||||
private Messages m = Messages.getInstance();
|
||||
private PlayersLogs pllog = PlayersLogs.getInstance();
|
||||
//private Settings settings = Settings.getInstance();
|
||||
private AuthMe plugin;
|
||||
private DataSource database;
|
||||
private Utils utils = Utils.getInstance();
|
||||
private FileCache playerBackup = new FileCache();
|
||||
|
||||
public LogoutCommand(AuthMe plugin, DataSource database) {
|
||||
this.plugin = plugin;
|
||||
this.database = database;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) {
|
||||
if (!(sender instanceof Player)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!sender.hasPermission("authme." + label.toLowerCase())) {
|
||||
sender.sendMessage(m._("no_perm"));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player player = (Player) sender;
|
||||
String name = player.getName().toLowerCase();
|
||||
|
||||
if (!PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
player.sendMessage(m._("not_logged_in"));
|
||||
return true;
|
||||
}
|
||||
|
||||
//clear session
|
||||
PlayerAuth auth = PlayerCache.getInstance().getAuth(name);
|
||||
auth.setIp("198.18.0.1");
|
||||
database.updateSession(auth);
|
||||
|
||||
PlayerCache.getInstance().removePlayer(name);
|
||||
|
||||
LimboCache.getInstance().addLimboPlayer(player , utils.removeAll(player));
|
||||
LimboCache.getInstance().addLimboPlayer(player);
|
||||
if(Settings.protectInventoryBeforeLogInEnabled) {
|
||||
player.getInventory().setArmorContents(new ItemStack[4]);
|
||||
player.getInventory().setContents(new ItemStack[36]);
|
||||
// create cache file for handling lost of inventories on unlogged in status
|
||||
DataFileCache playerData = new DataFileCache(player.getInventory().getContents(),player.getInventory().getArmorContents());
|
||||
playerBackup.createCache(name, playerData, LimboCache.getInstance().getLimboPlayer(name).getGroup(),LimboCache.getInstance().getLimboPlayer(name).getOperator());
|
||||
}
|
||||
if (Settings.isTeleportToSpawnEnabled) {
|
||||
AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, player.getWorld().getSpawnLocation());
|
||||
plugin.getServer().getPluginManager().callEvent(tpEvent);
|
||||
if(!tpEvent.isCancelled()) {
|
||||
if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) {
|
||||
tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load();
|
||||
}
|
||||
player.teleport(tpEvent.getTo());
|
||||
}
|
||||
}
|
||||
|
||||
int delay = Settings.getRegistrationTimeout * 20;
|
||||
int interval = Settings.getWarnMessageInterval;
|
||||
BukkitScheduler sched = sender.getServer().getScheduler();
|
||||
if (delay != 0) {
|
||||
BukkitTask id = sched.runTaskLater(plugin, new TimeoutTask(plugin, name), delay);
|
||||
LimboCache.getInstance().getLimboPlayer(name).setTimeoutTaskId(id.getTaskId());
|
||||
}
|
||||
BukkitTask msgT = sched.runTask(plugin, new MessageTask(plugin, name, m._("login_msg"), interval));
|
||||
LimboCache.getInstance().getLimboPlayer(name).setMessageTaskId(msgT.getTaskId());
|
||||
|
||||
try {
|
||||
if (PlayersLogs.players.contains(player.getName())) {
|
||||
PlayersLogs.players.remove(player.getName());
|
||||
pllog.save();
|
||||
}
|
||||
} catch (NullPointerException npe) {
|
||||
|
||||
}
|
||||
|
||||
player.sendMessage(m._("logout"));
|
||||
ConsoleLogger.info(player.getDisplayName() + " logged out");
|
||||
if(plugin.notifications != null) {
|
||||
plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " logged out!"));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package uk.org.whoami.authme.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.Management;
|
||||
import uk.org.whoami.authme.Utils;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author stefano
|
||||
*/
|
||||
public class PasspartuCommand implements CommandExecutor {
|
||||
private Utils utils = new Utils();
|
||||
private DataSource database;
|
||||
public AuthMe plugin;
|
||||
|
||||
public PasspartuCommand(DataSource database, AuthMe plugin) {
|
||||
this.database = database;
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) {
|
||||
|
||||
if (PlayerCache.getInstance().isAuthenticated(sender.getName().toLowerCase())) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ((sender instanceof Player) && args.length == 1) {
|
||||
if(utils.readToken(args[0])) {
|
||||
//bypass login!
|
||||
Management bypass = new Management(database,true, plugin);
|
||||
String result = bypass.performLogin((Player)sender, "dontneed");
|
||||
if (result != "") sender.sendMessage(result);
|
||||
return true;
|
||||
}
|
||||
|
||||
sender.sendMessage("Time is expired or Token is Wrong!");
|
||||
return true;
|
||||
}
|
||||
sender.sendMessage("usage: /passpartu token");
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2012 darkwarriors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package uk.org.whoami.authme.commands;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author darkwarriors
|
||||
*/
|
||||
public class RecoveryCommand {
|
||||
|
||||
}
|
299
src/main/java/uk/org/whoami/authme/commands/RegisterCommand.java
Normal file
299
src/main/java/uk/org/whoami/authme/commands/RegisterCommand.java
Normal file
@ -0,0 +1,299 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.commands;
|
||||
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Date;
|
||||
|
||||
import me.muizers.Notifications.Notification;
|
||||
import net.md_5.bungee.api.connection.ConnectedPlayer;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.ConsoleLogger;
|
||||
import uk.org.whoami.authme.Utils;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.cache.limbo.LimboCache;
|
||||
import uk.org.whoami.authme.cache.limbo.LimboPlayer;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
import uk.org.whoami.authme.events.AuthMeTeleportEvent;
|
||||
import uk.org.whoami.authme.security.PasswordSecurity;
|
||||
import uk.org.whoami.authme.security.RandomString;
|
||||
import uk.org.whoami.authme.settings.Messages;
|
||||
import uk.org.whoami.authme.settings.PlayersLogs;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
import uk.org.whoami.authme.task.MessageTask;
|
||||
import uk.org.whoami.authme.task.TimeoutTask;
|
||||
|
||||
public class RegisterCommand implements CommandExecutor {
|
||||
|
||||
private Messages m = Messages.getInstance();
|
||||
private PlayersLogs pllog = PlayersLogs.getInstance();
|
||||
private DataSource database;
|
||||
public boolean isFirstTimeJoin;
|
||||
public PlayerAuth auth;
|
||||
public AuthMe plugin;
|
||||
|
||||
public RegisterCommand(DataSource database, AuthMe plugin) {
|
||||
this.database = database;
|
||||
this.isFirstTimeJoin = false;
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) {
|
||||
if (!(sender instanceof Player)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!sender.hasPermission("authme." + label.toLowerCase())) {
|
||||
sender.sendMessage(m._("no_perm"));
|
||||
return true;
|
||||
}
|
||||
|
||||
final Player player = (Player) sender;
|
||||
final String name = player.getName().toLowerCase();
|
||||
String ipA = player.getAddress().getAddress().getHostAddress();
|
||||
|
||||
if (Settings.bungee && player instanceof ProxiedPlayer) {
|
||||
ProxiedPlayer pPlayer = (ProxiedPlayer) player;
|
||||
ipA = pPlayer.getAddress().getAddress().getHostAddress();
|
||||
} else if (Settings.bungee && player instanceof ConnectedPlayer) {
|
||||
ConnectedPlayer cPlayer = (ConnectedPlayer) player;
|
||||
ipA = cPlayer.getAddress().getAddress().getHostAddress();
|
||||
}
|
||||
|
||||
final String ip = ipA;
|
||||
|
||||
if (PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
player.sendMessage(m._("logged_in"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Settings.isRegistrationEnabled) {
|
||||
player.sendMessage(m._("reg_disabled"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (database.isAuthAvailable(player.getName().toLowerCase())) {
|
||||
player.sendMessage(m._("user_regged"));
|
||||
if (pllog.getStringList("players").contains(player.getName())) {
|
||||
pllog.getStringList("players").remove(player.getName());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//
|
||||
// Check if player exeded the max number of registration
|
||||
//
|
||||
|
||||
if(Settings.getmaxRegPerIp > 0 ){
|
||||
|
||||
if(!sender.hasPermission("authme.allow2accounts") && database.getAllAuthsByIp(ipA).size() >= Settings.getmaxRegPerIp) {
|
||||
player.sendMessage(m._("max_reg"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if(Settings.emailRegistration && !Settings.getmailAccount.isEmpty()) {
|
||||
if(!args[0].contains("@")) {
|
||||
player.sendMessage(m._("usage_reg"));
|
||||
return true;
|
||||
}
|
||||
if(Settings.doubleEmailCheck) {
|
||||
if(args.length < 2) {
|
||||
player.sendMessage(m._("usage_reg"));
|
||||
return true;
|
||||
}
|
||||
if(args[0] != args[1]) {
|
||||
player.sendMessage(m._("usage_reg"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
final String email = args[0];
|
||||
if(Settings.getmaxRegPerEmail > 0) {
|
||||
if (!sender.hasPermission("authme.allow2accounts") && database.getAllAuthsByEmail(email).size() >= Settings.getmaxRegPerEmail) {
|
||||
player.sendMessage(m._("max_reg"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
RandomString rand = new RandomString(Settings.getRecoveryPassLength);
|
||||
final String thePass = rand.nextString();
|
||||
|
||||
if (!thePass.isEmpty()) {
|
||||
Bukkit.getScheduler().runTask(plugin, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (PasswordSecurity.userSalt.containsKey(name)) {
|
||||
try {
|
||||
final String hashnew = PasswordSecurity.getHash(Settings.getPasswordHash, thePass, name);
|
||||
final PlayerAuth fAuth = new PlayerAuth(name, hashnew, PasswordSecurity.userSalt.get(name), ip, new Date().getTime(), (int) player.getLocation().getX() , (int) player.getLocation().getY(), (int) player.getLocation().getZ(), email);
|
||||
database.saveAuth(fAuth);
|
||||
database.updateEmail(fAuth);
|
||||
database.updateSession(fAuth);
|
||||
plugin.mail.main(fAuth, thePass);
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
ConsoleLogger.showError(e.getMessage());
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
final String hashnew = PasswordSecurity.getHash(Settings.getPasswordHash, thePass, name);
|
||||
final PlayerAuth fAuth = new PlayerAuth(name, hashnew, ip, new Date().getTime(), (int) player.getLocation().getX() , (int) player.getLocation().getY(), (int) player.getLocation().getZ(), email);
|
||||
database.saveAuth(fAuth);
|
||||
database.updateEmail(fAuth);
|
||||
database.updateSession(fAuth);
|
||||
plugin.mail.main(fAuth, thePass);
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
ConsoleLogger.showError(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
if(!Settings.getRegisteredGroup.isEmpty()){
|
||||
Utils.getInstance().setGroup(player, Utils.groupType.REGISTERED);
|
||||
}
|
||||
player.sendMessage(m._("vb_nonActiv"));
|
||||
String msg = m._("login_msg");
|
||||
int time = Settings.getRegistrationTimeout * 20;
|
||||
int msgInterval = Settings.getWarnMessageInterval;
|
||||
if (time != 0) {
|
||||
Bukkit.getScheduler().cancelTask(LimboCache.getInstance().getLimboPlayer(name).getTimeoutTaskId());
|
||||
BukkitTask id = Bukkit.getScheduler().runTaskLater(plugin, new TimeoutTask(plugin, name), time);
|
||||
LimboCache.getInstance().getLimboPlayer(name).setTimeoutTaskId(id.getTaskId());
|
||||
}
|
||||
|
||||
Bukkit.getScheduler().cancelTask(LimboCache.getInstance().getLimboPlayer(name).getMessageTaskId());
|
||||
BukkitTask nwMsg = Bukkit.getScheduler().runTask(plugin, new MessageTask(plugin, name, msg, msgInterval));
|
||||
LimboCache.getInstance().getLimboPlayer(name).setMessageTaskId(nwMsg.getTaskId());
|
||||
|
||||
LimboCache.getInstance().deleteLimboPlayer(name);
|
||||
this.isFirstTimeJoin = true;
|
||||
player.saveData();
|
||||
if (!Settings.noConsoleSpam)
|
||||
ConsoleLogger.info(player.getName() + " registered "+player.getAddress().getAddress().getHostAddress());
|
||||
if(plugin.notifications != null) {
|
||||
plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " has registered!"));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (args.length == 0 || (Settings.getEnablePasswordVerifier && args.length < 2) ) {
|
||||
player.sendMessage(m._("usage_reg"));
|
||||
return true;
|
||||
}
|
||||
//System.out.println("pass legth "+args[0].length());
|
||||
//System.out.println("pass length permit"+Settings.passwordMaxLength);
|
||||
if(args[0].length() < Settings.getPasswordMinLen || args[0].length() > Settings.passwordMaxLength) {
|
||||
player.sendMessage(m._("pass_len"));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
try {
|
||||
String hash;
|
||||
if(Settings.getEnablePasswordVerifier) {
|
||||
if (args[0].equals(args[1])) {
|
||||
hash = PasswordSecurity.getHash(Settings.getPasswordHash, args[0], name);
|
||||
} else {
|
||||
player.sendMessage(m._("password_error"));
|
||||
return true;
|
||||
}
|
||||
} else
|
||||
hash = PasswordSecurity.getHash(Settings.getPasswordHash, args[0], name);
|
||||
|
||||
if (Settings.getMySQLColumnSalt.isEmpty())
|
||||
{
|
||||
auth = new PlayerAuth(name, hash, ip, new Date().getTime());
|
||||
} else {
|
||||
auth = new PlayerAuth(name, hash, PasswordSecurity.userSalt.get(name), ip, new Date().getTime());
|
||||
}
|
||||
if (!database.saveAuth(auth)) {
|
||||
player.sendMessage(m._("error"));
|
||||
return true;
|
||||
}
|
||||
PlayerCache.getInstance().addPlayer(auth);
|
||||
|
||||
LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name);
|
||||
if (limbo != null) {
|
||||
player.setGameMode(GameMode.getByValue(limbo.getGameMode()));
|
||||
if (Settings.isTeleportToSpawnEnabled) {
|
||||
World world = player.getWorld();
|
||||
Location loca = world.getSpawnLocation();
|
||||
if (plugin.mv != null) {
|
||||
try {
|
||||
loca = plugin.mv.getMVWorldManager().getMVWorld(world).getSpawnLocation();
|
||||
} catch (NullPointerException npe) {
|
||||
|
||||
} catch (ClassCastException cce) {
|
||||
|
||||
} catch (NoClassDefFoundError ncdfe) {
|
||||
|
||||
}
|
||||
}
|
||||
AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, loca);
|
||||
plugin.getServer().getPluginManager().callEvent(tpEvent);
|
||||
if(!tpEvent.isCancelled()) {
|
||||
if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) {
|
||||
tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load();
|
||||
}
|
||||
player.teleport(tpEvent.getTo());
|
||||
}
|
||||
}
|
||||
|
||||
sender.getServer().getScheduler().cancelTask(limbo.getTimeoutTaskId());
|
||||
sender.getServer().getScheduler().cancelTask(limbo.getMessageTaskId());
|
||||
LimboCache.getInstance().deleteLimboPlayer(name);
|
||||
}
|
||||
|
||||
|
||||
if(!Settings.getRegisteredGroup.isEmpty()){
|
||||
Utils.getInstance().setGroup(player, Utils.groupType.REGISTERED);
|
||||
}
|
||||
player.sendMessage(m._("registered"));
|
||||
if (!Settings.getmailAccount.isEmpty())
|
||||
player.sendMessage(m._("add_email"));
|
||||
this.isFirstTimeJoin = true;
|
||||
player.saveData();
|
||||
if (!Settings.noConsoleSpam)
|
||||
ConsoleLogger.info(player.getName() + " registered "+player.getAddress().getAddress().getHostAddress());
|
||||
if(plugin.notifications != null) {
|
||||
plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " has registered!"));
|
||||
}
|
||||
|
||||
} catch (NoSuchAlgorithmException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
sender.sendMessage(m._("error"));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,142 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.commands;
|
||||
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
import me.muizers.Notifications.Notification;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.ConsoleLogger;
|
||||
import uk.org.whoami.authme.Utils;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.cache.backup.FileCache;
|
||||
import uk.org.whoami.authme.cache.limbo.LimboCache;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
import uk.org.whoami.authme.security.PasswordSecurity;
|
||||
import uk.org.whoami.authme.settings.Messages;
|
||||
import uk.org.whoami.authme.settings.PlayersLogs;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
import uk.org.whoami.authme.task.MessageTask;
|
||||
import uk.org.whoami.authme.task.TimeoutTask;
|
||||
|
||||
public class UnregisterCommand implements CommandExecutor {
|
||||
|
||||
private Messages m = Messages.getInstance();
|
||||
private PlayersLogs pllog = PlayersLogs.getInstance();
|
||||
//private Settings settings = Settings.getInstance();
|
||||
public AuthMe plugin;
|
||||
private DataSource database;
|
||||
private FileCache playerCache = new FileCache();
|
||||
|
||||
public UnregisterCommand(AuthMe plugin, DataSource database) {
|
||||
this.plugin = plugin;
|
||||
this.database = database;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmnd, String label, String[] args) {
|
||||
if (!(sender instanceof Player)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!sender.hasPermission("authme." + label.toLowerCase())) {
|
||||
sender.sendMessage(m._("no_perm"));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player player = (Player) sender;
|
||||
String name = player.getName().toLowerCase();
|
||||
|
||||
if (!PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
player.sendMessage(m._("not_logged_in"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length != 1) {
|
||||
player.sendMessage(m._("usage_unreg"));
|
||||
return true;
|
||||
}
|
||||
try {
|
||||
if (PasswordSecurity.comparePasswordWithHash(args[0], PlayerCache.getInstance().getAuth(name).getHash(), name)) {
|
||||
if (!database.removeAuth(name)) {
|
||||
player.sendMessage("error");
|
||||
return true;
|
||||
}
|
||||
if(Settings.isForcedRegistrationEnabled) {
|
||||
player.getInventory().setArmorContents(new ItemStack[4]);
|
||||
player.getInventory().setContents(new ItemStack[36]);
|
||||
player.saveData();
|
||||
PlayerCache.getInstance().removePlayer(player.getName().toLowerCase());
|
||||
LimboCache.getInstance().addLimboPlayer(player);
|
||||
|
||||
|
||||
int delay = Settings.getRegistrationTimeout * 20;
|
||||
int interval = Settings.getWarnMessageInterval;
|
||||
BukkitScheduler sched = sender.getServer().getScheduler();
|
||||
if (delay != 0) {
|
||||
BukkitTask id = sched.runTaskLater(plugin, new TimeoutTask(plugin, name), delay);
|
||||
LimboCache.getInstance().getLimboPlayer(name).setTimeoutTaskId(id.getTaskId());
|
||||
}
|
||||
sched.runTask(plugin, new MessageTask(plugin, name, m._("reg_msg"), interval));
|
||||
if(!Settings.unRegisteredGroup.isEmpty()){
|
||||
Utils.getInstance().setGroup(player, Utils.groupType.UNREGISTERED);
|
||||
}
|
||||
player.sendMessage("unregistered");
|
||||
ConsoleLogger.info(player.getDisplayName() + " unregistered himself");
|
||||
if(plugin.notifications != null) {
|
||||
plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " unregistered himself!"));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if(!Settings.unRegisteredGroup.isEmpty()){
|
||||
Utils.getInstance().setGroup(player, Utils.groupType.UNREGISTERED);
|
||||
}
|
||||
PlayerCache.getInstance().removePlayer(player.getName().toLowerCase());
|
||||
// check if Player cache File Exist and delete it, preventing duplication of items
|
||||
if(playerCache.doesCacheExist(name)) {
|
||||
playerCache.removeCache(name);
|
||||
}
|
||||
|
||||
if (PlayersLogs.players.contains(player.getName())) {
|
||||
PlayersLogs.players.remove(player.getName());
|
||||
pllog.save();
|
||||
}
|
||||
player.sendMessage("unregistered");
|
||||
ConsoleLogger.info(player.getDisplayName() + " unregistered himself");
|
||||
if(plugin.notifications != null) {
|
||||
plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " unregistered himself!"));
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
player.sendMessage(m._("wrong_pwd"));
|
||||
}
|
||||
} catch (NoSuchAlgorithmException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
sender.sendMessage("Internal Error please read the server log");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
98
src/main/java/uk/org/whoami/authme/converter/FlatToSql.java
Normal file
98
src/main/java/uk/org/whoami/authme/converter/FlatToSql.java
Normal file
@ -0,0 +1,98 @@
|
||||
package uk.org.whoami.authme.converter;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.ConsoleLogger;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
|
||||
public class FlatToSql {
|
||||
|
||||
public AuthMe instance;
|
||||
|
||||
public FlatToSql (AuthMe instance) {
|
||||
this.instance = instance;
|
||||
}
|
||||
|
||||
public FlatToSql getInstance() {
|
||||
return this;
|
||||
}
|
||||
|
||||
private static String tableName;
|
||||
private static String columnName;
|
||||
private static String columnPassword;
|
||||
private static String columnIp;
|
||||
private static String columnLastLogin;
|
||||
private static String lastlocX;
|
||||
private static String lastlocY;
|
||||
private static String lastlocZ;
|
||||
private static String columnEmail;
|
||||
|
||||
private static File source;
|
||||
private static File output;
|
||||
|
||||
public static void FlatToSqlConverter() throws IOException {
|
||||
tableName = Settings.getMySQLTablename;
|
||||
columnName = Settings.getMySQLColumnName;
|
||||
columnPassword = Settings.getMySQLColumnPassword;
|
||||
columnIp = Settings.getMySQLColumnIp;
|
||||
columnLastLogin = Settings.getMySQLColumnLastLogin;
|
||||
lastlocX = Settings.getMySQLlastlocX;
|
||||
lastlocY = Settings.getMySQLlastlocY;
|
||||
lastlocZ = Settings.getMySQLlastlocZ;
|
||||
columnEmail = Settings.getMySQLColumnEmail;
|
||||
|
||||
try {
|
||||
source = new File(AuthMe.getInstance().getDataFolder() + File.separator + "auths.db");
|
||||
source.createNewFile();
|
||||
output = new File(AuthMe.getInstance().getDataFolder() + File.separator + "authme.sql");
|
||||
BufferedReader br = null;
|
||||
BufferedWriter sql = null;
|
||||
br = new BufferedReader(new FileReader(source));
|
||||
sql = new BufferedWriter(new FileWriter(output));
|
||||
String createDB = " CREATE TABLE IF NOT EXISTS " + tableName + " ("
|
||||
+ "id INTEGER AUTO_INCREMENT,"
|
||||
+ columnName + " VARCHAR(255) NOT NULL UNIQUE,"
|
||||
+ columnPassword + " VARCHAR(255) NOT NULL,"
|
||||
+ columnIp + " VARCHAR(40) NOT NULL,"
|
||||
+ columnLastLogin + " BIGINT,"
|
||||
+ lastlocX + " smallint(6) DEFAULT '0',"
|
||||
+ lastlocY + " smallint(6) DEFAULT '0',"
|
||||
+ lastlocZ + " smallint(6) DEFAULT '0',"
|
||||
+ columnEmail + " VARCHAR(255) NOT NULL,"
|
||||
+ "CONSTRAINT table_const_prim PRIMARY KEY (id));";
|
||||
sql.write(createDB);
|
||||
String line;
|
||||
int i = 1;
|
||||
String newline;
|
||||
while ((line = br.readLine()) != null) {
|
||||
sql.newLine();
|
||||
String[] args = line.split(":");
|
||||
if (args.length == 4)
|
||||
newline = "INSERT INTO " + tableName + " VALUES (" + i + ", '" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", 0, 0, 0, " + "your@email.com" + ");";
|
||||
else if (args.length == 7)
|
||||
newline = "INSERT INTO " + tableName + " VALUES (" + i + ", '" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", " + args[4] + ", " + args[5] + ", " + args[6] + ", " + "your@email.com" + ");";
|
||||
else
|
||||
newline = "";
|
||||
if (newline != "")
|
||||
sql.write(newline);
|
||||
i = i + 1;
|
||||
}
|
||||
sql.close();
|
||||
br.close();
|
||||
System.out.println("[AuthMe] The FlatFile has been converted to authme.sql file");
|
||||
|
||||
} catch (FileNotFoundException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
} catch (IOException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,125 @@
|
||||
package uk.org.whoami.authme.converter;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.ConsoleLogger;
|
||||
import uk.org.whoami.authme.security.PasswordSecurity;
|
||||
import uk.org.whoami.authme.security.PasswordSecurity.HashAlgorithm;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
|
||||
public class RakamakConverter {
|
||||
|
||||
public AuthMe instance;
|
||||
|
||||
public RakamakConverter (AuthMe instance) {
|
||||
this.instance = instance;
|
||||
}
|
||||
|
||||
public RakamakConverter getInstance() {
|
||||
return this;
|
||||
}
|
||||
|
||||
private static HashAlgorithm hash;
|
||||
private static Boolean useIP;
|
||||
private static String fileName;
|
||||
private static String ipFileName;
|
||||
|
||||
private static File source;
|
||||
private static File output;
|
||||
private static File ipfiles;
|
||||
private static boolean alreadyExist = false;
|
||||
|
||||
public static void RakamakConvert() throws IOException {
|
||||
hash = Settings.rakamakHash;
|
||||
useIP = Settings.rakamakUseIp;
|
||||
fileName = Settings.rakamakUsers;
|
||||
ipFileName = Settings.rakamakUsersIp;
|
||||
HashMap<String, String> playerIP = new HashMap<String, String>();
|
||||
HashMap<String, String> playerPSW = new HashMap<String, String>();
|
||||
|
||||
|
||||
try {
|
||||
source = new File(AuthMe.getInstance().getDataFolder() + File.separator + fileName);
|
||||
ipfiles = new File(AuthMe.getInstance().getDataFolder() + File.separator + ipFileName);
|
||||
output = new File(AuthMe.getInstance().getDataFolder() + File.separator + "auths.db");
|
||||
source.createNewFile();
|
||||
ipfiles.createNewFile();
|
||||
if (new File(AuthMe.getInstance().getDataFolder() + File.separator + "auths.db").exists()) {
|
||||
alreadyExist = true;
|
||||
}
|
||||
output.createNewFile();
|
||||
BufferedReader users = null;
|
||||
BufferedWriter outputDB = null;
|
||||
BufferedReader ipFile = null;
|
||||
ipFile = new BufferedReader(new FileReader(ipfiles));
|
||||
String line;
|
||||
String newLine = null;
|
||||
if (useIP) {
|
||||
String tempLine;
|
||||
while ((tempLine = ipFile.readLine()) != null) {
|
||||
if (tempLine.contains("=")) {
|
||||
String[] args = tempLine.split("=");
|
||||
playerIP.put(args[0], args[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
ipFile.close();
|
||||
users = new BufferedReader(new FileReader(source));
|
||||
while ((line = users.readLine()) != null) {
|
||||
if (line.contains("=")) {
|
||||
String[] arguments = line.split("=");
|
||||
try {
|
||||
playerPSW.put(arguments[0],PasswordSecurity.getHash(hash, arguments[1], arguments[0].toLowerCase()));
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
ConsoleLogger.showError(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
users.close();
|
||||
outputDB = new BufferedWriter(new FileWriter(output));
|
||||
for (Entry<String, String> m : playerPSW.entrySet()) {
|
||||
if (useIP) {
|
||||
String player = m.getKey();
|
||||
String psw = playerPSW.get(player);
|
||||
String ip = playerIP.get(player);
|
||||
newLine = player + ":" + psw + ":" + ip + ":1325376060:0:0:0";
|
||||
|
||||
} else {
|
||||
String player = m.getKey();
|
||||
String psw = playerPSW.get(player);
|
||||
String ip = "127.0.0.1";
|
||||
newLine = player + ":" + psw + ":" + ip + ":1325376060:0:0:0";
|
||||
}
|
||||
if (alreadyExist) outputDB.newLine();
|
||||
outputDB.write(newLine);
|
||||
System.out.println("Write line");
|
||||
outputDB.newLine();
|
||||
}
|
||||
|
||||
|
||||
outputDB.close();
|
||||
|
||||
System.out.println("[AuthMe] Rakamak database has been converted to auths.db");
|
||||
|
||||
|
||||
|
||||
} catch (FileNotFoundException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
} catch (IOException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
129
src/main/java/uk/org/whoami/authme/converter/xAuthToFlat.java
Normal file
129
src/main/java/uk/org/whoami/authme/converter/xAuthToFlat.java
Normal file
@ -0,0 +1,129 @@
|
||||
package uk.org.whoami.authme.converter;
|
||||
|
||||
import java.io.File;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import com.cypherx.xauth.xAuth;
|
||||
import com.cypherx.xauth.database.Table;
|
||||
import com.cypherx.xauth.utils.xAuthLog;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
|
||||
public class xAuthToFlat {
|
||||
|
||||
public AuthMe instance;
|
||||
public DataSource database;
|
||||
|
||||
public xAuthToFlat(AuthMe instance, DataSource database) {
|
||||
this.instance = instance;
|
||||
this.database = database;
|
||||
}
|
||||
|
||||
public boolean convert(CommandSender sender) {
|
||||
if (instance.getServer().getPluginManager().getPlugin("xAuth") == null) {
|
||||
sender.sendMessage("[AuthMe] xAuth plugin not found");
|
||||
return false;
|
||||
}
|
||||
if (!(new File("./plugins/xAuth/xAuth.h2.db").exists())) {
|
||||
sender.sendMessage("[AuthMe] xAuth H2 database not found, checking for MySQL or SQLite data...");
|
||||
}
|
||||
List<Integer> players = getXAuthPlayers();
|
||||
if (players == null || players.isEmpty()) {
|
||||
sender.sendMessage("[AuthMe] Error while import xAuthPlayers");
|
||||
return false;
|
||||
}
|
||||
|
||||
sender.sendMessage("[AuthMe] Starting import...");
|
||||
for (int id : players) {
|
||||
String pl = getIdPlayer(id);
|
||||
String psw = getPassword(id);
|
||||
if (psw != null && !psw.isEmpty() && pl != null) {
|
||||
PlayerAuth auth = new PlayerAuth(pl, psw, "198.18.0.1", 0);
|
||||
database.saveAuth(auth);
|
||||
}
|
||||
}
|
||||
sender.sendMessage("[AuthMe] Import done!");
|
||||
return true;
|
||||
}
|
||||
|
||||
public String getIdPlayer(int id) {
|
||||
String realPass = "";
|
||||
Connection conn = xAuth.getPlugin().getDatabaseController().getConnection();
|
||||
PreparedStatement ps = null;
|
||||
ResultSet rs = null;
|
||||
|
||||
try {
|
||||
String sql = String.format("SELECT `playername` FROM `%s` WHERE `id` = ?",
|
||||
xAuth.getPlugin().getDatabaseController().getTable(Table.ACCOUNT));
|
||||
ps = conn.prepareStatement(sql);
|
||||
ps.setInt(1, id);
|
||||
rs = ps.executeQuery();
|
||||
if (!rs.next())
|
||||
return null;
|
||||
|
||||
realPass = rs.getString("playername").toLowerCase();
|
||||
} catch (SQLException e) {
|
||||
xAuthLog.severe("Failed to retrieve name for account: " + id, e);
|
||||
return null;
|
||||
} finally {
|
||||
xAuth.getPlugin().getDatabaseController().close(conn, ps, rs);
|
||||
}
|
||||
return realPass;
|
||||
}
|
||||
|
||||
public List<Integer> getXAuthPlayers() {
|
||||
List<Integer> xP = new ArrayList<Integer>();
|
||||
Connection conn = xAuth.getPlugin().getDatabaseController().getConnection();
|
||||
PreparedStatement ps = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = String.format("SELECT * FROM `%s`",
|
||||
xAuth.getPlugin().getDatabaseController().getTable(Table.ACCOUNT));
|
||||
ps = conn.prepareStatement(sql);
|
||||
rs = ps.executeQuery();
|
||||
while(rs.next()) {
|
||||
xP.add(rs.getInt("id"));
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
xAuthLog.severe("Cannot import xAuthPlayers", e);
|
||||
return new ArrayList<Integer>();
|
||||
} finally {
|
||||
xAuth.getPlugin().getDatabaseController().close(conn, ps, rs);
|
||||
}
|
||||
return xP;
|
||||
}
|
||||
|
||||
public String getPassword(int accountId) {
|
||||
String realPass = "";
|
||||
Connection conn = xAuth.getPlugin().getDatabaseController().getConnection();
|
||||
PreparedStatement ps = null;
|
||||
ResultSet rs = null;
|
||||
|
||||
try {
|
||||
String sql = String.format("SELECT `password`, `pwtype` FROM `%s` WHERE `id` = ?",
|
||||
xAuth.getPlugin().getDatabaseController().getTable(Table.ACCOUNT));
|
||||
ps = conn.prepareStatement(sql);
|
||||
ps.setInt(1, accountId);
|
||||
rs = ps.executeQuery();
|
||||
if (!rs.next())
|
||||
return null;
|
||||
|
||||
realPass = rs.getString("password");
|
||||
} catch (SQLException e) {
|
||||
xAuthLog.severe("Failed to retrieve password hash for account: " + accountId, e);
|
||||
return null;
|
||||
} finally {
|
||||
xAuth.getPlugin().getDatabaseController().close(conn, ps, rs);
|
||||
}
|
||||
return realPass;
|
||||
}
|
||||
}
|
@ -0,0 +1,178 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.datasource;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
|
||||
public class CacheDataSource implements DataSource {
|
||||
|
||||
private DataSource source;
|
||||
public AuthMe plugin;
|
||||
private final HashMap<String, PlayerAuth> cache = new HashMap<String, PlayerAuth>();
|
||||
|
||||
public CacheDataSource(AuthMe plugin, DataSource source) {
|
||||
this.plugin = plugin;
|
||||
this.source = source;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean isAuthAvailable(String user) {
|
||||
return cache.containsKey(user) ? true : source.isAuthAvailable(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized PlayerAuth getAuth(String user) {
|
||||
if(cache.containsKey(user)) {
|
||||
return cache.get(user);
|
||||
} else {
|
||||
PlayerAuth auth = source.getAuth(user);
|
||||
cache.put(user, auth);
|
||||
return auth;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean saveAuth(PlayerAuth auth) {
|
||||
if (source.saveAuth(auth)) {
|
||||
cache.put(auth.getNickname(), auth);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean updatePassword(PlayerAuth auth) {
|
||||
if (source.updatePassword(auth)) {
|
||||
cache.get(auth.getNickname()).setHash(auth.getHash());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateSession(PlayerAuth auth) {
|
||||
if (source.updateSession(auth)) {
|
||||
cache.get(auth.getNickname()).setIp(auth.getIp());
|
||||
cache.get(auth.getNickname()).setLastLogin(auth.getLastLogin());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateQuitLoc(PlayerAuth auth) {
|
||||
//System.out.println("[debug name chace non work]"+auth.getNickname()+"[debug loc]"+auth.getQuitLocX());
|
||||
if (source.updateQuitLoc(auth)) {
|
||||
//System.out.println("[debug name chace]"+auth.getNickname()+"[debug loc]"+auth.getQuitLocX());
|
||||
cache.get(auth.getNickname()).setQuitLocX(auth.getQuitLocX());
|
||||
cache.get(auth.getNickname()).setQuitLocY(auth.getQuitLocY());
|
||||
cache.get(auth.getNickname()).setQuitLocZ(auth.getQuitLocZ());
|
||||
return true;
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIps(String ip) {
|
||||
return source.getIps(ip);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int purgeDatabase(long until) {
|
||||
int cleared = source.purgeDatabase(until);
|
||||
|
||||
if (cleared > 0) {
|
||||
for (PlayerAuth auth : cache.values()) {
|
||||
if(auth.getLastLogin() < until) {
|
||||
cache.remove(auth.getNickname());
|
||||
}
|
||||
}
|
||||
}
|
||||
return cleared;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean removeAuth(String user) {
|
||||
if (source.removeAuth(user)) {
|
||||
cache.remove(user);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void close() {
|
||||
source.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reload() {
|
||||
cache.clear();
|
||||
for (Player player : plugin.getServer().getOnlinePlayers()) {
|
||||
String user = player.getName().toLowerCase();
|
||||
if (PlayerCache.getInstance().isAuthenticated(user)) {
|
||||
try {
|
||||
PlayerAuth auth = source.getAuth(user);
|
||||
cache.put(user, auth);
|
||||
} catch (NullPointerException npe) {
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateEmail(PlayerAuth auth) {
|
||||
if(source.updateEmail(auth)) {
|
||||
cache.get(auth.getNickname()).setEmail(auth.getEmail());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateSalt(PlayerAuth auth) {
|
||||
if(source.updateSalt(auth)) {
|
||||
cache.get(auth.getNickname()).setSalt(auth.getSalt());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAllAuthsByName(PlayerAuth auth) {
|
||||
return source.getAllAuthsByName(auth);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAllAuthsByIp(String ip) {
|
||||
return source.getAllAuthsByIp(ip);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAllAuthsByEmail(String email) {
|
||||
return source.getAllAuthsByEmail(email);
|
||||
}
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.datasource;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
|
||||
public interface DataSource {
|
||||
|
||||
public enum DataSourceType {
|
||||
|
||||
MYSQL, FILE, SQLITE
|
||||
}
|
||||
|
||||
boolean isAuthAvailable(String user);
|
||||
|
||||
PlayerAuth getAuth(String user);
|
||||
|
||||
boolean saveAuth(PlayerAuth auth);
|
||||
|
||||
boolean updateSession(PlayerAuth auth);
|
||||
|
||||
boolean updatePassword(PlayerAuth auth);
|
||||
|
||||
int purgeDatabase(long until);
|
||||
|
||||
boolean removeAuth(String user);
|
||||
|
||||
boolean updateQuitLoc(PlayerAuth auth);
|
||||
|
||||
int getIps(String ip);
|
||||
|
||||
List<String> getAllAuthsByName(PlayerAuth auth);
|
||||
|
||||
List<String> getAllAuthsByIp(String ip);
|
||||
|
||||
List<String> getAllAuthsByEmail(String email);
|
||||
|
||||
boolean updateEmail(PlayerAuth auth);
|
||||
|
||||
boolean updateSalt(PlayerAuth auth);
|
||||
|
||||
void close();
|
||||
|
||||
void reload();
|
||||
|
||||
}
|
@ -0,0 +1,474 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.datasource;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import uk.org.whoami.authme.ConsoleLogger;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
public class FileDataSource implements DataSource {
|
||||
|
||||
|
||||
/* file layout:
|
||||
*
|
||||
* PLAYERNAME:HASHSUM:IP:LOGININMILLIESECONDS:COORDS
|
||||
*
|
||||
* Old but compatible:
|
||||
* PLAYERNAME:HASHSUM:IP
|
||||
* PLAYERNAME:HASHSUM
|
||||
*
|
||||
*/
|
||||
private File source;
|
||||
|
||||
public FileDataSource() throws IOException {
|
||||
source = new File(Settings.AUTH_FILE);
|
||||
source.createNewFile();
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean isAuthAvailable(String user) {
|
||||
BufferedReader br = null;
|
||||
try {
|
||||
br = new BufferedReader(new FileReader(source));
|
||||
String line;
|
||||
while ((line = br.readLine()) != null) {
|
||||
String[] args = line.split(":");
|
||||
if (args.length > 1 && args[0].equals(user)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} catch (FileNotFoundException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} catch (IOException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
if (br != null) {
|
||||
try {
|
||||
br.close();
|
||||
} catch (IOException ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean saveAuth(PlayerAuth auth) {
|
||||
if (isAuthAvailable(auth.getNickname())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
BufferedWriter bw = null;
|
||||
try {
|
||||
if( auth.getQuitLocY() == 0 ) {
|
||||
bw = new BufferedWriter(new FileWriter(source, true));
|
||||
bw.write(auth.getNickname() + ":" + auth.getHash() + ":" + auth.getIp() + ":" + auth.getLastLogin() + "\n");
|
||||
//System.out.println("[Debug save1] "+auth.getQuitLocY());
|
||||
} else {
|
||||
bw = new BufferedWriter(new FileWriter(source, true));
|
||||
bw.write(auth.getNickname() + ":" + auth.getHash() + ":" + auth.getIp() + ":" + auth.getLastLogin() + ":" + auth.getQuitLocX() + ":" + auth.getQuitLocY() + ":" + auth.getQuitLocZ() + "\n");
|
||||
//System.out.println("[Debug save2] "+auth.getQuitLocY());
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
if (bw != null) {
|
||||
try {
|
||||
bw.close();
|
||||
} catch (IOException ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean updatePassword(PlayerAuth auth) {
|
||||
if (!isAuthAvailable(auth.getNickname())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
PlayerAuth newAuth = null;
|
||||
|
||||
BufferedReader br = null;
|
||||
try {
|
||||
br = new BufferedReader(new FileReader(source));
|
||||
String line = "";
|
||||
while ((line = br.readLine()) != null) {
|
||||
String[] args = line.split(":");
|
||||
if (args[0].equals(auth.getNickname())) {
|
||||
newAuth = new PlayerAuth(args[0], auth.getHash(), args[2], Long.parseLong(args[3]));
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (FileNotFoundException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} catch (IOException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
if (br != null) {
|
||||
try {
|
||||
br.close();
|
||||
} catch (IOException ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
removeAuth(auth.getNickname());
|
||||
saveAuth(newAuth);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateSession(PlayerAuth auth) {
|
||||
if (!isAuthAvailable(auth.getNickname())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
PlayerAuth newAuth = null;
|
||||
|
||||
BufferedReader br = null;
|
||||
try {
|
||||
br = new BufferedReader(new FileReader(source));
|
||||
String line = "";
|
||||
while ((line = br.readLine()) != null) {
|
||||
String[] args = line.split(":");
|
||||
if (args[0].equals(auth.getNickname())) {
|
||||
newAuth = new PlayerAuth(args[0], args[1], auth.getIp(), auth.getLastLogin());
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (FileNotFoundException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} catch (IOException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
if (br != null) {
|
||||
try {
|
||||
br.close();
|
||||
} catch (IOException ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
removeAuth(auth.getNickname());
|
||||
saveAuth(newAuth);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateQuitLoc(PlayerAuth auth) {
|
||||
|
||||
if (!isAuthAvailable(auth.getNickname())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
PlayerAuth newAuth = null;
|
||||
|
||||
BufferedReader br = null;
|
||||
try {
|
||||
br = new BufferedReader(new FileReader(source));
|
||||
String line = "";
|
||||
while ((line = br.readLine()) != null) {
|
||||
String[] args = line.split(":");
|
||||
if (args[0].equals(auth.getNickname())) {
|
||||
//System.out.println("[Debug update] "+auth.getQuitLocX());
|
||||
newAuth = new PlayerAuth(args[0], args[1], args[2], Long.parseLong(args[3]), auth.getQuitLocX(), auth.getQuitLocY(), auth.getQuitLocZ());
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (FileNotFoundException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} catch (IOException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
if (br != null) {
|
||||
try {
|
||||
br.close();
|
||||
} catch (IOException ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
removeAuth(auth.getNickname());
|
||||
saveAuth(newAuth);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIps(String ip) {
|
||||
BufferedReader br = null;
|
||||
int countIp = 0;
|
||||
try {
|
||||
br = new BufferedReader(new FileReader(source));
|
||||
String line;
|
||||
while ((line = br.readLine()) != null) {
|
||||
String[] args = line.split(":");
|
||||
//System.out.println(ip+" match? "+args[2]);
|
||||
if (args.length > 3 && args[2].equals(ip)) {
|
||||
countIp++;
|
||||
}
|
||||
}
|
||||
return countIp;
|
||||
} catch (FileNotFoundException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return 0;
|
||||
} catch (IOException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return 0;
|
||||
} finally {
|
||||
if (br != null) {
|
||||
try {
|
||||
br.close();
|
||||
} catch (IOException ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int purgeDatabase(long until) {
|
||||
BufferedReader br = null;
|
||||
BufferedWriter bw = null;
|
||||
ArrayList<String> lines = new ArrayList<String>();
|
||||
int cleared = 0;
|
||||
|
||||
try {
|
||||
br = new BufferedReader(new FileReader(source));
|
||||
String line;
|
||||
while ((line = br.readLine()) != null) {
|
||||
String[] args = line.split(":");
|
||||
if (args.length == 4) {
|
||||
if (Long.parseLong(args[3]) >= until) {
|
||||
lines.add(line);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
cleared++;
|
||||
}
|
||||
|
||||
bw = new BufferedWriter(new FileWriter(source));
|
||||
for (String l : lines) {
|
||||
bw.write(l + "\n");
|
||||
}
|
||||
} catch (FileNotFoundException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return cleared;
|
||||
} catch (IOException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return cleared;
|
||||
} finally {
|
||||
if (br != null) {
|
||||
try {
|
||||
br.close();
|
||||
} catch (IOException ex) {
|
||||
}
|
||||
}
|
||||
if (bw != null) {
|
||||
try {
|
||||
bw.close();
|
||||
} catch (IOException ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return cleared;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean removeAuth(String user) {
|
||||
if (!isAuthAvailable(user)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
BufferedReader br = null;
|
||||
BufferedWriter bw = null;
|
||||
ArrayList<String> lines = new ArrayList<String>();
|
||||
try {
|
||||
br = new BufferedReader(new FileReader(source));
|
||||
String line;
|
||||
while ((line = br.readLine()) != null) {
|
||||
String[] args = line.split(":");
|
||||
if (args.length > 1 && !args[0].equals(user)) {
|
||||
lines.add(line);
|
||||
}
|
||||
}
|
||||
|
||||
bw = new BufferedWriter(new FileWriter(source));
|
||||
for (String l : lines) {
|
||||
bw.write(l + "\n");
|
||||
}
|
||||
} catch (FileNotFoundException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} catch (IOException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
if (br != null) {
|
||||
try {
|
||||
br.close();
|
||||
} catch (IOException ex) {
|
||||
}
|
||||
}
|
||||
if (bw != null) {
|
||||
try {
|
||||
bw.close();
|
||||
} catch (IOException ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized PlayerAuth getAuth(String user) {
|
||||
BufferedReader br = null;
|
||||
try {
|
||||
br = new BufferedReader(new FileReader(source));
|
||||
String line;
|
||||
while ((line = br.readLine()) != null) {
|
||||
String[] args = line.split(":");
|
||||
if (args[0].equals(user)) {
|
||||
switch (args.length) {
|
||||
case 2:
|
||||
return new PlayerAuth(args[0], args[1], "198.18.0.1", 0);
|
||||
case 3:
|
||||
return new PlayerAuth(args[0], args[1], args[2], 0);
|
||||
case 4:
|
||||
return new PlayerAuth(args[0], args[1], args[2], Long.parseLong(args[3]));
|
||||
case 7:
|
||||
return new PlayerAuth(args[0], args[1], args[2], Long.parseLong(args[3]), Integer.parseInt(args[4]), Integer.parseInt(args[5]), Integer.parseInt(args[6]));
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (FileNotFoundException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return null;
|
||||
} catch (IOException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return null;
|
||||
} finally {
|
||||
if (br != null) {
|
||||
try {
|
||||
br.close();
|
||||
} catch (IOException ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void close() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reload() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateEmail(PlayerAuth auth) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateSalt(PlayerAuth auth) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAllAuthsByName(PlayerAuth auth) {
|
||||
BufferedReader br = null;
|
||||
List<String> countIp = new ArrayList<String>();
|
||||
try {
|
||||
br = new BufferedReader(new FileReader(source));
|
||||
String line;
|
||||
while ((line = br.readLine()) != null) {
|
||||
String[] args = line.split(":");
|
||||
//System.out.println(ip+" match? "+args[2]);
|
||||
if (args.length > 3 && args[2].equals(auth.getIp())) {
|
||||
countIp.add(args[0]);
|
||||
}
|
||||
}
|
||||
return countIp;
|
||||
} catch (FileNotFoundException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} catch (IOException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} finally {
|
||||
if (br != null) {
|
||||
try {
|
||||
br.close();
|
||||
} catch (IOException ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAllAuthsByIp(String ip) {
|
||||
BufferedReader br = null;
|
||||
List<String> countIp = new ArrayList<String>();
|
||||
try {
|
||||
br = new BufferedReader(new FileReader(source));
|
||||
String line;
|
||||
while ((line = br.readLine()) != null) {
|
||||
String[] args = line.split(":");
|
||||
if (args.length > 3 && args[2].equals(ip)) {
|
||||
countIp.add(args[0]);
|
||||
}
|
||||
}
|
||||
return countIp;
|
||||
} catch (FileNotFoundException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} catch (IOException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} finally {
|
||||
if (br != null) {
|
||||
try {
|
||||
br.close();
|
||||
} catch (IOException ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAllAuthsByEmail(String email) {
|
||||
return new ArrayList<String>();
|
||||
}
|
||||
}
|
@ -0,0 +1,319 @@
|
||||
// Copyright 2007-2011 Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland
|
||||
// www.source-code.biz, www.inventec.ch/chdh
|
||||
//
|
||||
// This module is multi-licensed and may be used under the terms
|
||||
// of any of the following licenses:
|
||||
//
|
||||
// EPL, Eclipse Public License, http://www.eclipse.org/legal
|
||||
// LGPL, GNU Lesser General Public License, http://www.gnu.org/licenses/lgpl.html
|
||||
// MPL, Mozilla Public License 1.1, http://www.mozilla.org/MPL
|
||||
//
|
||||
// Please contact the author if you need another license.
|
||||
// This module is provided "as is", without warranties of any kind.
|
||||
|
||||
package uk.org.whoami.authme.datasource;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.concurrent.Semaphore;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.LinkedList;
|
||||
import javax.sql.ConnectionEvent;
|
||||
import javax.sql.ConnectionEventListener;
|
||||
import javax.sql.ConnectionPoolDataSource;
|
||||
import javax.sql.PooledConnection;
|
||||
|
||||
/**
|
||||
* A lightweight standalone JDBC connection pool manager.
|
||||
*
|
||||
* <p>The public methods of this class are thread-safe.
|
||||
*
|
||||
* <p>Home page: <a href="http://www.source-code.biz/miniconnectionpoolmanager">www.source-code.biz/miniconnectionpoolmanager</a><br>
|
||||
* Author: Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland<br>
|
||||
* Multi-licensed: EPL / LGPL / MPL.
|
||||
*/
|
||||
public class MiniConnectionPoolManager {
|
||||
|
||||
private ConnectionPoolDataSource dataSource;
|
||||
private int maxConnections;
|
||||
private long timeoutMs = 70 * 1000L;
|
||||
private PrintWriter logWriter;
|
||||
private Semaphore semaphore;
|
||||
private LinkedList<PooledConnection> recycledConnections;
|
||||
private int activeConnections;
|
||||
private PoolConnectionEventListener poolConnectionEventListener;
|
||||
private boolean isDisposed;
|
||||
private boolean doPurgeConnection;
|
||||
|
||||
/**
|
||||
* Thrown in {@link #getConnection()} or {@link #getValidConnection()} when no free connection becomes
|
||||
* available within <code>timeout</code> seconds.
|
||||
*/
|
||||
public static class TimeoutException extends RuntimeException {
|
||||
private static final long serialVersionUID = 1;
|
||||
public TimeoutException () {
|
||||
super("Timeout while waiting for a free database connection."); }
|
||||
public TimeoutException (String msg) {
|
||||
super(msg); }}
|
||||
|
||||
/**
|
||||
* Constructs a MiniConnectionPoolManager object with a timeout of 60 seconds.
|
||||
*
|
||||
* @param dataSource
|
||||
* the data source for the connections.
|
||||
* @param maxConnections
|
||||
* the maximum number of connections.
|
||||
*/
|
||||
public MiniConnectionPoolManager (ConnectionPoolDataSource dataSource, int maxConnections) {
|
||||
this(dataSource, maxConnections, 70); }
|
||||
|
||||
/**
|
||||
* Constructs a MiniConnectionPoolManager object.
|
||||
*
|
||||
* @param dataSource
|
||||
* the data source for the connections.
|
||||
* @param maxConnections
|
||||
* the maximum number of connections.
|
||||
* @param timeout
|
||||
* the maximum time in seconds to wait for a free connection.
|
||||
*/
|
||||
public MiniConnectionPoolManager (ConnectionPoolDataSource dataSource, int maxConnections, int timeout) {
|
||||
this.dataSource = dataSource;
|
||||
this.maxConnections = maxConnections;
|
||||
this.timeoutMs = timeout * 1000L;
|
||||
try {
|
||||
logWriter = dataSource.getLogWriter(); }
|
||||
catch (SQLException e) {}
|
||||
if (maxConnections < 1) {
|
||||
throw new IllegalArgumentException("Invalid maxConnections value."); }
|
||||
semaphore = new Semaphore(maxConnections,true);
|
||||
recycledConnections = new LinkedList<PooledConnection>();
|
||||
poolConnectionEventListener = new PoolConnectionEventListener(); }
|
||||
|
||||
/**
|
||||
* Closes all unused pooled connections.
|
||||
*/
|
||||
public synchronized void dispose() throws SQLException {
|
||||
if (isDisposed) {
|
||||
return; }
|
||||
isDisposed = true;
|
||||
SQLException e = null;
|
||||
while (!recycledConnections.isEmpty()) {
|
||||
PooledConnection pconn = recycledConnections.remove();
|
||||
try {
|
||||
pconn.close(); }
|
||||
catch (SQLException e2) {
|
||||
if (e == null) {
|
||||
e = e2; }}}
|
||||
if (e != null) {
|
||||
throw e; }}
|
||||
|
||||
/**
|
||||
* Retrieves a connection from the connection pool.
|
||||
*
|
||||
* <p>If <code>maxConnections</code> connections are already in use, the method
|
||||
* waits until a connection becomes available or <code>timeout</code> seconds elapsed.
|
||||
* When the application is finished using the connection, it must close it
|
||||
* in order to return it to the pool.
|
||||
*
|
||||
* @return
|
||||
* a new <code>Connection</code> object.
|
||||
* @throws TimeoutException
|
||||
* when no connection becomes available within <code>timeout</code> seconds.
|
||||
*/
|
||||
public Connection getConnection() throws SQLException {
|
||||
return getConnection2(timeoutMs); }
|
||||
|
||||
private Connection getConnection2 (long timeoutMs) throws SQLException {
|
||||
// This routine is unsynchronized, because semaphore.tryAcquire() may block.
|
||||
synchronized (this) {
|
||||
if (isDisposed) {
|
||||
throw new IllegalStateException("Connection pool has been disposed."); }}
|
||||
try {
|
||||
if (!semaphore.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) {
|
||||
throw new TimeoutException(); }}
|
||||
catch (InterruptedException e) {
|
||||
throw new RuntimeException("Interrupted while waiting for a database connection.",e); }
|
||||
boolean ok = false;
|
||||
try {
|
||||
Connection conn = getConnection3();
|
||||
ok = true;
|
||||
return conn; }
|
||||
finally {
|
||||
if (!ok) {
|
||||
semaphore.release(); }}}
|
||||
|
||||
private synchronized Connection getConnection3() throws SQLException {
|
||||
if (isDisposed) {
|
||||
throw new IllegalStateException("Connection pool has been disposed."); } // test again with lock
|
||||
PooledConnection pconn;
|
||||
if (!recycledConnections.isEmpty()) {
|
||||
pconn = recycledConnections.remove(); }
|
||||
else {
|
||||
pconn = dataSource.getPooledConnection();
|
||||
pconn.addConnectionEventListener(poolConnectionEventListener); }
|
||||
Connection conn = pconn.getConnection();
|
||||
activeConnections++;
|
||||
assertInnerState();
|
||||
return conn; }
|
||||
|
||||
/**
|
||||
* Retrieves a connection from the connection pool and ensures that it is valid
|
||||
* by calling {@link Connection#isValid(int)}.
|
||||
*
|
||||
* <p>If a connection is not valid, the method tries to get another connection
|
||||
* until one is valid (or a timeout occurs).
|
||||
*
|
||||
* <p>Pooled connections may become invalid when e.g. the database server is
|
||||
* restarted.
|
||||
*
|
||||
* <p>This method is slower than {@link #getConnection()} because the JDBC
|
||||
* driver has to send an extra command to the database server to test the connection.
|
||||
*
|
||||
*
|
||||
* <p>This method requires Java 1.6 or newer.
|
||||
*
|
||||
* @throws TimeoutException
|
||||
* when no valid connection becomes available within <code>timeout</code> seconds.
|
||||
*/
|
||||
public Connection getValidConnection() {
|
||||
long time = System.currentTimeMillis();
|
||||
long timeoutTime = time + timeoutMs;
|
||||
int triesWithoutDelay = getInactiveConnections() + 1;
|
||||
while (true) {
|
||||
Connection conn = getValidConnection2(time, timeoutTime);
|
||||
if (conn != null) {
|
||||
return conn; }
|
||||
triesWithoutDelay--;
|
||||
if (triesWithoutDelay <= 0) {
|
||||
triesWithoutDelay = 0;
|
||||
try {
|
||||
Thread.sleep(250);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException("Interrupted while waiting for a valid database connection.", e);
|
||||
}
|
||||
}
|
||||
time = System.currentTimeMillis();
|
||||
if (time >= timeoutTime) {
|
||||
throw new TimeoutException("Timeout while waiting for a valid database connection.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Connection getValidConnection2 (long time, long timeoutTime) {
|
||||
long rtime = Math.max(1, timeoutTime - time);
|
||||
Connection conn;
|
||||
try {
|
||||
conn = getConnection2(rtime); }
|
||||
catch (SQLException e) {
|
||||
return null; }
|
||||
rtime = timeoutTime - System.currentTimeMillis();
|
||||
int rtimeSecs = Math.max(1, (int)((rtime+999)/1000));
|
||||
try {
|
||||
if (conn.isValid(rtimeSecs)) {
|
||||
return conn; }}
|
||||
catch (SQLException e) {}
|
||||
// This Exception should never occur. If it nevertheless occurs, it's because of an error in the
|
||||
// JDBC driver which we ignore and assume that the connection is not valid.
|
||||
// When isValid() returns false, the JDBC driver should have already called connectionErrorOccurred()
|
||||
// and the PooledConnection has been removed from the pool, i.e. the PooledConnection will
|
||||
// not be added to recycledConnections when Connection.close() is called.
|
||||
// But to be sure that this works even with a faulty JDBC driver, we call purgeConnection().
|
||||
purgeConnection(conn);
|
||||
return null; }
|
||||
|
||||
// Purges the PooledConnection associated with the passed Connection from the connection pool.
|
||||
private synchronized void purgeConnection (Connection conn) {
|
||||
try {
|
||||
doPurgeConnection = true;
|
||||
// (A potential problem of this program logic is that setting the doPurgeConnection flag
|
||||
// has an effect only if the JDBC driver calls connectionClosed() synchronously within
|
||||
// Connection.close().)
|
||||
conn.close(); }
|
||||
catch (SQLException e) {}
|
||||
// ignore exception from close()
|
||||
finally {
|
||||
doPurgeConnection = false; }}
|
||||
|
||||
private synchronized void recycleConnection (PooledConnection pconn) {
|
||||
if (isDisposed || doPurgeConnection) {
|
||||
disposeConnection(pconn);
|
||||
return; }
|
||||
if (activeConnections <= 0) {
|
||||
throw new AssertionError(); }
|
||||
activeConnections--;
|
||||
semaphore.release();
|
||||
recycledConnections.add(pconn);
|
||||
assertInnerState(); }
|
||||
|
||||
private synchronized void disposeConnection (PooledConnection pconn) {
|
||||
pconn.removeConnectionEventListener(poolConnectionEventListener);
|
||||
if (!recycledConnections.remove(pconn)) {
|
||||
// If the PooledConnection is not in the recycledConnections list,
|
||||
// we assume that the connection was active.
|
||||
if (activeConnections <= 0) {
|
||||
throw new AssertionError(); }
|
||||
activeConnections--;
|
||||
semaphore.release(); }
|
||||
closeConnectionAndIgnoreException(pconn);
|
||||
assertInnerState(); }
|
||||
|
||||
private void closeConnectionAndIgnoreException (PooledConnection pconn) {
|
||||
try {
|
||||
pconn.close(); }
|
||||
catch (SQLException e) {
|
||||
log("Error while closing database connection: "+e.toString()); }}
|
||||
|
||||
private void log (String msg) {
|
||||
String s = "MiniConnectionPoolManager: "+msg;
|
||||
try {
|
||||
if (logWriter == null) {
|
||||
System.err.println(s); }
|
||||
else {
|
||||
logWriter.println(s); }}
|
||||
catch (Exception e) {}}
|
||||
|
||||
private void assertInnerState() {
|
||||
if (activeConnections < 0) {
|
||||
throw new AssertionError(); }
|
||||
if (activeConnections + recycledConnections.size() > maxConnections) {
|
||||
throw new AssertionError(); }
|
||||
if (activeConnections + semaphore.availablePermits() > maxConnections) {
|
||||
throw new AssertionError(); }}
|
||||
|
||||
private class PoolConnectionEventListener implements ConnectionEventListener {
|
||||
public void connectionClosed (ConnectionEvent event) {
|
||||
PooledConnection pconn = (PooledConnection)event.getSource();
|
||||
recycleConnection(pconn); }
|
||||
public void connectionErrorOccurred (ConnectionEvent event) {
|
||||
PooledConnection pconn = (PooledConnection)event.getSource();
|
||||
disposeConnection(pconn); }}
|
||||
|
||||
/**
|
||||
* Returns the number of active (open) connections of this pool.
|
||||
*
|
||||
* <p>This is the number of <code>Connection</code> objects that have been
|
||||
* issued by {@link #getConnection()}, for which <code>Connection.close()</code>
|
||||
* has not yet been called.
|
||||
*
|
||||
* @return
|
||||
* the number of active connections.
|
||||
**/
|
||||
public synchronized int getActiveConnections() {
|
||||
return activeConnections; }
|
||||
|
||||
/**
|
||||
* Returns the number of inactive (unused) connections in this pool.
|
||||
*
|
||||
* <p>This is the number of internally kept recycled connections,
|
||||
* for which <code>Connection.close()</code> has been called and which
|
||||
* have not yet been reused.
|
||||
*
|
||||
* @return
|
||||
* the number of inactive connections.
|
||||
**/
|
||||
public synchronized int getInactiveConnections() {
|
||||
return recycledConnections.size(); }
|
||||
|
||||
} // end class MiniConnectionPoolManager
|
@ -0,0 +1,579 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.datasource;
|
||||
|
||||
import com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import uk.org.whoami.authme.ConsoleLogger;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
import uk.org.whoami.authme.datasource.MiniConnectionPoolManager.TimeoutException;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
public class MySQLDataSource implements DataSource {
|
||||
|
||||
private String host;
|
||||
private String port;
|
||||
private String username;
|
||||
private String password;
|
||||
private String database;
|
||||
private String tableName;
|
||||
private String columnName;
|
||||
private String columnPassword;
|
||||
private String columnIp;
|
||||
private String columnLastLogin;
|
||||
private String columnSalt;
|
||||
private String columnGroup;
|
||||
private String lastlocX;
|
||||
private String lastlocY;
|
||||
private String lastlocZ;
|
||||
private String columnEmail;
|
||||
private String columnID;
|
||||
private List<String> columnOthers;
|
||||
private MiniConnectionPoolManager conPool;
|
||||
|
||||
public MySQLDataSource() throws ClassNotFoundException, SQLException {
|
||||
this.host = Settings.getMySQLHost;
|
||||
this.port = Settings.getMySQLPort;
|
||||
this.username = Settings.getMySQLUsername;
|
||||
this.password = Settings.getMySQLPassword;
|
||||
|
||||
this.database = Settings.getMySQLDatabase;
|
||||
this.tableName = Settings.getMySQLTablename;
|
||||
this.columnName = Settings.getMySQLColumnName;
|
||||
this.columnPassword = Settings.getMySQLColumnPassword;
|
||||
this.columnIp = Settings.getMySQLColumnIp;
|
||||
this.columnLastLogin = Settings.getMySQLColumnLastLogin;
|
||||
this.lastlocX = Settings.getMySQLlastlocX;
|
||||
this.lastlocY = Settings.getMySQLlastlocY;
|
||||
this.lastlocZ = Settings.getMySQLlastlocZ;
|
||||
this.columnSalt = Settings.getMySQLColumnSalt;
|
||||
this.columnGroup = Settings.getMySQLColumnGroup;
|
||||
this.columnEmail = Settings.getMySQLColumnEmail;
|
||||
this.columnOthers = Settings.getMySQLOtherUsernameColumn;
|
||||
this.columnID = Settings.getMySQLColumnId;
|
||||
|
||||
connect();
|
||||
setup();
|
||||
}
|
||||
|
||||
private synchronized void connect() throws ClassNotFoundException, SQLException {
|
||||
Class.forName("com.mysql.jdbc.Driver");
|
||||
ConsoleLogger.info("MySQL driver loaded");
|
||||
MysqlConnectionPoolDataSource dataSource = new MysqlConnectionPoolDataSource();
|
||||
dataSource.setDatabaseName(database);
|
||||
dataSource.setServerName(host);
|
||||
dataSource.setPort(Integer.parseInt(port));
|
||||
dataSource.setUser(username);
|
||||
dataSource.setPassword(password);
|
||||
|
||||
conPool = new MiniConnectionPoolManager(dataSource, 10);
|
||||
ConsoleLogger.info("Connection pool ready");
|
||||
}
|
||||
|
||||
private synchronized void setup() throws SQLException {
|
||||
Connection con = null;
|
||||
Statement st = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
con = conPool.getValidConnection();
|
||||
st = con.createStatement();
|
||||
st.executeUpdate("CREATE TABLE IF NOT EXISTS " + tableName + " ("
|
||||
+ columnID + " INTEGER AUTO_INCREMENT,"
|
||||
+ columnName + " VARCHAR(255) NOT NULL UNIQUE,"
|
||||
+ columnPassword + " VARCHAR(255) NOT NULL,"
|
||||
+ columnIp + " VARCHAR(40) NOT NULL,"
|
||||
+ columnLastLogin + " BIGINT,"
|
||||
+ lastlocX + " smallint(6) DEFAULT '0',"
|
||||
+ lastlocY + " smallint(6) DEFAULT '0',"
|
||||
+ lastlocZ + " smallint(6) DEFAULT '0',"
|
||||
+ columnEmail + " VARCHAR(255) DEFAULT 'your@email.com',"
|
||||
+ "CONSTRAINT table_const_prim PRIMARY KEY (" + columnID + "));");
|
||||
|
||||
rs = con.getMetaData().getColumns(null, null, tableName, columnIp);
|
||||
if (!rs.next()) {
|
||||
st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN "
|
||||
+ columnIp + " VARCHAR(40) NOT NULL;");
|
||||
}
|
||||
rs.close();
|
||||
rs = con.getMetaData().getColumns(null, null, tableName, columnLastLogin);
|
||||
if (!rs.next()) {
|
||||
st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN "
|
||||
+ columnLastLogin + " BIGINT;");
|
||||
}
|
||||
rs.close();
|
||||
rs = con.getMetaData().getColumns(null, null, tableName, lastlocX);
|
||||
if (!rs.next()) {
|
||||
st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + lastlocX + " smallint(6) NOT NULL DEFAULT '0' AFTER "
|
||||
+ columnLastLogin +" , ADD " + lastlocY + " smallint(6) NOT NULL DEFAULT '0' AFTER " + lastlocX + " , ADD " + lastlocZ + " smallint(6) NOT NULL DEFAULT '0' AFTER " + lastlocY + ";");
|
||||
}
|
||||
rs.close();
|
||||
rs = con.getMetaData().getColumns(null, null, tableName, columnEmail);
|
||||
if (!rs.next()) {
|
||||
st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + columnEmail + " VARCHAR(255) DEFAULT 'your@email.com' AFTER " + lastlocZ +";");
|
||||
}
|
||||
} finally {
|
||||
close(rs);
|
||||
close(st);
|
||||
close(con);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean isAuthAvailable(String user) {
|
||||
Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
con = conPool.getValidConnection();
|
||||
pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE "
|
||||
+ columnName + "=?;");
|
||||
|
||||
pst.setString(1, user);
|
||||
rs = pst.executeQuery();
|
||||
return rs.next();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(rs);
|
||||
close(pst);
|
||||
close(con);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized PlayerAuth getAuth(String user) {
|
||||
Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
con = conPool.getValidConnection();
|
||||
pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE "
|
||||
+ columnName + "=?;");
|
||||
pst.setString(1, user);
|
||||
rs = pst.executeQuery();
|
||||
if (rs.next()) {
|
||||
if (rs.getString(columnIp).isEmpty() ) {
|
||||
return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), "198.18.0.1", rs.getLong(columnLastLogin), rs.getInt(lastlocX), rs.getInt(lastlocY), rs.getInt(lastlocZ), rs.getString(columnEmail));
|
||||
} else {
|
||||
if(!columnSalt.isEmpty()){
|
||||
if(!columnGroup.isEmpty())
|
||||
return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword),rs.getString(columnSalt), rs.getInt(columnGroup), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getInt(lastlocX), rs.getInt(lastlocY), rs.getInt(lastlocZ), rs.getString(columnEmail));
|
||||
else return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword),rs.getString(columnSalt), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getInt(lastlocX), rs.getInt(lastlocY), rs.getInt(lastlocZ), rs.getString(columnEmail));
|
||||
} else {
|
||||
return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getInt(lastlocX), rs.getInt(lastlocY), rs.getInt(lastlocZ), rs.getString(columnEmail));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return null;
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return null;
|
||||
} finally {
|
||||
close(rs);
|
||||
close(pst);
|
||||
close(con);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean saveAuth(PlayerAuth auth) {
|
||||
Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
con = conPool.getValidConnection();
|
||||
if ((columnSalt.isEmpty() || columnSalt == null) && (auth.getSalt().isEmpty() || auth.getSalt() == null)) {
|
||||
pst = con.prepareStatement("INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + ") VALUES (?,?,?,?);");
|
||||
pst.setString(1, auth.getNickname());
|
||||
pst.setString(2, auth.getHash());
|
||||
pst.setString(3, auth.getIp());
|
||||
pst.setLong(4, auth.getLastLogin());
|
||||
pst.executeUpdate();
|
||||
} else {
|
||||
pst = con.prepareStatement("INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + "," + columnSalt + ") VALUES (?,?,?,?,?);");
|
||||
pst.setString(1, auth.getNickname());
|
||||
pst.setString(2, auth.getHash());
|
||||
pst.setString(3, auth.getIp());
|
||||
pst.setLong(4, auth.getLastLogin());
|
||||
pst.setString(5, auth.getSalt());
|
||||
pst.executeUpdate();
|
||||
}
|
||||
if (!columnOthers.isEmpty()) {
|
||||
for(String column : columnOthers) {
|
||||
pst = con.prepareStatement("UPDATE " + tableName + " SET " + tableName + "." + column + "=? WHERE " + columnName + "=?;");
|
||||
pst.setString(1, auth.getNickname());
|
||||
pst.setString(2, auth.getNickname());
|
||||
pst.executeUpdate();
|
||||
}
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(pst);
|
||||
close(con);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean updatePassword(PlayerAuth auth) {
|
||||
Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
con = conPool.getValidConnection();
|
||||
pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnPassword + "=? WHERE " + columnName + "=?;");
|
||||
pst.setString(1, auth.getHash());
|
||||
pst.setString(2, auth.getNickname());
|
||||
pst.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(pst);
|
||||
close(con);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateSession(PlayerAuth auth) {
|
||||
Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
con = conPool.getValidConnection();
|
||||
pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnIp + "=?, " + columnLastLogin + "=? WHERE " + columnName + "=?;");
|
||||
pst.setString(1, auth.getIp());
|
||||
pst.setLong(2, auth.getLastLogin());
|
||||
pst.setString(3, auth.getNickname());
|
||||
pst.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(pst);
|
||||
close(con);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int purgeDatabase(long until) {
|
||||
Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
con = conPool.getValidConnection();
|
||||
pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + columnLastLogin + "<?;");
|
||||
pst.setLong(1, until);
|
||||
return pst.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return 0;
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return 0;
|
||||
} finally {
|
||||
close(pst);
|
||||
close(con);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean removeAuth(String user) {
|
||||
Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
con = conPool.getValidConnection();
|
||||
pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + columnName + "=?;");
|
||||
pst.setString(1, user);
|
||||
pst.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(pst);
|
||||
close(con);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateQuitLoc(PlayerAuth auth) {
|
||||
Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
con = conPool.getValidConnection();
|
||||
pst = con.prepareStatement("UPDATE " + tableName + " SET "+ lastlocX + " =?, "+ lastlocY +"=?, "+ lastlocZ +"=? WHERE " + columnName + "=?;");
|
||||
pst.setLong(1, auth.getQuitLocX());
|
||||
pst.setLong(2, auth.getQuitLocY());
|
||||
pst.setLong(3, auth.getQuitLocZ());
|
||||
pst.setString(4, auth.getNickname());
|
||||
pst.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(pst);
|
||||
close(con);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// Check how many registration by given ip has been done
|
||||
//
|
||||
|
||||
@Override
|
||||
public int getIps(String ip) {
|
||||
Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
ResultSet rs = null;
|
||||
int countIp=0;
|
||||
try {
|
||||
con = conPool.getValidConnection();
|
||||
pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE "
|
||||
+ columnIp + "=?;");
|
||||
pst.setString(1, ip);
|
||||
rs = pst.executeQuery();
|
||||
while(rs.next()) {
|
||||
countIp++;
|
||||
}
|
||||
return countIp;
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return 0;
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return 0;
|
||||
} finally {
|
||||
close(rs);
|
||||
close(pst);
|
||||
close(con);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateEmail(PlayerAuth auth) {
|
||||
Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
con = conPool.getValidConnection();
|
||||
pst = con.prepareStatement("UPDATE " + tableName + " SET "+ columnEmail + " =? WHERE " + columnName + "=?;");
|
||||
pst.setString(1, auth.getEmail());
|
||||
pst.setString(2, auth.getNickname());
|
||||
pst.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(pst);
|
||||
close(con);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateSalt(PlayerAuth auth) {
|
||||
if (columnSalt.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
con = conPool.getValidConnection();
|
||||
pst = con.prepareStatement("UPDATE " + tableName + " SET "+ columnSalt + " =? WHERE " + columnName + "=?;");
|
||||
pst.setString(1, auth.getSalt());
|
||||
pst.setString(2, auth.getNickname());
|
||||
pst.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(pst);
|
||||
close(con);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void close() {
|
||||
try {
|
||||
conPool.dispose();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reload() {
|
||||
}
|
||||
|
||||
private void close(Statement st) {
|
||||
if (st != null) {
|
||||
try {
|
||||
st.close();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void close(ResultSet rs) {
|
||||
if (rs != null) {
|
||||
try {
|
||||
rs.close();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void close(Connection con) {
|
||||
if (con != null) {
|
||||
try {
|
||||
con.close();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAllAuthsByName(PlayerAuth auth) {
|
||||
Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
ResultSet rs = null;
|
||||
List<String> countIp = new ArrayList<String>();
|
||||
try {
|
||||
con = conPool.getValidConnection();
|
||||
pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE "
|
||||
+ columnIp + "=?;");
|
||||
pst.setString(1, auth.getIp());
|
||||
rs = pst.executeQuery();
|
||||
while(rs.next()) {
|
||||
countIp.add(rs.getString(columnName));
|
||||
}
|
||||
return countIp;
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} finally {
|
||||
close(rs);
|
||||
close(pst);
|
||||
close(con);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAllAuthsByIp(String ip) {
|
||||
Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
ResultSet rs = null;
|
||||
List<String> countIp = new ArrayList<String>();
|
||||
try {
|
||||
con = conPool.getValidConnection();
|
||||
pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE "
|
||||
+ columnIp + "=?;");
|
||||
pst.setString(1, ip);
|
||||
rs = pst.executeQuery();
|
||||
while(rs.next()) {
|
||||
countIp.add(rs.getString(columnName));
|
||||
}
|
||||
return countIp;
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} finally {
|
||||
close(rs);
|
||||
close(pst);
|
||||
close(con);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAllAuthsByEmail(String email) {
|
||||
Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
ResultSet rs = null;
|
||||
List<String> countEmail = new ArrayList<String>();
|
||||
try {
|
||||
con = conPool.getValidConnection();
|
||||
pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE "
|
||||
+ columnEmail + "=?;");
|
||||
pst.setString(1, email);
|
||||
rs = pst.executeQuery();
|
||||
while(rs.next()) {
|
||||
countEmail.add(rs.getString(columnName));
|
||||
}
|
||||
return countEmail;
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} finally {
|
||||
close(rs);
|
||||
close(pst);
|
||||
close(con);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,514 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package uk.org.whoami.authme.datasource;
|
||||
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.sqlite.*;
|
||||
import uk.org.whoami.authme.ConsoleLogger;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
import uk.org.whoami.authme.datasource.MiniConnectionPoolManager.TimeoutException;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author stefano
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public class SqliteDataSource implements DataSource {
|
||||
|
||||
private String host;
|
||||
private String port;
|
||||
private String username;
|
||||
private String password;
|
||||
private String database;
|
||||
private String tableName;
|
||||
private String columnName;
|
||||
private String columnPassword;
|
||||
private String columnIp;
|
||||
private String columnLastLogin;
|
||||
private String columnSalt;
|
||||
private String columnGroup;
|
||||
private int nonActivatedGroup;
|
||||
private String lastlocX;
|
||||
private String lastlocY;
|
||||
private String lastlocZ;
|
||||
private String columnEmail;
|
||||
private String columnID;
|
||||
private Connection con;
|
||||
|
||||
public SqliteDataSource() throws ClassNotFoundException, SQLException {
|
||||
//Settings s = Settings.getInstance();
|
||||
this.host = Settings.getMySQLHost;
|
||||
this.port = Settings.getMySQLPort;
|
||||
this.username = Settings.getMySQLUsername;
|
||||
this.password = Settings.getMySQLPassword;
|
||||
|
||||
this.database = Settings.getMySQLDatabase;
|
||||
this.tableName = Settings.getMySQLTablename;
|
||||
this.columnName = Settings.getMySQLColumnName;
|
||||
this.columnPassword = Settings.getMySQLColumnPassword;
|
||||
this.columnIp = Settings.getMySQLColumnIp;
|
||||
this.columnLastLogin = Settings.getMySQLColumnLastLogin;
|
||||
this.columnSalt = Settings.getMySQLColumnSalt;
|
||||
this.columnGroup = Settings.getMySQLColumnGroup;
|
||||
this.lastlocX = Settings.getMySQLlastlocX;
|
||||
this.lastlocY = Settings.getMySQLlastlocY;
|
||||
this.lastlocZ = Settings.getMySQLlastlocZ;
|
||||
this.nonActivatedGroup = Settings.getNonActivatedGroup;
|
||||
this.columnEmail = Settings.getMySQLColumnEmail;
|
||||
this.columnID = Settings.getMySQLColumnId;
|
||||
|
||||
connect();
|
||||
setup();
|
||||
}
|
||||
|
||||
private synchronized void connect() throws ClassNotFoundException, SQLException {
|
||||
Class.forName("org.sqlite.JDBC");
|
||||
ConsoleLogger.info("SQLite driver loaded");
|
||||
|
||||
this.con = DriverManager.getConnection("jdbc:sqlite:plugins/AuthMe/"+database+".db");
|
||||
|
||||
}
|
||||
|
||||
private synchronized void setup() throws SQLException {
|
||||
//Connection con = null;
|
||||
Statement st = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
st = con.createStatement();
|
||||
st.executeUpdate("CREATE TABLE IF NOT EXISTS " + tableName + " ("
|
||||
+ columnID + " INTEGER AUTO_INCREMENT,"
|
||||
+ columnName + " VARCHAR(255) NOT NULL UNIQUE,"
|
||||
+ columnPassword + " VARCHAR(255) NOT NULL,"
|
||||
+ columnIp + " VARCHAR(40) NOT NULL,"
|
||||
+ columnLastLogin + " BIGINT,"
|
||||
+ lastlocX + " smallint(6) DEFAULT '0',"
|
||||
+ lastlocY + " smallint(6) DEFAULT '0',"
|
||||
+ lastlocZ + " smallint(6) DEFAULT '0',"
|
||||
+ columnEmail + " VARCHAR(255) DEFAULT 'your@email.com',"
|
||||
+ "CONSTRAINT table_const_prim PRIMARY KEY (" + columnID + "));");
|
||||
|
||||
rs = con.getMetaData().getColumns(null, null, tableName, columnIp);
|
||||
if (!rs.next()) {
|
||||
st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN "
|
||||
+ columnIp + " VARCHAR(40) NOT NULL;");
|
||||
}
|
||||
rs.close();
|
||||
rs = con.getMetaData().getColumns(null, null, tableName, columnLastLogin);
|
||||
if (!rs.next()) {
|
||||
st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN "
|
||||
+ columnLastLogin + " BIGINT;");
|
||||
}
|
||||
rs.close();
|
||||
rs = con.getMetaData().getColumns(null, null, tableName, lastlocX);
|
||||
if (!rs.next()) {
|
||||
st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + lastlocX + " smallint(6) NOT NULL DEFAULT '0'; "
|
||||
+ "ALTER TABLE " + tableName + " ADD COLUMN " + lastlocY + " smallint(6) NOT NULL DEFAULT '0'; "
|
||||
+ "ALTER TABLE " + tableName + " ADD COLUMN " + lastlocZ + " smallint(6) NOT NULL DEFAULT '0';");
|
||||
}
|
||||
rs.close();
|
||||
rs = con.getMetaData().getColumns(null, null, tableName, columnEmail);
|
||||
if (!rs.next()) {
|
||||
st.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + columnEmail + " VARCHAR(255) DEFAULT 'your@email.com';");
|
||||
}
|
||||
} finally {
|
||||
close(rs);
|
||||
close(st);
|
||||
//close(con);
|
||||
}
|
||||
ConsoleLogger.info("SQLite Setup finished");
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean isAuthAvailable(String user) {
|
||||
PreparedStatement pst = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnName + "=?");
|
||||
pst.setString(1, user);
|
||||
rs = pst.executeQuery();
|
||||
return rs.next();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(rs);
|
||||
close(pst);
|
||||
//close(con);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized PlayerAuth getAuth(String user) {
|
||||
//Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
|
||||
pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE "
|
||||
+ columnName + "=?;");
|
||||
pst.setString(1, user);
|
||||
rs = pst.executeQuery();
|
||||
if (rs.next()) {
|
||||
if (rs.getString(columnIp).isEmpty() ) {
|
||||
//System.out.println("[Authme Debug] ColumnIp is empty");
|
||||
return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), "198.18.0.1", rs.getLong(columnLastLogin), rs.getInt(lastlocX), rs.getInt(lastlocY), rs.getInt(lastlocZ), rs.getString(columnEmail));
|
||||
} else {
|
||||
if(!columnSalt.isEmpty()){
|
||||
//System.out.println("[Authme Debug] column Salt is" + rs.getString(columnSalt));
|
||||
return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword),rs.getString(columnSalt), rs.getInt(columnGroup), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getInt(lastlocX), rs.getInt(lastlocY), rs.getInt(lastlocZ), rs.getString(columnEmail));
|
||||
} else {
|
||||
//System.out.println("[Authme Debug] column Salt is empty");
|
||||
return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getInt(lastlocX), rs.getInt(lastlocY), rs.getInt(lastlocZ), rs.getString(columnEmail));
|
||||
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return null;
|
||||
} finally {
|
||||
close(rs);
|
||||
close(pst);
|
||||
//close(con);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean saveAuth(PlayerAuth auth) {
|
||||
//Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
if (columnSalt.isEmpty() && auth.getSalt().isEmpty()) {
|
||||
pst = con.prepareStatement("INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + ") VALUES (?,?,?,?);");
|
||||
pst.setString(1, auth.getNickname());
|
||||
pst.setString(2, auth.getHash());
|
||||
pst.setString(3, auth.getIp());
|
||||
pst.setLong(4, auth.getLastLogin());
|
||||
pst.executeUpdate();
|
||||
} else {
|
||||
pst = con.prepareStatement("INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + "," + columnSalt + ") VALUES (?,?,?,?,?);");
|
||||
pst.setString(1, auth.getNickname());
|
||||
pst.setString(2, auth.getHash());
|
||||
pst.setString(3, auth.getIp());
|
||||
pst.setLong(4, auth.getLastLogin());
|
||||
pst.setString(5, auth.getSalt());
|
||||
pst.executeUpdate();
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(pst);
|
||||
//close(con);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean updatePassword(PlayerAuth auth) {
|
||||
//Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnPassword + "=? WHERE " + columnName + "=?;");
|
||||
pst.setString(1, auth.getHash());
|
||||
pst.setString(2, auth.getNickname());
|
||||
pst.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(pst);
|
||||
//close(con);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateSession(PlayerAuth auth) {
|
||||
//Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnIp + "=?, " + columnLastLogin + "=? WHERE " + columnName + "=?;");
|
||||
pst.setString(1, auth.getIp());
|
||||
pst.setLong(2, auth.getLastLogin());
|
||||
pst.setString(3, auth.getNickname());
|
||||
pst.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(pst);
|
||||
//close(con);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int purgeDatabase(long until) {
|
||||
//Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
|
||||
pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + columnLastLogin + "<?;");
|
||||
pst.setLong(1, until);
|
||||
return pst.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return 0;
|
||||
} finally {
|
||||
close(pst);
|
||||
//close(con);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean removeAuth(String user) {
|
||||
//Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
|
||||
pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + columnName + "=?;");
|
||||
pst.setString(1, user);
|
||||
pst.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(pst);
|
||||
//close(con);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateQuitLoc(PlayerAuth auth) {
|
||||
//Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
|
||||
pst = con.prepareStatement("UPDATE " + tableName + " SET " + lastlocX + "=?, "+ lastlocY +"=?, "+ lastlocZ +"=? WHERE " + columnName + "=?;");
|
||||
pst.setLong(1, auth.getQuitLocX());
|
||||
pst.setLong(2, auth.getQuitLocY());
|
||||
pst.setLong(3, auth.getQuitLocZ());
|
||||
pst.setString(4, auth.getNickname());
|
||||
pst.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(pst);
|
||||
//close(con);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// Check how many registration by given ip has been done
|
||||
//
|
||||
|
||||
@Override
|
||||
public int getIps(String ip) {
|
||||
//Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
ResultSet rs = null;
|
||||
int countIp=0;
|
||||
try {
|
||||
|
||||
pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE "
|
||||
+ columnIp + "=?;");
|
||||
pst.setString(1, ip);
|
||||
rs = pst.executeQuery();
|
||||
while(rs.next()) {
|
||||
countIp++;
|
||||
}
|
||||
return countIp;
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return 0;
|
||||
} finally {
|
||||
close(rs);
|
||||
close(pst);
|
||||
//close(con);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateEmail(PlayerAuth auth) {
|
||||
//Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnEmail + "=? WHERE " + columnName + "=?;");
|
||||
pst.setString(1, auth.getEmail());
|
||||
pst.setString(2, auth.getNickname());
|
||||
pst.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(pst);
|
||||
//close(con);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateSalt(PlayerAuth auth) {
|
||||
if(columnSalt.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
//Connection con = null;
|
||||
PreparedStatement pst = null;
|
||||
try {
|
||||
pst = con.prepareStatement("UPDATE " + tableName + " SET " + columnSalt + "=? WHERE " + columnName + "=?;");
|
||||
pst.setString(1, auth.getSalt());
|
||||
pst.setString(2, auth.getNickname());
|
||||
pst.executeUpdate();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
close(pst);
|
||||
//close(con);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void close() {
|
||||
try {
|
||||
con.close();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reload() {
|
||||
}
|
||||
|
||||
private void close(Statement st) {
|
||||
if (st != null) {
|
||||
try {
|
||||
st.close();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void close(ResultSet rs) {
|
||||
if (rs != null) {
|
||||
try {
|
||||
rs.close();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void close(Connection con) {
|
||||
if (con != null) {
|
||||
try {
|
||||
con.close();
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAllAuthsByName(PlayerAuth auth) {
|
||||
PreparedStatement pst = null;
|
||||
ResultSet rs = null;
|
||||
List<String> countIp = new ArrayList<String>();
|
||||
try {
|
||||
pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE "
|
||||
+ columnIp + "=?;");
|
||||
pst.setString(1, auth.getIp());
|
||||
rs = pst.executeQuery();
|
||||
while(rs.next()) {
|
||||
countIp.add(rs.getString(columnName));
|
||||
}
|
||||
return countIp;
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} catch (NullPointerException npe) {
|
||||
return new ArrayList<String>();
|
||||
} finally {
|
||||
close(rs);
|
||||
close(pst);
|
||||
//close(con);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAllAuthsByIp(String ip) {
|
||||
PreparedStatement pst = null;
|
||||
ResultSet rs = null;
|
||||
List<String> countIp = new ArrayList<String>();
|
||||
try {
|
||||
pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE "
|
||||
+ columnIp + "=?;");
|
||||
pst.setString(1, ip);
|
||||
rs = pst.executeQuery();
|
||||
while(rs.next()) {
|
||||
countIp.add(rs.getString(columnName));
|
||||
}
|
||||
return countIp;
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} catch (NullPointerException npe) {
|
||||
return new ArrayList<String>();
|
||||
} finally {
|
||||
close(rs);
|
||||
close(pst);
|
||||
//close(con);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAllAuthsByEmail(String email) {
|
||||
PreparedStatement pst = null;
|
||||
ResultSet rs = null;
|
||||
List<String> countEmail = new ArrayList<String>();
|
||||
try {
|
||||
pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE "
|
||||
+ columnEmail + "=?;");
|
||||
pst.setString(1, email);
|
||||
rs = pst.executeQuery();
|
||||
while(rs.next()) {
|
||||
countEmail.add(rs.getString(columnName));
|
||||
}
|
||||
return countEmail;
|
||||
} catch (SQLException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} catch (TimeoutException ex) {
|
||||
ConsoleLogger.showError(ex.getMessage());
|
||||
return new ArrayList<String>();
|
||||
} catch (NullPointerException npe) {
|
||||
return new ArrayList<String>();
|
||||
} finally {
|
||||
close(rs);
|
||||
close(pst);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
53
src/main/java/uk/org/whoami/authme/debug/CardboardBox.java
Normal file
53
src/main/java/uk/org/whoami/authme/debug/CardboardBox.java
Normal file
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*
|
||||
* http://forums.bukkit.org/threads/cardboard-serializable-itemstack-with-enchantments.75768/
|
||||
*/
|
||||
package uk.org.whoami.authme.debug;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class CardboardBox implements Serializable {
|
||||
private static final long serialVersionUID = 729890133797629668L;
|
||||
|
||||
private final int type, amount;
|
||||
private final short damage;
|
||||
|
||||
private final HashMap<CardboardEnchantment, Integer> enchants;
|
||||
|
||||
public CardboardBox(ItemStack item) {
|
||||
this.type = item.getTypeId();
|
||||
this.amount = item.getAmount();
|
||||
this.damage = item.getDurability();
|
||||
|
||||
HashMap<CardboardEnchantment, Integer> map = new HashMap<CardboardEnchantment, Integer>();
|
||||
|
||||
Map<Enchantment, Integer> enchantments = item.getEnchantments();
|
||||
|
||||
for(Enchantment enchantment : enchantments.keySet()) {
|
||||
map.put(new CardboardEnchantment(enchantment), enchantments.get(enchantment));
|
||||
}
|
||||
|
||||
this.enchants = map;
|
||||
}
|
||||
|
||||
public ItemStack unbox() {
|
||||
ItemStack item = new ItemStack(type, amount, damage);
|
||||
|
||||
HashMap<Enchantment, Integer> map = new HashMap<Enchantment, Integer>();
|
||||
|
||||
for(CardboardEnchantment cEnchantment : enchants.keySet()) {
|
||||
map.put(cEnchantment.unbox(), enchants.get(cEnchantment));
|
||||
}
|
||||
|
||||
item.addUnsafeEnchantments(map);
|
||||
|
||||
return item;
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package uk.org.whoami.authme.debug;
|
||||
|
||||
import java.io.Serializable;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
|
||||
/**
|
||||
* A serializable Enchantment
|
||||
*/
|
||||
public class CardboardEnchantment implements Serializable {
|
||||
private static final long serialVersionUID = 8973856768102665381L;
|
||||
|
||||
private final int id;
|
||||
|
||||
public CardboardEnchantment(Enchantment enchantment) {
|
||||
this.id = enchantment.getId();
|
||||
}
|
||||
|
||||
public Enchantment unbox() {
|
||||
return Enchantment.getById(this.id);
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package uk.org.whoami.authme.events;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class AuthMeTeleportEvent extends CustomEvent {
|
||||
|
||||
private Player player;
|
||||
private Location to;
|
||||
private Location from;
|
||||
|
||||
public AuthMeTeleportEvent(Player player, Location to) {
|
||||
this.player = player;
|
||||
this.from = player.getLocation();
|
||||
this.to = to;
|
||||
}
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
public void setTo(Location to) {
|
||||
this.to = to;
|
||||
}
|
||||
public Location getTo() {
|
||||
return to;
|
||||
}
|
||||
public Location getFrom() {
|
||||
return from;
|
||||
}
|
||||
|
||||
}
|
36
src/main/java/uk/org/whoami/authme/events/CustomEvent.java
Normal file
36
src/main/java/uk/org/whoami/authme/events/CustomEvent.java
Normal file
@ -0,0 +1,36 @@
|
||||
package uk.org.whoami.authme.events;
|
||||
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
public class CustomEvent extends Event {
|
||||
|
||||
|
||||
private boolean isCancelled;
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private static Server s;
|
||||
|
||||
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public boolean isCancelled() {
|
||||
return this.isCancelled;
|
||||
}
|
||||
|
||||
public void setCancelled(boolean cancelled) {
|
||||
this.isCancelled = cancelled;
|
||||
}
|
||||
|
||||
|
||||
public static Server getServer() {
|
||||
return s;
|
||||
}
|
||||
|
||||
}
|
31
src/main/java/uk/org/whoami/authme/events/LoginEvent.java
Normal file
31
src/main/java/uk/org/whoami/authme/events/LoginEvent.java
Normal file
@ -0,0 +1,31 @@
|
||||
package uk.org.whoami.authme.events;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class LoginEvent extends UncancellableEvent {
|
||||
|
||||
|
||||
private Player player;
|
||||
private boolean isLogin;
|
||||
|
||||
public LoginEvent(Player player, boolean isLogin) {
|
||||
this.player = player;
|
||||
this.isLogin = isLogin;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
public void setPlayer(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
public void setLogin(boolean isLogin) {
|
||||
this.isLogin = isLogin;
|
||||
}
|
||||
|
||||
public boolean isLogin() {
|
||||
return isLogin;
|
||||
}
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package uk.org.whoami.authme.events;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import uk.org.whoami.authme.api.API;
|
||||
|
||||
public class ProtectInventoryEvent extends CustomEvent {
|
||||
|
||||
private ItemStack[] storedinventory;
|
||||
private ItemStack[] storedarmor;
|
||||
private ItemStack[] emptyInventory = null;
|
||||
private ItemStack[] emptyArmor = null;
|
||||
private Player player;
|
||||
|
||||
public ProtectInventoryEvent(Player player, ItemStack[] storedinventory, ItemStack[] storedarmor) {
|
||||
this.player = player;
|
||||
this.storedinventory = storedinventory;
|
||||
this.storedarmor = storedarmor;
|
||||
}
|
||||
|
||||
public ProtectInventoryEvent(Player player, ItemStack[] storedinventory, ItemStack[] storedarmor, int newInventory, int newArmor) {
|
||||
this.player = player;
|
||||
this.storedinventory = storedinventory;
|
||||
this.storedarmor = storedarmor;
|
||||
this.setNewInventory(new ItemStack[newInventory]);
|
||||
this.setNewArmor(new ItemStack[newArmor]);
|
||||
API.setPlayerInventory(player, new ItemStack[newInventory], new ItemStack[newArmor]);
|
||||
}
|
||||
|
||||
public ItemStack[] getStoredInventory() {
|
||||
return this.storedinventory;
|
||||
}
|
||||
|
||||
public ItemStack[] getStoredArmor() {
|
||||
return this.storedarmor;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
public void setNewInventory(ItemStack[] emptyInventory) {
|
||||
this.emptyInventory = emptyInventory;
|
||||
}
|
||||
|
||||
public ItemStack[] getEmptyInventory() {
|
||||
return this.emptyInventory;
|
||||
}
|
||||
|
||||
public void setNewArmor(ItemStack[] emptyArmor) {
|
||||
this.emptyArmor = emptyArmor;
|
||||
}
|
||||
|
||||
public ItemStack[] getEmptyArmor() {
|
||||
return this.emptyArmor;
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package uk.org.whoami.authme.events;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import uk.org.whoami.authme.api.API;
|
||||
|
||||
public class ResetInventoryEvent extends CustomEvent {
|
||||
|
||||
private Player player;
|
||||
|
||||
public ResetInventoryEvent(Player player) {
|
||||
this.player = player;
|
||||
API.setPlayerInventory(player, new ItemStack[36], new ItemStack[4]);
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
public void setPlayer(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package uk.org.whoami.authme.events;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class RestoreInventoryEvent extends CustomEvent {
|
||||
|
||||
private ItemStack[] inventory;
|
||||
private ItemStack[] armor;
|
||||
private Player player;
|
||||
|
||||
public RestoreInventoryEvent(Player player, ItemStack[] inventory, ItemStack[] armor) {
|
||||
this.player = player;
|
||||
this.inventory = inventory;
|
||||
this.armor = armor;
|
||||
}
|
||||
|
||||
public ItemStack[] getInventory() {
|
||||
return this.inventory;
|
||||
}
|
||||
|
||||
public void setInventory(ItemStack[] inventory) {
|
||||
this.inventory = inventory;
|
||||
}
|
||||
|
||||
public ItemStack[] getArmor() {
|
||||
return this.armor;
|
||||
}
|
||||
|
||||
public void setArmor(ItemStack[] armor) {
|
||||
this.armor = armor;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
public void setPlayer(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
}
|
27
src/main/java/uk/org/whoami/authme/events/SessionEvent.java
Normal file
27
src/main/java/uk/org/whoami/authme/events/SessionEvent.java
Normal file
@ -0,0 +1,27 @@
|
||||
package uk.org.whoami.authme.events;
|
||||
|
||||
import uk.org.whoami.authme.cache.auth.PlayerAuth;
|
||||
|
||||
public class SessionEvent extends CustomEvent {
|
||||
|
||||
|
||||
private PlayerAuth player;
|
||||
private boolean isLogin;
|
||||
|
||||
public SessionEvent(PlayerAuth auth, boolean isLogin) {
|
||||
this.player = auth;
|
||||
this.isLogin = isLogin;
|
||||
}
|
||||
|
||||
public PlayerAuth getPlayerAuth() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
public void setPlayer(PlayerAuth player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
public boolean isLogin() {
|
||||
return isLogin;
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
package uk.org.whoami.authme.events;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class SpawnTeleportEvent extends CustomEvent {
|
||||
|
||||
private Player player;
|
||||
private Location to;
|
||||
private Location from;
|
||||
private boolean isAuthenticated;
|
||||
|
||||
public SpawnTeleportEvent(Player player, Location from, Location to, boolean isAuthenticated) {
|
||||
this.player = player;
|
||||
this.from = from;
|
||||
this.to = to;
|
||||
this.isAuthenticated = isAuthenticated;
|
||||
}
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
public void setTo(Location to) {
|
||||
this.to = to;
|
||||
}
|
||||
public Location getTo() {
|
||||
return to;
|
||||
}
|
||||
public Location getFrom() {
|
||||
return from;
|
||||
}
|
||||
public boolean isAuthenticated() {
|
||||
return isAuthenticated;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
package uk.org.whoami.authme.events;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import uk.org.whoami.authme.cache.backup.FileCache;
|
||||
|
||||
public class StoreInventoryEvent extends CustomEvent {
|
||||
|
||||
|
||||
private ItemStack[] inventory;
|
||||
private ItemStack[] armor;
|
||||
private Player player;
|
||||
|
||||
public StoreInventoryEvent(Player player) {
|
||||
this.player = player;
|
||||
this.inventory = player.getInventory().getContents();
|
||||
this.armor = player.getInventory().getArmorContents();
|
||||
}
|
||||
|
||||
public StoreInventoryEvent(Player player, FileCache fileCache) {
|
||||
this.player = player;
|
||||
this.inventory = fileCache.readCache(player.getName().toLowerCase()).getInventory();
|
||||
this.armor = fileCache.readCache(player.getName().toLowerCase()).getArmour();
|
||||
}
|
||||
|
||||
public ItemStack[] getInventory() {
|
||||
return this.inventory;
|
||||
}
|
||||
|
||||
public void setInventory(ItemStack[] inventory) {
|
||||
this.inventory = inventory;
|
||||
}
|
||||
|
||||
public ItemStack[] getArmor() {
|
||||
return this.armor;
|
||||
}
|
||||
|
||||
public void setArmor(ItemStack[] armor) {
|
||||
this.armor = armor;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
public void setPlayer(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package uk.org.whoami.authme.events;
|
||||
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
public class UncancellableEvent extends Event {
|
||||
|
||||
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private static Server s;
|
||||
|
||||
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public static Server getServer() {
|
||||
return s;
|
||||
}
|
||||
|
||||
}
|
23
src/main/java/uk/org/whoami/authme/filter/ConsoleFilter.java
Normal file
23
src/main/java/uk/org/whoami/authme/filter/ConsoleFilter.java
Normal file
@ -0,0 +1,23 @@
|
||||
package uk.org.whoami.authme.filter;
|
||||
|
||||
import java.util.logging.Filter;
|
||||
import java.util.logging.LogRecord;
|
||||
|
||||
public class ConsoleFilter implements Filter {
|
||||
|
||||
public ConsoleFilter() {}
|
||||
|
||||
@Override
|
||||
public boolean isLoggable(LogRecord record) {
|
||||
String logM = record.getMessage().toLowerCase();
|
||||
if (!logM.contains("issued server command:")) return true;
|
||||
if (!logM.contains("/login") && !logM.contains("/l") && !logM.contains("/reg") && !logM.contains("/changepassword") && !logM.contains("/unregister")
|
||||
&& !logM.contains("/authme register") && !logM.contains("/authme changepassword")&& !logM.contains("/authme reg")&& !logM.contains("/authme cp")) return true;
|
||||
String playername = record.getMessage().split(" ")[0];
|
||||
record.setMessage(playername + " issued an AuthMe command!");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
7
src/main/java/uk/org/whoami/authme/gui/Clickable.java
Normal file
7
src/main/java/uk/org/whoami/authme/gui/Clickable.java
Normal file
@ -0,0 +1,7 @@
|
||||
package uk.org.whoami.authme.gui;
|
||||
|
||||
import org.getspout.spoutapi.event.screen.ButtonClickEvent;
|
||||
|
||||
public interface Clickable {
|
||||
public void handleClick(ButtonClickEvent event);
|
||||
}
|
27
src/main/java/uk/org/whoami/authme/gui/CustomButton.java
Normal file
27
src/main/java/uk/org/whoami/authme/gui/CustomButton.java
Normal file
@ -0,0 +1,27 @@
|
||||
package uk.org.whoami.authme.gui;
|
||||
|
||||
import org.getspout.spoutapi.event.screen.ButtonClickEvent;
|
||||
import org.getspout.spoutapi.gui.GenericButton;
|
||||
|
||||
public class CustomButton extends GenericButton
|
||||
{
|
||||
public Clickable handleRef = null;
|
||||
|
||||
public CustomButton(Clickable c) {
|
||||
handleRef = c;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onButtonClick(ButtonClickEvent event) {
|
||||
handleRef.handleClick(event);
|
||||
}
|
||||
|
||||
public CustomButton setMidPos(int x, int y)
|
||||
{
|
||||
this.setX(x)
|
||||
.setY(y)
|
||||
.shiftXPos(-(width / 2))
|
||||
.shiftYPos(-(height / 2));
|
||||
return this;
|
||||
}
|
||||
}
|
153
src/main/java/uk/org/whoami/authme/gui/screens/LoginScreen.java
Normal file
153
src/main/java/uk/org/whoami/authme/gui/screens/LoginScreen.java
Normal file
@ -0,0 +1,153 @@
|
||||
package uk.org.whoami.authme.gui.screens;
|
||||
|
||||
/**
|
||||
* @Author Hoezef
|
||||
*/
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.getspout.spoutapi.event.screen.ButtonClickEvent;
|
||||
import org.getspout.spoutapi.gui.Button;
|
||||
import org.getspout.spoutapi.gui.Color;
|
||||
import org.getspout.spoutapi.gui.GenericLabel;
|
||||
import org.getspout.spoutapi.gui.GenericPopup;
|
||||
import org.getspout.spoutapi.gui.GenericTextField;
|
||||
import org.getspout.spoutapi.gui.RenderPriority;
|
||||
import org.getspout.spoutapi.gui.Widget;
|
||||
import org.getspout.spoutapi.gui.WidgetAnchor;
|
||||
import org.getspout.spoutapi.player.SpoutPlayer;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.gui.Clickable;
|
||||
import uk.org.whoami.authme.gui.CustomButton;
|
||||
import uk.org.whoami.authme.settings.SpoutCfg;
|
||||
|
||||
public class LoginScreen extends GenericPopup implements Clickable{
|
||||
|
||||
public AuthMe plugin = AuthMe.getInstance();
|
||||
private SpoutCfg spoutCfg = SpoutCfg.getInstance();
|
||||
|
||||
private CustomButton exitBtn;
|
||||
private CustomButton loginBtn;
|
||||
private GenericTextField passBox;
|
||||
private GenericLabel titleLbl;
|
||||
private GenericLabel textLbl;
|
||||
private GenericLabel errorLbl;
|
||||
|
||||
String exitTxt = spoutCfg.getString("LoginScreen.exit button"); //"Quit";
|
||||
String loginTxt = spoutCfg.getString("LoginScreen.login button"); //"Login";
|
||||
String exitMsg = spoutCfg.getString("LoginScreen.exit message"); //"Good Bye";
|
||||
String title = spoutCfg.getString("LoginScreen.title"); //"LOGIN"
|
||||
@SuppressWarnings("unchecked")
|
||||
List<String> textlines = (List<String>) spoutCfg.getList("LoginScreen.text");
|
||||
public SpoutPlayer splayer;
|
||||
|
||||
public LoginScreen(SpoutPlayer player) {
|
||||
this.splayer = player;
|
||||
|
||||
createScreen();
|
||||
}
|
||||
|
||||
private void createScreen() {
|
||||
int objects = textlines.size() + 4;
|
||||
int part = !(textlines.size() <= 5) ? 195 / objects : 20;
|
||||
int h = 3*part/4, w = 8*part;
|
||||
|
||||
titleLbl = new GenericLabel();
|
||||
titleLbl
|
||||
.setText(title)
|
||||
.setTextColor(new Color(1.0F, 0, 0, 1.0F))
|
||||
.setAlign(WidgetAnchor.TOP_CENTER)
|
||||
.setHeight(h)
|
||||
.setWidth(w)
|
||||
.setX(maxWidth / 2 )
|
||||
.setY(25);
|
||||
this.attachWidget(plugin, titleLbl);
|
||||
|
||||
int ystart = 25 + h + part/2;
|
||||
for (int x=0; x<textlines.size();x++)
|
||||
{
|
||||
textLbl = new GenericLabel();
|
||||
textLbl
|
||||
.setText(textlines.get(x))
|
||||
.setAlign(WidgetAnchor.TOP_CENTER)
|
||||
.setHeight(h)
|
||||
.setWidth(w)
|
||||
.setX(maxWidth / 2)
|
||||
.setY(ystart + x*part);
|
||||
this.attachWidget(plugin, textLbl);
|
||||
}
|
||||
|
||||
passBox = new GenericTextField();
|
||||
passBox
|
||||
.setMaximumCharacters(18)
|
||||
.setMaximumLines(1)
|
||||
.setHeight(h-2)
|
||||
.setWidth(w-2)
|
||||
.setY(220-h - 2*part);
|
||||
passBox.setPasswordField(true);
|
||||
setXToMid(passBox);
|
||||
this.attachWidget(plugin, passBox);
|
||||
|
||||
errorLbl = new GenericLabel();
|
||||
errorLbl
|
||||
.setText("")
|
||||
.setTextColor(new Color(1.0F, 0, 0, 1.0F))
|
||||
.setHeight(h)
|
||||
.setWidth(w)
|
||||
.setX(passBox.getX() + passBox.getWidth() + 2)
|
||||
.setY(passBox.getY());
|
||||
this.attachWidget(plugin, errorLbl);
|
||||
|
||||
loginBtn = new CustomButton(this);
|
||||
loginBtn
|
||||
.setText(loginTxt)
|
||||
.setHeight(h)
|
||||
.setWidth(w)
|
||||
.setY(220-h-part);
|
||||
setXToMid(loginBtn);
|
||||
this.attachWidget(plugin, loginBtn);
|
||||
|
||||
exitBtn = new CustomButton(this);
|
||||
exitBtn
|
||||
.setText(exitTxt)
|
||||
.setHeight(h)
|
||||
.setWidth(w)
|
||||
.setY(220-h);
|
||||
setXToMid(exitBtn);
|
||||
this.attachWidget(plugin, exitBtn);
|
||||
this.setPriority(RenderPriority.Highest);
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@EventHandler (priority = EventPriority.HIGHEST)
|
||||
public void handleClick(ButtonClickEvent event) {
|
||||
Button b = event.getButton();
|
||||
SpoutPlayer player = event.getPlayer();
|
||||
if (event.isCancelled() || event == null || event.getPlayer() == null) return;
|
||||
if (b.equals(loginBtn))
|
||||
{
|
||||
String result = plugin.management.performLogin(player, passBox.getText());
|
||||
if(result == "") {
|
||||
player.closeActiveWindow();
|
||||
}
|
||||
else
|
||||
{
|
||||
errorLbl.setText(result);
|
||||
passBox.setText("");
|
||||
}
|
||||
}else if(b.equals(exitBtn))
|
||||
{
|
||||
event.getPlayer().kickPlayer(exitMsg);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void setXToMid(Widget w) {
|
||||
w.setX( (maxWidth - w.getWidth()) / 2);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package uk.org.whoami.authme.gui.screens;
|
||||
|
||||
/**
|
||||
* @Author Hoezef
|
||||
*/
|
||||
import org.getspout.spoutapi.event.screen.ButtonClickEvent;
|
||||
import org.getspout.spoutapi.gui.GenericLabel;
|
||||
import org.getspout.spoutapi.gui.GenericPopup;
|
||||
import org.getspout.spoutapi.gui.GenericTextField;
|
||||
import org.getspout.spoutapi.gui.WidgetAnchor;
|
||||
import org.getspout.spoutapi.player.SpoutPlayer;
|
||||
|
||||
import uk.org.whoami.authme.gui.Clickable;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
public class RegisterScreen extends GenericPopup implements Clickable{
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private SpoutPlayer splayer;
|
||||
@SuppressWarnings("unused")
|
||||
private boolean forcedRegistrationEnabled;
|
||||
private String title;
|
||||
|
||||
GenericLabel titleLbl = null;
|
||||
GenericTextField messageTF = null;
|
||||
|
||||
public RegisterScreen(SpoutPlayer player, Settings settings) {
|
||||
this.splayer = player;
|
||||
this.forcedRegistrationEnabled = Settings.isForcedRegistrationEnabled;
|
||||
this.title = ""; // needs to be set...
|
||||
|
||||
createScreen();
|
||||
}
|
||||
|
||||
private void createScreen() {
|
||||
titleLbl = new GenericLabel();
|
||||
titleLbl.setText(title)
|
||||
.setAnchor(WidgetAnchor.TOP_CENTER);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void handleClick(ButtonClickEvent event) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,95 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.listener;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.Utils;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
import uk.org.whoami.authme.plugin.manager.CombatTagComunicator;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
public class AuthMeBlockListener implements Listener {
|
||||
|
||||
private DataSource data;
|
||||
public AuthMe instance;
|
||||
//private Settings settings = Settings.getInstance();
|
||||
|
||||
public AuthMeBlockListener(DataSource data, AuthMe instance) {
|
||||
this.data = data;
|
||||
this.instance = instance;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockPlace(BlockPlaceEvent event) {
|
||||
if (event.isCancelled() || event.getPlayer() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
String name = player.getName().toLowerCase();
|
||||
|
||||
if(instance.getCitizensCommunicator().isNPC(player, instance) || Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!data.isAuthAvailable(name)) {
|
||||
if (!Settings.isForcedRegistrationEnabled) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockBreak(BlockBreakEvent event) {
|
||||
if (event.isCancelled() || event.getPlayer() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
String name = player.getName().toLowerCase();
|
||||
|
||||
if(instance.getCitizensCommunicator().isNPC(player, instance) || Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase())) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!data.isAuthAvailable(name)) {
|
||||
if (!Settings.isForcedRegistrationEnabled) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package uk.org.whoami.authme.listener;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import com.Acrobot.ChestShop.Events.PreTransactionEvent;
|
||||
import com.Acrobot.ChestShop.Events.PreTransactionEvent.TransactionOutcome;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.Utils;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
import uk.org.whoami.authme.plugin.manager.CombatTagComunicator;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
public class AuthMeChestShopListener implements Listener {
|
||||
|
||||
public DataSource database;
|
||||
public AuthMe plugin;
|
||||
|
||||
public AuthMeChestShopListener(DataSource database, AuthMe plugin) {
|
||||
this.database = database;
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onPreTransaction(PreTransactionEvent event) {
|
||||
if (event.isCancelled() || event.getClient() == null || event == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getClient();
|
||||
String name = player.getName().toLowerCase();
|
||||
|
||||
if (plugin.getCitizensCommunicator().isNPC(player, plugin) || Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!database.isAuthAvailable(name)) {
|
||||
if (!Settings.isForcedRegistrationEnabled) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
event.setCancelled(TransactionOutcome.OTHER);
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,229 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.listener;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityInteractEvent;
|
||||
import org.bukkit.event.entity.EntityRegainHealthEvent;
|
||||
import org.bukkit.event.entity.EntityTargetEvent;
|
||||
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.Utils;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
import uk.org.whoami.authme.plugin.manager.CombatTagComunicator;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
public class AuthMeEntityListener implements Listener{
|
||||
|
||||
private DataSource data;
|
||||
public AuthMe instance;
|
||||
//private Settings settings = Settings.getInstance();
|
||||
|
||||
public AuthMeEntityListener(DataSource data, AuthMe instance) {
|
||||
this.data = data;
|
||||
this.instance = instance;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityDamage(EntityDamageEvent event) {
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
Entity entity = event.getEntity();
|
||||
|
||||
if (!(entity instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
/*
|
||||
System.out.println("[ Entity Damage ] "+event.getEntity().toString());
|
||||
@Future implementation till CombatTag dont release any apis
|
||||
if(event.getEntity().toString().indexOf("PvPLogger") != -1 ) {
|
||||
System.out.println("la stringa contiene PvPLogger 2");
|
||||
return;
|
||||
}
|
||||
*/
|
||||
if(instance.getCitizensCommunicator().isNPC(entity, instance) || Utils.getInstance().isUnrestricted((Player)entity) || CombatTagComunicator.isNPC(entity)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) entity;
|
||||
String name = player.getName().toLowerCase();
|
||||
|
||||
if (PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!data.isAuthAvailable(name)) {
|
||||
if (!Settings.isForcedRegistrationEnabled) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
player.setFireTicks(0);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityTarget(EntityTargetEvent event) {
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Entity entity = event.getEntity();
|
||||
if (!(entity instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) entity;
|
||||
String name = player.getName().toLowerCase();
|
||||
|
||||
if (PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!data.isAuthAvailable(name)) {
|
||||
if (!Settings.isForcedRegistrationEnabled) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onFoodLevelChange(FoodLevelChangeEvent event) {
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Entity entity = event.getEntity();
|
||||
if (!(entity instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) entity;
|
||||
String name = player.getName().toLowerCase();
|
||||
|
||||
if (PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!data.isAuthAvailable(name)) {
|
||||
if (!Settings.isForcedRegistrationEnabled) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void EntityRegainHealthEvent(EntityRegainHealthEvent event) {
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Entity entity = event.getEntity();
|
||||
if (!(entity instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) entity;
|
||||
String name = player.getName().toLowerCase();
|
||||
|
||||
if (PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!data.isAuthAvailable(name)) {
|
||||
if (!Settings.isForcedRegistrationEnabled) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler (priority = EventPriority.MONITOR)
|
||||
public void onEntityInteract(EntityInteractEvent event) {
|
||||
if (event.isCancelled() || event == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getEntity();
|
||||
String name = player.getName().toLowerCase();
|
||||
|
||||
if (instance.getCitizensCommunicator().isNPC(player, instance) || Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase())) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!data.isAuthAvailable(name)) {
|
||||
if (!Settings.isForcedRegistrationEnabled) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
event.setCancelled(true);
|
||||
|
||||
}
|
||||
|
||||
@EventHandler (priority = EventPriority.LOWEST)
|
||||
public void onLowestEntityInteract(EntityInteractEvent event) {
|
||||
if (event.isCancelled() || event == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) event.getEntity();
|
||||
String name = player.getName().toLowerCase();
|
||||
|
||||
if (instance.getCitizensCommunicator().isNPC(player, instance) || Utils.getInstance().isUnrestricted(player) || CombatTagComunicator.isNPC(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase())) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!data.isAuthAvailable(name)) {
|
||||
if (!Settings.isForcedRegistrationEnabled) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,35 @@
|
||||
package uk.org.whoami.authme.listener;
|
||||
|
||||
/**
|
||||
* @Author Hoezef
|
||||
*/
|
||||
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.getspout.spoutapi.event.spout.SpoutCraftEnableEvent;
|
||||
|
||||
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
import uk.org.whoami.authme.gui.screens.LoginScreen;
|
||||
import uk.org.whoami.authme.settings.SpoutCfg;
|
||||
|
||||
public class AuthMeSpoutListener implements Listener {
|
||||
private DataSource data;
|
||||
|
||||
|
||||
public AuthMeSpoutListener(DataSource data) {
|
||||
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onSpoutCraftEnable(final SpoutCraftEnableEvent event)
|
||||
{
|
||||
if(SpoutCfg.getInstance().getBoolean("LoginScreen.enabled")) {
|
||||
if (data.isAuthAvailable(event.getPlayer().getName().toLowerCase()) && !PlayerCache.getInstance().isAuthenticated(event.getPlayer().getName().toLowerCase()) ) {
|
||||
event.getPlayer().getMainScreen().attachPopupScreen(new LoginScreen(event.getPlayer()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package uk.org.whoami.authme.plugin.manager;
|
||||
|
||||
import net.citizensnpcs.api.CitizensAPI;
|
||||
import net.citizensnpcs.api.CitizensManager;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
|
||||
public class CitizensCommunicator {
|
||||
|
||||
public AuthMe instance;
|
||||
|
||||
public CitizensCommunicator(AuthMe instance) {
|
||||
this.instance = instance;
|
||||
}
|
||||
|
||||
public boolean isNPC(final Entity player, AuthMe instance) {
|
||||
if (instance.CitizensVersion == 1) {
|
||||
return CitizensManager.isNPC(player);
|
||||
} else if (instance.CitizensVersion == 2) {
|
||||
return CitizensAPI.getNPCRegistry().isNPC(player);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package uk.org.whoami.authme.plugin.manager;
|
||||
|
||||
import com.trc202.CombatTag.CombatTag;
|
||||
import com.trc202.CombatTagApi.CombatTagApi;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author stefano
|
||||
*/
|
||||
public abstract class CombatTagComunicator {
|
||||
static CombatTagApi combatApi;
|
||||
|
||||
public CombatTagComunicator() {
|
||||
if(Bukkit.getServer().getPluginManager().getPlugin("CombatTag") != null){
|
||||
combatApi = new CombatTagApi((CombatTag)Bukkit.getServer().getPluginManager().getPlugin("CombatTag"));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Checks to see if the player is in combat. The combat time can be configured by the server owner
|
||||
* If the player has died while in combat the player is no longer considered in combat and as such will return false
|
||||
* @param playerName
|
||||
* @return true if player is in combat
|
||||
*/
|
||||
public abstract boolean isInCombat(String player);
|
||||
|
||||
/**
|
||||
* Checks to see if the player is in combat. The combat time can be configured by the server owner
|
||||
* If the player has died while in combat the player is no longer considered in combat and as such will return false
|
||||
* @param player
|
||||
* @return true if player is in combat
|
||||
*/
|
||||
public abstract boolean isInCombat(Player player);
|
||||
|
||||
/**
|
||||
* Returns the time before the tag is over
|
||||
* -1 if the tag has expired
|
||||
* -2 if the player is not in combat
|
||||
* @param player
|
||||
* @return
|
||||
*/
|
||||
public abstract long getRemainingTagTime(String player);
|
||||
|
||||
//(Implemented in 3.8)
|
||||
/**
|
||||
* Returns if the entity is an NPC
|
||||
* @param player
|
||||
* @return true if the player is an NPC
|
||||
*/
|
||||
public static boolean isNPC(Entity player) {
|
||||
try {
|
||||
if(Bukkit.getServer().getPluginManager().getPlugin("CombatTag") != null){
|
||||
combatApi = new CombatTagApi((CombatTag) Bukkit.getServer().getPluginManager().getPlugin("CombatTag"));
|
||||
return combatApi.isNPC(player);
|
||||
}
|
||||
} catch (ClassCastException ex) {
|
||||
return false;
|
||||
} catch (NullPointerException npe) {
|
||||
return false;
|
||||
} catch (NoClassDefFoundError ncdfe) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
@ -0,0 +1,318 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.security;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.math.BigInteger;
|
||||
import java.security.InvalidKeyException;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.HashMap;
|
||||
|
||||
import javax.crypto.Mac;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.settings.Settings;
|
||||
|
||||
public class PasswordSecurity {
|
||||
|
||||
private static SecureRandom rnd = new SecureRandom();
|
||||
public static HashMap<String, String> userSalt = new HashMap<String, String>();
|
||||
|
||||
private static String getMD5(String message) throws NoSuchAlgorithmException {
|
||||
MessageDigest md5 = MessageDigest.getInstance("MD5");
|
||||
|
||||
md5.reset();
|
||||
md5.update(message.getBytes());
|
||||
byte[] digest = md5.digest();
|
||||
|
||||
return String.format("%0" + (digest.length << 1) + "x", new BigInteger(1,
|
||||
digest));
|
||||
}
|
||||
|
||||
private static String getSHA1(String message) throws NoSuchAlgorithmException {
|
||||
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
|
||||
sha1.reset();
|
||||
sha1.update(message.getBytes());
|
||||
byte[] digest = sha1.digest();
|
||||
|
||||
return String.format("%0" + (digest.length << 1) + "x", new BigInteger(1,
|
||||
digest));
|
||||
}
|
||||
|
||||
private static String getSHA256(String message) throws NoSuchAlgorithmException {
|
||||
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
|
||||
|
||||
sha256.reset();
|
||||
sha256.update(message.getBytes());
|
||||
byte[] digest = sha256.digest();
|
||||
|
||||
return String.format("%0" + (digest.length << 1) + "x", new BigInteger(1,
|
||||
digest));
|
||||
}
|
||||
|
||||
public static String getWhirlpool(String message) {
|
||||
Whirlpool w = new Whirlpool();
|
||||
byte[] digest = new byte[Whirlpool.DIGESTBYTES];
|
||||
w.NESSIEinit();
|
||||
w.NESSIEadd(message);
|
||||
w.NESSIEfinalize(digest);
|
||||
return Whirlpool.display(digest);
|
||||
}
|
||||
|
||||
private static String getSaltedHash(String message, String salt) throws NoSuchAlgorithmException {
|
||||
return "$SHA$" + salt + "$" + getSHA256(getSHA256(message) + salt);
|
||||
}
|
||||
|
||||
//
|
||||
// VBULLETIN 3.X 4.X METHOD
|
||||
//
|
||||
|
||||
private static String getSaltedMd5(String message, String salt) throws NoSuchAlgorithmException {
|
||||
return "$MD5vb$" + salt + "$" + getMD5(getMD5(message) + salt);
|
||||
}
|
||||
|
||||
private static String getSaltedMyBB(String message, String salt) throws NoSuchAlgorithmException {
|
||||
return getMD5(getMD5(salt)+ getMD5(message));
|
||||
}
|
||||
|
||||
private static String getXAuth(String message, String salt) {
|
||||
String hash = getWhirlpool(salt + message).toLowerCase();
|
||||
int saltPos = (message.length() >= hash.length() ? hash.length() - 1 : message.length());
|
||||
return hash.substring(0, saltPos) + salt + hash.substring(saltPos);
|
||||
}
|
||||
|
||||
private static String getSaltedIPB3(String message, String salt) throws NoSuchAlgorithmException {
|
||||
|
||||
return getMD5(getMD5(salt) + getMD5(message));
|
||||
|
||||
}
|
||||
|
||||
private static String createSalt(int length) throws NoSuchAlgorithmException {
|
||||
byte[] msg = new byte[40];
|
||||
rnd.nextBytes(msg);
|
||||
|
||||
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
|
||||
sha1.reset();
|
||||
byte[] digest = sha1.digest(msg);
|
||||
return String.format("%0" + (digest.length << 1) + "x", new BigInteger(1,digest)).substring(0, length);
|
||||
}
|
||||
|
||||
public static String getHash(HashAlgorithm alg, String password, String name) throws NoSuchAlgorithmException {
|
||||
switch (alg) {
|
||||
case MD5:
|
||||
return getMD5(password);
|
||||
case SHA1:
|
||||
return getSHA1(password);
|
||||
case SHA256:
|
||||
String salt = createSalt(16);
|
||||
return getSaltedHash(password, salt);
|
||||
case MD5VB:
|
||||
String salt2 = createSalt(16);
|
||||
return getSaltedMd5(password, salt2);
|
||||
case WHIRLPOOL:
|
||||
return getWhirlpool(password);
|
||||
case XAUTH:
|
||||
String xsalt = createSalt(12);
|
||||
return getXAuth(password, xsalt);
|
||||
case PHPBB:
|
||||
return getPhpBB(password);
|
||||
case PLAINTEXT:
|
||||
return getPlainText(password);
|
||||
case MYBB:
|
||||
String salt3 = "";
|
||||
try {
|
||||
salt3 = AuthMe.getInstance().database.getAuth(name).getSalt();
|
||||
} catch (NullPointerException npe) {
|
||||
}
|
||||
if (salt3.isEmpty() || salt3 == null) {
|
||||
salt3 = createSalt(8);
|
||||
userSalt.put(name, salt3);
|
||||
}
|
||||
return getSaltedMyBB(password, salt3);
|
||||
case IPB3:
|
||||
String salt4 = "";
|
||||
try {
|
||||
salt4 = AuthMe.getInstance().database.getAuth(name).getSalt();
|
||||
} catch (NullPointerException npe) {
|
||||
}
|
||||
if (salt4.isEmpty() || salt4 == null) {
|
||||
salt4 = createSalt(5);
|
||||
userSalt.put(name, salt4);
|
||||
}
|
||||
return getSaltedIPB3(password, salt4);
|
||||
case PHPFUSION:
|
||||
String salt5 = "";
|
||||
try {
|
||||
salt5 = AuthMe.getInstance().database.getAuth(name).getSalt();
|
||||
} catch (NullPointerException npe) {
|
||||
}
|
||||
if (salt5.isEmpty() || salt5 == null) {
|
||||
salt5 = createSalt(12);
|
||||
userSalt.put(name, getSHA1(salt5));
|
||||
}
|
||||
return getPhPFusion(password, getSHA1(salt5));
|
||||
case SMF:
|
||||
return getSHA1(name.toLowerCase() + password);
|
||||
case XFSHA1:
|
||||
return getSHA1(getSHA1(password) + Settings.getPredefinedSalt);
|
||||
case XFSHA256:
|
||||
return getSHA256(getSHA256(password) + Settings.getPredefinedSalt);
|
||||
case SALTED2MD5:
|
||||
String salt6 = "";
|
||||
try {
|
||||
salt6 = AuthMe.getInstance().database.getAuth(name).getSalt();
|
||||
} catch (NullPointerException npe) {
|
||||
}
|
||||
if (salt6.isEmpty() || salt6 == null) {
|
||||
salt6 = createSalt(Settings.saltLength);
|
||||
userSalt.put(name, salt6);
|
||||
}
|
||||
return getMD5(getMD5(password) + salt6);
|
||||
case JOOMLA:
|
||||
String saltj = "";
|
||||
try {
|
||||
saltj = AuthMe.getInstance().database.getAuth(name).getHash().split(":")[1];
|
||||
} catch (NullPointerException npe) {
|
||||
} catch (ArrayIndexOutOfBoundsException aioobe) {
|
||||
}
|
||||
if (saltj.isEmpty() || saltj == null) {
|
||||
saltj = createSalt(32);
|
||||
userSalt.put(name, saltj);
|
||||
}
|
||||
return getMD5(password + saltj) + ":" + saltj;
|
||||
default:
|
||||
throw new NoSuchAlgorithmException("Unknown hash algorithm");
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean comparePasswordWithHash(String password, String hash, String playername) throws NoSuchAlgorithmException {
|
||||
//System.out.println("[Authme Debug] debug hashString"+hash);
|
||||
if(hash.contains("$H$")) {
|
||||
PhpBB checkHash = new PhpBB();
|
||||
return checkHash.phpbb_check_hash(password, hash);
|
||||
}
|
||||
if(!Settings.getMySQLColumnSalt.isEmpty() && Settings.getPasswordHash == HashAlgorithm.IPB3) {
|
||||
String saltipb = AuthMe.getInstance().database.getAuth(playername).getSalt();
|
||||
return hash.equals(getSaltedIPB3(password, saltipb));
|
||||
}
|
||||
if(!Settings.getMySQLColumnSalt.isEmpty() && Settings.getPasswordHash == HashAlgorithm.PHPFUSION) {
|
||||
String saltfusion = AuthMe.getInstance().database.getAuth(playername).getSalt();
|
||||
return hash.equals(getPhPFusion(password, saltfusion));
|
||||
}
|
||||
if(!Settings.getMySQLColumnSalt.isEmpty() && Settings.getPasswordHash == HashAlgorithm.MYBB) {
|
||||
String saltmybb = AuthMe.getInstance().database.getAuth(playername).getSalt();
|
||||
return hash.equals(getSaltedMyBB(password, saltmybb));
|
||||
}
|
||||
if(Settings.getPasswordHash == HashAlgorithm.SMF) {
|
||||
return hash.equals(getSHA1(playername.toLowerCase() + password));
|
||||
}
|
||||
if(Settings.getPasswordHash == HashAlgorithm.XFSHA1) {
|
||||
return hash.equals(getSHA1(getSHA1(password) + Settings.getPredefinedSalt));
|
||||
}
|
||||
if(Settings.getPasswordHash == HashAlgorithm.XFSHA256) {
|
||||
return hash.equals(getSHA256(getSHA256(password)+ Settings.getPredefinedSalt));
|
||||
}
|
||||
if(!Settings.getMySQLColumnSalt.isEmpty() && Settings.getPasswordHash == HashAlgorithm.SALTED2MD5) {
|
||||
String salt2md5 = AuthMe.getInstance().database.getAuth(playername).getSalt();
|
||||
return hash.equals(getMD5(getMD5(password) + salt2md5));
|
||||
}
|
||||
if(Settings.getPasswordHash == HashAlgorithm.JOOMLA) {
|
||||
String saltj = hash.split(":")[1];
|
||||
return hash.equals(getMD5(password + saltj) + ":" + saltj);
|
||||
}
|
||||
// PlainText Password
|
||||
if(hash.length() < 32 ) {
|
||||
return hash.equals(password);
|
||||
}
|
||||
|
||||
if (hash.length() == 32) {
|
||||
return hash.equals(getMD5(password));
|
||||
}
|
||||
|
||||
if (hash.length() == 40) {
|
||||
return hash.equals(getSHA1(password));
|
||||
}
|
||||
|
||||
if (hash.length() == 140) {
|
||||
int saltPos = (password.length() >= hash.length() ? hash.length() - 1 : password.length());
|
||||
String salt = hash.substring(saltPos, saltPos + 12);
|
||||
return hash.equals(getXAuth(password, salt));
|
||||
}
|
||||
|
||||
if (hash.contains("$")) {
|
||||
//System.out.println("[Authme Debug] debug hashString"+hash);
|
||||
String[] line = hash.split("\\$");
|
||||
if (line.length > 3 && line[1].equals("SHA")) {
|
||||
return hash.equals(getSaltedHash(password, line[2]));
|
||||
} else {
|
||||
if(line[1].equals("MD5vb")) {
|
||||
//System.out.println("[Authme Debug] password hashed from Authme"+getSaltedMd5(password, line[2]));
|
||||
//System.out.println("[Authme Debug] salt from Authme"+line[2]);
|
||||
//System.out.println("[Authme Debug] equals? Authme: "+hash);
|
||||
//hash = "$MD5vb$" + salt + "$" + hash;
|
||||
return hash.equals(getSaltedMd5(password, line[2]));
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static String getPhpBB(String password) {
|
||||
PhpBB hash = new PhpBB();
|
||||
String phpBBhash = hash.phpbb_hash(password);
|
||||
return phpBBhash;
|
||||
}
|
||||
|
||||
|
||||
private static String getPlainText(String password) {
|
||||
return password;
|
||||
}
|
||||
|
||||
public static String getPhPFusion(String msg, String keyString) {
|
||||
String digest = null;
|
||||
String algo = "HmacSHA256";
|
||||
try {
|
||||
SecretKeySpec key = new SecretKeySpec((keyString).getBytes("UTF-8"), algo);
|
||||
Mac mac = Mac.getInstance(algo);
|
||||
mac.init(key);
|
||||
|
||||
byte[] bytes = mac.doFinal(msg.getBytes("ASCII"));
|
||||
|
||||
StringBuffer hash = new StringBuffer();
|
||||
for (int i = 0; i < bytes.length; i++) {
|
||||
String hex = Integer.toHexString(0xFF & bytes[i]);
|
||||
if (hex.length() == 1) {
|
||||
hash.append('0');
|
||||
}
|
||||
hash.append(hex);
|
||||
}
|
||||
digest = hash.toString();
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
} catch (InvalidKeyException e) {
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
}
|
||||
return digest;
|
||||
}
|
||||
|
||||
public enum HashAlgorithm {
|
||||
|
||||
MD5, SHA1, SHA256, WHIRLPOOL, XAUTH, MD5VB, PHPBB, PLAINTEXT, MYBB, IPB3, PHPFUSION, SMF, XFSHA1, XFSHA256, SALTED2MD5, JOOMLA
|
||||
}
|
||||
}
|
191
src/main/java/uk/org/whoami/authme/security/PhpBB.java
Normal file
191
src/main/java/uk/org/whoami/authme/security/PhpBB.java
Normal file
@ -0,0 +1,191 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package uk.org.whoami.authme.security;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.security.GeneralSecurityException;
|
||||
import java.security.MessageDigest;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author stefano
|
||||
*/
|
||||
public class PhpBB {
|
||||
private static final int PHP_VERSION = 4;
|
||||
private String itoa64 =
|
||||
"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
||||
|
||||
|
||||
public String phpbb_hash(String password) {
|
||||
String random_state = unique_id();
|
||||
String random = "";
|
||||
int count = 6;
|
||||
|
||||
if (random.length() < count) {
|
||||
random = "";
|
||||
|
||||
for (int i = 0; i < count; i += 16) {
|
||||
random_state = md5(unique_id() + random_state);
|
||||
random += pack(md5(random_state));
|
||||
}
|
||||
random = random.substring(0, count);
|
||||
}
|
||||
|
||||
String hash = _hash_crypt_private(
|
||||
password, _hash_gensalt_private(random, itoa64));
|
||||
if (hash.length() == 34)
|
||||
return hash;
|
||||
|
||||
return md5(password);
|
||||
}
|
||||
|
||||
private String unique_id() {
|
||||
return unique_id("c");
|
||||
}
|
||||
|
||||
// global $config;
|
||||
// private boolean dss_seeded = false;
|
||||
|
||||
private String unique_id(String extra) {
|
||||
// TODO Generate something random here.
|
||||
return "1234567890abcdef";
|
||||
}
|
||||
|
||||
|
||||
private String _hash_gensalt_private(String input, String itoa64) {
|
||||
return _hash_gensalt_private(input, itoa64, 6);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private String _hash_gensalt_private(
|
||||
String input, String itoa64, int iteration_count_log2) {
|
||||
if (iteration_count_log2 < 4 || iteration_count_log2 > 31) {
|
||||
iteration_count_log2 = 8;
|
||||
}
|
||||
|
||||
String output = "$H$";
|
||||
output += itoa64.charAt(
|
||||
Math.min(iteration_count_log2 +
|
||||
((PHP_VERSION >= 5) ? 5 : 3), 30));
|
||||
output += _hash_encode64(input, 6);
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode hash
|
||||
*/
|
||||
private String _hash_encode64(String input, int count) {
|
||||
String output = "";
|
||||
int i = 0;
|
||||
|
||||
do {
|
||||
int value = input.charAt(i++);
|
||||
output += itoa64.charAt(value & 0x3f);
|
||||
|
||||
if (i < count)
|
||||
value |= input.charAt(i) << 8;
|
||||
|
||||
output += itoa64.charAt((value >> 6) & 0x3f);
|
||||
|
||||
if (i++ >= count)
|
||||
break;
|
||||
|
||||
if (i < count)
|
||||
value |= input.charAt(i) << 16;
|
||||
|
||||
output += itoa64.charAt((value >> 12) & 0x3f);
|
||||
|
||||
if (i++ >= count)
|
||||
break;
|
||||
|
||||
output += itoa64.charAt((value >> 18) & 0x3f);
|
||||
} while (i < count);
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
String _hash_crypt_private(String password, String setting) {
|
||||
String output = "*";
|
||||
|
||||
// Check for correct hash
|
||||
if (!setting.substring(0, 3).equals("$H$"))
|
||||
return output;
|
||||
|
||||
int count_log2 = itoa64.indexOf(setting.charAt(3));
|
||||
if (count_log2 < 7 || count_log2 > 30)
|
||||
return output;
|
||||
|
||||
int count = 1 << count_log2;
|
||||
String salt = setting.substring(4, 12);
|
||||
if (salt.length() != 8)
|
||||
return output;
|
||||
|
||||
String m1 = md5(salt + password);
|
||||
String hash = pack(m1);
|
||||
do {
|
||||
hash = pack(md5(hash + password));
|
||||
} while (--count > 0);
|
||||
|
||||
output = setting.substring(0, 12);
|
||||
output += _hash_encode64(hash, 16);
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
public boolean phpbb_check_hash( String password, String hash) {
|
||||
if (hash.length() == 34)
|
||||
return _hash_crypt_private(password, hash).equals(hash);
|
||||
else
|
||||
return md5(password).equals(hash);
|
||||
}
|
||||
|
||||
public static String md5(String data) {
|
||||
try {
|
||||
byte[] bytes = data.getBytes("ISO-8859-1");
|
||||
MessageDigest md5er = MessageDigest.getInstance("MD5");
|
||||
byte[] hash = md5er.digest(bytes);
|
||||
return bytes2hex(hash);
|
||||
} catch (GeneralSecurityException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
static int hexToInt(char ch) {
|
||||
if(ch >= '0' && ch <= '9')
|
||||
return ch - '0';
|
||||
|
||||
ch = Character.toUpperCase(ch);
|
||||
if(ch >= 'A' && ch <= 'F')
|
||||
return ch - 'A' + 0xA;
|
||||
|
||||
throw new IllegalArgumentException("Not a hex character: " + ch);
|
||||
}
|
||||
|
||||
private static String bytes2hex(byte[] bytes) {
|
||||
StringBuffer r = new StringBuffer(32);
|
||||
for (int i = 0; i < bytes.length; i++) {
|
||||
String x = Integer.toHexString(bytes[i] & 0xff);
|
||||
if (x.length() < 2)
|
||||
r.append("0");
|
||||
r.append(x);
|
||||
}
|
||||
return r.toString();
|
||||
}
|
||||
|
||||
static String pack(String hex) {
|
||||
StringBuffer buf = new StringBuffer();
|
||||
for(int i = 0; i < hex.length(); i += 2) {
|
||||
char c1 = hex.charAt(i);
|
||||
char c2 = hex.charAt(i+1);
|
||||
char packed = (char) (hexToInt(c1) * 16 + hexToInt(c2));
|
||||
buf.append(packed);
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,35 @@
|
||||
package uk.org.whoami.authme.security;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class RandomString
|
||||
{
|
||||
|
||||
private static final char[] symbols = new char[36];
|
||||
|
||||
static {
|
||||
for (int idx = 0; idx < 10; ++idx)
|
||||
symbols[idx] = (char) ('0' + idx);
|
||||
for (int idx = 10; idx < 36; ++idx)
|
||||
symbols[idx] = (char) ('a' + idx - 10);
|
||||
}
|
||||
|
||||
private final Random random = new Random();
|
||||
|
||||
private final char[] buf;
|
||||
|
||||
public RandomString(int length)
|
||||
{
|
||||
if (length < 1)
|
||||
throw new IllegalArgumentException("length < 1: " + length);
|
||||
buf = new char[length];
|
||||
}
|
||||
|
||||
public String nextString()
|
||||
{
|
||||
for (int idx = 0; idx < buf.length; ++idx)
|
||||
buf[idx] = symbols[random.nextInt(symbols.length)];
|
||||
return new String(buf);
|
||||
}
|
||||
|
||||
}
|
440
src/main/java/uk/org/whoami/authme/security/Whirlpool.java
Normal file
440
src/main/java/uk/org/whoami/authme/security/Whirlpool.java
Normal file
@ -0,0 +1,440 @@
|
||||
package uk.org.whoami.authme.security;
|
||||
|
||||
/**
|
||||
* The Whirlpool hashing function.
|
||||
*
|
||||
* <P>
|
||||
* <b>References</b>
|
||||
*
|
||||
* <P>
|
||||
* The Whirlpool algorithm was developed by
|
||||
* <a href="mailto:pbarreto@scopus.com.br">Paulo S. L. M. Barreto</a> and
|
||||
* <a href="mailto:vincent.rijmen@cryptomathic.com">Vincent Rijmen</a>.
|
||||
*
|
||||
* See
|
||||
* P.S.L.M. Barreto, V. Rijmen,
|
||||
* ``The Whirlpool hashing function,''
|
||||
* First NESSIE workshop, 2000 (tweaked version, 2003),
|
||||
* <https://www.cosic.esat.kuleuven.ac.be/nessie/workshop/submissions/whirlpool.zip>
|
||||
*
|
||||
* @author Paulo S.L.M. Barreto
|
||||
* @author Vincent Rijmen.
|
||||
*
|
||||
* @version 3.0 (2003.03.12)
|
||||
*
|
||||
* =============================================================================
|
||||
*
|
||||
* Differences from version 2.1:
|
||||
*
|
||||
* - Suboptimal diffusion matrix replaced by cir(1, 1, 4, 1, 8, 5, 2, 9).
|
||||
*
|
||||
* =============================================================================
|
||||
*
|
||||
* Differences from version 2.0:
|
||||
*
|
||||
* - Generation of ISO/IEC 10118-3 test vectors.
|
||||
* - Bug fix: nonzero carry was ignored when tallying the data length
|
||||
* (this bug apparently only manifested itself when feeding data
|
||||
* in pieces rather than in a single chunk at once).
|
||||
*
|
||||
* Differences from version 1.0:
|
||||
*
|
||||
* - Original S-box replaced by the tweaked, hardware-efficient version.
|
||||
*
|
||||
* =============================================================================
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''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 AUTHORS 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.
|
||||
*
|
||||
*/
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
class Whirlpool {
|
||||
|
||||
/**
|
||||
* The message digest size (in bits)
|
||||
*/
|
||||
public static final int DIGESTBITS = 512;
|
||||
|
||||
/**
|
||||
* The message digest size (in bytes)
|
||||
*/
|
||||
public static final int DIGESTBYTES = DIGESTBITS >>> 3;
|
||||
|
||||
/**
|
||||
* The number of rounds of the internal dedicated block cipher.
|
||||
*/
|
||||
protected static final int R = 10;
|
||||
|
||||
/**
|
||||
* The substitution box.
|
||||
*/
|
||||
private static final String sbox =
|
||||
"\u1823\uc6E8\u87B8\u014F\u36A6\ud2F5\u796F\u9152" +
|
||||
"\u60Bc\u9B8E\uA30c\u7B35\u1dE0\ud7c2\u2E4B\uFE57" +
|
||||
"\u1577\u37E5\u9FF0\u4AdA\u58c9\u290A\uB1A0\u6B85" +
|
||||
"\uBd5d\u10F4\ucB3E\u0567\uE427\u418B\uA77d\u95d8" +
|
||||
"\uFBEE\u7c66\udd17\u479E\ucA2d\uBF07\uAd5A\u8333" +
|
||||
"\u6302\uAA71\uc819\u49d9\uF2E3\u5B88\u9A26\u32B0" +
|
||||
"\uE90F\ud580\uBEcd\u3448\uFF7A\u905F\u2068\u1AAE" +
|
||||
"\uB454\u9322\u64F1\u7312\u4008\uc3Ec\udBA1\u8d3d" +
|
||||
"\u9700\ucF2B\u7682\ud61B\uB5AF\u6A50\u45F3\u30EF" +
|
||||
"\u3F55\uA2EA\u65BA\u2Fc0\udE1c\uFd4d\u9275\u068A" +
|
||||
"\uB2E6\u0E1F\u62d4\uA896\uF9c5\u2559\u8472\u394c" +
|
||||
"\u5E78\u388c\ud1A5\uE261\uB321\u9c1E\u43c7\uFc04" +
|
||||
"\u5199\u6d0d\uFAdF\u7E24\u3BAB\ucE11\u8F4E\uB7EB" +
|
||||
"\u3c81\u94F7\uB913\u2cd3\uE76E\uc403\u5644\u7FA9" +
|
||||
"\u2ABB\uc153\udc0B\u9d6c\u3174\uF646\uAc89\u14E1" +
|
||||
"\u163A\u6909\u70B6\ud0Ed\ucc42\u98A4\u285c\uF886";
|
||||
|
||||
private static long[][] C = new long[8][256];
|
||||
private static long[] rc = new long[R + 1];
|
||||
|
||||
static {
|
||||
for (int x = 0; x < 256; x++) {
|
||||
char c = sbox.charAt(x/2);
|
||||
long v1 = ((x & 1) == 0) ? c >>> 8 : c & 0xff;
|
||||
long v2 = v1 << 1;
|
||||
if (v2 >= 0x100L) {
|
||||
v2 ^= 0x11dL;
|
||||
}
|
||||
long v4 = v2 << 1;
|
||||
if (v4 >= 0x100L) {
|
||||
v4 ^= 0x11dL;
|
||||
}
|
||||
long v5 = v4 ^ v1;
|
||||
long v8 = v4 << 1;
|
||||
if (v8 >= 0x100L) {
|
||||
v8 ^= 0x11dL;
|
||||
}
|
||||
long v9 = v8 ^ v1;
|
||||
/*
|
||||
* build the circulant table C[0][x] = S[x].[1, 1, 4, 1, 8, 5, 2, 9]:
|
||||
*/
|
||||
C[0][x] =
|
||||
(v1 << 56) | (v1 << 48) | (v4 << 40) | (v1 << 32) |
|
||||
(v8 << 24) | (v5 << 16) | (v2 << 8) | (v9 );
|
||||
/*
|
||||
* build the remaining circulant tables C[t][x] = C[0][x] rotr t
|
||||
*/
|
||||
for (int t = 1; t < 8; t++) {
|
||||
C[t][x] = (C[t - 1][x] >>> 8) | ((C[t - 1][x] << 56));
|
||||
}
|
||||
}
|
||||
/*
|
||||
for (int t = 0; t < 8; t++) {
|
||||
System.out.println("static const u64 C" + t + "[256] = {");
|
||||
for (int i = 0; i < 64; i++) {
|
||||
System.out.print(" ");
|
||||
for (int j = 0; j < 4; j++) {
|
||||
String v = Long.toHexString(C[t][4*i + j]);
|
||||
while (v.length() < 16) {
|
||||
v = "0" + v;
|
||||
}
|
||||
System.out.print(" LL(0x" + v + "),");
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
System.out.println("};");
|
||||
System.out.println();
|
||||
}
|
||||
System.out.println();
|
||||
//*/
|
||||
|
||||
/*
|
||||
* build the round constants:
|
||||
*/
|
||||
rc[0] = 0L; /* not used (assigment kept only to properly initialize all variables) */
|
||||
for (int r = 1; r <= R; r++) {
|
||||
int i = 8*(r - 1);
|
||||
rc[r] =
|
||||
(C[0][i ] & 0xff00000000000000L) ^
|
||||
(C[1][i + 1] & 0x00ff000000000000L) ^
|
||||
(C[2][i + 2] & 0x0000ff0000000000L) ^
|
||||
(C[3][i + 3] & 0x000000ff00000000L) ^
|
||||
(C[4][i + 4] & 0x00000000ff000000L) ^
|
||||
(C[5][i + 5] & 0x0000000000ff0000L) ^
|
||||
(C[6][i + 6] & 0x000000000000ff00L) ^
|
||||
(C[7][i + 7] & 0x00000000000000ffL);
|
||||
}
|
||||
/*
|
||||
System.out.println("static const u64 rc[R + 1] = {");
|
||||
for (int r = 0; r <= R; r++) {
|
||||
String v = Long.toHexString(rc[r]);
|
||||
while (v.length() < 16) {
|
||||
v = "0" + v;
|
||||
}
|
||||
System.out.println(" LL(0x" + v + "),");
|
||||
}
|
||||
System.out.println("};");
|
||||
System.out.println();
|
||||
//*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Global number of hashed bits (256-bit counter).
|
||||
*/
|
||||
protected byte[] bitLength = new byte[32];
|
||||
|
||||
/**
|
||||
* Buffer of data to hash.
|
||||
*/
|
||||
protected byte[] buffer = new byte[64];
|
||||
|
||||
/**
|
||||
* Current number of bits on the buffer.
|
||||
*/
|
||||
protected int bufferBits = 0;
|
||||
|
||||
/**
|
||||
* Current (possibly incomplete) byte slot on the buffer.
|
||||
*/
|
||||
protected int bufferPos = 0;
|
||||
|
||||
/**
|
||||
* The hashing state.
|
||||
*/
|
||||
protected long[] hash = new long[8];
|
||||
protected long[] K = new long[8]; // the round key
|
||||
protected long[] L = new long[8];
|
||||
protected long[] block = new long[8]; // mu(buffer)
|
||||
protected long[] state = new long[8]; // the cipher state
|
||||
|
||||
public Whirlpool() {
|
||||
}
|
||||
|
||||
/**
|
||||
* The core Whirlpool transform.
|
||||
*/
|
||||
protected void processBuffer() {
|
||||
/*
|
||||
* map the buffer to a block:
|
||||
*/
|
||||
for (int i = 0, j = 0; i < 8; i++, j += 8) {
|
||||
block[i] =
|
||||
(((long)buffer[j ] ) << 56) ^
|
||||
(((long)buffer[j + 1] & 0xffL) << 48) ^
|
||||
(((long)buffer[j + 2] & 0xffL) << 40) ^
|
||||
(((long)buffer[j + 3] & 0xffL) << 32) ^
|
||||
(((long)buffer[j + 4] & 0xffL) << 24) ^
|
||||
(((long)buffer[j + 5] & 0xffL) << 16) ^
|
||||
(((long)buffer[j + 6] & 0xffL) << 8) ^
|
||||
(((long)buffer[j + 7] & 0xffL) );
|
||||
}
|
||||
/*
|
||||
* compute and apply K^0 to the cipher state:
|
||||
*/
|
||||
for (int i = 0; i < 8; i++) {
|
||||
state[i] = block[i] ^ (K[i] = hash[i]);
|
||||
}
|
||||
/*
|
||||
* iterate over all rounds:
|
||||
*/
|
||||
for (int r = 1; r <= R; r++) {
|
||||
/*
|
||||
* compute K^r from K^{r-1}:
|
||||
*/
|
||||
for (int i = 0; i < 8; i++) {
|
||||
L[i] = 0L;
|
||||
for (int t = 0, s = 56; t < 8; t++, s -= 8) {
|
||||
L[i] ^= C[t][(int)(K[(i - t) & 7] >>> s) & 0xff];
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < 8; i++) {
|
||||
K[i] = L[i];
|
||||
}
|
||||
K[0] ^= rc[r];
|
||||
/*
|
||||
* apply the r-th round transformation:
|
||||
*/
|
||||
for (int i = 0; i < 8; i++) {
|
||||
L[i] = K[i];
|
||||
for (int t = 0, s = 56; t < 8; t++, s -= 8) {
|
||||
L[i] ^= C[t][(int)(state[(i - t) & 7] >>> s) & 0xff];
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < 8; i++) {
|
||||
state[i] = L[i];
|
||||
}
|
||||
}
|
||||
/*
|
||||
* apply the Miyaguchi-Preneel compression function:
|
||||
*/
|
||||
for (int i = 0; i < 8; i++) {
|
||||
hash[i] ^= state[i] ^ block[i];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the hashing state.
|
||||
*/
|
||||
public void NESSIEinit() {
|
||||
Arrays.fill(bitLength, (byte)0);
|
||||
bufferBits = bufferPos = 0;
|
||||
buffer[0] = 0; // it's only necessary to cleanup buffer[bufferPos].
|
||||
Arrays.fill(hash, 0L); // initial value
|
||||
}
|
||||
|
||||
/**
|
||||
* Delivers input data to the hashing algorithm.
|
||||
*
|
||||
* @param source plaintext data to hash.
|
||||
* @param sourceBits how many bits of plaintext to process.
|
||||
*
|
||||
* This method maintains the invariant: bufferBits < 512
|
||||
*/
|
||||
public void NESSIEadd(byte[] source, long sourceBits) {
|
||||
/*
|
||||
sourcePos
|
||||
|
|
||||
+-------+-------+-------
|
||||
||||||||||||||||||||| source
|
||||
+-------+-------+-------
|
||||
+-------+-------+-------+-------+-------+-------
|
||||
|||||||||||||||||||||| buffer
|
||||
+-------+-------+-------+-------+-------+-------
|
||||
|
|
||||
bufferPos
|
||||
*/
|
||||
int sourcePos = 0; // index of leftmost source byte containing data (1 to 8 bits).
|
||||
int sourceGap = (8 - ((int)sourceBits & 7)) & 7; // space on source[sourcePos].
|
||||
int bufferRem = bufferBits & 7; // occupied bits on buffer[bufferPos].
|
||||
int b;
|
||||
// tally the length of the added data:
|
||||
long value = sourceBits;
|
||||
for (int i = 31, carry = 0; i >= 0; i--) {
|
||||
carry += (bitLength[i] & 0xff) + ((int)value & 0xff);
|
||||
bitLength[i] = (byte)carry;
|
||||
carry >>>= 8;
|
||||
value >>>= 8;
|
||||
}
|
||||
// process data in chunks of 8 bits:
|
||||
while (sourceBits > 8) { // at least source[sourcePos] and source[sourcePos+1] contain data.
|
||||
// take a byte from the source:
|
||||
b = ((source[sourcePos] << sourceGap) & 0xff) |
|
||||
((source[sourcePos + 1] & 0xff) >>> (8 - sourceGap));
|
||||
if (b < 0 || b >= 256) {
|
||||
throw new RuntimeException("LOGIC ERROR");
|
||||
}
|
||||
// process this byte:
|
||||
buffer[bufferPos++] |= b >>> bufferRem;
|
||||
bufferBits += 8 - bufferRem; // bufferBits = 8*bufferPos;
|
||||
if (bufferBits == 512) {
|
||||
// process data block:
|
||||
processBuffer();
|
||||
// reset buffer:
|
||||
bufferBits = bufferPos = 0;
|
||||
}
|
||||
buffer[bufferPos] = (byte)((b << (8 - bufferRem)) & 0xff);
|
||||
bufferBits += bufferRem;
|
||||
// proceed to remaining data:
|
||||
sourceBits -= 8;
|
||||
sourcePos++;
|
||||
}
|
||||
// now 0 <= sourceBits <= 8;
|
||||
// furthermore, all data (if any is left) is in source[sourcePos].
|
||||
if (sourceBits > 0) {
|
||||
b = (source[sourcePos] << sourceGap) & 0xff; // bits are left-justified on b.
|
||||
// process the remaining bits:
|
||||
buffer[bufferPos] |= b >>> bufferRem;
|
||||
} else {
|
||||
b = 0;
|
||||
}
|
||||
if (bufferRem + sourceBits < 8) {
|
||||
// all remaining data fits on buffer[bufferPos], and there still remains some space.
|
||||
bufferBits += sourceBits;
|
||||
} else {
|
||||
// buffer[bufferPos] is full:
|
||||
bufferPos++;
|
||||
bufferBits += 8 - bufferRem; // bufferBits = 8*bufferPos;
|
||||
sourceBits -= 8 - bufferRem;
|
||||
// now 0 <= sourceBits < 8; furthermore, all data is in source[sourcePos].
|
||||
if (bufferBits == 512) {
|
||||
// process data block:
|
||||
processBuffer();
|
||||
// reset buffer:
|
||||
bufferBits = bufferPos = 0;
|
||||
}
|
||||
buffer[bufferPos] = (byte)((b << (8 - bufferRem)) & 0xff);
|
||||
bufferBits += (int)sourceBits;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the hash value from the hashing state.
|
||||
*
|
||||
* This method uses the invariant: bufferBits < 512
|
||||
*/
|
||||
public void NESSIEfinalize(byte[] digest) {
|
||||
// append a '1'-bit:
|
||||
buffer[bufferPos] |= 0x80 >>> (bufferBits & 7);
|
||||
bufferPos++; // all remaining bits on the current byte are set to zero.
|
||||
// pad with zero bits to complete 512N + 256 bits:
|
||||
if (bufferPos > 32) {
|
||||
while (bufferPos < 64) {
|
||||
buffer[bufferPos++] = 0;
|
||||
}
|
||||
// process data block:
|
||||
processBuffer();
|
||||
// reset buffer:
|
||||
bufferPos = 0;
|
||||
}
|
||||
while (bufferPos < 32) {
|
||||
buffer[bufferPos++] = 0;
|
||||
}
|
||||
// append bit length of hashed data:
|
||||
System.arraycopy(bitLength, 0, buffer, 32, 32);
|
||||
// process data block:
|
||||
processBuffer();
|
||||
// return the completed message digest:
|
||||
for (int i = 0, j = 0; i < 8; i++, j += 8) {
|
||||
long h = hash[i];
|
||||
digest[j ] = (byte)(h >>> 56);
|
||||
digest[j + 1] = (byte)(h >>> 48);
|
||||
digest[j + 2] = (byte)(h >>> 40);
|
||||
digest[j + 3] = (byte)(h >>> 32);
|
||||
digest[j + 4] = (byte)(h >>> 24);
|
||||
digest[j + 5] = (byte)(h >>> 16);
|
||||
digest[j + 6] = (byte)(h >>> 8);
|
||||
digest[j + 7] = (byte)(h );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delivers string input data to the hashing algorithm.
|
||||
*
|
||||
* @param source plaintext data to hash (ASCII text string).
|
||||
*
|
||||
* This method maintains the invariant: bufferBits < 512
|
||||
*/
|
||||
public void NESSIEadd(String source) {
|
||||
if (source.length() > 0) {
|
||||
byte[] data = new byte[source.length()];
|
||||
for (int i = 0; i < source.length(); i++) {
|
||||
data[i] = (byte)source.charAt(i);
|
||||
}
|
||||
NESSIEadd(data, 8*data.length);
|
||||
}
|
||||
}
|
||||
|
||||
protected static String display(byte[] array) {
|
||||
char[] val = new char[2*array.length];
|
||||
String hex = "0123456789ABCDEF";
|
||||
for (int i = 0; i < array.length; i++) {
|
||||
int b = array[i] & 0xff;
|
||||
val[2*i] = hex.charAt(b >>> 4);
|
||||
val[2*i + 1] = hex.charAt(b & 15);
|
||||
}
|
||||
return String.valueOf(val);
|
||||
}
|
||||
}
|
@ -0,0 +1,88 @@
|
||||
package uk.org.whoami.authme.settings;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
public class CustomConfiguration extends YamlConfiguration{
|
||||
|
||||
private File configFile;
|
||||
|
||||
public CustomConfiguration(File file)
|
||||
{
|
||||
this.configFile = file;
|
||||
|
||||
load();
|
||||
}
|
||||
|
||||
public void load()
|
||||
{
|
||||
try {
|
||||
super.load(configFile);
|
||||
} catch (FileNotFoundException e) {
|
||||
Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Could not find " + configFile.getName() + ", creating new one...");
|
||||
reload();
|
||||
} catch (IOException e) {
|
||||
Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Could not load " + configFile.getName(), e);
|
||||
} catch (InvalidConfigurationException e) {
|
||||
Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, configFile.getName() + " is no valid configuration file", e);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean reload() {
|
||||
boolean out = true;
|
||||
if (!configFile.exists())
|
||||
{
|
||||
out = loadRessource(configFile);
|
||||
}
|
||||
if (out) load();
|
||||
return out;
|
||||
}
|
||||
|
||||
public void save() {
|
||||
try {
|
||||
super.save(configFile);
|
||||
} catch (IOException ex) {
|
||||
Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Could not save config to " + configFile.getName(), ex);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean loadRessource(File file) {
|
||||
boolean out = true;
|
||||
if (!file.exists()) {
|
||||
InputStream fis = getClass().getResourceAsStream("/" + file.getName());
|
||||
FileOutputStream fos = null;
|
||||
try {
|
||||
fos = new FileOutputStream(file);
|
||||
byte[] buf = new byte[1024];
|
||||
int i = 0;
|
||||
|
||||
while ((i = fis.read(buf)) != -1) {
|
||||
fos.write(buf, 0, i);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Failed to load config from JAR");
|
||||
out = false;
|
||||
} finally {
|
||||
try {
|
||||
if (fis != null) {
|
||||
fis.close();
|
||||
}
|
||||
if (fos != null) {
|
||||
fos.close();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
}
|
100
src/main/java/uk/org/whoami/authme/settings/Messages.java
Normal file
100
src/main/java/uk/org/whoami/authme/settings/Messages.java
Normal file
@ -0,0 +1,100 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.settings;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class Messages extends CustomConfiguration {
|
||||
|
||||
private static Messages singleton = null;
|
||||
|
||||
|
||||
public Messages() {
|
||||
|
||||
super(new File(Settings.MESSAGE_FILE+"_"+Settings.messagesLanguage+".yml"));
|
||||
loadDefaults();
|
||||
loadFile();
|
||||
singleton = this;
|
||||
|
||||
}
|
||||
|
||||
private void loadDefaults() {
|
||||
this.set("logged_in", "&cAlready logged in!");
|
||||
this.set("not_logged_in", "&cNot logged in!");
|
||||
this.set("reg_disabled", "&cRegistration is disabled");
|
||||
this.set("user_regged", "&cUsername already registered");
|
||||
this.set("usage_reg", "&cUsage: /register password ConfirmPassword");
|
||||
this.set("usage_log", "&cUsage: /login password");
|
||||
this.set("user_unknown", "&cUsername not registered");
|
||||
this.set("pwd_changed", "&cPassword changed!");
|
||||
this.set("reg_only", "&fRegistered players only! Please visit http://example.com to register");
|
||||
this.set("valid_session", "&cSession login");
|
||||
this.set("login_msg", "&cPlease login with \"/login password\"");
|
||||
this.set("reg_msg", "&cPlease register with \"/register password ConfirmPassword\"");
|
||||
this.set("timeout", "&fLogin Timeout");
|
||||
this.set("wrong_pwd", "&cWrong password");
|
||||
this.set("logout", "&cSuccessful logout");
|
||||
this.set("usage_unreg", "&cUsage: /unregister password");
|
||||
this.set("registered", "&cSuccessfully registered!");
|
||||
this.set("unregistered", "&cSuccessfully unregistered!");
|
||||
this.set("login", "&cSuccessful login!");
|
||||
this.set("no_perm", "&cNo Permission");
|
||||
this.set("same_nick", "&fSame nick is already playing");
|
||||
this.set("reg_voluntarily", "&fYou can register your nickname with the server with the command \"/register password ConfirmPassword\"");
|
||||
this.set("reload", "&fConfiguration and database has been reloaded");
|
||||
this.set("error", "&fAn error ocurred; Please contact the admin");
|
||||
this.set("unknown_user", "&fUser is not in database");
|
||||
this.set("unsafe_spawn","&fYour Quit location was unsafe, teleporting you to World Spawn");
|
||||
this.set("unvalid_session","&fSession Dataes doesnt corrispond Plaese wait the end of session");
|
||||
this.set("max_reg","&fYou have Exceded the max number of Registration for your Account");
|
||||
this.set("password_error","&fPassword doesnt match");
|
||||
this.set("pass_len","&fYour password dind''t reach the minimum length or exeded the max length");
|
||||
this.set("vb_nonActiv","&fYour Account isent Activated yet check your Emails!");
|
||||
this.set("usage_changepassword", "&fUsage: /changepassword oldPassword newPassword");
|
||||
this.set("name_len", "&cYour nickname is too Short or too long");
|
||||
this.set("regex", "&cYour nickname contains illegal characters. Allowed chars: REG_EX");
|
||||
this.set("add_email","&cPlease add your email with : /email add yourEmail confirmEmail");
|
||||
this.set("bad_database_email", "[AuthMe] This /email command only available with MySQL and SQLite, contact an Admin");
|
||||
this.set("recovery_email", "&cForgot your password? Please use /email recovery <yourEmail>");
|
||||
this.set("usage_captcha", "&cUsage: /captcha <theCaptcha>");
|
||||
this.set("wrong_captcha", "&cWrong Captcha, please use : /captcha THE_CAPTCHA");
|
||||
this.set("valid_captcha", "&cYour captcha is valid !");
|
||||
}
|
||||
|
||||
private void loadFile() {
|
||||
this.load();
|
||||
this.save();
|
||||
|
||||
}
|
||||
|
||||
public String _(String msg) {
|
||||
String loc = (String) this.get(msg);
|
||||
if (loc != null) {
|
||||
return loc.replace("&", "\u00a7");
|
||||
}
|
||||
return msg;
|
||||
}
|
||||
|
||||
|
||||
public static Messages getInstance() {
|
||||
if (singleton == null) {
|
||||
singleton = new Messages();
|
||||
}
|
||||
return singleton;
|
||||
}
|
||||
|
||||
}
|
30
src/main/java/uk/org/whoami/authme/settings/PlayersLogs.java
Normal file
30
src/main/java/uk/org/whoami/authme/settings/PlayersLogs.java
Normal file
@ -0,0 +1,30 @@
|
||||
package uk.org.whoami.authme.settings;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
public class PlayersLogs extends CustomConfiguration {
|
||||
|
||||
private static PlayersLogs pllog = null;
|
||||
public static List<String> players;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public PlayersLogs() {
|
||||
super(new File("./plugins/AuthMe/players.yml"));
|
||||
pllog = this;
|
||||
load();
|
||||
save();
|
||||
players = (List<String>) this.getList("players");
|
||||
|
||||
}
|
||||
|
||||
public static PlayersLogs getInstance() {
|
||||
if (pllog == null) {
|
||||
pllog = new PlayersLogs();
|
||||
}
|
||||
return pllog;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
666
src/main/java/uk/org/whoami/authme/settings/Settings.java
Normal file
666
src/main/java/uk/org/whoami/authme/settings/Settings.java
Normal file
@ -0,0 +1,666 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.settings;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import org.bukkit.configuration.MemoryConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import uk.org.whoami.authme.ConsoleLogger;
|
||||
import uk.org.whoami.authme.datasource.DataSource;
|
||||
import uk.org.whoami.authme.datasource.DataSource.DataSourceType;
|
||||
import uk.org.whoami.authme.security.PasswordSecurity;
|
||||
import uk.org.whoami.authme.security.PasswordSecurity.HashAlgorithm;
|
||||
|
||||
public final class Settings extends YamlConfiguration {
|
||||
|
||||
public static final String PLUGIN_FOLDER = "./plugins/AuthMe";
|
||||
public static final String CACHE_FOLDER = Settings.PLUGIN_FOLDER + "/cache";
|
||||
public static final String AUTH_FILE = Settings.PLUGIN_FOLDER + "/auths.db";
|
||||
public static final String MESSAGE_FILE = Settings.PLUGIN_FOLDER + "/messages";
|
||||
public static final String SETTINGS_FILE = Settings.PLUGIN_FOLDER + "/config.yml";
|
||||
public static List<String> allowCommands = null;
|
||||
public static List<String> getJoinPermissions = null;
|
||||
public static List<String> getUnrestrictedName = null;
|
||||
private static List<String> getRestrictedIp;
|
||||
public static List<String> getMySQLOtherUsernameColumn = null;
|
||||
public static List<String> getForcedWorlds = null;
|
||||
|
||||
public final Plugin plugin;
|
||||
private final File file;
|
||||
|
||||
public static DataSourceType getDataSource;
|
||||
public static HashAlgorithm getPasswordHash;
|
||||
public static HashAlgorithm rakamakHash;
|
||||
|
||||
public static Boolean isPermissionCheckEnabled, isRegistrationEnabled, isForcedRegistrationEnabled,
|
||||
isTeleportToSpawnEnabled, isSessionsEnabled, isChatAllowed, isAllowRestrictedIp,
|
||||
isMovementAllowed, isKickNonRegisteredEnabled, isForceSingleSessionEnabled,
|
||||
isForceSpawnLocOnJoinEnabled, isForceExactSpawnEnabled, isSaveQuitLocationEnabled,
|
||||
isForceSurvivalModeEnabled, isResetInventoryIfCreative, isCachingEnabled, isKickOnWrongPasswordEnabled,
|
||||
getEnablePasswordVerifier, protectInventoryBeforeLogInEnabled, isBackupActivated, isBackupOnStart,
|
||||
isBackupOnStop, enablePasspartu, isStopEnabled, reloadSupport, rakamakUseIp, noConsoleSpam, removePassword, displayOtherAccounts,
|
||||
useCaptcha, emailRegistration, multiverse, notifications, chestshop, bungee, banUnsafeIp, doubleEmailCheck;
|
||||
|
||||
|
||||
public static String getNickRegex, getUnloggedinGroup, getMySQLHost, getMySQLPort,
|
||||
getMySQLUsername, getMySQLPassword, getMySQLDatabase, getMySQLTablename,
|
||||
getMySQLColumnName, getMySQLColumnPassword, getMySQLColumnIp, getMySQLColumnLastLogin,
|
||||
getMySQLColumnSalt, getMySQLColumnGroup, getMySQLColumnEmail, unRegisteredGroup, backupWindowsPath,
|
||||
getcUnrestrictedName, getRegisteredGroup, messagesLanguage, getMySQLlastlocX, getMySQLlastlocY, getMySQLlastlocZ,
|
||||
rakamakUsers, rakamakUsersIp, getmailAccount, getmailPassword, getmailSMTP, getMySQLColumnId, getmailSenderName,
|
||||
getPredefinedSalt, getMailSubject, getMailText;
|
||||
|
||||
|
||||
public static int getWarnMessageInterval, getSessionTimeout, getRegistrationTimeout, getMaxNickLength,
|
||||
getMinNickLength, getPasswordMinLen, getMovementRadius, getmaxRegPerIp, getNonActivatedGroup,
|
||||
passwordMaxLength, getRecoveryPassLength, getMailPort, maxLoginTry, captchaLength, saltLength, getmaxRegPerEmail;
|
||||
|
||||
protected static YamlConfiguration configFile;
|
||||
|
||||
public Settings(Plugin plugin) {
|
||||
//super(new File(Settings.PLUGIN_FOLDER + "/config.yml"), this.plugin);
|
||||
this.file = new File(plugin.getDataFolder(),"config.yml");
|
||||
|
||||
this.plugin = plugin;
|
||||
|
||||
|
||||
|
||||
//options().indent(4);
|
||||
// Override to always indent 4 spaces
|
||||
if(exists()) {
|
||||
load();
|
||||
}
|
||||
else {
|
||||
loadDefaults(file.getName());
|
||||
load();
|
||||
}
|
||||
|
||||
configFile = (YamlConfiguration) plugin.getConfig();
|
||||
|
||||
//saveDefaults();
|
||||
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void loadConfigOptions() {
|
||||
|
||||
plugin.getLogger().info("Loading Configuration File...");
|
||||
|
||||
mergeConfig();
|
||||
|
||||
messagesLanguage = checkLang(configFile.getString("settings.messagesLanguage","en"));
|
||||
isPermissionCheckEnabled = configFile.getBoolean("permission.EnablePermissionCheck", false);
|
||||
isForcedRegistrationEnabled = configFile.getBoolean("settings.registration.force", true);
|
||||
isRegistrationEnabled = configFile.getBoolean("settings.registration.enabled", true);
|
||||
isTeleportToSpawnEnabled = configFile.getBoolean("settings.restrictions.teleportUnAuthedToSpawn",false);
|
||||
getWarnMessageInterval = configFile.getInt("settings.registration.messageInterval",5);
|
||||
isSessionsEnabled = configFile.getBoolean("settings.sessions.enabled",false);
|
||||
getSessionTimeout = configFile.getInt("settings.sessions.timeout",10);
|
||||
getRegistrationTimeout = configFile.getInt("settings.restrictions.timeout",30);
|
||||
isChatAllowed = configFile.getBoolean("settings.restrictions.allowChat",false);
|
||||
getMaxNickLength = configFile.getInt("settings.restrictions.maxNicknameLength",20);
|
||||
getMinNickLength = configFile.getInt("settings.restrictions.minNicknameLength",3);
|
||||
getPasswordMinLen = configFile.getInt("settings.security.minPasswordLength",4);
|
||||
getNickRegex = configFile.getString("settings.restrictions.allowedNicknameCharacters","[a-zA-Z0-9_?]*");
|
||||
isAllowRestrictedIp = configFile.getBoolean("settings.restrictions.AllowRestrictedUser",false);
|
||||
getRestrictedIp = configFile.getStringList("settings.restrictions.AllowedRestrictedUser");
|
||||
isMovementAllowed = configFile.getBoolean("settings.restrictions.allowMovement",false);
|
||||
getMovementRadius = configFile.getInt("settings.restrictions.allowedMovementRadius",100);
|
||||
getJoinPermissions = configFile.getStringList("GroupOptions.Permissions.PermissionsOnJoin");
|
||||
isKickOnWrongPasswordEnabled = configFile.getBoolean("settings.restrictions.kickOnWrongPassword",false);
|
||||
isKickNonRegisteredEnabled = configFile.getBoolean("settings.restrictions.kickNonRegistered",false);
|
||||
isForceSingleSessionEnabled = configFile.getBoolean("settings.restrictions.ForceSingleSession",true);
|
||||
isForceSpawnLocOnJoinEnabled = configFile.getBoolean("settings.restrictions.ForceSpawnLocOnJoinEnabled",false);
|
||||
isSaveQuitLocationEnabled = configFile.getBoolean("settings.restrictions.SaveQuitLocation", false);
|
||||
isForceSurvivalModeEnabled = configFile.getBoolean("settings.GameMode.ForceSurvivalMode", false);
|
||||
isResetInventoryIfCreative = configFile.getBoolean("settings.GameMode.ResetInventoryIfCreative",false);
|
||||
getmaxRegPerIp = configFile.getInt("settings.restrictions.maxRegPerIp",1);
|
||||
getPasswordHash = getPasswordHash();
|
||||
getUnloggedinGroup = configFile.getString("settings.security.unLoggedinGroup","unLoggedInGroup");
|
||||
getDataSource = getDataSource();
|
||||
isCachingEnabled = configFile.getBoolean("DataSource.caching",true);
|
||||
getMySQLHost = configFile.getString("DataSource.mySQLHost","127.0.0.1");
|
||||
getMySQLPort = configFile.getString("DataSource.mySQLPort","3306");
|
||||
getMySQLUsername = configFile.getString("DataSource.mySQLUsername","authme");
|
||||
getMySQLPassword = configFile.getString("DataSource.mySQLPassword","12345");
|
||||
getMySQLDatabase = configFile.getString("DataSource.mySQLDatabase","authme");
|
||||
getMySQLTablename = configFile.getString("DataSource.mySQLTablename","authme");
|
||||
getMySQLColumnEmail = configFile.getString("DataSource.mySQLColumnEmail","email");
|
||||
getMySQLColumnName = configFile.getString("DataSource.mySQLColumnName","username");
|
||||
getMySQLColumnPassword = configFile.getString("DataSource.mySQLColumnPassword","password");
|
||||
getMySQLColumnIp = configFile.getString("DataSource.mySQLColumnIp","ip");
|
||||
getMySQLColumnLastLogin = configFile.getString("DataSource.mySQLColumnLastLogin","lastlogin");
|
||||
getMySQLColumnSalt = configFile.getString("ExternalBoardOptions.mySQLColumnSalt");
|
||||
getMySQLColumnGroup = configFile.getString("ExternalBoardOptions.mySQLColumnGroup","");
|
||||
getMySQLlastlocX = configFile.getString("DataSource.mySQLlastlocX","x");
|
||||
getMySQLlastlocY = configFile.getString("DataSource.mySQLlastlocY","y");
|
||||
getMySQLlastlocZ = configFile.getString("DataSource.mySQLlastlocZ","z");
|
||||
getNonActivatedGroup = configFile.getInt("ExternalBoardOptions.nonActivedUserGroup", -1);
|
||||
unRegisteredGroup = configFile.getString("GroupOptions.UnregisteredPlayerGroup","");
|
||||
getUnrestrictedName = configFile.getStringList("settings.unrestrictions.UnrestrictedName");
|
||||
getRegisteredGroup = configFile.getString("GroupOptions.RegisteredPlayerGroup","");
|
||||
getEnablePasswordVerifier = configFile.getBoolean("settings.restrictions.enablePasswordVerifier" , true);
|
||||
protectInventoryBeforeLogInEnabled = configFile.getBoolean("settings.restrictions.ProtectInventoryBeforeLogIn", true);
|
||||
passwordMaxLength = configFile.getInt("settings.security.passwordMaxLength", 20);
|
||||
isBackupActivated = configFile.getBoolean("BackupSystem.ActivateBackup",false);
|
||||
isBackupOnStart = configFile.getBoolean("BackupSystem.OnServerStart",false);
|
||||
isBackupOnStop = configFile.getBoolean("BackupSystem.OnServeStop",false);
|
||||
backupWindowsPath = configFile.getString("BackupSystem.MysqlWindowsPath", "C:\\Program Files\\MySQL\\MySQL Server 5.1\\");
|
||||
enablePasspartu = configFile.getBoolean("Passpartu.enablePasspartu",false);
|
||||
isStopEnabled = configFile.getBoolean("Security.SQLProblem.stopServer", true);
|
||||
reloadSupport = configFile.getBoolean("Security.ReloadCommand.useReloadCommandSupport", true);
|
||||
allowCommands = (List<String>) configFile.getList("settings.restrictions.allowCommands");
|
||||
if (configFile.contains("allowCommands")) {
|
||||
if (!allowCommands.contains("/login"))
|
||||
allowCommands.add("/login");
|
||||
if (!allowCommands.contains("/register"))
|
||||
allowCommands.add("/register");
|
||||
if (!allowCommands.contains("/l"))
|
||||
allowCommands.add("/l");
|
||||
if (!allowCommands.contains("/reg"))
|
||||
allowCommands.add("/reg");
|
||||
if (!allowCommands.contains("/passpartu"))
|
||||
allowCommands.add("/passpartu");
|
||||
if (!allowCommands.contains("/email"))
|
||||
allowCommands.add("/email");
|
||||
if(!allowCommands.contains("/captcha"))
|
||||
allowCommands.add("/captcha");
|
||||
}
|
||||
rakamakUsers = configFile.getString("Converter.Rakamak.fileName", "users.rak");
|
||||
rakamakUsersIp = configFile.getString("Converter.Rakamak.ipFileName", "UsersIp.rak");
|
||||
rakamakUseIp = configFile.getBoolean("Converter.Rakamak.useIp", false);
|
||||
rakamakHash = getRakamakHash();
|
||||
noConsoleSpam = configFile.getBoolean("Security.console.noConsoleSpam", false);
|
||||
removePassword = configFile.getBoolean("Security.console.removePassword", true);
|
||||
getmailAccount = configFile.getString("Email.mailAccount", "");
|
||||
getmailPassword = configFile.getString("Email.mailPassword", "");
|
||||
getmailSMTP = configFile.getString("Email.mailSMTP", "smtp.gmail.com");
|
||||
getMailPort = configFile.getInt("Email.mailPort", 465);
|
||||
getRecoveryPassLength = configFile.getInt("Email.RecoveryPasswordLength", 8);
|
||||
getMySQLOtherUsernameColumn = (List<String>) configFile.getList("ExternalBoardOptions.mySQLOtherUsernameColumns", new ArrayList<String>());
|
||||
displayOtherAccounts = configFile.getBoolean("settings.restrictions.displayOtherAccounts", true);
|
||||
getMySQLColumnId = configFile.getString("DataSource.mySQLColumnId", "id");
|
||||
getmailSenderName = configFile.getString("Email.mailSenderName", "");
|
||||
getPredefinedSalt = configFile.getString("Xenoforo.predefinedSalt", "");
|
||||
useCaptcha = configFile.getBoolean("Security.captcha.useCaptcha", false);
|
||||
maxLoginTry = configFile.getInt("Security.captcha.maxLoginTry", 5);
|
||||
captchaLength = configFile.getInt("Security.captcha.captchaLength", 5);
|
||||
getMailSubject = configFile.getString("Email.mailSubject", "Your new AuthMe Password");
|
||||
getMailText = configFile.getString("Email.mailText", "Dear <playername>, \n\n This is your new AuthMe password for the server : \n\n <servername> \n\n <generatedpass>\n\n Do not forget to change password after login! \n /changepassword <generatedpass> newPassword");
|
||||
emailRegistration = configFile.getBoolean("settings.registration.enableEmailRegistrationSystem", false);
|
||||
saltLength = configFile.getInt("settings.security.doubleMD5SaltLength", 8);
|
||||
getmaxRegPerEmail = configFile.getInt("Email.maxRegPerEmail", 1);
|
||||
multiverse = configFile.getBoolean("Hooks.multiverse", true);
|
||||
chestshop = configFile.getBoolean("Hooks.chestshop", true);
|
||||
notifications = configFile.getBoolean("Hooks.notifications", true);
|
||||
bungee = configFile.getBoolean("Hooks.bungeecord", false);
|
||||
getForcedWorlds = (List<String>) configFile.getList("settings.restrictions.ForceSpawnOnTheseWorlds");
|
||||
banUnsafeIp = configFile.getBoolean("settings.restrictions.banUnsafedIP", false);
|
||||
doubleEmailCheck = configFile.getBoolean("settings.registration.doubleEmailCheck", false);
|
||||
|
||||
saveDefaults();
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static void reloadConfigOptions(YamlConfiguration newConfig) {
|
||||
configFile = newConfig;
|
||||
|
||||
//plugin.getLogger().info("RELoading Configuration File...");
|
||||
messagesLanguage = checkLang(configFile.getString("settings.messagesLanguage","en"));
|
||||
isPermissionCheckEnabled = configFile.getBoolean("permission.EnablePermissionCheck", false);
|
||||
isForcedRegistrationEnabled = configFile.getBoolean("settings.registration.force", true);
|
||||
isRegistrationEnabled = configFile.getBoolean("settings.registration.enabled", true);
|
||||
isTeleportToSpawnEnabled = configFile.getBoolean("settings.restrictions.teleportUnAuthedToSpawn",false);
|
||||
getWarnMessageInterval = configFile.getInt("settings.registration.messageInterval",5);
|
||||
isSessionsEnabled = configFile.getBoolean("settings.sessions.enabled",false);
|
||||
getSessionTimeout = configFile.getInt("settings.sessions.timeout",10);
|
||||
getRegistrationTimeout = configFile.getInt("settings.restrictions.timeout",30);
|
||||
isChatAllowed = configFile.getBoolean("settings.restrictions.allowChat",false);
|
||||
getMaxNickLength = configFile.getInt("settings.restrictions.maxNicknameLength",20);
|
||||
getMinNickLength = configFile.getInt("settings.restrictions.minNicknameLength",3);
|
||||
getPasswordMinLen = configFile.getInt("settings.security.minPasswordLength",4);
|
||||
getNickRegex = configFile.getString("settings.restrictions.allowedNicknameCharacters","[a-zA-Z0-9_?]*");
|
||||
isAllowRestrictedIp = configFile.getBoolean("settings.restrictions.AllowRestrictedUser",false);
|
||||
getRestrictedIp = configFile.getStringList("settings.restrictions.AllowedRestrictedUser");
|
||||
isMovementAllowed = configFile.getBoolean("settings.restrictions.allowMovement",false);
|
||||
getMovementRadius = configFile.getInt("settings.restrictions.allowedMovementRadius",100);
|
||||
getJoinPermissions = configFile.getStringList("GroupOptions.Permissions.PermissionsOnJoin");
|
||||
isKickOnWrongPasswordEnabled = configFile.getBoolean("settings.restrictions.kickOnWrongPassword",false);
|
||||
isKickNonRegisteredEnabled = configFile.getBoolean("settings.restrictions.kickNonRegistered",false);
|
||||
isForceSingleSessionEnabled = configFile.getBoolean("settings.restrictions.ForceSingleSession",true);
|
||||
isForceSpawnLocOnJoinEnabled = configFile.getBoolean("settings.restrictions.ForceSpawnLocOnJoinEnabled",false);
|
||||
isSaveQuitLocationEnabled = configFile.getBoolean("settings.restrictions.SaveQuitLocation",false);
|
||||
isForceSurvivalModeEnabled = configFile.getBoolean("settings.GameMode.ForceSurvivalMode",false);
|
||||
isResetInventoryIfCreative = configFile.getBoolean("settings.GameMode.ResetInventoryIfCreative",false);
|
||||
getmaxRegPerIp = configFile.getInt("settings.restrictions.maxRegPerIp",1);
|
||||
getPasswordHash = getPasswordHash();
|
||||
getUnloggedinGroup = configFile.getString("settings.security.unLoggedinGroup","unLoggedInGroup");
|
||||
getDataSource = getDataSource();
|
||||
isCachingEnabled = configFile.getBoolean("DataSource.caching",true);
|
||||
getMySQLHost = configFile.getString("DataSource.mySQLHost","127.0.0.1");
|
||||
getMySQLPort = configFile.getString("DataSource.mySQLPort","3306");
|
||||
getMySQLUsername = configFile.getString("DataSource.mySQLUsername","authme");
|
||||
getMySQLPassword = configFile.getString("DataSource.mySQLPassword","12345");
|
||||
getMySQLDatabase = configFile.getString("DataSource.mySQLDatabase","authme");
|
||||
getMySQLTablename = configFile.getString("DataSource.mySQLTablename","authme");
|
||||
getMySQLColumnEmail = configFile.getString("DataSource.mySQLColumnEmail","email");
|
||||
getMySQLColumnName = configFile.getString("DataSource.mySQLColumnName","username");
|
||||
getMySQLColumnPassword = configFile.getString("DataSource.mySQLColumnPassword","password");
|
||||
getMySQLColumnIp = configFile.getString("DataSource.mySQLColumnIp","ip");
|
||||
getMySQLColumnLastLogin = configFile.getString("DataSource.mySQLColumnLastLogin","lastlogin");
|
||||
getMySQLlastlocX = configFile.getString("DataSource.mySQLlastlocX","x");
|
||||
getMySQLlastlocY = configFile.getString("DataSource.mySQLlastlocY","y");
|
||||
getMySQLlastlocZ = configFile.getString("DataSource.mySQLlastlocZ","z");
|
||||
getMySQLColumnSalt = configFile.getString("ExternalBoardOptions.mySQLColumnSalt","");
|
||||
getMySQLColumnGroup = configFile.getString("ExternalBoardOptions.mySQLColumnGroup","");
|
||||
getNonActivatedGroup = configFile.getInt("ExternalBoardOptions.nonActivedUserGroup", -1);
|
||||
unRegisteredGroup = configFile.getString("GroupOptions.UnregisteredPlayerGroup","");
|
||||
getUnrestrictedName = configFile.getStringList("settings.unrestrictions.UnrestrictedName");
|
||||
getRegisteredGroup = configFile.getString("GroupOptions.RegisteredPlayerGroup","");
|
||||
getEnablePasswordVerifier = configFile.getBoolean("settings.restrictions.enablePasswordVerifier" , true);
|
||||
protectInventoryBeforeLogInEnabled = configFile.getBoolean("settings.restrictions.ProtectInventoryBeforeLogIn", true);
|
||||
passwordMaxLength = configFile.getInt("settings.security.passwordMaxLength", 20);
|
||||
isBackupActivated = configFile.getBoolean("BackupSystem.ActivateBackup",false);
|
||||
isBackupOnStart = configFile.getBoolean("BackupSystem.OnServerStart",false);
|
||||
isBackupOnStop = configFile.getBoolean("BackupSystem.OnServeStop",false);
|
||||
backupWindowsPath = configFile.getString("BackupSystem.MysqlWindowsPath", "C:\\Program Files\\MySQL\\MySQL Server 5.1\\");
|
||||
enablePasspartu = configFile.getBoolean("Passpartu.enablePasspartu",false);
|
||||
isStopEnabled = configFile.getBoolean("Security.SQLProblem.stopServer", true);
|
||||
reloadSupport = configFile.getBoolean("Security.ReloadCommand.useReloadCommandSupport", true);
|
||||
allowCommands = (List<String>) configFile.getList("settings.restrictions.allowCommands");
|
||||
if (configFile.contains("allowCommands")) {
|
||||
if (!allowCommands.contains("/login"))
|
||||
allowCommands.add("/login");
|
||||
if (!allowCommands.contains("/register"))
|
||||
allowCommands.add("/register");
|
||||
if (!allowCommands.contains("/l"))
|
||||
allowCommands.add("/l");
|
||||
if (!allowCommands.contains("/reg"))
|
||||
allowCommands.add("/reg");
|
||||
if (!allowCommands.contains("/passpartu"))
|
||||
allowCommands.add("/passpartu");
|
||||
if (!allowCommands.contains("/email"))
|
||||
allowCommands.add("/email");
|
||||
if(!allowCommands.contains("/captcha"))
|
||||
allowCommands.add("/captcha");
|
||||
}
|
||||
rakamakUsers = configFile.getString("Converter.Rakamak.fileName", "users.rak");
|
||||
rakamakUsersIp = configFile.getString("Converter.Rakamak.ipFileName", "UsersIp.rak");
|
||||
rakamakUseIp = configFile.getBoolean("Converter.Rakamak.useIp", false);
|
||||
rakamakHash = getRakamakHash();
|
||||
noConsoleSpam = configFile.getBoolean("Security.console.noConsoleSpam", false);
|
||||
removePassword = configFile.getBoolean("Security.console.removePassword", true);
|
||||
getmailAccount = configFile.getString("Email.mailAccount", "");
|
||||
getmailPassword = configFile.getString("Email.mailPassword", "");
|
||||
getmailSMTP = configFile.getString("Email.mailSMTP", "smtp.gmail.com");
|
||||
getMailPort = configFile.getInt("Email.mailPort", 465);
|
||||
getRecoveryPassLength = configFile.getInt("Email.RecoveryPasswordLength", 8);
|
||||
getMySQLOtherUsernameColumn = (List<String>) configFile.getList("ExternalBoardOptions.mySQLOtherUsernameColumns", new ArrayList<String>());
|
||||
displayOtherAccounts = configFile.getBoolean("settings.restrictions.displayOtherAccounts", true);
|
||||
getMySQLColumnId = configFile.getString("DataSource.mySQLColumnId", "id");
|
||||
getmailSenderName = configFile.getString("Email.mailSenderName", "");
|
||||
getPredefinedSalt = configFile.getString("Xenoforo.predefinedSalt", "");
|
||||
useCaptcha = configFile.getBoolean("Security.captcha.useCaptcha", false);
|
||||
maxLoginTry = configFile.getInt("Security.captcha.maxLoginTry", 5);
|
||||
captchaLength = configFile.getInt("Security.captcha.captchaLength", 5);
|
||||
getMailSubject = configFile.getString("Email.mailSubject", "Your new AuthMe Password");
|
||||
getMailText = configFile.getString("Email.mailText", "Dear <playername>, \n\n This is your new AuthMe password for the server : \n\n <servername> \n\n <generatedpass>\n\n Do not forget to change password after login! \n /changepassword <generatedpass> newPassword");
|
||||
emailRegistration = configFile.getBoolean("settings.registration.enableEmailRegistrationSystem", false);
|
||||
saltLength = configFile.getInt("settings.security.doubleMD5SaltLength", 8);
|
||||
getmaxRegPerEmail = configFile.getInt("Email.maxRegPerEmail", 1);
|
||||
multiverse = configFile.getBoolean("Hooks.multiverse", true);
|
||||
chestshop = configFile.getBoolean("Hooks.chestshop", true);
|
||||
notifications = configFile.getBoolean("Hooks.notifications", true);
|
||||
bungee = configFile.getBoolean("Hooks.bungeecord", false);
|
||||
getForcedWorlds = (List<String>) configFile.getList("settings.restrictions.ForceSpawnOnTheseWorlds");
|
||||
banUnsafeIp = configFile.getBoolean("settings.restrictions.banUnsafedIP", false);
|
||||
doubleEmailCheck = configFile.getBoolean("settings.registration.doubleEmailCheck", false);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void mergeConfig() {
|
||||
|
||||
if (contains("settings.restrictions.allowedPluginTeleportHandler")) {
|
||||
set("settings.restrictions.allowedPluginTeleportHandler", null);
|
||||
}
|
||||
|
||||
if(!contains("DataSource.mySQLColumnEmail")) {
|
||||
set("DataSource.mySQLColumnEmail","email");
|
||||
}
|
||||
|
||||
if(contains("Email.GmailAccount")) {
|
||||
set("Email.mailAccount", getString("Email.GmailAccount"));
|
||||
set("Email.GmailAccount", null);
|
||||
}
|
||||
|
||||
if(contains("Email.GmailPassword")) {
|
||||
set("Email.mailPassword", getString("Email.GmailPassword"));
|
||||
set("Email.GmailPassword", null);
|
||||
}
|
||||
|
||||
if(!contains("Email.RecoveryPasswordLength")) {
|
||||
set("Email.RecoveryPasswordLength", 8);
|
||||
}
|
||||
|
||||
if(!contains("Email.mailPort")) {
|
||||
set("Email.mailPort", 465);
|
||||
}
|
||||
|
||||
if(!contains("Email.mailSMTP")) {
|
||||
set("Email.mailSMTP", "smtp.gmail.com");
|
||||
}
|
||||
|
||||
if(!contains("Email.mailAccount")) {
|
||||
set("Email.mailAccount", "");
|
||||
}
|
||||
|
||||
if(!contains("Email.mailPassword")) {
|
||||
set("Email.mailPassword", "");
|
||||
}
|
||||
|
||||
if(!contains("ExternalBoardOptions.mySQLOtherUsernameColumns")) {
|
||||
set("ExternalBoardOptions.mySQLOtherUsernameColumns", new ArrayList<String>());
|
||||
}
|
||||
|
||||
if(!contains("settings.restrictions.displayOtherAccounts")) {
|
||||
set("settings.restrictions.displayOtherAccounts", true);
|
||||
}
|
||||
|
||||
if(!contains("DataSource.mySQLColumnId")) {
|
||||
set("DataSource.mySQLColumnId", "id");
|
||||
}
|
||||
|
||||
if(!contains("Email.mailSenderName")) {
|
||||
set("Email.mailSenderName", "");
|
||||
}
|
||||
|
||||
if(!contains("Xenoforo.predefinedSalt")) {
|
||||
set("Xenoforo.predefinedSalt", "");
|
||||
}
|
||||
|
||||
if(!contains("Security.captcha.useCaptcha")) {
|
||||
set("Security.captcha.useCaptcha", false);
|
||||
}
|
||||
|
||||
if(!contains("Security.captcha.maxLoginTry")) {
|
||||
set("Security.captcha.maxLoginTry", 5);
|
||||
}
|
||||
|
||||
if(!contains("Security.captcha.captchaLength")) {
|
||||
set("Security.captcha.captchaLength", 5);
|
||||
}
|
||||
|
||||
if(!contains("Email.mailSubject")) {
|
||||
set("Email.mailSubject", "");
|
||||
}
|
||||
|
||||
if(!contains("Email.mailText")) {
|
||||
set("Email.mailText", "Dear <playername>, \n\n This is your new AuthMe password for the server : \n\n <servername> \n\n <generatedpass>\n\n Do not forget to change password after login! \n /changepassword <generatedpass> newPassword");
|
||||
}
|
||||
|
||||
if(!contains("settings.registration.enableEmailRegistrationSystem")) {
|
||||
set("settings.registration.enableEmailRegistrationSystem", false);
|
||||
}
|
||||
|
||||
if(!contains("settings.security.doubleMD5SaltLength")) {
|
||||
set("settings.security.doubleMD5SaltLength", 8);
|
||||
}
|
||||
|
||||
if(!contains("Email.maxRegPerEmail")) {
|
||||
set("Email.maxRegPerEmail", 1);
|
||||
}
|
||||
|
||||
if(!contains("Hooks.multiverse")) {
|
||||
set("Hooks.multiverse", true);
|
||||
set("Hooks.chestshop", true);
|
||||
set("Hooks.notifications", true);
|
||||
set("Hooks.bungeecord", false);
|
||||
}
|
||||
|
||||
if(!contains("settings.restrictions.ForceSpawnOnTheseWorlds")) {
|
||||
set("settings.restrictions.ForceSpawnOnTheseWorlds", new ArrayList<String>());
|
||||
}
|
||||
|
||||
if(!contains("settings.restrictions.banUnsafedIP")) {
|
||||
set("settings.restrictions.banUnsafedIP", false);
|
||||
}
|
||||
|
||||
if(!contains("settings.registration.doubleEmailCheck")) {
|
||||
set("settings.registration.doubleEmailCheck", false);
|
||||
}
|
||||
|
||||
plugin.getLogger().info("Merge new Config Options if needed..");
|
||||
plugin.saveConfig();
|
||||
|
||||
return;
|
||||
}
|
||||
/**
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
private static HashAlgorithm getPasswordHash() {
|
||||
String key = "settings.security.passwordHash";
|
||||
|
||||
try {
|
||||
return PasswordSecurity.HashAlgorithm.valueOf(configFile.getString(key,"SHA256").toUpperCase());
|
||||
} catch (IllegalArgumentException ex) {
|
||||
ConsoleLogger.showError("Unknown Hash Algorithm; defaulting to SHA256");
|
||||
return PasswordSecurity.HashAlgorithm.SHA256;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static HashAlgorithm getRakamakHash() {
|
||||
String key = "Converter.Rakamak.newPasswordHash";
|
||||
|
||||
try {
|
||||
return PasswordSecurity.HashAlgorithm.valueOf(configFile.getString(key,"SHA256").toUpperCase());
|
||||
} catch (IllegalArgumentException ex) {
|
||||
ConsoleLogger.showError("Unknown Hash Algorithm; defaulting to SHA256");
|
||||
return PasswordSecurity.HashAlgorithm.SHA256;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
private static DataSourceType getDataSource() {
|
||||
String key = "DataSource.backend";
|
||||
|
||||
try {
|
||||
return DataSource.DataSourceType.valueOf(configFile.getString(key).toUpperCase());
|
||||
} catch (IllegalArgumentException ex) {
|
||||
ConsoleLogger.showError("Unknown database backend; defaulting to file database");
|
||||
return DataSource.DataSourceType.FILE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Config option for setting and check restricted user by
|
||||
* username;ip , return false if ip and name doesnt amtch with
|
||||
* player that join the server, so player has a restricted access
|
||||
*/
|
||||
public static Boolean getRestrictedIp(String name, String ip) {
|
||||
|
||||
Iterator<String> iter = getRestrictedIp.iterator();
|
||||
|
||||
/* setup a few boolean variables to test the parameters */
|
||||
Boolean trueonce = false;
|
||||
Boolean namefound = false;
|
||||
|
||||
while (iter.hasNext()) {
|
||||
String[] args = iter.next().split(";");
|
||||
|
||||
String testname = args[0];
|
||||
String testip = args[1];
|
||||
|
||||
/** Changing this logic to be more customized
|
||||
* test each case against the entire
|
||||
* list not just the first one in the list.*/
|
||||
|
||||
/* Fist Check the name */
|
||||
if(testname.equalsIgnoreCase(name) ) {
|
||||
namefound = true;
|
||||
/* Check to see if the IP is the same */
|
||||
if(testip.equalsIgnoreCase(ip)) {
|
||||
trueonce = true;
|
||||
};
|
||||
}
|
||||
}
|
||||
// if the name is not found in the list let the user pass they are not being monitored
|
||||
if ( namefound == false){
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
// if the name and IP was found once in the list let the user pass they are in the config
|
||||
if ( trueonce == true ){
|
||||
return true;
|
||||
// otherwise nip them in the bud and THEY SHALL NOT PASS!
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Loads the configuration from disk
|
||||
*
|
||||
* @return True if loaded successfully
|
||||
*/
|
||||
public final boolean load() {
|
||||
try {
|
||||
load(file);
|
||||
return true;
|
||||
} catch (Exception ex) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public final void reload() {
|
||||
load();
|
||||
loadDefaults(file.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the configuration to disk
|
||||
*
|
||||
* @return True if saved successfully
|
||||
*/
|
||||
public final boolean save() {
|
||||
try {
|
||||
save(file);
|
||||
return true;
|
||||
} catch (Exception ex) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple function for if the Configuration file exists
|
||||
*
|
||||
* @return True if configuration exists on disk
|
||||
*/
|
||||
public final boolean exists() {
|
||||
return file.exists();
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a file from the plugin jar and sets as default
|
||||
*
|
||||
* @param filename The filename to open
|
||||
*/
|
||||
public final void loadDefaults(String filename) {
|
||||
InputStream stream = plugin.getResource(filename);
|
||||
if(stream == null) return;
|
||||
|
||||
setDefaults(YamlConfiguration.loadConfiguration(stream));
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves current configuration (plus defaults) to disk.
|
||||
*
|
||||
* If defaults and configuration are empty, saves blank file.
|
||||
*
|
||||
* @return True if saved successfully
|
||||
*/
|
||||
public final boolean saveDefaults() {
|
||||
options().copyDefaults(true);
|
||||
options().copyHeader(true);
|
||||
boolean success = save();
|
||||
options().copyDefaults(false);
|
||||
options().copyHeader(false);
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Clears current configuration defaults
|
||||
*/
|
||||
public final void clearDefaults() {
|
||||
setDefaults(new MemoryConfiguration());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check loaded defaults against current configuration
|
||||
*
|
||||
* @return false When all defaults aren't present in config
|
||||
*/
|
||||
public boolean checkDefaults() {
|
||||
if (getDefaults() == null) {
|
||||
return true;
|
||||
}
|
||||
return getKeys(true).containsAll(getDefaults().getKeys(true));
|
||||
}
|
||||
/*
|
||||
public static Settings getInstance() {
|
||||
if (singleton == null) {
|
||||
singleton = new Settings();
|
||||
}
|
||||
return singleton;
|
||||
}
|
||||
*/
|
||||
public static String checkLang(String lang) {
|
||||
for(messagesLang language: messagesLang.values()) {
|
||||
//System.out.println(language.toString());
|
||||
if(lang.toLowerCase().contains(language.toString())) {
|
||||
ConsoleLogger.info("Set Language: "+lang);
|
||||
return lang;
|
||||
}
|
||||
}
|
||||
ConsoleLogger.info("Set Default Language: En ");
|
||||
return "en";
|
||||
}
|
||||
|
||||
public enum messagesLang {
|
||||
en, de, br, cz, pl, fr, ru, hu, sk, es
|
||||
}
|
||||
}
|
45
src/main/java/uk/org/whoami/authme/settings/SpoutCfg.java
Normal file
45
src/main/java/uk/org/whoami/authme/settings/SpoutCfg.java
Normal file
@ -0,0 +1,45 @@
|
||||
package uk.org.whoami.authme.settings;
|
||||
|
||||
/**
|
||||
* @Author Hoezef
|
||||
*/
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class SpoutCfg extends CustomConfiguration{
|
||||
|
||||
private static SpoutCfg instance = null;
|
||||
|
||||
public SpoutCfg(File file)
|
||||
{
|
||||
super(file);
|
||||
loadDefaults();
|
||||
load();
|
||||
save();
|
||||
}
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
private void loadDefaults() {
|
||||
this.set("Spout GUI enabled", true);
|
||||
//Login:
|
||||
this.set("LoginScreen.enabled", true);
|
||||
this.set("LoginScreen.exit button", "Quit");
|
||||
this.set("LoginScreen.exit message", "Good Bye");
|
||||
this.set("LoginScreen.login button", "Login");
|
||||
this.set("LoginScreen.title", "LOGIN");
|
||||
this.set("LoginScreen.text", new ArrayList<String>() {{
|
||||
add("Sample text");
|
||||
add("Change this at spout.yml");
|
||||
add("------------------");
|
||||
add("AuthMe Reloaded by d4rkwarriors");
|
||||
}});
|
||||
//Registration:
|
||||
//this.set("RegistrationScreen.enabled",true);
|
||||
|
||||
}
|
||||
|
||||
public static SpoutCfg getInstance() {
|
||||
if (instance == null) instance = new SpoutCfg(new File("plugins/AuthMe", "spout.yml"));
|
||||
return instance;
|
||||
}
|
||||
}
|
60
src/main/java/uk/org/whoami/authme/task/MessageTask.java
Normal file
60
src/main/java/uk/org/whoami/authme/task/MessageTask.java
Normal file
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.task;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import uk.org.whoami.authme.AuthMe;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.cache.limbo.LimboCache;
|
||||
|
||||
public class MessageTask implements Runnable {
|
||||
|
||||
private AuthMe plugin;
|
||||
private String name;
|
||||
private String msg;
|
||||
private int interval;
|
||||
|
||||
public MessageTask(AuthMe plugin, String name, String msg, int interval) {
|
||||
this.plugin = plugin;
|
||||
this.name = name;
|
||||
this.msg = msg;
|
||||
this.interval = interval;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : plugin.getServer().getOnlinePlayers()) {
|
||||
if (player.getName().toLowerCase().equals(name)) {
|
||||
player.sendMessage(msg);
|
||||
|
||||
BukkitScheduler sched = plugin.getServer().getScheduler();
|
||||
BukkitTask late = sched.runTaskLater(plugin, this, interval * 20);
|
||||
if(LimboCache.getInstance().hasLimboPlayer(name)) {
|
||||
LimboCache.getInstance().getLimboPlayer(name).setMessageTaskId(late.getTaskId());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
72
src/main/java/uk/org/whoami/authme/task/TimeoutTask.java
Normal file
72
src/main/java/uk/org/whoami/authme/task/TimeoutTask.java
Normal file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright 2011 Sebastian Köhler <sebkoehler@whoami.org.uk>.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package uk.org.whoami.authme.task;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import uk.org.whoami.authme.ConsoleLogger;
|
||||
import uk.org.whoami.authme.cache.backup.FileCache;
|
||||
import uk.org.whoami.authme.cache.auth.PlayerCache;
|
||||
import uk.org.whoami.authme.cache.limbo.LimboPlayer;
|
||||
import uk.org.whoami.authme.cache.limbo.LimboCache;
|
||||
import uk.org.whoami.authme.listener.AuthMePlayerListener;
|
||||
import uk.org.whoami.authme.settings.Messages;
|
||||
|
||||
|
||||
public class TimeoutTask implements Runnable {
|
||||
|
||||
private JavaPlugin plugin;
|
||||
private String name;
|
||||
private Messages m = Messages.getInstance();
|
||||
private FileCache playerCache = new FileCache();
|
||||
|
||||
public TimeoutTask(JavaPlugin plugin, String name) {
|
||||
this.plugin = plugin;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (PlayerCache.getInstance().isAuthenticated(name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : plugin.getServer().getOnlinePlayers()) {
|
||||
if (player.getName().toLowerCase().equals(name)) {
|
||||
if (LimboCache.getInstance().hasLimboPlayer(name)) {
|
||||
LimboPlayer inv = LimboCache.getInstance().getLimboPlayer(name);
|
||||
player.getServer().getScheduler().cancelTask(inv.getTimeoutTaskId());
|
||||
|
||||
if(playerCache.doesCacheExist(name)) {
|
||||
playerCache.removeCache(name);
|
||||
}
|
||||
}
|
||||
int gm = AuthMePlayerListener.gameMode.get(name);
|
||||
player.setGameMode(GameMode.getByValue(gm));
|
||||
ConsoleLogger.info("Set " + player.getName() + " to gamemode: " + GameMode.getByValue(gm).name());
|
||||
player.kickPlayer(m._("timeout"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
3
src/main/resources/META-INF/MANIFEST.MF
Normal file
3
src/main/resources/META-INF/MANIFEST.MF
Normal file
@ -0,0 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
Class-Path: ../lib/mail.jar
|
||||
|
126
src/main/resources/config.yml
Normal file
126
src/main/resources/config.yml
Normal file
@ -0,0 +1,126 @@
|
||||
DataSource:
|
||||
mySQLColumnName: username
|
||||
mySQLTablename: authme
|
||||
mySQLUsername: authme
|
||||
backend: file
|
||||
mySQLColumnLastLogin: lastlogin
|
||||
mySQLDatabase: authme
|
||||
mySQLPort: '3306'
|
||||
mySQLColumnIp: ip
|
||||
mySQLHost: 127.0.0.1
|
||||
mySQLColumnPassword: password
|
||||
mySQLPassword: '12345'
|
||||
caching: true
|
||||
mySQLlastlocX: x
|
||||
mySQLlastlocY : y
|
||||
mySQLlastlocZ : z
|
||||
mySQLColumnEmail: email
|
||||
mySQLColumnId: id
|
||||
GroupOptions:
|
||||
UnregisteredPlayerGroup: ''
|
||||
RegisteredPlayerGroup: ''
|
||||
Permissions:
|
||||
PermissionsOnJoin: []
|
||||
settings:
|
||||
sessions:
|
||||
enabled: false
|
||||
timeout: 10
|
||||
restrictions:
|
||||
allowChat: false
|
||||
allowCommands:
|
||||
- /login
|
||||
- /register
|
||||
- /l
|
||||
- /reg
|
||||
- /passpartu
|
||||
- /email
|
||||
- /captcha
|
||||
maxRegPerIp: 1
|
||||
maxNicknameLength: 20
|
||||
ForceSingleSession: true
|
||||
ForceSpawnLocOnJoinEnabled: false
|
||||
SaveQuitLocation: false
|
||||
AllowRestrictedUser: false
|
||||
AllowedRestrictedUser: []
|
||||
kickNonRegistered: false
|
||||
kickOnWrongPassword: false
|
||||
teleportUnAuthedToSpawn: false
|
||||
minNicknameLength: 3
|
||||
allowMovement: false
|
||||
timeout: 30
|
||||
allowedNicknameCharacters: '[a-zA-Z0-9_?]*'
|
||||
allowedMovementRadius: 100
|
||||
enablePasswordVerifier: true
|
||||
ProtectInventoryBeforeLogIn: true
|
||||
displayOtherAccounts: true
|
||||
ForceSpawnOnTheseWorlds:
|
||||
- world
|
||||
- world_nether
|
||||
- world_the_end
|
||||
banUnsafedIP: false
|
||||
GameMode:
|
||||
ForceSurvivalMode: false
|
||||
ResetInventoryIfCreative: false
|
||||
security:
|
||||
minPasswordLength: 4
|
||||
unLoggedinGroup: unLoggedinGroup
|
||||
passwordHash: SHA256
|
||||
doubleMD5SaltLength: 8
|
||||
registration:
|
||||
enabled: true
|
||||
messageInterval: 5
|
||||
force: true
|
||||
enableEmailRegistrationSystem: false
|
||||
doubleEmailCheck: false
|
||||
unrestrictions:
|
||||
UnrestrictedName: []
|
||||
messagesLanguage: en
|
||||
ExternalBoardOptions:
|
||||
mySQLColumnSalt: ''
|
||||
mySQLColumnGroup: ''
|
||||
nonActivedUserGroup: -1
|
||||
mySQLOtherUsernameColumns: []
|
||||
Xenoforo:
|
||||
predefinedSalt: ''
|
||||
permission:
|
||||
EnablePermissionCheck: false
|
||||
BackupSystem:
|
||||
ActivateBackup: false
|
||||
OnServerStart: false
|
||||
OnServerStop: true
|
||||
MysqlWindowsPath: 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\'
|
||||
Passpartu:
|
||||
enablePasspartu: false
|
||||
Security:
|
||||
SQLProblem:
|
||||
stopServer: true
|
||||
ReloadCommand:
|
||||
useReloadCommandSupport: true
|
||||
console:
|
||||
noConsoleSpam: false
|
||||
removePassword: true
|
||||
captcha:
|
||||
useCaptcha: false
|
||||
maxLoginTry: 5
|
||||
captchaLength: 5
|
||||
Converter:
|
||||
Rakamak:
|
||||
fileName: users.rak
|
||||
useIP: false
|
||||
ipFileName: UsersIp.rak
|
||||
newPasswordHash: SHA256
|
||||
Email:
|
||||
mailSMTP: smtp.gmail.com
|
||||
mailPort: 465
|
||||
mailAccount: ''
|
||||
mailPassword: ''
|
||||
mailSenderName: ''
|
||||
RecoveryPasswordLength: 8
|
||||
mailSubject: 'Your new AuthMe Password'
|
||||
mailText: 'Dear <playername>, \n\n This is your new AuthMe password for the server \n\n <servername> : \n\n <generatedpass>\n\nDo not forget to change password after login! \n /changepassword <generatedpass> newPassword'
|
||||
maxRegPerEmail: 1
|
||||
Hooks:
|
||||
multiverse: true
|
||||
chestshop: true
|
||||
bungeecord: false
|
||||
notifications: true
|
38
src/main/resources/messages_br.yml
Normal file
38
src/main/resources/messages_br.yml
Normal file
@ -0,0 +1,38 @@
|
||||
unknown_user: '&fUsuario inexistente'
|
||||
not_logged_in: '&cNao conectado!'
|
||||
reg_voluntarily: '&fPara registrar um nickname, digite: "/register senha senha"'
|
||||
usage_log: '&cPara entrar digite: "/login senha"'
|
||||
wrong_pwd: '&cErro. Senha Incorreta.'
|
||||
unregistered: '&cDesregistrado com sucesso!'
|
||||
reg_disabled: '&cNovos registros estao desativados.'
|
||||
valid_session: '&cSessao de login'
|
||||
login: '&cLogado com sucesso!'
|
||||
vb_nonActiv: '&fSua conta nao esta ativada, verifique os seus e-mails!'
|
||||
user_regged: '&cEste nome ja foi registrado antes.'
|
||||
usage_reg: '&cPara registrar digite: "/register senha senha"'
|
||||
max_reg: '&fNumero maximo de registros excedido.'
|
||||
no_perm: '&cSem permissao!'
|
||||
error: '&fOcorreu um erro de sistema, por favor reporte ao ADM.'
|
||||
login_msg: '&cPara entrar digite: "/login password"'
|
||||
reg_msg: '&cPara registrar um nick digite: "/register senha senha"'
|
||||
usage_unreg: '&cPara desregistrar digite: /unregister senha'
|
||||
pwd_changed: '&cSenha modificada!'
|
||||
user_unknown: '&cNome de usuario nao existe. Verifique.'
|
||||
password_error: '&fErro! Senha incorreta!'
|
||||
unvalid_session: '&fSessao invalida! Desconecte e reconecte-se novamente.'
|
||||
reg_only: '&fRegistro permitido somente para nomes na Whitelist!'
|
||||
logged_in: '&cJa esta logado!'
|
||||
logout: '&cSaida realizada com sucesso.'
|
||||
same_nick: '&fEste nick ja esta online...'
|
||||
registered: '&cRegistrado com sucesso!'
|
||||
pass_len: '&fSenha muito curta.'
|
||||
reload: '&fAuthMe Recarregado.'
|
||||
timeout: '&fDemorou....'
|
||||
name_len: '&cYour nickname is too Short or too long'
|
||||
regex: '&cYour nickname contains illegal characters. Allowed chars: REG_EX'
|
||||
add_email: '&cPlease add your email with : /email add yourEmail confirmEmail'
|
||||
bad_database_email: '[AuthMe] This /email command only available with MySQL and SQLite, contact an Admin'
|
||||
recovery_email: '&cForgot your password? Please use /email recovery <yourEmail>'
|
||||
usage_captcha: '&cUsage: /captcha <theCaptcha>'
|
||||
wrong_captcha: '&cWrong Captcha, please use : /captcha THE_CAPTCHA'
|
||||
valid_captcha: '&cYour captcha is valid !'
|
40
src/main/resources/messages_cz.yml
Normal file
40
src/main/resources/messages_cz.yml
Normal file
@ -0,0 +1,40 @@
|
||||
unknown_user: '&cHrac neni registrovan.'
|
||||
not_logged_in: '&cNeprihlasen!'
|
||||
reg_voluntarily: '&cRegistruj se prikazem "/register heslo heslo".'
|
||||
usage_log: '&cPouziti: "/login vaseheslo".'
|
||||
wrong_pwd: '&cSpatne heslo.'
|
||||
unregistered: '&cUspesna unregistrace!'
|
||||
reg_disabled: '&cRegistrace je zakazana!'
|
||||
valid_session: '&cAutomaticke znovuprihlaseni.'
|
||||
login: '&cUspesne prihlaseni!'
|
||||
user_regged: '&cUzivatelske jmeno je jiz registrovano.'
|
||||
usage_reg: '&cPouziti: "/register heslo heslo".'
|
||||
no_perm: '&cNemas opravneni.'
|
||||
error: '&cVyskytla se chyba kontaktujte admina ...'
|
||||
login_msg: '&cProsim prihlaste se "/login vaseheslo".'
|
||||
reg_msg: '&cProsim zaregistrujte se "/register heslo heslo".'
|
||||
usage_unreg: '&cPouziti: "/unregister vaseheslo".'
|
||||
pwd_changed: '&cHeslo zmeneno!'
|
||||
user_unknown: '&cUzivatelske jmeno neni registrovano.'
|
||||
reg_only: '&cServer je pouze pro registrovane! Navstivte http://bit.ly/zyEzzS.'
|
||||
logged_in: '&cJste jiz prihlasen!'
|
||||
logout: '&cOdhlaseni bylo uspesne.'
|
||||
same_nick: '&cNekdo jiz hraje se stejnym nickem.'
|
||||
registered: '&cRegistrace byla uspesna!'
|
||||
reload: '&cPrenacteni AuthMe probehlo uspesne.'
|
||||
timeout: '&cCas na prihlaseni vyprsel!'
|
||||
unsafe_spawn: '&cVase pozice pri odpojeni byla nebezpecna, teleportuji na spawn!'
|
||||
unvalid_session: '&cChybna data pri cteni pockejte do vyprseni.'
|
||||
max_reg: '&cJiz jste prekrocil(a) limit pro pocet uctu z vasi IP.'
|
||||
password_error: '&cHesla se neshoduji!'
|
||||
pass_len: '&cVase heslo nedosahuje minimalni delky (4).'
|
||||
vb_nonActiv: '&cVas ucet neni aktivaovany, zkontrolujte si vas E-mail.'
|
||||
usage_changepassword: '&cPouziti: "/changepassword stareHeslo noveHeslo".'
|
||||
name_len: '&cYour nickname is too Short or too long'
|
||||
regex: '&cYour nickname contains illegal characters. Allowed chars: REG_EX'
|
||||
add_email: '&cPlease add your email with : /email add yourEmail confirmEmail'
|
||||
bad_database_email: '[AuthMe] This /email command only available with MySQL and SQLite, contact an Admin'
|
||||
recovery_email: '&cForgot your password? Please use /email recovery <yourEmail>'
|
||||
usage_captcha: '&cUsage: /captcha <theCaptcha>'
|
||||
wrong_captcha: '&cWrong Captcha, please use : /captcha THE_CAPTCHA'
|
||||
valid_captcha: '&cYour captcha is valid !'
|
41
src/main/resources/messages_de.yml
Normal file
41
src/main/resources/messages_de.yml
Normal file
@ -0,0 +1,41 @@
|
||||
unknown_user: '&fBenutzer ist nicht in der Datenbank'
|
||||
unsafe_spawn: '&fDeine Logoutposition war unsicher, du wurdest zum Spawn teleportiert'
|
||||
not_logged_in: '&cNicht eingelogt!'
|
||||
reg_voluntarily: '&fDu kannst dich mit folgendem Befehl registrieren
|
||||
"/register passwort"'
|
||||
usage_log: '&cBenutze: /login passwort'
|
||||
wrong_pwd: '&cFalsches Passwort'
|
||||
unregistered: '&cErfolgreich unregistriert!'
|
||||
reg_disabled: '&cRegistrierungen sind deaktiviert'
|
||||
valid_session: '&cErfolgreich eingelogt'
|
||||
login: '&cErfolgreich eingelogt!'
|
||||
vb_nonActiv: '&fDein Account ist noch nicht aktiviert, bitte pruefe deine E-Mails!'
|
||||
user_regged: '&cBenutzername wurde schon registriert'
|
||||
usage_reg: '&cBenutze: /register passwort'
|
||||
max_reg: '&fDu hast die maximale Anzahl an Accounts erreicht'
|
||||
no_perm: '&cKeine Rechte'
|
||||
error: '&fEin Fehler ist unterlaufen, bitte kontaktiere einen Admin'
|
||||
login_msg: '&cBitte logge dich ein mit "/login passwort"'
|
||||
reg_msg: '&cBitte registriere dich mit "/register passwort"'
|
||||
usage_unreg: '&cBenutze: /unregister passwort'
|
||||
pwd_changed: '&cPasswort geaendert!'
|
||||
user_unknown: '&cBenutzername nicht registriert'
|
||||
password_error: '&fPasswort falsch'
|
||||
unvalid_session: '&fPerioden login Fehler, bitte warte...'
|
||||
reg_only: '&fNur registrierte Spieler! Bitte besuche http://example.com zum registrieren'
|
||||
logged_in: '&cSchon eingelogt!'
|
||||
logout: '&cErfolgreich ausgelogt'
|
||||
same_nick: '&fSelber Name spielt bereits'
|
||||
registered: '&cErfolgreich registriert!'
|
||||
pass_len: '&fIhr Passwort erreicht nicht die minimale Laenge oder überschreitet die maximale Laenge'
|
||||
reload: '&fKonfiguration und Datenbank neu geladen'
|
||||
timeout: '&fLogin dauerte zu lange'
|
||||
usage_changepassword: '&fBenutze: /changepassword altesPasswort neuesPasswort'
|
||||
name_len: '&cYour nickname is too Short or too long'
|
||||
regex: '&cYour nickname contains illegal characters. Allowed chars: REG_EX'
|
||||
add_email: '&cPlease add your email with : /email add yourEmail confirmEmail'
|
||||
bad_database_email: '[AuthMe] This /email command only available with MySQL and SQLite, contact an Admin'
|
||||
recovery_email: '&cForgot your password? Please use /email recovery <yourEmail>'
|
||||
usage_captcha: '&cUsage: /captcha <theCaptcha>'
|
||||
wrong_captcha: '&cWrong Captcha, please use : /captcha THE_CAPTCHA'
|
||||
valid_captcha: '&cYour captcha is valid !'
|
42
src/main/resources/messages_en.yml
Normal file
42
src/main/resources/messages_en.yml
Normal file
@ -0,0 +1,42 @@
|
||||
unknown_user: '&fUser is not in database'
|
||||
unsafe_spawn: '&fYour Quit location was unsafe, teleporting you to World Spawn'
|
||||
not_logged_in: '&cNot logged in!'
|
||||
reg_voluntarily: '&fYou can register your nickname with the server with the command "/register password ConfirmPassword"'
|
||||
usage_log: '&cUsage: /login password'
|
||||
wrong_pwd: '&cWrong password'
|
||||
unregistered: '&cSuccessfully unregistered!'
|
||||
reg_disabled: '&cRegistration is disabled'
|
||||
valid_session: '&cSession login'
|
||||
login: '&cSuccessful login!'
|
||||
vb_nonActiv: '&fYour Account isent Activated yet check your Emails!'
|
||||
user_regged: '&cUsername already registered'
|
||||
usage_reg: '&cUsage: /register password ConfirmPassword'
|
||||
max_reg: '&fYou have Exeded the max number of Registration for your Account'
|
||||
no_perm: '&cNo Permission'
|
||||
error: '&fAn error ocurred; Please contact the admin'
|
||||
login_msg: '&cPlease login with "/login password"'
|
||||
reg_msg: '&cPlease register with "/register password ConfirmPassword"'
|
||||
usage_unreg: '&cUsage: /unregister password'
|
||||
pwd_changed: '&cPassword changed!'
|
||||
user_unknown: '&cUsername not registered'
|
||||
password_error: '&fPassword doesnt match'
|
||||
unvalid_session: '&fSession Dataes doesnt corrispond Plaese wait the end of session'
|
||||
reg_only: '&fRegistered players only! Please visit http://example.com to register'
|
||||
logged_in: '&cAlready logged in!'
|
||||
logout: '&cSuccessful logout'
|
||||
same_nick: '&fSame nick is already playing'
|
||||
registered: '&cSuccessfully registered!'
|
||||
pass_len: '&fYour password dind''t reach the minimum length or exeded the max length'
|
||||
reload: '&fConfiguration and database has been reloaded'
|
||||
timeout: '&fLogin Timeout'
|
||||
usage_changepassword: '&fUsage: /changepassword oldPassword newPassword'
|
||||
name_len: '&cYour nickname is too Short or too long'
|
||||
regex: '&cYour nickname contains illegal characters. Allowed chars: REG_EX'
|
||||
add_email: '&cPlease add your email with : /email add yourEmail confirmEmail'
|
||||
bad_database_email: '[AuthMe] This /email command only available with MySQL and SQLite, contact an Admin'
|
||||
recovery_email: '&cForgot your password? Please use /email recovery <yourEmail>'
|
||||
usage_captcha: '&cUsage: /captcha <theCaptcha>'
|
||||
wrong_captcha: '&cWrong Captcha, please use : /captcha THE_CAPTCHA'
|
||||
valid_captcha: '&cYour captcha is valid !'
|
||||
|
||||
|
41
src/main/resources/messages_es.yml
Normal file
41
src/main/resources/messages_es.yml
Normal file
@ -0,0 +1,41 @@
|
||||
# This file must be in ANSI if win, or UTF-8 if linux.
|
||||
unknown_user: '&fEl usuario no está en la base de datos'
|
||||
unsafe_spawn: '&fTu lugar de desconexión es inseguro, teletransportándote al punto inicial del mundo'
|
||||
not_logged_in: '&c¡No has iniciado sesión!'
|
||||
reg_voluntarily: '&fRegístrate con: "/register Contraseña ConfirmarContraseña"'
|
||||
usage_log: '&cUso: /login contraseña'
|
||||
wrong_pwd: '&cContraseña incorrecta'
|
||||
unregistered: '&c¡Cuenta eliminada del registro!'
|
||||
reg_disabled: '&cEl registro está desactivado'
|
||||
valid_session: '&cInicio de sesión'
|
||||
login: '&c¡Sesión iniciada!'
|
||||
vb_nonActiv: '&fTu cuenta no está activada aún, ¡revisa tu correo!'
|
||||
user_regged: '&cUsuario ya registrado'
|
||||
usage_reg: '&cUso: /register Contraseña ConfirmarContraseña'
|
||||
max_reg: '&fHas excedido la cantidad máxima de registros para tu cuenta'
|
||||
no_perm: '&cNo tienes permiso'
|
||||
error: '&fHa ocurrido un error. Por favor contacta al administrador.'
|
||||
login_msg: '&cInicia sesión con "/login contraseña"'
|
||||
reg_msg: '&cPor favor, regístrate con "/register Contraseña ConfirmarContraseña"'
|
||||
usage_unreg: '&cUso: /unregister contraseña'
|
||||
pwd_changed: '&c¡Contraseña cambiada!'
|
||||
user_unknown: '&cUsuario no registrado'
|
||||
password_error: '&fLas contraseñas no son iguales'
|
||||
unvalid_session: '&fLos datos de sesión no corresponden. Por favor espera a terminar la sesión.'
|
||||
reg_only: '&f¡Sólo para jugadores registrados! Por favor visita http://www.example.com/ para registrarte'
|
||||
logged_in: '&c¡Ya has iniciado sesión!'
|
||||
logout: '&cDesconectado correctamente.'
|
||||
same_nick: '&fYa hay un usuario con ese nick conectado (posible error)'
|
||||
registered: '&c¡Registrado correctamente!'
|
||||
pass_len: '&fTu contraseña es muy larga o muy corta'
|
||||
reload: '&fLa configuración y la base de datos han sido recargados'
|
||||
timeout: '&fTiempo de espera para inicio de sesión excedido'
|
||||
usage_changepassword: '&fUso: /changepw contraseñaaActual contraseñaNueva'
|
||||
name_len: '&cTu nombre de usuario es muy largo o muy corto'
|
||||
regex: '&cTu usuario tiene carácteres no admitidos, los cuales son: REG_EX'
|
||||
add_email: '&cPor favor agrega tu e-mail con: /email add tuEmail confirmarEmail'
|
||||
bad_database_email: '[AuthMe] El comando /email sólo está disponible con MySQL y SQLite, contacta a un administrador'
|
||||
recovery_email: '&c¿Olvidaste tu contraseña? Por favor usa /email recovery <tuEmail>'
|
||||
usage_captcha: '&cUso: /captcha <elCaptcha>'
|
||||
wrong_captcha: '&cCaptcha incorrecto, please use : /captcha EL_CAPTCHA'
|
||||
valid_captcha: '&c¡ Captcha ingresado correctamente !'
|
40
src/main/resources/messages_fr.yml
Normal file
40
src/main/resources/messages_fr.yml
Normal file
@ -0,0 +1,40 @@
|
||||
unknown_user: '&fUtilisateur non enregistrer'
|
||||
unsafe_spawn: '&fTeleportation dans un endroit sur'
|
||||
not_logged_in: '&cNon connecter!'
|
||||
reg_voluntarily: '&fVous venez d arriver? faites un "/register motdepasse confirmermotdepasse"'
|
||||
usage_log: '&cUtilisez: /login motdepasse'
|
||||
wrong_pwd: '&cMauvais MotDePasse'
|
||||
unregistered: '&cVous avez ete desenregistrer!'
|
||||
reg_disabled: '&cL''enregistrement est desactiver'
|
||||
valid_session: '&cVous etes authentifier'
|
||||
login: '&cLogin effectuer!'
|
||||
vb_nonActiv: '&fCe compte n''est pas activer, consultez vos emails!'
|
||||
user_regged: '&cCe nom est deja utiliser'
|
||||
usage_reg: '&cUtilisez la commande /register motdepasse confirmermotdepasse'
|
||||
max_reg: '&fLimite d''enregistrement atteinte pour cet account'
|
||||
no_perm: '&cVous n''avez pas la permission'
|
||||
error: '&fUne erreur est apparue, veuillez contacter un administrateur'
|
||||
login_msg: '&cConnectez-vous via un /login motdepasse'
|
||||
reg_msg: '&cUtilisez /register motdepasse confirmermotdepasse'
|
||||
usage_unreg: '&cUtilisez: /unregister password'
|
||||
pwd_changed: '&cMotdePasse changer avec succes!'
|
||||
user_unknown: '&c Ce pseudo n est pas enregistrer'
|
||||
password_error: '&fCe mot de passe est incorrect'
|
||||
unvalid_session: '&fSession invalide, relancez le jeu ou attendez la fin de la session'
|
||||
reg_only: '&fSeul les joueurs enregistrer sont admis!'
|
||||
logged_in: '&cVous etes deja connecter!'
|
||||
logout: '&cVous avez ete deconnecter'
|
||||
same_nick: '&fUne personne ayant ce pseudo joue deja !'
|
||||
registered: '&cEnregistrement reussi!'
|
||||
pass_len: '&fVotre mot de passe ne respecte pas les normes de longueurs'
|
||||
reload: '&fConfig et BDD ont ete relancer'
|
||||
timeout: '&fVous avez ete expulser, trop lent pour vous enregistrer !'
|
||||
usage_changepassword: '&fCommande /changepassword ancienmdp nouveaumdp'
|
||||
name_len: '&cVotre pseudo est trop long ou trop court'
|
||||
regex: '&cVotre pseudo contient des caracteres interdits! Caracteres Autorises: REG_EX'
|
||||
add_email: '&cMerci d''ajouter votre email : /email add yourEmail confirmEmail'
|
||||
bad_database_email: '[AuthMe] La commande /email est disponible uniquement pour MySQL et SQLite, contactez un Admin'
|
||||
recovery_email: '&cOublie de MotDePasse? Utilisez /email recovery <yourEmail>'
|
||||
usage_captcha: '&cTrop de Mauvais MotDePasse, utilisez: /captcha <leCaptcha>'
|
||||
wrong_captcha: '&cCaptcha Incorrect, entrez de nouveau : /captcha THE_CAPTCHA'
|
||||
valid_captcha: '&cLe Captcha est valide, Merci!'
|
40
src/main/resources/messages_hu.yml
Normal file
40
src/main/resources/messages_hu.yml
Normal file
@ -0,0 +1,40 @@
|
||||
reg_only: Csak regisztrált játékosoknak! Jelentkezni a yndicraft@freemail.hu e-mail címen lehet
|
||||
usage_unreg: '&cHasználat: /unregister jelszó'
|
||||
registered: '&aSikeres regisztráció. Üdvözöllek!'
|
||||
user_regged: '&cJátékosnév már regisztrálva'
|
||||
login_msg: '&cKérlek jelentkezz be: "/login jelszó"'
|
||||
not_logged_in: '&cNem vagy bejelentkezve!'
|
||||
logout: '&cSikeresen kijelentkeztél'
|
||||
usage_log: '&cBejelentkezés: /login jelszó'
|
||||
unknown_user: User is not in database
|
||||
reg_voluntarily: Regisztrálhatod beceneved a szerveren a következö parancsal "/register jelszó jelszó"
|
||||
reg_disabled: '&cRegisztráció letiltva'
|
||||
no_perm: '&cNincs engedélyed'
|
||||
usage_reg: '&cHasználat: /register jelszó jelszóújra'
|
||||
unregistered: '&cRegisztráció sikeresen törölve!'
|
||||
same_nick: Ezen a játékosnéven már játszanak
|
||||
valid_session: '&cSession login'
|
||||
pwd_changed: '&cJelszó cserélve!'
|
||||
reload: Beálítások és adatbázis újratöltve!
|
||||
timeout: Bejelentkezési idötúllépés
|
||||
error: Hiba lépett fel; Lépj kapcsolatba a tulajjal'
|
||||
logged_in: '&cMár be vagy jelentkezve!'
|
||||
login: '&aSikeresen Beléptél! Üdvözöllek!!!'
|
||||
wrong_pwd: '&4Hibás jelszó'
|
||||
user_unknown: '&cJátékosnév nem regisztrált'
|
||||
reg_msg: '&cKérlek Regisztrálj: "/register jelszó jelszóújra"'
|
||||
unsafe_spawn: A kilépési helyzeted nem biztonságos, teleportálás a kezdö Spawnra.
|
||||
max_reg: Csak egy karakterrel Registrálhatsz!!!
|
||||
password_error: A jelszó nem illik össze
|
||||
unvalid_session: Session Dataes doesnt corrispond Plaese wait the end of session
|
||||
pass_len: A jelszavad nem éri el a minimális hosszat
|
||||
vb_nonActiv: Your Account isent Activated yet check your Emails!
|
||||
usage_changepassword: 'használat: /changepassword régiJelszó újJelszó'
|
||||
name_len: '&cYour nickname is too Short or too long'
|
||||
regex: '&cYour nickname contains illegal characters. Allowed chars: REG_EX'
|
||||
add_email: '&cPlease add your email with : /email add yourEmail confirmEmail'
|
||||
bad_database_email: '[AuthMe] This /email command only available with MySQL and SQLite, contact an Admin'
|
||||
recovery_email: '&cForgot your password? Please use /email recovery <yourEmail>'
|
||||
usage_captcha: '&cUsage: /captcha <theCaptcha>'
|
||||
wrong_captcha: '&cWrong Captcha, please use : /captcha THE_CAPTCHA'
|
||||
valid_captcha: '&cYour captcha is valid !'
|
40
src/main/resources/messages_pl.yml
Normal file
40
src/main/resources/messages_pl.yml
Normal file
@ -0,0 +1,40 @@
|
||||
logged_in: '&fJestes juz zalogowany!'
|
||||
not_logged_in: '&4Nie jestes zalogowany!'
|
||||
reg_disabled: '&4Rejestracja jest wylaczona'
|
||||
user_regged: '&4Gracz juz jest zarejestrowany'
|
||||
usage_reg: '&4Uzycie: /register haslo ponownie_haslo'
|
||||
usage_log: '&cUzycie: /login haslo'
|
||||
user_unknown: '&fGracz nie jest zarejestrowany'
|
||||
pwd_changed: '&fHaslo zostalo zmienione!'
|
||||
reg_only: '&fTylko zarejestrowani uzytkownicy maja do tego dostep!'
|
||||
valid_session: '&cSesja logowania'
|
||||
login_msg: '&2Prosze sie zalogowac przy uzyciu &6/login <haslo>'
|
||||
reg_msg: '&2Prosze sie zarejestrowac przy uzyciu &6/register <haslo> <ponownie_haslo>'
|
||||
timeout: '&fUplynal limit czasu zalogowania'
|
||||
wrong_pwd: '&cNiepoprawne haslo'
|
||||
logout: '&cPomyslnie wylogowany'
|
||||
usage_unreg: '&cUzycie: /unregister haslo'
|
||||
registered: '&aPomyslnie zarejestrowany!'
|
||||
unregistered: '&4Pomyslnie odrejestrowany!'
|
||||
login: '&aHaslo zaakceptowane!'
|
||||
no_perm: '&4Nie masz uprawnien'
|
||||
same_nick: '&fTen nick juz gra'
|
||||
reg_voluntarily: '&fMozesz zarejestrowac swoj nick na serwerze przy uzyciu "/register haslo ponownie_haslo"'
|
||||
reload: '&fKonfiguracja bazy danych zostala przeladowana'
|
||||
error: '&fBlad prosimy napisac do aministracji'
|
||||
unknown_user: '&fUzytkownika nie ma w bazie danych'
|
||||
unsafe_spawn: '&fTwoje pozycja jest niebezpieczna. Zostaniesz przeniesiony na bezpieczny spawn.'
|
||||
unvalid_session: '&fSesja zakonczona!'
|
||||
max_reg: '&fPrzekroczyles limit zarejestrowanych kont na serwerze.'
|
||||
password_error: '&fHaslo niepoprawne!'
|
||||
pass_len: '&fTwoje haslo jest za krotkie lub za dlugie! Sprobuj ponownie..'
|
||||
vb_nonActiv: '&fTwoje konto nie zostalo aktywowane! Sprawdz maila.'
|
||||
usage_changepassword: '&fUzycie: /changepassword starehaslo nowehaslo'
|
||||
name_len: '&cYour nickname is too Short or too long'
|
||||
regex: '&cYour nickname contains illegal characters. Allowed chars: REG_EX'
|
||||
add_email: '&cPlease add your email with : /email add yourEmail confirmEmail'
|
||||
bad_database_email: '[AuthMe] This /email command only available with MySQL and SQLite, contact an Admin'
|
||||
recovery_email: '&cForgot your password? Please use /email recovery <yourEmail>'
|
||||
usage_captcha: '&cUsage: /captcha <theCaptcha>'
|
||||
wrong_captcha: '&cWrong Captcha, please use : /captcha THE_CAPTCHA'
|
||||
valid_captcha: '&cYour captcha is valid !'
|
42
src/main/resources/messages_ru.yml
Normal file
42
src/main/resources/messages_ru.yml
Normal file
@ -0,0 +1,42 @@
|
||||
unknown_user: '&cЭтого игрока нет в базе'
|
||||
unsafe_spawn: '&6Твоё расположение перед выходом из игры было небезопасным - &aты
|
||||
перенесён на спавн'
|
||||
not_logged_in: '&cТы не в игре!'
|
||||
reg_voluntarily: '&eЗарегистрируйся - &d/reg ПАРОЛЬ ПОВТОР_ПАРОЛЯ &eили &d/register
|
||||
ПАРОЛЬ ПОВТОР_ПАРОЛЯ'
|
||||
usage_log: '&eСинтаксис: &d/l ПАРОЛЬ &eили &d/login ПАРОЛЬ'
|
||||
wrong_pwd: '&cНеправильный пароль'
|
||||
unregistered: '&aРегистрация снята'
|
||||
reg_disabled: '&6Регистрация отключена'
|
||||
valid_session: '&aСессия открыта'
|
||||
login: '&aТы в игре'
|
||||
vb_nonActiv: '&aТвой аккаунт активирован. &5Проверь свою электронную почту.'
|
||||
user_regged: '&cЭтот игрок уже зарегистрирован'
|
||||
usage_reg: '&eСинтаксис: &d/reg ПАРОЛЬ ПОВТОР_ПАРОЛЯ &eили &d/register ПАРОЛЬ ПОВТОР_ПАРОЛЯ'
|
||||
max_reg: '&cТы превысил максимальное число регистраций'
|
||||
no_perm: '&cНет разрешения'
|
||||
error: '&cЧто-то пошло не так... &5Свяжись с администратором.'
|
||||
login_msg: '&eВойди в игру - &d/l ПАРОЛЬ &eили &d/login ПАРОЛЬ'
|
||||
reg_msg: '&eЗарегистрируйся - &d/reg ПАРОЛЬ ПОВТОР_ПАРОЛЯ &eили &d/register ПАРОЛЬ
|
||||
ПОВТОР_ПАРОЛЯ'
|
||||
usage_unreg: '&eСинтаксис: &d/unregister ПАРОЛЬ'
|
||||
pwd_changed: '&aПароль изменён'
|
||||
user_unknown: '&cТакой игрок не зарегистрирован'
|
||||
password_error: '&cПароль не найден'
|
||||
unvalid_session: '&cДата сессии некорректна. &5Дождись конца сессии.'
|
||||
reg_only: '&cРегистрация только для игроков! &5Зайди на &dhttp://example.com &5для
|
||||
регистрации.'
|
||||
logged_in: '&cТы уже в матрице!'
|
||||
logout: '&aТы вышел с сервера'
|
||||
same_nick: '&cЭтот игрок уже играет'
|
||||
registered: '&aУспешная регистрация'
|
||||
pass_len: '&cТвой пароль либо слишком длинный, либо слишком короткий'
|
||||
reload: '&aКонфигурация и база данных перезагружена'
|
||||
timeout: '&cТы не успел войти в игру'
|
||||
usage_changepassword: '&eСинтаксис: &d/changepassword СТАРЫЙ_ПАРОЛЬ НОВЫЙ_ПАРОЛЬ'
|
||||
name_len: '&cТвой ник либо слишком длинный, либо слишком короткий'
|
||||
regex: '&cТвой ник содержит недопустимые символы. Разрешено использовать: REG_EX'
|
||||
add_email: '&eДобавь свой email: &d/email add АДРЕС_ПОЧТЫ ПОВТОР_АДРЕСА_ПОЧТЫ'
|
||||
bad_database_email: '&c[AuthMe] Команда &d/email&c доступна только при работе с MySQL
|
||||
или SQLite'
|
||||
recovery_email: '&cЗабыл пароль? Используй команду &d/email recovery <АДРЕС_ПОЧТЫ>'
|
44
src/main/resources/messages_sk.yml
Normal file
44
src/main/resources/messages_sk.yml
Normal file
@ -0,0 +1,44 @@
|
||||
# Slovak translate by Judzi #
|
||||
# www.judzi.eu | judzi@cs-gaming.eu #
|
||||
# 02.02.2013 - 4:35 AM - Thanks for use #
|
||||
|
||||
logged_in: '&cAktuálne si uz prihláseny!'
|
||||
not_logged_in: '&cNie si este prihláseny!'
|
||||
reg_disabled: '&cRegistrácia nie je povolená'
|
||||
user_regged: '&cZadané meno je uz zaregistrované'
|
||||
usage_reg: '&cPríkaz: /register heslo zopakujHeslo'
|
||||
usage_log: '&cPríkaz: /login heslo'
|
||||
user_unknown: '&cZadané meno nie je zaregistrované!'
|
||||
pwd_changed: '&cHeslo zmenené!'
|
||||
reg_only: '&fVstup iba pre registrovanych! Navstiv http://www.cs-gaming.eu pre registráciu'
|
||||
valid_session: '&cZapamätané prihlásenie'
|
||||
login_msg: '&cPrihlás sa príkazom "/login heslo"'
|
||||
reg_msg: '&cZaregistruj sa príkazom "/register heslo zopakujHeslo"'
|
||||
timeout: '&fVyprsal cas na prihlásenie'
|
||||
wrong_pwd: '&cZadal si zlé heslo'
|
||||
logout: '&cBol si úspesne odhláseny'
|
||||
usage_unreg: '&cPríkaz: /unregister heslo'
|
||||
registered: '&cBol si úspesne zaregistrovany'
|
||||
unregistered: '&cUcet bol vymazany!'
|
||||
login: '&cBol si úspesne prihláseny!'
|
||||
no_perm: '&cZiadne'
|
||||
same_nick: '&fHrác s tymto nickom uz hrá!'
|
||||
reg_voluntarily: '&fZaregistruj sa pomocou príkazu "/register heslo zopakujHeslo"'
|
||||
reload: '&fKonfigurácia a databáza bola obnovená'
|
||||
error: '&fNastala chyba; Kontaktujte administrátora'
|
||||
unknown_user: '&fHrac nie je v databázi'
|
||||
unsafe_spawn: '&fTvoj pozícia bol nebezpecná, teleportujem hraca na spawn'
|
||||
unvalid_session: '&fZapamätane casove data nie su doveryhodne. Cakaj na ukoncenie spojenia'
|
||||
max_reg: '&fDosiahol si maximum registrovanych uctov.'
|
||||
password_error: '&fHeslá sa nezhodujú'
|
||||
pass_len: '&fHeslo je velmi kratke alebo dlhe'
|
||||
vb_nonActiv: '&fUcet nie je aktivny. Prezri si svoj e-mail!'
|
||||
usage_changepassword: '&fPríkaz: /changepassword stareHeslo noveHeslo'
|
||||
name_len: '&cTvoje meno je velmi krátke alebo dlhé'
|
||||
regex: '&cTvoje meno obsahuje zakázané znaky. Povolené znaky: REG_EX'
|
||||
add_email: '&cPridaj svoj e-mail príkazom "/email add email zopakujEmail"'
|
||||
bad_database_email: '[AuthMe] Tento príkaz je dostupny iba pri MySQL SQLite'
|
||||
recovery_email: '&cZabudol si heslo? Pouzi príkaz /email recovery <tvojEmail>'
|
||||
usage_captcha: '&cUsage: /captcha <theCaptcha>'
|
||||
wrong_captcha: '&cWrong Captcha, please use : /captcha THE_CAPTCHA'
|
||||
valid_captcha: '&cYour captcha is valid !'
|
1
src/main/resources/players.yml
Normal file
1
src/main/resources/players.yml
Normal file
@ -0,0 +1 @@
|
||||
players: []
|
128
src/main/resources/plugin.yml
Normal file
128
src/main/resources/plugin.yml
Normal file
@ -0,0 +1,128 @@
|
||||
name: AuthMe
|
||||
author: darkwarriros,Xephi
|
||||
website: http://www.multiplayer-italia.com/
|
||||
description: AuthMe prevents people, which aren't logged in, from doing stuff like placing blocks, moving, typing commands or seeing the inventory of the current player.
|
||||
main: uk.org.whoami.authme.AuthMe
|
||||
version: 2.7.10b1
|
||||
softdepend: [Vault, ChestShop, Spout, Multiverse-Core, Notifications, Citizens, CombatTag]
|
||||
commands:
|
||||
register:
|
||||
description: Register an account
|
||||
usage: /register password confirmpassword
|
||||
aliases: reg
|
||||
login:
|
||||
description: Login into a account
|
||||
usage: /login password
|
||||
aliases: l
|
||||
changepassword:
|
||||
description: Change password of a account
|
||||
usage: /changepassword oldPassword newPassword
|
||||
logout:
|
||||
description: Logout
|
||||
usage: /logout
|
||||
unregister:
|
||||
description: unregister your account
|
||||
usage: /unregister password
|
||||
passpartu:
|
||||
description: compare passpartu token
|
||||
usage: /passpartu token
|
||||
authme:
|
||||
description: AuthMe op commands
|
||||
usage: '/authme reload|register playername password|changepassword playername password|unregister playername|version'
|
||||
email:
|
||||
description: Add Email or recover password
|
||||
usage: '/email add your@email.com your@email.com|change oldEmail newEmail|recovery your@email.com'
|
||||
captcha:
|
||||
description: Captcha
|
||||
usage: /captcha theCaptcha
|
||||
permissions:
|
||||
authme.player.*:
|
||||
description: Gives access to all authme player commands
|
||||
default: true
|
||||
children:
|
||||
authme.register: true
|
||||
authme.login: true
|
||||
authme.changepassword: true
|
||||
authme.logout: true
|
||||
authme.unregister: true
|
||||
authme.passpartu: true
|
||||
authme.l: true
|
||||
authme.reg: true
|
||||
authme.admin.*:
|
||||
description: Gives access to all authme admin commands
|
||||
children:
|
||||
authme.admin.reload: true
|
||||
authme.admin.register: true
|
||||
authme.admin.changepassword: true
|
||||
authme.admin.unregister: true
|
||||
authme.admin.purge: true
|
||||
authme.seeOtherAccounts: true
|
||||
authme.admin.lastlogin: true
|
||||
authme.admin.getemail: true
|
||||
authme.admin.chgemail: true
|
||||
authme.register:
|
||||
description: Register an account
|
||||
default: true
|
||||
authme.login:
|
||||
description: Login into a account
|
||||
default: true
|
||||
authme.changepassword:
|
||||
description: Change password of a account
|
||||
default: true
|
||||
authme.logout:
|
||||
description: Logout
|
||||
default: true
|
||||
authme.email:
|
||||
description: Email
|
||||
default: true
|
||||
authme.passpartu:
|
||||
description: passpartu
|
||||
default: true
|
||||
authme.allow2accounts:
|
||||
description: allow more accounts for same ip
|
||||
default: false
|
||||
authme.seeOtherAccounts:
|
||||
description: display other accounts about a player when he logs in
|
||||
default: false
|
||||
authme.unregister:
|
||||
description: unregister your account
|
||||
default: true
|
||||
authme.admin.reload:
|
||||
description: AuthMe reload commands
|
||||
default: op
|
||||
authme.admin.register:
|
||||
description: AuthMe register command
|
||||
default: op
|
||||
authme.admin.changepassword:
|
||||
description: AuthMe changepassword command
|
||||
default: op
|
||||
authme.admin.unregister:
|
||||
description: AuthMe unregister command
|
||||
default: op
|
||||
authme.admin.purge:
|
||||
description: AuthMe unregister command
|
||||
default: op
|
||||
authme.admin.convertflattosql:
|
||||
description: Convert File to Sql method
|
||||
default: op
|
||||
authme.admin.convertfromrakamak:
|
||||
description: Convert from Rakamak database to AuthMe
|
||||
default: op
|
||||
authme.admin.lastlogin:
|
||||
description: Get last login date about a player
|
||||
default: op
|
||||
authme.admin.getemail:
|
||||
description: Get last email about a player
|
||||
default: op
|
||||
authme.admin.chgemail:
|
||||
description: Change a player email
|
||||
default: op
|
||||
authme.admin.accounts:
|
||||
description: Display Players Accounts
|
||||
default: op
|
||||
authme.admin.xauthimport:
|
||||
description: Import xAuth Database to AuthMe Database
|
||||
default: op
|
||||
authme.captcha:
|
||||
description: Captcha
|
||||
default: true
|
97
src/plugin.yml
Normal file
97
src/plugin.yml
Normal file
@ -0,0 +1,97 @@
|
||||
name: AuthMe
|
||||
author: darkwarriros,Xephi
|
||||
website: http://www.multiplayer-italia.com/
|
||||
description: AuthMe prevents people, which aren't logged in, from doing stuff like placing blocks, moving, typing commands or seeing the inventory of the current player.
|
||||
main: uk.org.whoami.authme.AuthMe
|
||||
version: 2.7.2b3
|
||||
softdepend: [Vault]
|
||||
commands:
|
||||
register:
|
||||
description: Register an account
|
||||
usage: /register password confirmpassword
|
||||
aliases: reg
|
||||
login:
|
||||
description: Login into a account
|
||||
usage: /login password
|
||||
aliases: l
|
||||
changepassword:
|
||||
description: Change password of a account
|
||||
usage: /changepassword oldPassword newPassword
|
||||
logout:
|
||||
description: Logout
|
||||
usage: /logout
|
||||
unregister:
|
||||
description: unregister your account
|
||||
usage: /unregister password
|
||||
passpartu:
|
||||
description: compare passpartu token
|
||||
usage: /passpartu token
|
||||
authme:
|
||||
description: AuthMe op commands
|
||||
usage: '/authme reload|register playername password|changepassword playername password|unregister playername|version'
|
||||
permissions:
|
||||
authme.player.*:
|
||||
description: Gives access to all authme player commands
|
||||
default: true
|
||||
children:
|
||||
authme.register: true
|
||||
authme.login: true
|
||||
authme.changepassword: true
|
||||
authme.logout: true
|
||||
authme.unregister: true
|
||||
authme.passpartu: true
|
||||
authme.l: true
|
||||
authme.reg: true
|
||||
authme.admin.*:
|
||||
description: Gives access to all authme admin commands
|
||||
children:
|
||||
authme.admin.reload: true
|
||||
authme.admin.register: true
|
||||
authme.admin.changepassword: true
|
||||
authme.admin.unregister: true
|
||||
authme.admin.purge: true
|
||||
authme.register:
|
||||
description: Register an account
|
||||
default: true
|
||||
authme.login:
|
||||
description: Login into a account
|
||||
default: true
|
||||
authme.changepassword:
|
||||
description: Change password of a account
|
||||
default: true
|
||||
authme.logout:
|
||||
description: Logout
|
||||
default: true
|
||||
authme.passpartu:
|
||||
description: passpartu
|
||||
default: true
|
||||
authme.allow2accounts:
|
||||
description: allow more accounts for same ip
|
||||
default: false
|
||||
authme.unregister:
|
||||
description: unregister your account
|
||||
default: true
|
||||
authme.admin.reload:
|
||||
description: AuthMe reload commands
|
||||
default: op
|
||||
authme.admin.register:
|
||||
description: AuthMe register command
|
||||
default: op
|
||||
authme.admin.changepassword:
|
||||
description: AuthMe changepassword command
|
||||
default: op
|
||||
authme.admin.unregister:
|
||||
description: AuthMe unregister command
|
||||
default: op
|
||||
authme.admin.purge:
|
||||
description: AuthMe unregister command
|
||||
default: op
|
||||
authme.admin.convertflattosql:
|
||||
description: Convert File to Sql method
|
||||
default: op
|
||||
authme.admin.convertfromrakamak:
|
||||
description: Convert from Rakamak database to AuthMe
|
||||
default: op
|
||||
authme.admin.lastlogin:
|
||||
description: Get last login date about a player
|
||||
default: op
|
Loading…
Reference in New Issue
Block a user