/*
* Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. 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.
*/
package org.apache.synapse.commons.throttle.module.utils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.*;
import java.net.InetAddress;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.Properties;
public class Utils {
private static Log log = LogFactory.getLog(Utils.class);
private static String OAUTH_HEADER_SPLITTER = ",";
private static String OAUTH_CONSUMER_KEY = "oauth_consumer_key";
/**
* Check whether a given Ip is in a given ip range
* @param address ip address to check
* @param range range ex: 192.168.2.2-192.168.2.100
* @return true is in range , false if not
* @throws UnknownHostException If Host is not Valid or can't resolve it
*/
public static boolean isIpInRange(String address , String range) throws UnknownHostException {
if(address == null || range == null) {
return false;
}
String[] bounds = range.split("-");
String ipLow = bounds[0].trim();
String ipHigh = bounds[1].trim();
long ipLo = ipToLong(InetAddress.getByName(ipLow));
long ipHi = ipToLong(InetAddress.getByName(ipHigh));
long ipToTest = ipToLong(InetAddress.getByName(address));
return ipToTest >= ipLo && ipToTest <= ipHi;
}
/**
* Extract the customer key from the OAuth Authentication header
* @param authHeader Header string
* @return extracted customer key value
*/
public static String extractCustomerKeyFromAuthHeader(String authHeader) {
// Expected header :
//OAuth oauth_consumer_key="nq21LN39VlKe6OezcOndBx",
// oauth_signature_method="HMAC-SHA1", oauth_signature="DZKyT75hiOIdtMGCU%2BbITArs4sU%3D",
// oauth_timestamp="1328590467", oauth_nonce="7031216264696", oauth_version="1.0"
String consumerKey = null;
if (authHeader.startsWith("OAuth ") || authHeader.startsWith("oauth ")) {
authHeader = authHeader.substring(authHeader.indexOf("o"));
}
String[] headers = authHeader.split(OAUTH_HEADER_SPLITTER);
if (headers != null && headers.length > 0) {
for (int i = 0; i < headers.length; i++) {
String[] elements = headers[i].split("=");
if (elements != null && elements.length > 1) {
if (OAUTH_CONSUMER_KEY.equals(elements[0].trim())) {
consumerKey = removeLeadingAndTrailing(elements[1].trim());
}
}
}
}
return consumerKey;
}
/**
* Help to extract consumer key from OAuth header
* @param base
* @return
*/
private static String removeLeadingAndTrailing(String base) {
String result = base;
if (base.startsWith("\"") || base.endsWith("\"")) {
result = base.replace("\"", "");
}
return result.trim();
}
private static long ipToLong(InetAddress ip) {
byte[] octets = ip.getAddress();
long result = 0;
for (byte octet : octets) {
result <<= 8;
result |= octet & 0xff;
}
return result;
}
public static void main(String[] args) throws UnknownHostException {
System.out.println(isIpInRange("192.168.1.1","192.168.1.1-192.168.1.10"));
System.out.println(isIpInRange("192.168.1.4","192.168.1.1-192.168.1.10"));
System.out.println(isIpInRange("192.164.1.10","192.168.1.1-192.168.1.10"));
System.out.println(isIpInRange("193.168.1.1","192.168.1.1-192.168.1.10"));
System.out.println(extractCustomerKeyFromAuthHeader("oauth_consumer_key=\"nq21LN39VlKe6OezcOndBx\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"DZKyT75hiOIdtMGCU%2BbITArs4sU%3D\", oauth_timestamp=\"1328590467\", oauth_nonce=\"7031216264696\", oauth_version=\"1.0\""));
}
}