📄 msqlgen.java
字号:
package net.jumperz.app.MGuardian.rule;
import java.io.*;
import java.util.*;
import net.jumperz.util.*;
import net.jumperz.app.MGuardian.plugin.*;
public class MSqlGen
{
private static final String USAGE = "Usage: java net.jumperz.app.MGuardian.rule.MChecker RULE_FILE_NAME";
private List requestRuleList = new ArrayList();
private List responseRuleList = new ArrayList();
private Map idRuleMap = new HashMap();
//-------------------------------------------------------------------------------------------
public static void main( String[] args )
{
if( args.length != 1 )
{
System.out.println( USAGE );
return;
}
else
{
MSqlGen instance = new MSqlGen();
try
{
instance.loadFromFile( args[ 0 ] );
}
catch( IOException e )
{
System.err.println( e );
}
}
}
//--------------------------------------------------------------------------------
public void loadFromFile( String ruleFileName )
throws IOException
{
int seq = 0;
String line = null;
String id = null;
String revision = null;
String name = null;
String type = null;
String patternStr = null;
String conditionStr = null;
String caseSensitiveFlagStr = null;
String logFlagStr = null;
String action = null;
String command = null;
int revisionInt = 0;
boolean caseSensitiveFlag;
boolean logFlag;
//String action = MAbstractRule.ACTION_BLOCK;
boolean negationFlag;
List pluginList = null;
String currentFileName = ruleFileName;
BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream( ruleFileName ), MCharset.CS_ISO_8859_1 ) );
Stack readerStateStack = new Stack();
Set varSet = new HashSet();
for( int lineNumber = 1; ; ++lineNumber )
{
line = reader.readLine();
if( line == null )
{
if( readerStateStack.empty() )
{
break;
}
else
{
MReaderState readerState = ( MReaderState )readerStateStack.pop();
reader = readerState.getReader();
lineNumber = readerState.getCurrentLineNumber();
currentFileName = readerState.getCurrentFileName();
}
}
else if( line.indexOf( "include" ) == 0 )
{
if( false
|| id != null
|| revision != null
|| name != null
|| type != null
|| patternStr != null
|| conditionStr != null
|| caseSensitiveFlagStr != null
|| logFlagStr != null
|| action != null
|| command != null
|| pluginList != null
)
{
throwParseError( currentFileName, lineNumber );
}
MReaderState readerState = new MReaderState();
readerState.setCurrentFileName( currentFileName );
readerState.setCurrentLineNumber( lineNumber );
readerState.setReader( reader );
readerStateStack.push( readerState );
String nextFileName = MRegEx.getMatch( "^include\\s{0,}[\"']{1}(.*)[\"']$", line );
File nextFile = new File( nextFileName );
if( !nextFile.isAbsolute() )
{
File currentFile = new File( currentFileName );
File parentDir = currentFile.getParentFile();
nextFile = new File( parentDir.getCanonicalPath() + "/" + nextFileName );
}
lineNumber = 1;
currentFileName = nextFile.getAbsolutePath();
reader = new BufferedReader( new InputStreamReader( new FileInputStream( nextFile ), MCharset.CS_ISO_8859_1 ) );
}
else if( line.matches( "^var\\s{1,}%.*$" ) )
{
if( false
|| id != null
|| revision != null
|| name != null
|| type != null
|| patternStr != null
|| conditionStr != null
|| caseSensitiveFlagStr != null
|| logFlagStr != null
|| action != null
|| command != null
|| pluginList != null
)
{
throwParseError( currentFileName, lineNumber );
}
String varName = MRegEx.getMatch( "^var\\s{1,}(%[-_a-zA-Z0-9]{1,}%)", line );
if( varName.equals( "" ) )
{
throwParseError( currentFileName, lineNumber );
}
String varExpression = MRegEx.getMatch( "\"(.*)\"$", line );
if( varExpression.equals( "" ) )
{
throwParseError( currentFileName, lineNumber );
}
MVariable var = new MVariable();
var.setName( varName );
var.setExpression( varExpression );
if( varSet.contains( var ) )
{
// duplicate variable name
throwParseError( currentFileName, lineNumber );
}
varSet.add( var );
}
else if( line.equalsIgnoreCase( "<rule>" ) )
{
if( false
|| id != null
|| revision != null
|| name != null
|| type != null
|| patternStr != null
|| conditionStr != null
|| caseSensitiveFlagStr != null
|| logFlagStr != null
|| action != null
|| command != null
|| pluginList != null
)
{
throwParseError( currentFileName, lineNumber );
}
}
else if( line.equalsIgnoreCase( "</rule>" ) )
{
if( false
|| id == null
|| revision == null
|| name == null
|| type == null
|| patternStr == null
|| conditionStr == null
|| caseSensitiveFlagStr == null
|| logFlagStr == null
|| action == null
|| command == null
)
{
throwParseError( currentFileName, lineNumber );
}
caseSensitiveFlag = ( caseSensitiveFlagStr.equalsIgnoreCase( "YES" ) );
logFlag = ( logFlagStr.equalsIgnoreCase( "YES" ) );
negationFlag = ( conditionStr.equalsIgnoreCase( "NOT MATCH" ) );
/*
if( actionStr.equalsIgnoreCase( "NONE" ) )
{
action = MAbstractRule.ACTION_NONE;
}
else if( actionStr.equalsIgnoreCase( "BLOCK" ) )
{
action = MAbstractRule.ACTION_BLOCK;
}
else if( actionStr.equalsIgnoreCase( "PASS" ) )
{
action = MAbstractRule.ACTION_PASS;
}
else
{
throwParseError( currentFileName, lineNumber );
}
*/
MAbstractRule rule = null;
if( type.equalsIgnoreCase( "address" ) )
{
rule = new MAddressRule();
}
else if( type.equalsIgnoreCase( "requestLine" ) )
{
rule = new MRequestLineRule();
}
else if( type.equalsIgnoreCase( "requestUri" ) || type.equalsIgnoreCase( "requestUrl" ) )
{
rule = new MRequestUriRule();
}
else if( type.equalsIgnoreCase( "requestUriPath" ) )
{
rule = new MRequestUriPathRule();
}
else if( type.equalsIgnoreCase( "requestUriParam" ) )
{
rule = new MRequestUriParamRule();
}
else if( type.equalsIgnoreCase( "requestUriQuery" ) )
{
rule = new MRequestUriQueryRule();
}
else if( type.equalsIgnoreCase( "paramValue" ) )
{
rule = new MParamValueRule();
}
else if( type.equalsIgnoreCase( "requestHeader" ) )
{
rule = new MRequestHeaderRule();
}
else if( type.equalsIgnoreCase( "requestBody" ) )
{
rule = new MRequestBodyRule();
}
else if( type.equalsIgnoreCase( "decodedRequestBody" ) )
{
rule = new MDecodedRequestBodyRule();
}
else if( type.equalsIgnoreCase( "statusLine" ) )
{
rule = new MStatusLineRule();
}
else if( type.equalsIgnoreCase( "responseHeader" ) )
{
rule = new MResponseHeaderRule();
}
else if( type.equalsIgnoreCase( "responseBody" ) )
{
rule = new MResponseBodyRule();
}
else if( type.equalsIgnoreCase( "responseBody2" ) )
{
rule = new MResponseBodyRule2();
}
else if( type.equalsIgnoreCase( "responseBodyHead" ) )
{
rule = new MResponseBodyHeadRule();
}
else if( type.equalsIgnoreCase( "responseBodyLine" ) )
{
rule = new MResponseBodyLineRule();
}
else if( type.equalsIgnoreCase( "ruleGroup" ) )
{
rule = getRuleGroupInstance( patternStr );
}
else
{
throwParseError( currentFileName, lineNumber );
}
// construct rule
rule.setId( id );
rule.setRevision( revisionInt );
rule.setName( name );
rule.setPattern( patternStr, !caseSensitiveFlag );
rule.setNegationFlag( negationFlag );
rule.setLogFlag( logFlag );
rule.setAction( action );
rule.setCommand( command );
rule.setPluginList( pluginList );
rule.init();
// set rule to idRuleMap for ruleGroups
if( idRuleMap.containsKey( id ) )
{
System.err.println( "duplicate rule id" );
throwParseError( currentFileName, lineNumber );
}
idRuleMap.put( id, rule );
int ruleType = rule.getRuleType();
if( ruleType == MAbstractRule.REQUEST )
{
requestRuleList.add( rule );
}
else if( ruleType == MAbstractRule.RESPONSE )
{
responseRuleList.add( rule );
}
else
{
throw new IOException( "invalid ruleType" );
}
Map typeMap = new HashMap();
typeMap.put( "requestLine","0");
typeMap.put( "requestUri","1");
typeMap.put( "requestUriPath","2");
typeMap.put( "requestUriParam","3");
typeMap.put( "requestUriQuery","4");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -