added IP ban facility - IP addresses can now be blocked from logging into
Venice, either individually or in blocks
This commit is contained in:
parent
55db78c0e9
commit
609d216148
|
@ -10,9 +10,9 @@
|
|||
|
||||
The Original Code is the Venice Web Communities System.
|
||||
|
||||
The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
-->
|
||||
|
@ -367,7 +367,7 @@ or create an account, using one of the links above.
|
|||
<footer-text><![CDATA[
|
||||
All trademarks and copyrights on this page are owned by their respective companies.<BR>
|
||||
All messages posted by users on this page are owned by those users.<BR>
|
||||
The rest: Copyright © 2001 <A HREF="http://www.silverwrist.com">Silverwrist Design Studios</A>,
|
||||
The rest: Copyright © 2001-2004 <A HREF="http://www.silverwrist.com">Silverwrist Design Studios</A>,
|
||||
All Rights Reserved.<BR>
|
||||
See our <A HREF="/TODO">Policy Page</A> for our copyright and privacy policies.
|
||||
]]></footer-text>
|
||||
|
@ -416,6 +416,7 @@ Text of this agreement is TBD.
|
|||
<menudef id="system.admin">
|
||||
<title>System Administration</title>
|
||||
<link href="sysadmin/global.js.vs" type="servlet">Edit Global Properties</link>
|
||||
<link href="sysadmin/ip_bans.js.vs" type="servlet">View/Edit IP Address Bans</link>
|
||||
<link href="TODO" disabled="true" type="servlet">View/Edit Banned Users</link>
|
||||
<link href="sysadmin/find_user.js.vs" type="servlet">User Account Management</link>
|
||||
<link href="sysadmin/audit.js.vs" type="servlet">System Audit Logs</link>
|
||||
|
@ -754,6 +755,24 @@ the community's host, or via an invitation e-mail message. Please enter it in th
|
|||
<imagebutton id="cancel"/>
|
||||
</dialog>
|
||||
|
||||
<dialog name="ipban.add" formname="ipbanform" menusel="nochange">
|
||||
<title>Add IP Address Ban</title>
|
||||
<action>sysadmin/ip_ban_add.js.vs</action>
|
||||
<ip-address name="address" capt="IP address" required="true"/>
|
||||
<ip-address name="mask" capt="IP address mask" required="true"/>
|
||||
<checkbox name="echeck" capt="IP address ban expires"/>
|
||||
<int name="etime" capt="Expires in" required="true" min="1" max="100000"/>
|
||||
<list name="eunit" capt="Expires in" capt2="(units)" required="true">
|
||||
<choice id="D">days</choice>
|
||||
<choice id="W">weeks</choice>
|
||||
<choice id="M">months</choice>
|
||||
<choice id="Y">years</choice>
|
||||
</list>
|
||||
<text name="msg" capt="Message to display" size="64" maxlength="255"/>
|
||||
<imagebutton id="add"/>
|
||||
<imagebutton id="cancel"/>
|
||||
</dialog>
|
||||
|
||||
</dialog-definitions>
|
||||
|
||||
</ui-config>
|
||||
|
|
|
@ -8,9 +8,9 @@
|
|||
//
|
||||
// The Original Code is the Venice Web Communities System.
|
||||
//
|
||||
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
// for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
// Copyright (C) 2002 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
// Copyright (C) 2002-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
|
||||
|
@ -55,7 +55,15 @@ if ("login"==call_name)
|
|||
if (rinput.user.isLoggedIn())
|
||||
vlib.output(new XmlRpcFault(XmlRpcFault.DEFAULT_ERROR,"user already logged in"));
|
||||
else
|
||||
{ // make sure IP address is not banned yet
|
||||
banmsg = rinput.engine.testIPBan(rinput.sourceAddress);
|
||||
if (banmsg==null)
|
||||
rinput.user.authenticate(username,password);
|
||||
else
|
||||
vlib.output(new XmlRpcFault(XmlRpcFault.DEFAULT_ERROR,"IP address banned: " + banmsg);
|
||||
|
||||
} // end else
|
||||
|
||||
vlib.output(vlib.booleanObject(true));
|
||||
|
||||
} // end else
|
||||
|
|
|
@ -8,9 +8,9 @@
|
|||
//
|
||||
// The Original Code is the Venice Web Communities System.
|
||||
//
|
||||
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
// for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
// Copyright (C) 2001-2002 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
// Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
|
||||
|
@ -35,6 +35,15 @@ if (user.isLoggedIn())
|
|||
|
||||
} // end if
|
||||
|
||||
// Test to see if the IP address has been banned.
|
||||
banmsg = rinput.engine.testIPBan(rinput.sourceAddress);
|
||||
if (banmsg!=null)
|
||||
{ // this IP address has been banned - you are Not Allowed
|
||||
vlib.output(new ErrorBox("This IP address has been banned",banmsg,target));
|
||||
vlib.done();
|
||||
|
||||
} // end if
|
||||
|
||||
dlg = rinput.getDialog("login");
|
||||
|
||||
if ("GET"==rinput.verb)
|
||||
|
|
|
@ -8,9 +8,9 @@
|
|||
//
|
||||
// The Original Code is the Venice Web Communities System.
|
||||
//
|
||||
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
// for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
// Copyright (C) 2001-04 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
// Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
|
||||
|
@ -35,6 +35,15 @@ if (user.isLoggedIn())
|
|||
|
||||
} // end if
|
||||
|
||||
// Test to see if the IP address has been banned.
|
||||
banmsg = rinput.engine.testIPBan(rinput.sourceAddress);
|
||||
if (banmsg!=null)
|
||||
{ // this IP address has been banned - you are Not Allowed
|
||||
vlib.output(new ErrorBox("This IP address has been banned",banmsg,target));
|
||||
vlib.done();
|
||||
|
||||
} // end if
|
||||
|
||||
// Return the text of the User Agreement.
|
||||
rinput.displayLogin = false;
|
||||
html = vlib.queryHTMLRendering(rinput);
|
||||
|
|
|
@ -8,9 +8,9 @@
|
|||
//
|
||||
// The Original Code is the Venice Web Communities System.
|
||||
//
|
||||
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
// for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
// Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
// Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
|
||||
|
@ -36,6 +36,15 @@ if (user.isLoggedIn())
|
|||
|
||||
} // end if
|
||||
|
||||
// Test to see if the IP address has been banned.
|
||||
banmsg = rinput.engine.testIPBan(rinput.sourceAddress);
|
||||
if (banmsg!=null)
|
||||
{ // this IP address has been banned - you are Not Allowed
|
||||
vlib.output(new ErrorBox("This IP address has been banned",banmsg,target));
|
||||
vlib.done();
|
||||
|
||||
} // end if
|
||||
|
||||
// create the new account dialog
|
||||
dlg = rinput.getDialog("newacct");
|
||||
|
||||
|
|
|
@ -8,9 +8,9 @@
|
|||
//
|
||||
// The Original Code is the Venice Web Communities System.
|
||||
//
|
||||
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
// for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
// Copyright (C) 2002 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
// Copyright (C) 2002-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
|
||||
|
@ -32,6 +32,8 @@ if (cctl.isCookiePresent(cookie_name))
|
|||
logged_in = false;
|
||||
try
|
||||
{ // attempt to log the user in with the cookie
|
||||
// but don't do it if they're IP-banned
|
||||
if (rinput.engine.testIPBan(rinput.sourceAddress)==null)
|
||||
logged_in = sess.user.authenticateWithToken(cctl.getCookie(cookie_name));
|
||||
|
||||
} // end try
|
||||
|
|
116
scripts/sysadmin/ip_ban_add.js
Normal file
116
scripts/sysadmin/ip_ban_add.js
Normal file
|
@ -0,0 +1,116 @@
|
|||
// The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
// (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.mozilla.org/MPL/>.
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
// WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
// language governing rights and limitations under the License.
|
||||
//
|
||||
// The Original Code is the Venice Web Communities System.
|
||||
//
|
||||
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
// for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
// Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
|
||||
importPackage(java.util);
|
||||
importPackage(Packages.com.silverwrist.util);
|
||||
importPackage(Packages.com.silverwrist.venice.core);
|
||||
importPackage(Packages.com.silverwrist.venice.except);
|
||||
importPackage(Packages.com.silverwrist.venice.ui);
|
||||
importPackage(Packages.com.silverwrist.venice.ui.view);
|
||||
|
||||
// get the request object
|
||||
rinput = bsf.lookupBean("request");
|
||||
|
||||
if (!(rinput.user.hasAdminAccess()))
|
||||
{ // you don't have permission to administer the system
|
||||
vlib.output(new ErrorBox("Access Error","You do not have permission to administer the system.",null));
|
||||
vlib.done();
|
||||
|
||||
} // end if
|
||||
|
||||
// create the IP ban add dialog
|
||||
dlg = rinput.getDialog("ipban.add");
|
||||
|
||||
if ("GET"==rinput.verb)
|
||||
{ // fill in default values and put forth the dialog
|
||||
dlg.setValue("mask","255.255.255.255");
|
||||
dlg.setValue("etime","1");
|
||||
vlib.output(dlg);
|
||||
vlib.done();
|
||||
|
||||
} // end if
|
||||
|
||||
// everything that follows is for a POST operation
|
||||
op = dlg.whichButton(rinput) + "";
|
||||
if (op=="cancel")
|
||||
{ // user cancelled create - bounce back to the target
|
||||
vlib.output(new Redirect("sysadmin/ip_bans.js.vs",LinkTypes.SERVLET));
|
||||
vlib.done();
|
||||
|
||||
} // end if
|
||||
|
||||
rc = null;
|
||||
if (op=="add")
|
||||
{ // load the dialog
|
||||
dlg.load(rinput);
|
||||
|
||||
try
|
||||
{ // validate the dialog
|
||||
dlg.validate();
|
||||
|
||||
// load the admin interface
|
||||
adm = rinput.user.adminInterface;
|
||||
|
||||
// determine the expire date
|
||||
exp_date = null;
|
||||
if (dlg.getValue("echeck"))
|
||||
{ // create a GregorianCalendar and use it to figure the expiration date
|
||||
cal = new java.util.GregorianCalendar();
|
||||
unit = dlg.getValue("eunit");
|
||||
if (unit=="D")
|
||||
cal.add(Calendar.DATE,dlg.getValue("etime"));
|
||||
else if (unit=="W")
|
||||
cal.add(Calendar.DATE,dlg.getValue("etime") * 7);
|
||||
else if (unit=="M")
|
||||
cal.add(Calendar.MONTH,dlg.getValue("etime"));
|
||||
else if (unit=="Y")
|
||||
cal.add(Calendar.YEAR,dlg.getValue("etime"));
|
||||
exp_date = cal.getTime();
|
||||
|
||||
} // end if
|
||||
|
||||
msg = dlg.getValue("msg");
|
||||
if (StringUtil.isStringEmpty(msg))
|
||||
msg = "This IP address has been banned from logging in by an administrator.";
|
||||
adm.addIPBan(dlg.getValue("address"),dlg.getValue("mask"),exp_date,msg);
|
||||
rc = new Redirect("sysadmin/ip_bans.js.vs",LinkTypes.SERVLET);
|
||||
|
||||
} // end try
|
||||
catch (e)
|
||||
{ // whoops!
|
||||
etype = vlib.exceptionType(e) + "";
|
||||
if (etype.match("ValidationException"))
|
||||
{ // put the dialog back up on a validation error
|
||||
dlg.setErrorMessage(e.message + " Please try again.");
|
||||
rc = dlg;
|
||||
|
||||
} // end if
|
||||
else if (etype.match("DataException"))
|
||||
rc = new ErrorBox("Database Error",e.message);
|
||||
else
|
||||
rc = e;
|
||||
|
||||
} // end catch
|
||||
|
||||
} // end if
|
||||
else
|
||||
{ // no dialog present
|
||||
logger.error("no known button click on POST to ip_ban_add.js");
|
||||
rc = new ErrorBox("Internal Error","Unknown command button pressed","sysadmin/ip_bans.js.vs");
|
||||
|
||||
} // end else
|
||||
|
||||
vlib.output(rc);
|
81
scripts/sysadmin/ip_bans.js
Normal file
81
scripts/sysadmin/ip_bans.js
Normal file
|
@ -0,0 +1,81 @@
|
|||
// The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
// (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.mozilla.org/MPL/>.
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
// WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
// language governing rights and limitations under the License.
|
||||
//
|
||||
// The Original Code is the Venice Web Communities System.
|
||||
//
|
||||
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
// for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
// Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
|
||||
importPackage(java.util);
|
||||
importPackage(Packages.com.silverwrist.venice.core);
|
||||
importPackage(Packages.com.silverwrist.venice.except);
|
||||
importPackage(Packages.com.silverwrist.venice.ui);
|
||||
importPackage(Packages.com.silverwrist.venice.ui.view);
|
||||
|
||||
// get the request object
|
||||
rinput = bsf.lookupBean("request");
|
||||
|
||||
if (!(rinput.user.hasAdminAccess()))
|
||||
{ // you don't have permission to administer the system
|
||||
vlib.output(new ErrorBox("Access Error","You do not have permission to administer the system.",null));
|
||||
vlib.done();
|
||||
|
||||
} // end if
|
||||
|
||||
adm = rinput.user.adminInterface;
|
||||
|
||||
// get the list of IP bans
|
||||
banlist = null;
|
||||
try
|
||||
{ // handle enables?
|
||||
if (rinput.hasParameter("enable"))
|
||||
{ // enable the identified ban
|
||||
id = rinput.getParameterInt("enable",-1);
|
||||
if (id>0)
|
||||
adm.enableIPBan(id,true);
|
||||
|
||||
} // end if
|
||||
|
||||
if (rinput.hasParameter("disable"))
|
||||
{ // disable the identified ban
|
||||
id = rinput.getParameterInt("disable",-1);
|
||||
if (id>0)
|
||||
adm.enableIPBan(id,false);
|
||||
|
||||
} // end if
|
||||
|
||||
if (rinput.hasParameter("remove"))
|
||||
{ // disable the identified ban
|
||||
id = rinput.getParameterInt("remove",-1);
|
||||
if (id>0)
|
||||
adm.removeIPBan(id);
|
||||
|
||||
} // end if
|
||||
|
||||
// get the ban information list
|
||||
banlist = adm.getIPBanInfo();
|
||||
|
||||
} // end try
|
||||
catch (e)
|
||||
{ // find the exception type
|
||||
etype = vlib.exceptionType(e) + "";
|
||||
if (etype.match("DataException"))
|
||||
rc = new ErrorBox("Database Error",e.message);
|
||||
else
|
||||
rc = e;
|
||||
vlib.output(rc);
|
||||
vlib.done();
|
||||
|
||||
} // end catch
|
||||
|
||||
// display the list of IP bans
|
||||
rinput.setRequestAttribute("ipbans.list",banlist);
|
||||
vlib.output(new JSPView("Manage IP Address Bans","sysadmin/list_ip_bans.jsp"));
|
|
@ -1,5 +1,5 @@
|
|||
# MySQL script for initializing the Venice database.
|
||||
# Written by Eric J. Bowersox <erbo@silcom.com>
|
||||
# Written by Eric J. Bowersox <erbo@ricochet.com>
|
||||
#---------------------------------------------------------------------------
|
||||
# The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
# (the "License"); you may not use this file except in compliance with the License.
|
||||
|
@ -11,9 +11,9 @@
|
|||
#
|
||||
# The Original Code is the Venice Web Communities System.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
# The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
# for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
# Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
# Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
|
@ -429,6 +429,20 @@ CREATE TABLE imagestore (
|
|||
data MEDIUMBLOB
|
||||
);
|
||||
|
||||
# Table listing IP addresses that are banned from logging in or registering.
|
||||
CREATE TABLE ipban (
|
||||
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
||||
address BIGINT NOT NULL,
|
||||
mask BIGINT NOT NULL,
|
||||
enable TINYINT NOT NULL DEFAULT 1,
|
||||
expire DATETIME,
|
||||
message VARCHAR(255) NOT NULL,
|
||||
block_by INT NOT NULL,
|
||||
block_on DATETIME NOT NULL,
|
||||
INDEX by_mask (mask),
|
||||
INDEX by_date (block_on)
|
||||
);
|
||||
|
||||
##############################################################################
|
||||
# Set table access rights
|
||||
##############################################################################
|
||||
|
|
104
src/com/silverwrist/util/IPv4Util.java
Normal file
104
src/com/silverwrist/util/IPv4Util.java
Normal file
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (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.mozilla.org/MPL/>.
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
package com.silverwrist.util;
|
||||
|
||||
import org.apache.regexp.*;
|
||||
|
||||
public class IPv4Util
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Static data members
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public static final long MAX_ADDRESS = 0xFFFFFFFFL;
|
||||
|
||||
private static final REProgram IPV4_PATTERN =
|
||||
new RECompiler().compile("^\\s*(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\s*$");
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructors
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public IPv4Util()
|
||||
{ // only present for bean-like environments - do not construct this object directly
|
||||
} // end constructor
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* External static operations
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public static final boolean isValid(String ip_addr)
|
||||
{
|
||||
if (ip_addr==null)
|
||||
return false;
|
||||
RE matcher = new RE(IPV4_PATTERN);
|
||||
if (!matcher.match(ip_addr))
|
||||
return false;
|
||||
for (int i=1; i<=4; i++)
|
||||
{ // parse long integers, assemble into return value
|
||||
int val = Integer.parseInt(matcher.getParen(i));
|
||||
if ((val<0) || (val>255))
|
||||
return false;
|
||||
|
||||
} // end for
|
||||
|
||||
return true;
|
||||
|
||||
} // end isValid
|
||||
|
||||
public static final long stringToLongAddress(String ip_addr) throws IllegalArgumentException
|
||||
{
|
||||
RE matcher = new RE(IPV4_PATTERN);
|
||||
if (!(matcher.match(ip_addr)))
|
||||
throw new IllegalArgumentException("invalid IP address: " + ip_addr);
|
||||
long rc = 0;
|
||||
for (int i=1; i<=4; i++)
|
||||
{ // parse long integers, assemble into return value
|
||||
long val = Long.parseLong(matcher.getParen(i));
|
||||
if ((val<0) || (val>255))
|
||||
throw new IllegalArgumentException("invalid IP address: " + ip_addr);
|
||||
rc = (rc << 8) | val;
|
||||
|
||||
} // end for
|
||||
|
||||
return rc;
|
||||
|
||||
} // end stringToLongAddress
|
||||
|
||||
public static final String longToStringAddress(long addr) throws IllegalArgumentException
|
||||
{
|
||||
if ((addr<0) || (addr>MAX_ADDRESS))
|
||||
throw new IllegalArgumentException("invalid IP address: " + addr);
|
||||
StringBuffer rc = new StringBuffer(16);
|
||||
for (int i=0; i<4; i++)
|
||||
{ // build string representation from the right up
|
||||
rc.insert(0,addr & 0xFFL);
|
||||
rc.insert(0,'.');
|
||||
addr >>= 8;
|
||||
|
||||
} // end for
|
||||
|
||||
rc.delete(0,1);
|
||||
return rc.toString();
|
||||
|
||||
} // end longToStringAddress
|
||||
|
||||
} // end class IPv4Util
|
|
@ -9,9 +9,9 @@
|
|||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
* Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
@ -49,4 +49,15 @@ public interface AdminOperations
|
|||
String description, boolean auto_join)
|
||||
throws DataException, AccessError;
|
||||
|
||||
public abstract List getIPBanInfo() throws DataException;
|
||||
|
||||
public abstract IPBanInfo getIPBanInfo(int id) throws DataException;
|
||||
|
||||
public abstract void enableIPBan(int id, boolean enab) throws DataException;
|
||||
|
||||
public abstract void removeIPBan(int id) throws DataException;
|
||||
|
||||
public abstract void addIPBan(String address, String mask, java.util.Date expires, String message)
|
||||
throws DataException;
|
||||
|
||||
} // end interface AdminOperations
|
||||
|
|
38
src/com/silverwrist/venice/core/IPBanInfo.java
Normal file
38
src/com/silverwrist/venice/core/IPBanInfo.java
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (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.mozilla.org/MPL/>.
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
package com.silverwrist.venice.core;
|
||||
|
||||
public interface IPBanInfo
|
||||
{
|
||||
public abstract int getID();
|
||||
|
||||
public abstract String getAddress();
|
||||
|
||||
public abstract String getMask();
|
||||
|
||||
public abstract boolean isEnabled();
|
||||
|
||||
public abstract java.util.Date getExpire();
|
||||
|
||||
public abstract String getMessage();
|
||||
|
||||
public abstract String getBlockedBy();
|
||||
|
||||
public abstract java.util.Date getBlockedOn();
|
||||
|
||||
} // end interface IPBanInfo
|
|
@ -9,9 +9,9 @@
|
|||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
* Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
@ -91,4 +91,6 @@ public interface VeniceEngine extends SearchMode, ServiceGroup
|
|||
|
||||
public abstract boolean useCategories();
|
||||
|
||||
public abstract String testIPBan(String ip_address) throws DataException;
|
||||
|
||||
} // end interface VeniceEngine
|
||||
|
|
|
@ -9,9 +9,9 @@
|
|||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
* Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
@ -20,6 +20,7 @@ package com.silverwrist.venice.core.impl;
|
|||
import java.sql.*;
|
||||
import java.util.*;
|
||||
import org.apache.log4j.*;
|
||||
import com.silverwrist.util.*;
|
||||
import com.silverwrist.venice.core.*;
|
||||
import com.silverwrist.venice.core.internals.*;
|
||||
import com.silverwrist.venice.db.*;
|
||||
|
@ -30,6 +31,113 @@ import com.silverwrist.venice.svc.GlobalSite;
|
|||
|
||||
class AdminOperationsImpl implements AdminOperations
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Internal class for IP ban listings
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private static class IPBanInfoImpl implements IPBanInfo
|
||||
{
|
||||
/*====================================================================
|
||||
* Attributes
|
||||
*====================================================================
|
||||
*/
|
||||
|
||||
private int m_id;
|
||||
private String m_address;
|
||||
private String m_mask;
|
||||
private boolean m_enabled;
|
||||
private java.util.Date m_expires;
|
||||
private String m_message;
|
||||
private String m_blocked_by;
|
||||
private java.util.Date m_blocked_on;
|
||||
|
||||
/*====================================================================
|
||||
* Constructors
|
||||
*====================================================================
|
||||
*/
|
||||
|
||||
IPBanInfoImpl(ResultSet rs) throws SQLException
|
||||
{
|
||||
m_id = rs.getInt(1);
|
||||
m_address = IPv4Util.longToStringAddress(rs.getLong(2));
|
||||
m_mask = IPv4Util.longToStringAddress(rs.getLong(3));
|
||||
m_enabled = (rs.getInt(4)!=0);
|
||||
m_expires = SQLUtil.getFullDateTime(rs,5);
|
||||
m_message = rs.getString(6);
|
||||
m_blocked_by = rs.getString(7);
|
||||
m_blocked_on = SQLUtil.getFullDateTime(rs,8);
|
||||
|
||||
} // end constructor
|
||||
|
||||
IPBanInfoImpl(int id, ResultSet rs) throws SQLException
|
||||
{
|
||||
m_id = id;
|
||||
m_address = IPv4Util.longToStringAddress(rs.getLong(1));
|
||||
m_mask = IPv4Util.longToStringAddress(rs.getLong(2));
|
||||
m_enabled = (rs.getInt(3)!=0);
|
||||
m_expires = SQLUtil.getFullDateTime(rs,4);
|
||||
m_message = rs.getString(5);
|
||||
m_blocked_by = rs.getString(6);
|
||||
m_blocked_on = SQLUtil.getFullDateTime(rs,7);
|
||||
|
||||
} // end constructor
|
||||
|
||||
/*====================================================================
|
||||
* Implementations from interface IPBanInfo
|
||||
*====================================================================
|
||||
*/
|
||||
|
||||
public final int getID()
|
||||
{
|
||||
return m_id;
|
||||
|
||||
} // end getID
|
||||
|
||||
public final String getAddress()
|
||||
{
|
||||
return m_address;
|
||||
|
||||
} // end getAddress
|
||||
|
||||
public final String getMask()
|
||||
{
|
||||
return m_mask;
|
||||
|
||||
} // end getMask
|
||||
|
||||
public final boolean isEnabled()
|
||||
{
|
||||
return m_enabled;
|
||||
|
||||
} // end isEnabled
|
||||
|
||||
public final java.util.Date getExpire()
|
||||
{
|
||||
return m_expires;
|
||||
|
||||
} // end getExpire
|
||||
|
||||
public final String getMessage()
|
||||
{
|
||||
return m_message;
|
||||
|
||||
} // end getMessage
|
||||
|
||||
public final String getBlockedBy()
|
||||
{
|
||||
return m_blocked_by;
|
||||
|
||||
} // end getBlockedBy
|
||||
|
||||
public final java.util.Date getBlockedOn()
|
||||
{
|
||||
return m_blocked_on;
|
||||
|
||||
} // end getBlockedOn
|
||||
|
||||
} // end class IPBanInfoImpl
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Static data members
|
||||
*--------------------------------------------------------------------------------
|
||||
|
@ -197,4 +305,183 @@ class AdminOperationsImpl implements AdminOperations
|
|||
|
||||
} // end createNewAccount
|
||||
|
||||
public List getIPBanInfo() throws DataException
|
||||
{
|
||||
ArrayList rc = null;
|
||||
Connection conn = null;
|
||||
Statement stmt = null;
|
||||
ResultSet rs = null;
|
||||
|
||||
try
|
||||
{ // retrieve a connection from the data pool and get the audit records
|
||||
conn = globalsite.getConnection(null);
|
||||
stmt = conn.createStatement();
|
||||
rs = stmt.executeQuery("SELECT b.id, b.address, b.mask, b.enable, b.expire, b.message, u.username, b.block_on "
|
||||
+ "FROM ipban b, users u WHERE u.uid = b.block_by ORDER BY b.block_on;");
|
||||
while (rs.next())
|
||||
{ // extract the listing of IP blocks
|
||||
if (rc==null)
|
||||
rc = new ArrayList();
|
||||
rc.add(new IPBanInfoImpl(rs));
|
||||
|
||||
} // end while
|
||||
|
||||
} // end try
|
||||
catch (SQLException e)
|
||||
{ // database error - this is a DataException
|
||||
logger.error("error loading IP ban info: " + e.getMessage(),e);
|
||||
throw new DataException("unable to load IP ban info: " + e.getMessage(),e);
|
||||
|
||||
} // end catch
|
||||
finally
|
||||
{ // make sure the connection is released before we go
|
||||
SQLUtil.shutdown(rs);
|
||||
SQLUtil.shutdown(stmt);
|
||||
SQLUtil.shutdown(conn);
|
||||
|
||||
} // end finally
|
||||
|
||||
if ((rc==null) || rc.isEmpty())
|
||||
return Collections.EMPTY_LIST;
|
||||
rc.trimToSize();
|
||||
return Collections.unmodifiableList(rc);
|
||||
|
||||
} // end getIPBanInfo
|
||||
|
||||
public IPBanInfo getIPBanInfo(int id) throws DataException
|
||||
{
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
|
||||
try
|
||||
{ // retrieve a connection from the data pool and get the audit records
|
||||
conn = globalsite.getConnection(null);
|
||||
stmt = conn.prepareStatement("SELECT b.address, b.mask, b.enable, b.expire, b.message, u.username, b.block_on "
|
||||
+ "FROM ipban b, users u WHERE u.uid = b.block_by AND b.id = ?;");
|
||||
stmt.setInt(1,id);
|
||||
rs = stmt.executeQuery();
|
||||
if (rs.next())
|
||||
return new IPBanInfoImpl(id,rs);
|
||||
|
||||
} // end try
|
||||
catch (SQLException e)
|
||||
{ // database error - this is a DataException
|
||||
logger.error("error loading IP ban info: " + e.getMessage(),e);
|
||||
throw new DataException("unable to load IP ban info: " + e.getMessage(),e);
|
||||
|
||||
} // end catch
|
||||
finally
|
||||
{ // make sure the connection is released before we go
|
||||
SQLUtil.shutdown(rs);
|
||||
SQLUtil.shutdown(stmt);
|
||||
SQLUtil.shutdown(conn);
|
||||
|
||||
} // end finally
|
||||
|
||||
return null;
|
||||
|
||||
} // end getIPBanInfo
|
||||
|
||||
public void enableIPBan(int id, boolean enab) throws DataException
|
||||
{
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
|
||||
try
|
||||
{ // retrieve a connection from the data pool and get the audit records
|
||||
conn = globalsite.getConnection(null);
|
||||
stmt = conn.prepareStatement("UPDATE ipban SET enable = ? WHERE id = ?;");
|
||||
stmt.setInt(1,enab ? 1 : 0);
|
||||
stmt.setInt(2,id);
|
||||
stmt.executeUpdate();
|
||||
|
||||
} // end try
|
||||
catch (SQLException e)
|
||||
{ // database error - this is a DataException
|
||||
logger.error("error setting IP ban info: " + e.getMessage(),e);
|
||||
throw new DataException("unable to change IP ban info: " + e.getMessage(),e);
|
||||
|
||||
} // end catch
|
||||
finally
|
||||
{ // make sure the connection is released before we go
|
||||
SQLUtil.shutdown(stmt);
|
||||
SQLUtil.shutdown(conn);
|
||||
|
||||
} // end finally
|
||||
|
||||
} // end enableIPBan
|
||||
|
||||
public void removeIPBan(int id) throws DataException
|
||||
{
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
|
||||
try
|
||||
{ // retrieve a connection from the data pool and get the audit records
|
||||
conn = globalsite.getConnection(null);
|
||||
stmt = conn.prepareStatement("DELETE FROM ipban WHERE id = ?;");
|
||||
stmt.setInt(1,id);
|
||||
stmt.executeUpdate();
|
||||
|
||||
} // end try
|
||||
catch (SQLException e)
|
||||
{ // database error - this is a DataException
|
||||
logger.error("error setting IP ban info: " + e.getMessage(),e);
|
||||
throw new DataException("unable to change IP ban info: " + e.getMessage(),e);
|
||||
|
||||
} // end catch
|
||||
finally
|
||||
{ // make sure the connection is released before we go
|
||||
SQLUtil.shutdown(stmt);
|
||||
SQLUtil.shutdown(conn);
|
||||
|
||||
} // end finally
|
||||
|
||||
} // end removeIPBan
|
||||
|
||||
public void addIPBan(String address, String mask, java.util.Date expires, String message) throws DataException
|
||||
{
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
|
||||
try
|
||||
{ // retrieve a connection from the data pool and get the audit records
|
||||
conn = globalsite.getConnection(null);
|
||||
stmt = conn.prepareStatement("INSERT INTO ipban (address, mask, expire, message, block_by, block_on) "
|
||||
+ "VALUES (?, ?, ?, ?, ?, ?);");
|
||||
try
|
||||
{ // set the two IP address fields
|
||||
stmt.setLong(1,IPv4Util.stringToLongAddress(address));
|
||||
stmt.setLong(2,IPv4Util.stringToLongAddress(mask));
|
||||
|
||||
} // end try
|
||||
catch (IllegalArgumentException e)
|
||||
{ // translate to DataException
|
||||
throw new DataException(e);
|
||||
|
||||
} // end catch
|
||||
|
||||
SQLUtil.setFullDateTime(stmt,3,expires);
|
||||
stmt.setString(4,message);
|
||||
stmt.setInt(5,env.getUserID());
|
||||
SQLUtil.setFullDateTime(stmt,6,new java.util.Date());
|
||||
stmt.executeUpdate();
|
||||
|
||||
} // end try
|
||||
catch (SQLException e)
|
||||
{ // database error - this is a DataException
|
||||
logger.error("error setting IP ban info: " + e.getMessage(),e);
|
||||
throw new DataException("unable to change IP ban info: " + e.getMessage(),e);
|
||||
|
||||
} // end catch
|
||||
finally
|
||||
{ // make sure the connection is released before we go
|
||||
SQLUtil.shutdown(stmt);
|
||||
SQLUtil.shutdown(conn);
|
||||
|
||||
} // end finally
|
||||
|
||||
} // end addIPBan
|
||||
|
||||
} // end class AdminOperationsImpl
|
||||
|
|
|
@ -9,9 +9,9 @@
|
|||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
* Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
@ -1336,6 +1336,56 @@ public class VeniceEngineImpl implements VeniceEngine, ServiceProvider, EngineBa
|
|||
|
||||
} // end useCategories
|
||||
|
||||
public String testIPBan(String ip_address) throws DataException
|
||||
{
|
||||
checkInitialized();
|
||||
long addy = 0;
|
||||
try
|
||||
{ // convert the IP address parameter to a long integer
|
||||
addy = IPv4Util.stringToLongAddress(ip_address);
|
||||
|
||||
} // end try
|
||||
catch (IllegalArgumentException e)
|
||||
{ // wrap the exception and return it
|
||||
throw new DataException(e);
|
||||
|
||||
} // end catch
|
||||
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
|
||||
try
|
||||
{ // Look for an IP ban that (a) matches this IP address (by mask), (b) has not yet expired (or does not
|
||||
// expire), and (c) is enabled.
|
||||
conn = globalsite.getConnection(null);
|
||||
stmt = conn.prepareStatement("SELECT message FROM ipban WHERE (address & mask) = (? & mask) "
|
||||
+ "AND (expire IS NULL OR expire >= ?) AND enable <> 0 ORDER BY mask DESC "
|
||||
+ "LIMIT 1;");
|
||||
stmt.setLong(1,addy);
|
||||
stmt.setString(2,SQLUtil.encodeDate(new java.util.Date()));
|
||||
rs = stmt.executeQuery();
|
||||
if (rs.next()) // located an IP ban
|
||||
return rs.getString(1);
|
||||
|
||||
} // end try
|
||||
catch (SQLException e)
|
||||
{ // bug out
|
||||
throw new DataException("Error accessing IP ban database: " + e.getMessage(),e);
|
||||
|
||||
} // end catch
|
||||
finally
|
||||
{ // make sure the connection is released before we go
|
||||
SQLUtil.shutdown(rs);
|
||||
SQLUtil.shutdown(stmt);
|
||||
SQLUtil.shutdown(conn);
|
||||
|
||||
} // end finally
|
||||
|
||||
return null; // no IP ban found
|
||||
|
||||
} // end testIPBan
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface ServiceProvider
|
||||
*--------------------------------------------------------------------------------
|
||||
|
|
|
@ -228,6 +228,15 @@ public class SQLUtil
|
|||
|
||||
} // end encodeDate
|
||||
|
||||
public static final void setFullDateTime(PreparedStatement stmt, int index, java.util.Date date) throws SQLException
|
||||
{
|
||||
if (date==null)
|
||||
stmt.setNull(index,java.sql.Types.TIMESTAMP);
|
||||
else
|
||||
stmt.setString(index,encodeDate(date));
|
||||
|
||||
} // end setFullDateTime
|
||||
|
||||
/**
|
||||
* Returns the value of a DATETIME column in the current row of an SQL result set, formatted as a date.
|
||||
*
|
||||
|
|
|
@ -9,9 +9,9 @@
|
|||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
* Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
@ -38,9 +38,9 @@ public class DialogElementLoader
|
|||
private static final Class[] init_classes = {
|
||||
CategoryHeader.class, CheckBoxField.class, CommunityLogoField.class, CountryListField.class,
|
||||
EMailAddressField.class, HiddenField.class, ImageButton.class, IntegerField.class,
|
||||
LanguageListField.class, LocaleListField.class, PasswordField.class, RoleListField.class,
|
||||
StaticPickListField.class, TextField.class, TimeZoneListField.class, UserPhotoField.class,
|
||||
VeniceIDField.class
|
||||
IPAddressField.class, LanguageListField.class, LocaleListField.class, PasswordField.class,
|
||||
RoleListField.class, StaticPickListField.class, TextField.class, TimeZoneListField.class,
|
||||
UserPhotoField.class, VeniceIDField.class
|
||||
};
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
|
|
83
src/com/silverwrist/venice/ui/dlg/IPAddressField.java
Normal file
83
src/com/silverwrist/venice/ui/dlg/IPAddressField.java
Normal file
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (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.mozilla.org/MPL/>.
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
package com.silverwrist.venice.ui.dlg;
|
||||
|
||||
import java.io.IOException;
|
||||
import org.w3c.dom.*;
|
||||
import com.silverwrist.util.*;
|
||||
import com.silverwrist.venice.except.*;
|
||||
import com.silverwrist.venice.ui.*;
|
||||
import com.silverwrist.venice.util.XMLLoader;
|
||||
|
||||
public class IPAddressField extends TextField
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Static data members
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public static final String TAGNAME = "ip-address";
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructors
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public IPAddressField(String name, String caption, String caption2)
|
||||
{
|
||||
super(name,caption,caption2,true,15);
|
||||
|
||||
} // end constructor
|
||||
|
||||
public IPAddressField(Element elt) throws ConfigException
|
||||
{
|
||||
super(elt,15);
|
||||
|
||||
} // end constructor
|
||||
|
||||
protected IPAddressField(IPAddressField other)
|
||||
{
|
||||
super(other);
|
||||
|
||||
} // end constructor
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Overrides from class TextField
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected void validateContents(String value) throws ValidationException
|
||||
{
|
||||
super.validateContents(value);
|
||||
if (!(IPv4Util.isValid(value)))
|
||||
throw new ValidationException("Invalid IP address in the '" + getCaption() + "' field.");
|
||||
|
||||
} // end validateContents
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface DialogField
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public DialogField duplicate()
|
||||
{
|
||||
return new IPAddressField(this);
|
||||
|
||||
} // end duplicate
|
||||
|
||||
} // end class IPAddressField
|
76
web/format/sysadmin/list_ip_bans.jsp
Normal file
76
web/format/sysadmin/list_ip_bans.jsp
Normal file
|
@ -0,0 +1,76 @@
|
|||
<%--
|
||||
The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
(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.mozilla.org/MPL/>.
|
||||
|
||||
Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
language governing rights and limitations under the License.
|
||||
|
||||
The Original Code is the Venice Web Communities System.
|
||||
|
||||
The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
|
||||
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
--%>
|
||||
<%@ page import = "java.util.*" %>
|
||||
<%@ page import = "com.silverwrist.venice.core.IPBanInfo" %>
|
||||
<%@ page import = "com.silverwrist.venice.ui.view.JSPView" %>
|
||||
<%@ taglib uri="/tlds/util" prefix="util" %>
|
||||
<%
|
||||
JSPView view = JSPView.get(request);
|
||||
List ipbans = (List)(view.getRequestAttribute("ipbans.list"));
|
||||
%>
|
||||
<util:comment>IP Bans Display</util:comment>
|
||||
<util:header title="Manage IP Address Bans"/>
|
||||
<util:font color="content.fg" size="content"><util:link href="sysadmin/menu.js.vs" type="servlet">Return to
|
||||
System Administration Menu</util:link></util:font><P>
|
||||
<% if (ipbans.size()>0) { %>
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="2">
|
||||
<tr>
|
||||
<th align="center"><util:font color="content.fg" size="content"><b><u>Enable</u></b></util:font></th>
|
||||
<th align="left"><util:font color="content.fg" size="content"><b><u>Address</u></b></util:font></th>
|
||||
<th align="left"><util:font color="content.fg" size="content"><b><u>Mask</u></b></util:font></th>
|
||||
<th align="left"><util:font color="content.fg" size="content"><b><u>Expires</u></b></util:font></th>
|
||||
<th align="left"><util:font color="content.fg" size="content"><b><u>Added By</u></b></util:font></th>
|
||||
<th align="left"><util:font color="content.fg" size="content"><b><u>Added On</u></b></util:font></th>
|
||||
<th> </th>
|
||||
</tr>
|
||||
<% for (Iterator it = ipbans.iterator(); it.hasNext(); ) { %>
|
||||
<% IPBanInfo ban = (IPBanInfo)(it.next()); %>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<% if (ban.isEnabled()) { %>
|
||||
<util:xlink>
|
||||
<util:href type="servlet">sysadmin/ip_bans.js.vs?disable=<%= ban.getID() %></util:href>
|
||||
<util:text><util:image src="icn_on.gif" fixup="true" alt="[Yes]" width="16" height="16"
|
||||
border="0"/></util:text>
|
||||
</util:xlink>
|
||||
<% } else { %>
|
||||
<util:xlink>
|
||||
<util:href type="servlet">sysadmin/ip_bans.js.vs?enable=<%= ban.getID() %></util:href>
|
||||
<util:text><util:image src="icn_off.gif" fixup="true" alt="[No]" width="16" height="16"
|
||||
border="0"/></util:text>
|
||||
</util:xlink>
|
||||
<% } // end if %>
|
||||
</td>
|
||||
<td align="left"><util:font color="content.fg" size="content"><%= ban.getAddress() %></util:font></td>
|
||||
<td align="left"><util:font color="content.fg" size="content"><%= ban.getMask() %></util:font></td>
|
||||
<td align="left"><util:font color="content.fg" size="content">
|
||||
<% if (ban.getExpire()==null) { %>Never<% } else { %><%= view.formatDate(ban.getExpire()) %><% } // end if %>
|
||||
</util:font></td>
|
||||
<td align="left"><util:font color="content.fg" size="content"><%= ban.getBlockedBy() %></util:font></td>
|
||||
<td align="left"><util:font color="content.fg" size="content"><%= view.formatDate(ban.getBlockedOn()) %></util:font></td>
|
||||
<td align="center"><util:xlink>
|
||||
<util:href type="servlet">sysadmin/ip_bans.js.vs?remove=<%= ban.getID() %></util:href>
|
||||
<util:text><util:button id="remove"/></util:text>
|
||||
</util:xlink></td>
|
||||
</tr>
|
||||
<% } // end for %>
|
||||
</table>
|
||||
<% } else { %>
|
||||
<div align="left"><i>No IP bans currently listed.</i></div>
|
||||
<% } // end if %>
|
||||
<util:link href="sysadmin/ip_ban_add.js.vs" type="servlet"><util:button id="add"/></util:link>
|
Loading…
Reference in New Issue
Block a user