blob: 5e77bf8373faf756452a08cf2e74fe48b007a689 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
//
// Modify an IP range.
//
function iprangeChangeProfile() {
iprangeChangeProfile(false);
}
//
// Converts a 0..255 integer value to a -128..127 byte value.
//
function getByte(intValue) {
var byteValue;
if (intValue <= 127) {
byteValue = intValue;
}
else {
byteValue = intValue - 256;
}
return byteValue;
}
//
// Converts a -128..127 byte value to a 0..255 integer value.
//
function getInt(byteValue) {
var intValue;
if (byteValue >= 0) {
intValue = "" + byteValue;
}
else {
intValue = "" + (256 + byteValue);
}
return intValue;
}
//
// Checks if value is a valid IP number.
//
function checkIPNumber(value) {
var parsedValue = parseInt(value);
var result = !isNaN(parsedValue) && 0 <= parsedValue && parsedValue <= 255;
return result;
}
//
// Converts a byte array to an IP address string.
//
function getIPString(byteArray) {
return byteArray[0] + "." + byteArray[1] + "." + byteArray[2] + "." + byteArray[3];
}
//
// Modify an IP range.
//
function iprangeChangeProfile(newRange) {
resolve();
try {
var iprangeId = "";
if (!(newRange == true)) {
iprangeId = getAccreditableId();
}
var redirectUri = getRequestUri();
var ipRangeManager = getAccreditableManager().getIPRangeManager();
var range;
if (newRange == true) {
range = new Packages.org.apache.lenya.ac.file.FileIPRange();
}
else {
range = ipRangeManager.getIPRange(iprangeId);
var name = range.getName();
var description = range.getDescription();
}
var net = new Array(4);
var mask = new Array(4);
var i = 0;
for (i = 0; i < 4; i++) {
net[i] = getInt(range.getNetworkAddress().getAddress()[i]);
mask[i] = getInt(range.getSubnetMask().getAddress()[i]);
}
var netErrors = new Array(4);
var maskErrors = new Array(4);
var message = "";
for (i = 0; i < 4; i++) {
netErrors[i] = "false";
maskErrors[i] = "false";
}
while (true) {
var pageTitle;
if (newRange == true) {
pageTitle = "Add IP Range";
}
else {
pageTitle = "Edit IP Range";
}
cocoon.sendPageAndWait("ipranges/profile.xml", {
"iprange-id" : iprangeId,
"name" : name,
"description" : description,
"page-title" : pageTitle,
"net" : java.util.Arrays.asList(net),
"net-errors" : java.util.Arrays.asList(netErrors),
"mask" : java.util.Arrays.asList(mask),
"mask-errors" : java.util.Arrays.asList(maskErrors),
"new-iprange" : newRange,
"message" : message
});
for (i = 0; i < 4; i++) {
netErrors[i] = "false";
maskErrors[i] = "false";
}
message = "";
if (cocoon.request.getParameter("cancel")) {
break;
}
if (cocoon.request.getParameter("submit")) {
var ok = true;
// get values from request
name = cocoon.request.getParameter("name");
description = cocoon.request.getParameter("description");
for (i = 0; i < 4; i++) {
net[i] = cocoon.request.getParameter("net-" + (i+1));
if (!checkIPNumber(net[i])) {
netErrors[i] = "true";
ok = false;
message = "Please correct the errors.";
}
mask[i] = cocoon.request.getParameter("mask-" + (i+1));
if (!checkIPNumber(mask[i])) {
maskErrors[i] = "true";
ok = false;
message = "Please correct the errors.";
}
}
// initialize new IP range
if (newRange == true) {
iprangeId = cocoon.request.getParameter("iprange-id");
if (ok) {
var existingIPRange = ipRangeManager.getIPRange(iprangeId);
if (existingIPRange != null) {
message = "This IP range already exists.";
ok = false;
}
else if (!Packages.org.apache.lenya.ac.impl.AbstractItem.isValidId(iprangeId)) {
message = "This is not a valid IP range ID. [" + iprangeId + "]";
ok = false;
}
else {
range = new Packages.org.apache.lenya.ac.file.FileIPRange(
ipRangeManager.getConfigurationDirectory(), iprangeId);
ipRangeManager.add(range);
}
}
}
// save IP range
if (ok == true) {
range.setName(name);
range.setDescription(description);
range.setNetworkAddress(getIPString(net));
range.setSubnetMask(getIPString(mask));
range.save();
break;
}
}
}
cocoon.redirectTo(redirectUri);
}
finally {
release();
}
}
//
// Add an IP range.
//
function iprangeAddIPRange() {
iprangeChangeProfile(true);
}
//
// Delete IP range.
//
function iprangeDeleteIPRange() {
resolve();
try {
var redirectUri = getRequestUri();
var ipRangeManager = getAccreditableManager().getIPRangeManager();
var ipRangeId = cocoon.request.getParameter("iprange-id");
var range = ipRangeManager.getIPRange(ipRangeId);
var name = range.getName();
var showPage = true;
while (showPage) {
cocoon.sendPageAndWait("ipranges/confirm-delete-common.xml", {
"type" : "IP Range",
"id" : ipRangeId,
"name" : name
});
if (cocoon.request.getParameter("cancel")) {
break;
}
if (cocoon.request.getParameter("submit")) {
ipRangeManager.remove(range);
range['delete']();
showPage = false;
}
}
cocoon.redirectTo(redirectUri);
}
finally {
release();
}
}
//
// Change the group affiliation of an IP range.
//
function iprangeChangeGroups() {
var redirectUri = getRequestUri();
var iprangeId = getAccreditableId();
var range = getAccreditableManager().getIPRangeManager().getIPRange(iprangeId);
var rangeGroupArray = range.getGroups();
var rangeGroups = new java.util.ArrayList(java.util.Arrays.asList(rangeGroupArray));
var groupArray = getAccreditableManager().getGroupManager().getGroups();
var groups = new java.util.ArrayList();
for (var i = 0; i < groupArray.length; i++) {
if (!rangeGroups.contains(groupArray[i])) {
groups.add(groupArray[i]);
}
}
while (true) {
cocoon.sendPageAndWait("ipranges/groups.xml", {
"iprange-id" : iprangeId,
"groups" : groups,
"iprange-groups" : rangeGroups
});
var groupId = cocoon.request.getParameter("group");
if (cocoon.request.getParameter("add_group") && groupId != "") {
var group = getAccreditableManager().getGroupManager().getGroup(groupId);
if (!rangeGroups.contains(group)) {
rangeGroups.add(group);
groups.remove(group);
}
}
var rangeGroupId = cocoon.request.getParameter("iprange_group");
if (cocoon.request.getParameter("remove_group") && rangeGroupId != "") {
var group = getAccreditableManager().getGroupManager().getGroup(rangeGroupId);
if (rangeGroups.contains(group)) {
rangeGroups.remove(group);
groups.add(group);
}
}
if (cocoon.request.getParameter("cancel")) {
break;
}
if (cocoon.request.getParameter("submit")) {
range.removeFromAllGroups();
var iterator = rangeGroups.iterator();
while (iterator.hasNext()) {
var group = iterator.next();
group.add(range);
}
range.save();
break;
}
}
cocoon.redirectTo(redirectUri);
}