Fetching contributors…
Cannot retrieve contributors at this time
115 lines (90 sloc) 3.98 KB
# Cheroke Admin
# Authors:
# Alvaro Lopez Ortega <>
# Copyright (C) 2001-2014 Alvaro Lopez Ortega
# This program is free software; you can redistribute it and/or
# modify it under the terms of version 2 of the GNU General Public
# License as published by the Free Software Foundation.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
import CTK
from util import *
from consts import *
from Rule import RulePlugin
URL_APPLY = '/plugin/url_arg/apply'
NOTE_ARGUMENT = N_("Argument name")
NOTE_REGEX = N_("Regular Expression for the match")
OPTIONS = [('0', N_('Match a specific argument')),
('1', N_('Match any argument'))]
def commit():
# POST info
key = ('key', None)
vsrv_num = ('vsrv_num', None)
new_match = ('tmp!match', None)
new_any = ('tmp!match_any', "0")
new_arg = ('tmp!arg', None)
# New entry
if new_match:
next_rule, next_pre = cfg_vsrv_rule_get_next ('vserver!%s'%(vsrv_num))
CTK.cfg['%s!match'%(next_pre)] = 'url_arg'
CTK.cfg['%s!match!match'%(next_pre)] = new_match
CTK.cfg['%s!match!match_any'%(next_pre)] = new_any
if not int(new_any):
CTK.cfg['%s!match!arg'%(next_pre)] = new_arg
return {'ret': 'ok', 'redirect': '/vserver/%s/rule/%s' %(vsrv_num, next_rule)}
# Modifications
return CTK.cfg_apply_post()
class Plugin_url_arg (RulePlugin):
def __init__ (self, key, **kwargs):
RulePlugin.__init__ (self, key)
self.vsrv_num = kwargs.pop('vsrv_num', '')
if key.startswith('tmp'):
return self.GUI_new()
return self.GUI_mod()
def GUI_new (self):
any = CTK.ComboCfg('%s!match_any'%(self.key), trans_options(OPTIONS), {'class': 'noauto'})
table = CTK.PropsTable()
table.Add (_('Match type'), any, '')
table.Add (_('Argument'), CTK.TextCfg('%s!arg'%(self.key), False, {'class': 'noauto'}), _(NOTE_ARGUMENT))
table.Add (_('Regular Expression'), CTK.TextCfg('%s!match'%(self.key), False, {'class': 'noauto'}), _(NOTE_REGEX))
# Special events
any.bind ('change', """if ($(this).val() == 0) {
} else {
$("#%(row)s").hide(); }""" %({'row': table[1].id}))
submit = CTK.Submitter (URL_APPLY)
submit += CTK.Hidden ('key', self.key)
submit += CTK.Hidden ('vsrv_num', self.vsrv_num)
submit += table
self += submit
def GUI_mod (self):
table = CTK.PropsTable()
table.Add (_('Match type'), CTK.ComboCfg('%s!match_any'%(self.key), trans_options(OPTIONS)), '')
if not int(CTK.cfg.get_val('%s!match_any'%(self.key), 0)):
table.Add (_('Argument'), CTK.TextCfg('%s!arg'%(self.key), False), _(NOTE_ARGUMENT))
table.Add (_('Regular Expression'), CTK.TextCfg('%s!match'%(self.key), False), _(NOTE_REGEX))
submit = CTK.Submitter (URL_APPLY)
submit += CTK.Hidden ('key', self.key)
submit += CTK.Hidden ('vsrv_num', self.vsrv_num)
submit += table
self += submit
def GetName (self):
match = CTK.cfg.get_val ('%s!match'%(self.key), '')
if int(CTK.cfg.get_val ('%s!match_any'%(self.key), "0")):
return "Any arg. matches ~ %s" %(match)
arg = CTK.cfg.get_val ('%s!arg'%(self.key), '')
return "Arg %s matches %s" %(arg, match)
# Validation, and Public URLs
CTK.publish ("^%s"%(URL_APPLY), commit, method="POST")