Move admin IP addresses to config file.
This commit is contained in:
parent
ac48ea044c
commit
4e2b5e480b
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<%--
|
<%--
|
||||||
Copyright (c) 2012, Andy Janata
|
Copyright (c) 2012-2018, Andy Janata
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification, are permitted
|
Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
@ -27,16 +27,24 @@ Administration tools.
|
||||||
@author Andy Janata (ajanata@socialgamer.net)
|
@author Andy Janata (ajanata@socialgamer.net)
|
||||||
--%>
|
--%>
|
||||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||||
|
<%@ page import="com.google.inject.Injector" %>
|
||||||
|
<%@ page import="com.google.inject.Key" %>
|
||||||
|
<%@ page import="com.google.inject.TypeLiteral" %>
|
||||||
|
<%@ page import="net.socialgamer.cah.CahModule.Admins" %>
|
||||||
<%@ page import="net.socialgamer.cah.HibernateUtil" %>
|
<%@ page import="net.socialgamer.cah.HibernateUtil" %>
|
||||||
|
<%@ page import="net.socialgamer.cah.StartupUtils" %>
|
||||||
<%@ page import="net.socialgamer.cah.db.PyxBlackCard" %>
|
<%@ page import="net.socialgamer.cah.db.PyxBlackCard" %>
|
||||||
<%@ page import="net.socialgamer.cah.db.PyxWhiteCard" %>
|
<%@ page import="net.socialgamer.cah.db.PyxWhiteCard" %>
|
||||||
<%@ page import="net.socialgamer.cah.Constants" %>
|
|
||||||
<%@ page import="net.socialgamer.cah.RequestWrapper" %>
|
<%@ page import="net.socialgamer.cah.RequestWrapper" %>
|
||||||
<%@ page import="org.hibernate.Session" %>
|
<%@ page import="org.hibernate.Session" %>
|
||||||
<%@ page import="org.hibernate.Transaction" %>
|
<%@ page import="org.hibernate.Transaction" %>
|
||||||
|
<%@ page import="java.util.Set" %>
|
||||||
<%
|
<%
|
||||||
RequestWrapper wrapper = new RequestWrapper(request);
|
RequestWrapper wrapper = new RequestWrapper(request);
|
||||||
if (!Constants.ADMIN_IP_ADDRESSES.contains(wrapper.getRemoteAddr())) {
|
ServletContext servletContext = pageContext.getServletContext();
|
||||||
|
Injector injector = (Injector) servletContext.getAttribute(StartupUtils.INJECTOR);
|
||||||
|
Set<String> admins = injector.getInstance(Key.get(new TypeLiteral<Set<String>>(){}, Admins.class));
|
||||||
|
if (!admins.contains(wrapper.getRemoteAddr())) {
|
||||||
response.sendError(403, "Access is restricted to known hosts");
|
response.sendError(403, "Access is restricted to known hosts");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<%--
|
<%--
|
||||||
Copyright (c) 2012-2017, Andy Janata
|
Copyright (c) 2012-2018, Andy Janata
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification, are permitted
|
Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
@ -32,8 +32,8 @@ Administration tools.
|
||||||
<%@ page import="com.google.inject.TypeLiteral" %>
|
<%@ page import="com.google.inject.TypeLiteral" %>
|
||||||
<%@ page import="net.socialgamer.cah.RequestWrapper" %>
|
<%@ page import="net.socialgamer.cah.RequestWrapper" %>
|
||||||
<%@ page import="net.socialgamer.cah.StartupUtils" %>
|
<%@ page import="net.socialgamer.cah.StartupUtils" %>
|
||||||
|
<%@ page import="net.socialgamer.cah.CahModule.Admins" %>
|
||||||
<%@ page import="net.socialgamer.cah.CahModule.BanList" %>
|
<%@ page import="net.socialgamer.cah.CahModule.BanList" %>
|
||||||
<%@ page import="net.socialgamer.cah.Constants" %>
|
|
||||||
<%@ page import="net.socialgamer.cah.Constants.DisconnectReason" %>
|
<%@ page import="net.socialgamer.cah.Constants.DisconnectReason" %>
|
||||||
<%@ page import="net.socialgamer.cah.Constants.LongPollEvent" %>
|
<%@ page import="net.socialgamer.cah.Constants.LongPollEvent" %>
|
||||||
<%@ page import="net.socialgamer.cah.Constants.LongPollResponse" %>
|
<%@ page import="net.socialgamer.cah.Constants.LongPollResponse" %>
|
||||||
|
@ -50,14 +50,14 @@ Administration tools.
|
||||||
|
|
||||||
<%
|
<%
|
||||||
RequestWrapper wrapper = new RequestWrapper(request);
|
RequestWrapper wrapper = new RequestWrapper(request);
|
||||||
if (!Constants.ADMIN_IP_ADDRESSES.contains(wrapper.getRemoteAddr())) {
|
ServletContext servletContext = pageContext.getServletContext();
|
||||||
|
Injector injector = (Injector) servletContext.getAttribute(StartupUtils.INJECTOR);
|
||||||
|
Set<String> admins = injector.getInstance(Key.get(new TypeLiteral<Set<String>>(){}, Admins.class));
|
||||||
|
if (!admins.contains(wrapper.getRemoteAddr())) {
|
||||||
response.sendError(403, "Access is restricted to known hosts");
|
response.sendError(403, "Access is restricted to known hosts");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ServletContext servletContext = pageContext.getServletContext();
|
|
||||||
Injector injector = (Injector) servletContext.getAttribute(StartupUtils.INJECTOR);
|
|
||||||
|
|
||||||
ConnectedUsers connectedUsers = injector.getInstance(ConnectedUsers.class);
|
ConnectedUsers connectedUsers = injector.getInstance(ConnectedUsers.class);
|
||||||
Set<String> banList = injector.getInstance(Key.get(new TypeLiteral<Set<String>>(){}, BanList.class));
|
Set<String> banList = injector.getInstance(Key.get(new TypeLiteral<Set<String>>(){}, BanList.class));
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<%--
|
<%--
|
||||||
Copyright (c) 2012, Andy Janata
|
Copyright (c) 2012-2018, Andy Janata
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification, are permitted
|
Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
@ -27,20 +27,28 @@ Administration tools.
|
||||||
@author Andy Janata (ajanata@socialgamer.net)
|
@author Andy Janata (ajanata@socialgamer.net)
|
||||||
--%>
|
--%>
|
||||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||||
|
<%@ page import="com.google.inject.Injector" %>
|
||||||
|
<%@ page import="com.google.inject.Key" %>
|
||||||
|
<%@ page import="com.google.inject.TypeLiteral" %>
|
||||||
<%@ page import="java.util.ArrayList" %>
|
<%@ page import="java.util.ArrayList" %>
|
||||||
<%@ page import="java.util.List" %>
|
<%@ page import="java.util.List" %>
|
||||||
|
<%@ page import="java.util.Set" %>
|
||||||
|
<%@ page import="net.socialgamer.cah.CahModule.Admins" %>
|
||||||
<%@ page import="net.socialgamer.cah.HibernateUtil" %>
|
<%@ page import="net.socialgamer.cah.HibernateUtil" %>
|
||||||
|
<%@ page import="net.socialgamer.cah.StartupUtils" %>
|
||||||
<%@ page import="net.socialgamer.cah.db.PyxBlackCard" %>
|
<%@ page import="net.socialgamer.cah.db.PyxBlackCard" %>
|
||||||
<%@ page import="net.socialgamer.cah.db.PyxCardSet" %>
|
<%@ page import="net.socialgamer.cah.db.PyxCardSet" %>
|
||||||
<%@ page import="net.socialgamer.cah.db.PyxWhiteCard" %>
|
<%@ page import="net.socialgamer.cah.db.PyxWhiteCard" %>
|
||||||
<%@ page import="net.socialgamer.cah.Constants" %>
|
|
||||||
<%@ page import="net.socialgamer.cah.RequestWrapper" %>
|
<%@ page import="net.socialgamer.cah.RequestWrapper" %>
|
||||||
<%@ page import="org.apache.commons.lang3.StringEscapeUtils" %>
|
<%@ page import="org.apache.commons.lang3.StringEscapeUtils" %>
|
||||||
<%@ page import="org.hibernate.Session" %>
|
<%@ page import="org.hibernate.Session" %>
|
||||||
<%@ page import="org.hibernate.Transaction" %>
|
<%@ page import="org.hibernate.Transaction" %>
|
||||||
<%
|
<%
|
||||||
RequestWrapper wrapper = new RequestWrapper(request);
|
RequestWrapper wrapper = new RequestWrapper(request);
|
||||||
if (!Constants.ADMIN_IP_ADDRESSES.contains(wrapper.getRemoteAddr())) {
|
ServletContext servletContext = pageContext.getServletContext();
|
||||||
|
Injector injector = (Injector) servletContext.getAttribute(StartupUtils.INJECTOR);
|
||||||
|
Set<String> admins = injector.getInstance(Key.get(new TypeLiteral<Set<String>>(){}, Admins.class));
|
||||||
|
if (!admins.contains(wrapper.getRemoteAddr())) {
|
||||||
response.sendError(403, "Access is restricted to known hosts");
|
response.sendError(403, "Access is restricted to known hosts");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,8 @@ pyx.global_chat_enabled=true
|
||||||
pyx.insecure_id_allowed=true
|
pyx.insecure_id_allowed=true
|
||||||
# set this to some secure random value, and never change it, unless you want to break all codes
|
# set this to some secure random value, and never change it, unless you want to break all codes
|
||||||
pyx.id_code_salt=
|
pyx.id_code_salt=
|
||||||
|
# comma-separated listed of IP addresses (v4 or v6) from which users are considered admins.
|
||||||
|
pyx.admin_addrs=127.0.0.1,::1
|
||||||
|
|
||||||
# for production use, use postgres
|
# for production use, use postgres
|
||||||
#hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
|
#hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
|
||||||
|
|
|
@ -5,6 +5,7 @@ pyx.server.max_games=${pyx.max_games}
|
||||||
pyx.server.broadcast_connects_and_disconnects=${pyx.broadcast_connects_and_disconnects}
|
pyx.server.broadcast_connects_and_disconnects=${pyx.broadcast_connects_and_disconnects}
|
||||||
pyx.server.global_chat_enabled=${pyx.global_chat_enabled}
|
pyx.server.global_chat_enabled=${pyx.global_chat_enabled}
|
||||||
pyx.server.id_code_salt=${pyx.id_code_salt}
|
pyx.server.id_code_salt=${pyx.id_code_salt}
|
||||||
|
pyx.server.admin_addrs=${pyx.admin_addrs}
|
||||||
pyx.build=${buildNumber}
|
pyx.build=${buildNumber}
|
||||||
|
|
||||||
# this is NOT allowed to be changed during a reload, as metrics depend on previous events
|
# this is NOT allowed to be changed during a reload, as metrics depend on previous events
|
||||||
|
|
|
@ -40,6 +40,7 @@ import javax.servlet.ServletContext;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.inject.AbstractModule;
|
import com.google.inject.AbstractModule;
|
||||||
import com.google.inject.BindingAnnotation;
|
import com.google.inject.BindingAnnotation;
|
||||||
import com.google.inject.Provides;
|
import com.google.inject.Provides;
|
||||||
|
@ -215,6 +216,15 @@ public class CahModule extends AbstractModule {
|
||||||
return session;
|
return session;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Admins
|
||||||
|
Set<String> provideAdmins() {
|
||||||
|
synchronized (properties) {
|
||||||
|
return ImmutableSet
|
||||||
|
.copyOf(properties.getProperty("pyx.server.admin_addrs", "127.0.0.1,::1").split(","));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@BindingAnnotation
|
@BindingAnnotation
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
public @interface BanList {
|
public @interface BanList {
|
||||||
|
@ -269,4 +279,9 @@ public class CahModule extends AbstractModule {
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
public @interface UserPersistentId {
|
public @interface UserPersistentId {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@BindingAnnotation
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface Admins {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,6 @@ package net.socialgamer.cah;
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import net.socialgamer.cah.data.Game;
|
import net.socialgamer.cah.data.Game;
|
||||||
|
|
||||||
|
@ -48,16 +46,6 @@ public class Constants {
|
||||||
public static final int CHAT_FLOOD_TIME = 30 * 1000;
|
public static final int CHAT_FLOOD_TIME = 30 * 1000;
|
||||||
public static final int CHAT_MAX_LENGTH = 200;
|
public static final int CHAT_MAX_LENGTH = 200;
|
||||||
|
|
||||||
@SuppressWarnings("serial")
|
|
||||||
public static final Set<String> ADMIN_IP_ADDRESSES = new HashSet<String>() {
|
|
||||||
{
|
|
||||||
add("0:0:0:0:0:0:0:1");
|
|
||||||
add("127.0.0.1");
|
|
||||||
// ajanata
|
|
||||||
add("107.218.154.202");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enums that implement this interface are valid keys for data returned to clients.
|
* Enums that implement this interface are valid keys for data returned to clients.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -36,9 +36,9 @@ import org.apache.http.HttpHeaders;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Provider;
|
import com.google.inject.Provider;
|
||||||
|
|
||||||
|
import net.socialgamer.cah.CahModule.Admins;
|
||||||
import net.socialgamer.cah.CahModule.BanList;
|
import net.socialgamer.cah.CahModule.BanList;
|
||||||
import net.socialgamer.cah.CahModule.UserPersistentId;
|
import net.socialgamer.cah.CahModule.UserPersistentId;
|
||||||
import net.socialgamer.cah.Constants;
|
|
||||||
import net.socialgamer.cah.Constants.AjaxOperation;
|
import net.socialgamer.cah.Constants.AjaxOperation;
|
||||||
import net.socialgamer.cah.Constants.AjaxRequest;
|
import net.socialgamer.cah.Constants.AjaxRequest;
|
||||||
import net.socialgamer.cah.Constants.AjaxResponse;
|
import net.socialgamer.cah.Constants.AjaxResponse;
|
||||||
|
@ -65,6 +65,7 @@ public class RegisterHandler extends Handler {
|
||||||
private static final int ID_CODE_MAX_LENGTH = 100;
|
private static final int ID_CODE_MAX_LENGTH = 100;
|
||||||
|
|
||||||
private final ConnectedUsers users;
|
private final ConnectedUsers users;
|
||||||
|
private final Set<String> adminList;
|
||||||
private final Set<String> banList;
|
private final Set<String> banList;
|
||||||
private final User.Factory userFactory;
|
private final User.Factory userFactory;
|
||||||
private final Provider<String> persistentIdProvider;
|
private final Provider<String> persistentIdProvider;
|
||||||
|
@ -73,12 +74,14 @@ public class RegisterHandler extends Handler {
|
||||||
@Inject
|
@Inject
|
||||||
public RegisterHandler(final ConnectedUsers users, @BanList final Set<String> banList,
|
public RegisterHandler(final ConnectedUsers users, @BanList final Set<String> banList,
|
||||||
final User.Factory userFactory, final IdCodeMangler idCodeMangler,
|
final User.Factory userFactory, final IdCodeMangler idCodeMangler,
|
||||||
@UserPersistentId final Provider<String> persistentIdProvider) {
|
@UserPersistentId final Provider<String> persistentIdProvider,
|
||||||
|
@Admins final Set<String> adminList) {
|
||||||
this.users = users;
|
this.users = users;
|
||||||
this.banList = banList;
|
this.banList = banList;
|
||||||
this.userFactory = userFactory;
|
this.userFactory = userFactory;
|
||||||
this.persistentIdProvider = persistentIdProvider;
|
this.persistentIdProvider = persistentIdProvider;
|
||||||
this.idCodeManger = idCodeMangler;
|
this.idCodeManger = idCodeMangler;
|
||||||
|
this.adminList = adminList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -112,7 +115,7 @@ public class RegisterHandler extends Handler {
|
||||||
request.getParameter(AjaxRequest.ID_CODE));
|
request.getParameter(AjaxRequest.ID_CODE));
|
||||||
|
|
||||||
final User user = userFactory.create(nick, mangledIdCode, request.getRemoteAddr(),
|
final User user = userFactory.create(nick, mangledIdCode, request.getRemoteAddr(),
|
||||||
Constants.ADMIN_IP_ADDRESSES.contains(request.getRemoteAddr()), persistentId,
|
adminList.contains(request.getRemoteAddr()), persistentId,
|
||||||
request.getHeader(HttpHeaders.ACCEPT_LANGUAGE),
|
request.getHeader(HttpHeaders.ACCEPT_LANGUAGE),
|
||||||
request.getHeader(HttpHeaders.USER_AGENT));
|
request.getHeader(HttpHeaders.USER_AGENT));
|
||||||
final ErrorCode errorCode = users.checkAndAdd(user);
|
final ErrorCode errorCode = users.checkAndAdd(user);
|
||||||
|
|
Loading…
Reference in New Issue