Skip to content

Commit f2d85a5

Browse files
committed
nLogin integration
Closes #30
1 parent cca5cc3 commit f2d85a5

File tree

17 files changed

+204
-23
lines changed

17 files changed

+204
-23
lines changed

bukkit/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ repositories {
33
maven { url 'https://repo.papermc.io/repository/maven-public/' }
44
maven { url 'https://repo.codemc.io/repository/maven-public/' }
55
maven { url 'https://repo.extendedclip.com/content/repositories/placeholderapi/' }
6+
maven { url 'https://repo.nickuc.com/maven-releases/' }
67
}
78

89
dependencies {
910
implementation project(':azlink-common')
1011
compileOnly 'dev.folia:folia-api:1.19.4-R0.1-SNAPSHOT'
1112
compileOnly 'io.netty:netty-all:4.1.25.Final'
1213
compileOnly 'fr.xephi:authme:5.6.0-beta2'
14+
compileOnly 'com.nickuc.login:nlogin-api:10.2'
1315
compileOnly 'me.clip:placeholderapi:2.11.1'
1416
}
1517

bukkit/src/main/java/com/azuriom/azlink/bukkit/AzLinkBukkitPlugin.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.azuriom.azlink.bukkit.integrations.FoliaSchedulerAdapter;
99
import com.azuriom.azlink.bukkit.integrations.MoneyPlaceholderExpansion;
1010
import com.azuriom.azlink.bukkit.integrations.SkinsRestorerIntegration;
11+
import com.azuriom.azlink.bukkit.integrations.NLoginIntegration;
1112
import com.azuriom.azlink.common.AzLinkPlatform;
1213
import com.azuriom.azlink.common.AzLinkPlugin;
1314
import com.azuriom.azlink.common.command.CommandSender;
@@ -20,6 +21,7 @@
2021
import com.azuriom.azlink.common.scheduler.JavaSchedulerAdapter;
2122
import com.azuriom.azlink.common.scheduler.SchedulerAdapter;
2223
import com.azuriom.azlink.common.tasks.TpsTask;
24+
import com.nickuc.login.api.nLoginAPI;
2325
import org.bukkit.entity.Player;
2426
import org.bukkit.metadata.MetadataValue;
2527
import org.bukkit.plugin.java.JavaPlugin;
@@ -85,6 +87,15 @@ && getServer().getPluginManager().getPlugin("AuthMe") != null) {
8587
getServer().getPluginManager().registerEvents(new AuthMeIntegration(this), this);
8688
}
8789

90+
if (getConfig().getBoolean("nlogin-integration")
91+
&& getServer().getPluginManager().getPlugin("nLogin") != null) {
92+
if (nLoginAPI.getApi().getApiVersion() >= 5) {
93+
getServer().getPluginManager().registerEvents(new NLoginIntegration(this), this);
94+
} else {
95+
this.plugin.getLogger().warn("nLogin integration requires API version v5 or higher");
96+
}
97+
}
98+
8899
if (getConfig().getBoolean("skinrestorer-integration")
89100
&& getServer().getPluginManager().getPlugin("SkinsRestorer") != null) {
90101
try {

bukkit/src/main/java/com/azuriom/azlink/bukkit/injector/InjectedHttpServer.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,7 @@
22

33
import com.azuriom.azlink.bukkit.AzLinkBukkitPlugin;
44
import com.azuriom.azlink.common.http.server.HttpServer;
5-
import io.netty.channel.Channel;
6-
import io.netty.channel.ChannelFuture;
7-
import io.netty.channel.ChannelHandler;
8-
import io.netty.channel.ChannelHandlerContext;
9-
import io.netty.channel.ChannelInboundHandler;
10-
import io.netty.channel.ChannelInboundHandlerAdapter;
11-
import io.netty.channel.ChannelInitializer;
5+
import io.netty.channel.*;
126
import org.bukkit.Bukkit;
137

148
import java.lang.reflect.Field;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.azuriom.azlink.bukkit.integrations;
2+
3+
import com.azuriom.azlink.bukkit.AzLinkBukkitPlugin;
4+
import com.azuriom.azlink.common.integrations.BaseNLogin;
5+
import com.nickuc.login.api.enums.TwoFactorType;
6+
import com.nickuc.login.api.event.bukkit.auth.RegisterEvent;
7+
import com.nickuc.login.api.event.bungee.twofactor.TwoFactorAddEvent;
8+
import org.bukkit.entity.Player;
9+
import org.bukkit.event.EventHandler;
10+
import org.bukkit.event.Listener;
11+
12+
import java.net.InetSocketAddress;
13+
14+
public class NLoginIntegration
15+
extends BaseNLogin implements Listener {
16+
17+
public NLoginIntegration(AzLinkBukkitPlugin plugin) {
18+
super(plugin.getPlugin());
19+
}
20+
21+
@EventHandler
22+
public void onEmailAdded(TwoFactorAddEvent event) {
23+
if (event.getType() != TwoFactorType.EMAIL) {
24+
return;
25+
}
26+
27+
handleEmailUpdated(event.getPlayerId(), event.getPlayerName(), event.getAccount());
28+
}
29+
30+
@EventHandler
31+
public void onRegister(RegisterEvent event) {
32+
Player player = event.getPlayer();
33+
InetSocketAddress ip = player.getAddress();
34+
35+
handleRegister(player.getUniqueId(), player.getName(), event.getPassword(), ip != null ? ip.getAddress() : null);
36+
}
37+
}

bukkit/src/main/resources/config.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ ignore-vanished-players: false
1313
# from registering multiple times
1414
authme-integration: false
1515

16+
# When enabled, new users registered with the nLogin plugin will automatically be registered on the website
17+
# WARNING: You need nLogin version 10.2.43 or newer!
18+
# If you are using multiples serves, you should use the same database for nLogin to prevent users
19+
# from registering multiple times
20+
nlogin-integration: false
21+
1622
# When enabled, if SkinsRestorer is installed, and the SkinAPI plugin is present on the website,
1723
# the player's skin will be updated to the website's skin
1824
skinrestorer-integration: false

bungee/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
repositories {
22
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
3+
maven { url 'https://repo.nickuc.com/maven-releases/' }
34
}
45

56
dependencies {
67
implementation project(':azlink-common')
78
compileOnly 'net.md-5:bungeecord-api:1.16-R0.4'
9+
compileOnly 'com.nickuc.login:nlogin-api:10.2'
810
}
911

1012
processResources {

bungee/src/main/java/com/azuriom/azlink/bungee/AzLinkBungeePlugin.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.azuriom.azlink.bungee.command.BungeeCommandExecutor;
44
import com.azuriom.azlink.bungee.command.BungeeCommandSender;
5+
import com.azuriom.azlink.bungee.integrations.NLoginIntegration;
56
import com.azuriom.azlink.bungee.integrations.SkinsRestorerIntegration;
67
import com.azuriom.azlink.common.AzLinkPlatform;
78
import com.azuriom.azlink.common.AzLinkPlugin;
@@ -11,6 +12,7 @@
1112
import com.azuriom.azlink.common.platform.PlatformInfo;
1213
import com.azuriom.azlink.common.platform.PlatformType;
1314
import com.azuriom.azlink.common.scheduler.SchedulerAdapter;
15+
import com.nickuc.login.api.nLoginAPI;
1416
import net.md_5.bungee.api.plugin.Plugin;
1517
import net.md_5.bungee.config.Configuration;
1618
import net.md_5.bungee.config.ConfigurationProvider;
@@ -43,6 +45,15 @@ public void onEnable() {
4345

4446
loadConfig();
4547

48+
if (this.config.getBoolean("nlogin-integration")
49+
&& getProxy().getPluginManager().getPlugin("nLogin") != null) {
50+
if (nLoginAPI.getApi().getApiVersion() >= 5) {
51+
getProxy().getPluginManager().registerListener(this, new NLoginIntegration(this));
52+
} else {
53+
this.plugin.getLogger().warn("nLogin integration requires API version v5 or higher");
54+
}
55+
}
56+
4657
if (this.config.getBoolean("skinsrestorer-integration")
4758
&& getProxy().getPluginManager().getPlugin("SkinsRestorer") != null) {
4859
getProxy().getPluginManager().registerListener(this, new SkinsRestorerIntegration(this));
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.azuriom.azlink.bungee.integrations;
2+
3+
import com.azuriom.azlink.bungee.AzLinkBungeePlugin;
4+
import com.azuriom.azlink.common.integrations.BaseNLogin;
5+
import com.nickuc.login.api.enums.TwoFactorType;
6+
import com.nickuc.login.api.event.bungee.auth.RegisterEvent;
7+
import com.nickuc.login.api.event.bungee.twofactor.TwoFactorAddEvent;
8+
import net.md_5.bungee.api.connection.ProxiedPlayer;
9+
import net.md_5.bungee.api.plugin.Listener;
10+
import net.md_5.bungee.event.EventHandler;
11+
12+
import java.net.InetAddress;
13+
import java.net.InetSocketAddress;
14+
import java.net.SocketAddress;
15+
16+
public class NLoginIntegration
17+
extends BaseNLogin implements Listener {
18+
19+
public NLoginIntegration(AzLinkBungeePlugin plugin) {
20+
super(plugin.getPlugin());
21+
}
22+
23+
@EventHandler
24+
public void onEmailAdded(TwoFactorAddEvent event) {
25+
if (event.getType() != TwoFactorType.EMAIL) {
26+
return;
27+
}
28+
29+
handleEmailUpdated(event.getPlayerId(), event.getPlayerName(), event.getAccount());
30+
}
31+
32+
@EventHandler
33+
public void onRegister(RegisterEvent event) {
34+
ProxiedPlayer player = event.getPlayer();
35+
SocketAddress socketAddress = player.getSocketAddress();
36+
InetAddress ip = socketAddress instanceof InetSocketAddress ? ((InetSocketAddress) socketAddress).getAddress() : null;
37+
38+
handleRegister(player.getUniqueId(), player.getName(), event.getPassword(), ip);
39+
}
40+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
# When enabled, new users registered with the nLogin plugin will automatically be registered on the website
2+
# WARNING: You need nLogin version 10.2.43 or newer!
3+
# If you are using multiples serves, you should use the same database for nLogin to prevent users
4+
# from registering multiple times
5+
nlogin-integration: false
6+
17
# When enabled, if SkinsRestorer is installed, and the SkinAPI plugin is present on the website,
28
# the player's skin will be updated to the website's skin
39
skinsrestorer-integration: false

common/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
repositories {
22
maven { url 'https://repo.codemc.io/repository/maven-public/' }
3+
maven { url 'https://repo.nickuc.com/maven-releases/' }
34
}
45

56
dependencies {
67
compileOnly 'org.slf4j:slf4j-api:1.7.36'
78
compileOnly 'com.google.code.gson:gson:2.10.1'
89
compileOnly 'io.netty:netty-all:4.1.42.Final'
910
compileOnly 'net.skinsrestorer:skinsrestorer-api:15.0.2'
11+
compileOnly 'com.nickuc.login:nlogin-api:10.2'
1012

1113
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.1'
1214
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.10.1'

common/src/main/java/com/azuriom/azlink/common/AzLinkPlugin.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@
33
import com.azuriom.azlink.common.command.AzLinkCommand;
44
import com.azuriom.azlink.common.command.CommandSender;
55
import com.azuriom.azlink.common.config.PluginConfig;
6-
import com.azuriom.azlink.common.data.PlatformData;
7-
import com.azuriom.azlink.common.data.PlayerData;
8-
import com.azuriom.azlink.common.data.ServerData;
9-
import com.azuriom.azlink.common.data.SystemData;
10-
import com.azuriom.azlink.common.data.WorldData;
6+
import com.azuriom.azlink.common.data.*;
117
import com.azuriom.azlink.common.http.client.HttpClient;
128
import com.azuriom.azlink.common.http.server.HttpServer;
139
import com.azuriom.azlink.common.http.server.NettyHttpServer;

common/src/main/java/com/azuriom/azlink/common/http/server/HttpHandler.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,7 @@
55
import io.netty.channel.ChannelFutureListener;
66
import io.netty.channel.ChannelHandlerContext;
77
import io.netty.channel.SimpleChannelInboundHandler;
8-
import io.netty.handler.codec.http.DefaultFullHttpResponse;
9-
import io.netty.handler.codec.http.FullHttpRequest;
10-
import io.netty.handler.codec.http.FullHttpResponse;
11-
import io.netty.handler.codec.http.HttpMethod;
12-
import io.netty.handler.codec.http.HttpResponseStatus;
13-
import io.netty.handler.codec.http.HttpVersion;
8+
import io.netty.handler.codec.http.*;
149

1510
import java.nio.charset.StandardCharsets;
1611

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.azuriom.azlink.common.integrations;
2+
3+
import com.azuriom.azlink.common.AzLinkPlugin;
4+
5+
import java.net.InetAddress;
6+
import java.util.UUID;
7+
8+
public class BaseNLogin {
9+
10+
protected final AzLinkPlugin plugin;
11+
12+
public BaseNLogin(AzLinkPlugin plugin) {
13+
this.plugin = plugin;
14+
15+
this.plugin.getLogger().info("nLogin integration enabled.");
16+
}
17+
18+
protected void handleEmailUpdated(UUID playerId, String playerName, String newEmail) {
19+
this.plugin
20+
.getHttpClient()
21+
.updateEmail(playerId, newEmail)
22+
.exceptionally(ex -> {
23+
this.plugin.getLogger().error("Unable to update email for " + playerName, ex);
24+
25+
return null;
26+
});
27+
}
28+
29+
protected void handleRegister(UUID playerId, String playerName, String password, InetAddress ip) {
30+
this.plugin
31+
.getHttpClient()
32+
.registerUser(playerName, null, playerId, password, ip)
33+
.exceptionally(ex -> {
34+
this.plugin.getLogger().error("Unable to register " + playerName, ex);
35+
36+
return null;
37+
});
38+
}
39+
}

common/src/main/java/com/azuriom/azlink/common/scheduler/JavaSchedulerAdapter.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package com.azuriom.azlink.common.scheduler;
22

3-
import java.util.concurrent.Executor;
4-
import java.util.concurrent.Executors;
5-
import java.util.concurrent.Future;
6-
import java.util.concurrent.ScheduledExecutorService;
7-
import java.util.concurrent.TimeUnit;
3+
import java.util.concurrent.*;
84

95
public class JavaSchedulerAdapter implements SchedulerAdapter {
106

velocity/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@ plugins {
55
repositories {
66
maven { url 'https://nexus.velocitypowered.com/repository/maven-public/' }
77
maven { url 'https://maven.elytrium.net/repo/' }
8+
maven { url 'https://repo.nickuc.com/maven-releases/' }
89
}
910

1011
dependencies {
1112
implementation project(':azlink-common')
1213
compileOnly 'com.velocitypowered:velocity-api:3.1.1'
1314
compileOnly 'net.elytrium.limboapi:api:1.1.13'
1415
compileOnly 'net.elytrium:limboauth:1.1.1'
16+
compileOnly 'com.nickuc.login:nlogin-api:10.2'
1517
annotationProcessor 'com.velocitypowered:velocity-api:3.1.1'
1618
}
1719

velocity/src/main/java/com/azuriom/azlink/velocity/AzLinkVelocityPlugin.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
import com.azuriom.azlink.velocity.command.VelocityCommandExecutor;
1212
import com.azuriom.azlink.velocity.command.VelocityCommandSender;
1313
import com.azuriom.azlink.velocity.integrations.LimboAuthIntegration;
14+
import com.azuriom.azlink.velocity.integrations.NLoginIntegration;
1415
import com.azuriom.azlink.velocity.integrations.SkinsRestorerIntegration;
1516
import com.google.inject.Inject;
17+
import com.nickuc.login.api.nLoginAPI;
1618
import com.velocitypowered.api.event.Subscribe;
1719
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
1820
import com.velocitypowered.api.event.proxy.ProxyShutdownEvent;
@@ -81,6 +83,14 @@ public void onProxyInitialization(ProxyInitializeEvent event) {
8183
this.proxy.getEventManager().register(this, new LimboAuthIntegration(this));
8284
}
8385

86+
if (this.proxy.getPluginManager().getPlugin("nlogin").isPresent()) {
87+
if (nLoginAPI.getApi().getApiVersion() >= 5) {
88+
this.proxy.getEventManager().register(this, new NLoginIntegration(this));
89+
} else {
90+
this.plugin.getLogger().warn("nLogin integration requires API version v5 or higher");
91+
}
92+
}
93+
8494
if (this.proxy.getPluginManager().getPlugin("skinsrestorer").isPresent()
8595
&& this.config.getNode("skinsrestorer-integration").getBoolean()) {
8696
this.proxy.getEventManager().register(this, new SkinsRestorerIntegration(this));
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.azuriom.azlink.velocity.integrations;
2+
3+
import com.azuriom.azlink.common.integrations.BaseNLogin;
4+
import com.azuriom.azlink.velocity.AzLinkVelocityPlugin;
5+
import com.nickuc.login.api.enums.TwoFactorType;
6+
import com.nickuc.login.api.event.bungee.twofactor.TwoFactorAddEvent;
7+
import com.nickuc.login.api.event.velocity.auth.RegisterEvent;
8+
import com.velocitypowered.api.event.Subscribe;
9+
import com.velocitypowered.api.proxy.Player;
10+
11+
public class NLoginIntegration extends BaseNLogin {
12+
13+
public NLoginIntegration(AzLinkVelocityPlugin plugin) {
14+
super(plugin.getPlugin());
15+
}
16+
17+
@Subscribe
18+
public void onEmailAdded(TwoFactorAddEvent event) {
19+
if (event.getType() != TwoFactorType.EMAIL) {
20+
return;
21+
}
22+
23+
handleEmailUpdated(event.getPlayerId(), event.getPlayerName(), event.getAccount());
24+
}
25+
26+
@Subscribe
27+
public void onRegister(RegisterEvent event) {
28+
Player player = event.getPlayer();
29+
30+
handleRegister(player.getUniqueId(), player.getUsername(), event.getPassword(), player.getRemoteAddress().getAddress());
31+
}
32+
}

0 commit comments

Comments
 (0)