Esempio n. 1
0
def fw(req, name, params):

    location = 'admin:fw'

    # get current config

    config = vsutil.fw_get_config(name)['CURRENT']

    body_tmpl = _tmpl_path('fw_body.html')

    mode = config['mode']
    if mode == 'block':
        rules = config['open']
    else:
        rules = config['close']

    body_vars = {'mode': mode, 'rules': rules}

    vars = {
        'global_menu': _global_menu(req, name, location),
        'body': psp.PSP(req, body_tmpl, vars=body_vars),
        'name': name
    }

    p = psp.PSP(req, _tmpl_path('main_frame.html'), vars=vars)

    p.run()

    return apache.OK
Esempio n. 2
0
def status(req, name, params):

    location = 'admin:status'

    status = 'stopped'
    if vsutil.is_running(name):
        status = 'running'
    elif os.path.exists(os.path.join(cfg.ETC_VSERVERS, name, '.rebuild')):
        status = 'rebuilding'
    elif os.path.exists(os.path.join(cfg.VAR_DB_OPENVPS, 'suspend', name)):
        status = 'suspended'

    # avoid caching at all costs
    req.err_headers_out['Pragma'] = 'no-cache'
    req.err_headers_out['Cache-Control'] = 'no-cache'
    req.err_headers_out['Expires'] = 'Tue, 25 Jan 2000 10:30:00 GMT'

    body_tmpl = _tmpl_path('status_body.html')
    body_vars = {'status': status}

    vars = {
        'global_menu': _global_menu(req, name, location),
        'body': psp.PSP(req, body_tmpl, vars=body_vars),
        'name': name
    }

    p = psp.PSP(req, _tmpl_path('main_frame.html'), vars=vars)

    p.run()

    return apache.OK
Esempio n. 3
0
def linklint_handler(req, query, messages):

    path = req.filename

    req.filename = content_dir + "validator/linklint.pyl"

    """new version of py_handler() to work with PSP templates"""

    # get string from our customized handler()
    fakereq = DummyPage(req)
    f = open(req.filename, "r")
    filepath, filename = os.path.split(req.filename)
    oldpath = sys.path
    sys.path.append(filepath) #Allow files to import from their directory - bad?
    module = imp.load_source(os.path.splitext(filename)[0], req.filename, f)
    sys.path = oldpath
    module.handler(fakereq, query, path)
    user_content = fakereq.get_page()

    title = ("%s | Linklint Check - " % cfg.get('core', 'rg_abbrev').upper()) + path

    breadcrumbs = get_breadcrumbs(req)
    data = dict(cfg=cfg, psp=psp, breadcrumbs=breadcrumbs, title=title,
                user_content=user_content, nav_urls=nav_urls, messages=messages)

    template = psp.PSP(req, filename=cfg.get('core', 'template_file'))
    template.run(data)

    f.close()

    return apache.OK
Esempio n. 4
0
def createUser(req, **args):
    _startPage(req)
    _printMenu(req)
    #    req.write(str(args))
    if not args.has_key('confirm'):
        template = psp.PSP(req, filename='templates/template_manage_user.html')
        template.run({
            'userAdd_URI': (req.parsed_uri[apache.URI_PATH], 'Create'),
            'userInfo':
            [('Name:', 'text', 'name', '', '20', '20'),
             ('First Name:', 'text', 'first_name', '', '20', '20'),
             ('UserName:'******'text', 'username', '', '15', '15'),
             ('Affiliation:', 'textbox', 'affiliation', '', '100', '15', '6'),
             ('CERN tel. no.:', 'text', 'cern_tel', '', '12', '12'),
             ('CERN GSM no.:', 'text', 'cern_gsm', '', '12', '12'),
             ('Known languages:', 'text', 'known_langs', '', '50', '25')]
        })
    else:
        if args['confirm'] == 'Create':
            msg = lib.doCreateUser(args)
            req.write(msg)
        elif args['confirm'] == 'Modify':
            if lib.doUpdateUser(args) == SUCCESS:
                util.redirect(req, SHIFTDB_SCRIPTNAME + '/manageUsers')
            else:
                req.write(
                    '<center>Error when trying to modify %s [%s]...</center>' %
                    (args['username'], args['user_id']))

        else:
            req.write('<center>Bad function call...</center>')
    _endPage(req)
Esempio n. 5
0
def history(req, uri):
    if wikidiff2 == None:
        return apache.HTTP_NOT_FOUND

    here = os.path.dirname(__file__)

    # XXX: naive datetime
    history = pull(
        '''
        select "id", "uri", "from", "user", "host", "when"::timestamp, "approved"
        from "wikicyte"."approved"(now())
        where
            "uri" = %(uri)s or %(uri)s is null
        order by "when" desc nulls last
    ''', locals())

    head(req)

    psp.PSP(req, filename=(here + '/wikicyte-history.psp')).run(
        vars=dict({
            'uri': uri,
            'history': history
        }, **base))

    return apache.OK
Esempio n. 6
0
def index(req):
    session = Session(req, lock=False)
    # output directory for uploaded files used in _upload_limit.py
    session.lock()
    session['outdir'] = outdir
    session.save()
    session.unlock()
    return psp.PSP(req, 'test.html', vars={})
Esempio n. 7
0
def _printMenu(req):
    psp.PSP(req, filename= 'templates/template_top_menu.html').run({'arguments':[\
        ('Create User',SHIFTDB_SCRIPTNAME + '/createUser'),\
        ('Manage Users',SHIFTDB_SCRIPTNAME + '/manageUsers'),\
        ('Create Shift',SHIFTDB_SCRIPTNAME + '/createShift'),\
        ('Manage Shifts',SHIFTDB_SCRIPTNAME + '/manageShifts'),\
        ('Create Piquet',SHIFTDB_SCRIPTNAME + '/createPiquet'),\
        ('Manage Piquets',SHIFTDB_SCRIPTNAME + '/managePiquets')]})
Esempio n. 8
0
def rebuild(req, name, params):

    location = 'admin:rebuild'

    body_tmpl = _tmpl_path('rebuild_body.html')

    body_vars = {}

    vars = {
        'global_menu': _global_menu(req, name, location),
        'body': psp.PSP(req, body_tmpl, vars=body_vars),
        'name': name
    }

    p = psp.PSP(req, _tmpl_path('main_frame.html'), vars=vars)

    p.run()

    return apache.OK
Esempio n. 9
0
def edit_handler(req, query, messages):
    req.content_type = "text/html"

    if not os.path.isfile(req.filename) and \
       not (req.filename.endswith('_') and os.path.isfile(req.filename[:-1])):
        req.send_http_header()
        return apache.HTTP_NOT_FOUND

    if req.filename.endswith('_'):
        req.send_http_header()
        return psp.handler(req)

    user_content = ''

    if not os.path.isfile(req.filename) or os.path.islink(req.filename) or \
            not (req.filename.endswith('.pml') or req.filename.endswith('.html')):
        sorry_text = """
                <html><head><title>Can't edit this file | %s </title></head><body><h1>Can't edit this content</h1>
                <p>To edit underlay or python code, ssh to the site</p>
                </body></html>
            """ % cfg.get('core', 'rg_abbrev').upper()
        req.write(sorry_text)
        return apache.HTTP_FORBIDDEN

    f = open(req.filename, 'r')
    title_re = re.search(r"\<title\>(.*)\<\/title\>", f.read())
    f.close()
    if title_re:
        title = "Edit %s | %s " % (title_re.groups()[0], cfg.get('core', 'rg_abbrev').upper())
    else:
        title = "Edit %s | %s " % (req.filename, cfg.get('core', 'rg_abbrev').upper())

    # See if page is requesting custom banner
    banner_img = None

    f = open(req.filename, 'r')
    banner_re = re.search(r"\<banner\>(.*)\<\/banner\>", f.read())
    f.close()
    if banner_re:
        banner_img = banner_re.groups()[0]

    breadcrumbs = get_breadcrumbs(req)
    f = open(req.filename, "r")
    user_content = f.read()
    f.close()
    data = dict(psp=psp, breadcrumbs=breadcrumbs, title=title, banner_img=banner_img,
                user_head_content='',
                user_content=user_content, cfg=cfg,
                nav_urls=nav_urls, messages=messages)

    template_file = cfg.get('core', 'template_file_edit')
    template = psp.PSP(req, filename=template_file)
    template.run(data)
    return apache.OK
Esempio n. 10
0
def bwlimit(req, name, params):

    location = 'admin:bwlimit'

    # enumerate bands from lowest to the CAP in 256kbit
    # increments, then moving to 512kbit increments

    bands = [('256Kbit', 1024 * 256), ('512Kbit', 1024 * 512)]
    for x in range(1, 10):
        bands.append(('%dMbit' % x, 1024 * 1024 * x))
    for x in range(10, 100, 10):
        bands.append(('%dMbit' % x, 1024 * 1024 * x))
    for x in range(100, 1100, 100):
        bands.append(('%dMbit' % x, 1024 * 1024 * x))

    # now weed out everything above the cap
    bands = [x for x in bands if x[1] <= cfg.DFT_VS_RATE_CAP]

    # get current limit
    limit, cap = vsutil.get_bwlimit(name)
    if not limit:
        limit = cfg.DFT_VS_CEIL

    body_tmpl = _tmpl_path('bwlimit_body.html')

    body_vars = {'bands': bands, 'limit': limit}

    vars = {
        'global_menu': _global_menu(req, name, location),
        'body': psp.PSP(req, body_tmpl, vars=body_vars),
        'name': name
    }

    p = psp.PSP(req, _tmpl_path('main_frame.html'), vars=vars)

    p.run()

    return apache.OK
Esempio n. 11
0
def block(req, name, params):

    location = 'admin:block'

    # get current config

    ips = vsutil.fw_get_config(name)['BLOCK']

    body_tmpl = _tmpl_path('block_body.html')

    body_vars = {'ips': ' '.join(ips)}

    vars = {
        'global_menu': _global_menu(req, name, location),
        'body': psp.PSP(req, body_tmpl, vars=body_vars),
        'name': name
    }

    p = psp.PSP(req, _tmpl_path('main_frame.html'), vars=vars)

    p.run()

    return apache.OK
Esempio n. 12
0
def edit(req, uri):
    req.get_basic_auth_pw()
    user = req.user

    if anon(user):
        return apache.HTTP_FORBIDDEN

    here = os.path.dirname(__file__)
    form = util.FieldStorage(req)

    if req.method == 'POST':
        save(req, form, uri)
        target = parm(form, 'target')
        if target == None:
            target = uri
        util.redirect(req, target)
        return apache.OK

    page = luri(uri)
    uri = exml(uri)

    target = parm(form, 'target')
    if target != None:
        target = exml(target)

    if page == None:
        rev = None
        data = ''
    else:
        rev = int(page['id'])
        data = exml(page['data'])

    head(req)
    data = clean(data)

    if data.startswith('\n'):
        data = '\n' + data
    data = data.encode('utf8')

    psp.PSP(req, filename=(here + '/wikicyte-edit.psp')).run(
        vars=dict({
            'uri': uri,
            'rev': rev,
            'data': data,
            'target': target
        }, **base))

    return apache.OK
Esempio n. 13
0
def _global_menu(req, vps, location):

    if ':' in location:
        hlight, s_hlight = location.split(':')
    else:
        hlight, s_hlight = location, ''

    menu_items = _navigation_map(req, vps)

    m = psp.PSP(req,
                _tmpl_path('global_menu.html'),
                vars={
                    'menu_items': menu_items,
                    'hlight': hlight,
                    's_hlight': s_hlight
                })
    return m
Esempio n. 14
0
def diff(req, lid, rid):
    if wikidiff2 == None:
        return apache.HTTP_NOT_FOUND

    here = os.path.dirname(__file__)

    lpage = pid(lid)
    rpage = pid(rid)
    head(req)

    ldata = lpage['data'].encode('utf8')
    rdata = rpage['data'].encode('utf8')

    diff = wikidiff2.wikidiff2_do_diff(ldata, rdata, 2)
    diff = diff.replace('"></td>', '">&#160;</td>')

    psp.PSP(req, filename=(here + '/wikicyte-diff.psp')).run(
        vars=dict({'diff': diff}, **base))

    return apache.OK
Esempio n. 15
0
def search_handler(req, query, messages):

    path = os.path.dirname(req.filename)
    fakereq = DummyPage(req)
    f = open(req.filename, "r")
    filepath, filename = os.path.split(req.filename)
    oldpath = sys.path
    sys.path.append(filepath) #Allow files to import from their directory - bad?
    module = imp.load_source(os.path.splitext(filename)[0], req.filename, f)
    sys.path = oldpath
    module.handler(fakereq, query, path)
    user_content = fakereq.get_page()
    title = module.get_title(req, query, path)

    breadcrumbs = get_breadcrumbs(req)

    data = dict(cfg=cfg, psp=psp, breadcrumbs=breadcrumbs, title=title,
                user_content=user_content, nav_urls=nav_urls, messages=messages)

    template = psp.PSP(req, filename=cfg.get('core', 'template_file'))
    template.run(data)

    return apache.OK
Esempio n. 16
0
def displayPage(req,
                contentblocks,
                pagetitle="Python Project 2007",
                sidebarblocks=generateSideBarContent(),
                show_code_css=False):
    curmicroseconds = datetime.datetime.now().microsecond
    req.content_type = 'text/html'
    t = psp.PSP(req, filename="templates/page.tmpl")
    t.run(
        vars={
            "pagetitle":
            pagetitle,
            "sidebarblocks":
            sidebarblocks,
            "contentblocks":
            contentblocks,
            "show_code_css":
            show_code_css,
            "elapsedseconds": (
                math.pow(10, -6) *
                (datetime.datetime.now().microsecond - curmicroseconds))
        })
    return
Esempio n. 17
0
def createShift(req, **args):
    _startPage(req)
    _printMenu(req)

    #_endPage(req)
    #return
    dbo = lib.DB_Object()
    shift_types = dbo.execSQL('SELECT * FROM SHIFTTYPE').fetchall()
    #req.write(str(shift_types))
    #users=lib.doGetUsers((*,))
    #for i in range(len(shift_types)):
    #shift_types[0]=shift_types[0]+('is_selected',)
    template = psp.PSP(req, filename='templates/template_manage_shifts.html')
    template.run({
        'shift_ActionURI': (req.parsed_uri[apache.URI_PATH], 'Create'),
        'shift_opts': shift_types,
        'sh_resps': (),
        'usr_assigned': (),
        'usr_available': ()
    })
    #to complete here!!!

    _endPage(req)
Esempio n. 18
0
def login(req, **args):

    if args.has_key('username') and args.has_key('password'):
        # try to authenticate the user
        # if yes redirect util.redirect('<target>')
        # else continue and print a message
        if authenticate(args['username'], args['password'], args['rights']):

            session = Session.Session(req)
            session['hits'] = 1
            session['username'] = args['username']
            session['user_ip'] = req.get_remote_host()
            #need rights too!
            session.save()
            util.redirect(req, SHIFTDB_SCRIPTNAME)
    _startPage(req)
    #req.write(str(args))
    template = psp.PSP(req, filename='templates/template_online_login.html')
    template.run({
        'target': req.parsed_uri[apache.URI_PATH],
        'username': '',
        'password': '',
    })
    _endPage(req)
Esempio n. 19
0
def _startPage(req):
    req.content_type = "text/html"
    psp.PSP(req, filename='templates/template_online_start_page.html').run()
Esempio n. 20
0
def login(req, vserver_name, message=''):

    if req.method == 'POST':
        # someone is trying to login

        fs = util.FieldStorage(req)
        userid = fs.getfirst('userid')
        passwd = fs.getfirst('passwd')
        uri = fs.getfirst('uri')

        vservers = vsutil.list_vservers()
        if ((vserver_name == userid and vservers.has_key(vserver_name)
             and vds.checkpw(vserver_name, userid, passwd)) or
                # root
            (userid == SUPER and vds.checkpw('/', userid, passwd)) or
                # superuser
            (userid == cfg.PANEL_SUPERUSER
             and crypto.check_passwd_md5(passwd, cfg.PANEL_SUPERUSER_PW))):

            # plant the cookie
            key = _read_priv_key()
            cookie = RSASignedCookie.RSASignedCookie(
                'openvps-user', "%d:%s" % (time.time(), userid), key)
            cookie.path = '/'
            Cookie.add_cookie(req, cookie)

            if uri and not uri.endswith('login'):
                util.redirect(req, str(uri))
            else:
                util.redirect(req, '/admin/%s/status' % vserver_name)

        else:
            message = 'invalid login or password'

    # if we got here, either it's not a POST or login failed

    # it's possible that some qargs were passed in

    qargs = {}

    if req.args:
        qargs = util.parse_qs(req.args)
        if qargs.has_key('m'):
            if not message:
                if qargs['m'][0] == '1':
                    message = 'please log in'
                elif qargs['m'][0] == '2':
                    message = 'session time-out, please log in again'

    if qargs.has_key('url'):
        url = qargs['url'][0]
    else:
        url = req.uri

    body_tmpl = _tmpl_path('login_body.html')
    body_vars = {'message': message, 'url': url}

    vars = {
        'global_menu': '',
        'body': psp.PSP(req, body_tmpl, vars=body_vars),
        'name': ''
    }

    p = psp.PSP(req, _tmpl_path('main_frame.html'), vars=vars)

    p.run()

    return apache.OK
Esempio n. 21
0
def footer(req):
    """ html navigation footer """
    from mod_python import psp
    tmpl = psp.PSP(req, filename='footer.tmpl')
    tmpl.run(vars = { 'time': -req.mtime+req.request_time })
Esempio n. 22
0
def navigation(req):
    """ main html navigation header """
    from mod_python import psp
    req.content_type = "text/html"
    parse_args(req)
    datapath = req.datapath
    location = req.location

    # deal with session
    if req.sess.is_new():
	    msg = "<b>Welcome %s</b><br>" % req.sess['login']
    else:
	    msg = "<b>Welcome back %s</b><br>" % req.sess['login']

    # start writing
    tmpl = psp.PSP(req, filename='header.tmpl')
    tmpl.run(vars = { 'title': "aubioweb / %s / %s" % (req.first,location),
    		'basehref': '/~piem/',
		'message': msg,
    		'action': req.first})

    req.write("<h2>Content of ")
    print_link(req,"","/")
    y = location.split('/')
    for i in range(len(y)-1): 
    	print_link(req,"/".join(y[:i+1]),y[i])
	req.write(" / ")
    req.write("%s</h2>\n" % y[-1])

    a = {'show_info' : 'info',
    	 'show_sound': 'waveform',
    	 'show_onset': 'onset',
    	 'index'     : 'index',
	 'show_pitch': 'pitch',
	 'play_m3u': 'stream (m3u/ogg)',
	 'play_ogg': 'save (ogg)',
	 'play_wav': 'save (wav)',
	 }

    # print task lists (only remaining tasks)
    print_link(req,re.sub('%s.*'%req.last,'',location),"go up")
    akeys = a.keys(); akeys.sort();
    curkey = req.first
    for akey in akeys: 
        if akey != curkey:
    		req.write(":: ")
		print_link(req,"/".join((akey,location)),a[akey])
	else:
    		req.write(":: ")
		req.write("<b>%s</b>" % a[akey])
    req.write("<br>")

    # list the content of the directories
    listdir,listfiles = [],[]
    if os.path.isdir(datapath):
        listfiles = list_snd_files(datapath)
    	listdir = list_dirs(datapath)
	listdir.pop(0) # kick the current dir
    elif os.path.isfile(datapath):
        listfiles = [datapath]
	listdir = [re.sub(req.last,'',location)]

    link_list(req,listdir,title="Subdirectories")
    link_list(req,listfiles,title="Files")
Esempio n. 23
0
def showChapter(req, chapter):
    relativepath = "/python/files/Chapter Exercises/" + str(chapter) + "/"
    fullpath = "/var/www/html"
    filelocation = fullpath + relativepath

    exercisefiles = getfiles(filelocation)
    exercises = []
    exercisefiles.sort()
    for file in exercisefiles:
        if file[:8] != "exercise":
            continue

        curfile = open("./" + file)
        contents = curfile.read()

        vals = {}
        for match in re.finditer(r"(?im)^#\s*(\w+):(.*)$", contents):
            vals[match.group(1).strip().lower()] = match.group(2).strip()

        if vals.has_key("exercise"):
            exercise = "<a href='view?chap=" + chapter.lower().strip(
                "chapter ") + "&exercise=" + file.strip(
                    "exercise.py") + "'>" + vals["exercise"] + "</a>"
        else:
            exercise = "Unknown"

        if vals.has_key("start") & vals.has_key("end"):
            timestring = "%I:%M:%S %p %m/%d/%Y"
            dur = duration(
                time.mktime(time.strptime(vals["end"], timestring)) -
                time.mktime(time.strptime(vals["start"], timestring)))
        else:
            dur = "Unknown"

        if vals.has_key("rating"):
            if vals['rating'] == "1":
                ratingcolor = "#FF687C"
            elif vals['rating'] == "2":
                ratingcolor = "#FF8C33"
            elif vals['rating'] == "3":
                ratingcolor = "#FFF04D"
            elif vals['rating'] == "4":
                ratingcolor = "#B2FF3E"
            rating = vals['rating']
        else:
            ratingcolor = "#FFFFFF"
            rating = "Unknown"

        if vals.has_key("note"):
            note = vals['note']
        else:
            note = "Unknown"

        exercises.append({
            "exercise": exercise,
            "duration": dur,
            "rating": rating,
            "ratingcolor": ratingcolor,
            "note": note
        })

    t2 = psp.PSP(req,
                 filename="templates/chaptergrid.tmpl",
                 vars={"exercises": exercises})

    return t2
Esempio n. 24
0
def _endPage(req):
    psp.PSP(req, filename='templates/template_online_end_page.html').run()
Esempio n. 25
0
def handler(req):
    req.content_type = 'text/plain'
    req.headers_out['X-My-header'] = 'hello world'

    cookies = Cookie.get_cookies(req)
    if 'counter' in cookies:
        c = cookies['counter']
        c.value = int(c.value) + 1
        Cookie.add_cookie(req, c)
    else:
        Cookie.add_cookie(req, 'counter', '1')

    # get query string / POST data
    # see: https://stackoverflow.com/a/27448720
    fields = util.FieldStorage(req)

    # NOTE: use req.write() after set HTTP headers
    if 'note' in fields:
        # NG
        req.write('set after body\n')
        Cookie.add_cookie(req, 'after_write', 'yes')
        req.headers_out['X-After-Write'] = 'oh'
        return apache.OK

        # OK
        # Cookie.add_cookie(req, 'after_write', 'yes')
        # req.headers_out['X-After-Write'] = 'oh'
        # req.write('set after body\n')
        # return apache.OK

    # Usage PSP template
    if fields.get('psp', None):
        req.content_type = 'text/html'
        template = psp.PSP(req, filename='template.html')
        template.run({'query_string': fields.get('psp', None)})
        return apache.OK

    if '404' in fields:
        return apache.HTTP_NOT_FOUND

    if 'error' in fields:
        return apache.SERVER_RETURN

    if 'redirect' in fields:
        util.redirect(req, 'https://www.google.co.jp')

    # OK - get CGI environment value
    if 'env1' in fields:
        req.add_common_vars()
        env = req.subprocess_env
        # get CGI value: HTTP_HOST
        host = env.get('HTTP_HOST')
        req.write('subprocess_env(HTTP_HOST): {}\n'.format(host))

    # NG - get CGI environment value
    if 'env2' in fields:
        env = req.subprocess_env
        host = env.get('HTTP_HOST')
        req.write('subprocess_env(HTTP_HOST): {}\n'.format(host))
        return apache.OK

    # NG - get CGI environment value
    # NEED mod_python 3.4.1 over
    if 'env3' in fields:
        req.add_cgi_vars()
        env = req.subprocess_env
        req.write(env.get('HTTP_HOST', 'foo'))
        return apache.OK

    # Write Request object
    req.write('request.args: {}\n'.format(req.args))
    # => None / foo=bar

    req.write('request.method: {}\n'.format(req.method))
    # => GET

    # Why: return apache.OK / req.status
    req.write('request.status: {}\n'.format(req.status))
    # => 200

    req.write('request.filename: {}\n'.format(req.filename))
    # => /var/www/mpytest/mp/generic_handler.py

    req.write('request.get_remote_host(): {}\n'.format(
        req.get_remote_host(apache.REMOTE_NOLOOKUP)))
    # => 192.168.69.1

    # request HTTP header
    # headers_in is dict like object (mod_python.apache.table)
    for k, v in req.headers_in.items():
        req.write('headers_in:  key -> {} / value -> {}\n'.format(k, v))

    for k, v in fields.items():
        req.write('FieldStorage:  key -> {} / value -> {}\n'.format(k, v))

    req.write('Hello world')

    # output HTTP Status Code
    return apache.OK
Esempio n. 26
0
def psp_handler(req, query, messages):
    req.content_type = "text/html; charset=utf-8"

    if not os.path.isfile(req.filename) and \
       not (req.filename.endswith('_') and os.path.isfile(req.filename[:-1])):
        req.send_http_header()
        return apache.HTTP_NOT_FOUND

    # Debugging output.  Needs PythonDebug in the apache conf.
    if req.filename.endswith('_'):
        req.send_http_header()
        return psp.handler(req)

    user_content = ''

    # trick PSP to give us a string for the user page
    # and pass it to the template
    fakereq = DummyPage(req)
    user_page = psp.PSP(fakereq, filename=req.filename)
    data = dict(cfg=cfg)
    try:
        user_page.run(data)
    except apache.SERVER_RETURN:
        req.page = fakereq.page
        req.status = fakereq.status
        return apache.OK
    user_content = fakereq.get_page()

    # some variables needed in our templates
    breadcrumbs = get_breadcrumbs(req)

    f = open(req.filename, "r")
    title_re = re.search(r"\<title\>(.*)\<\/title\>", f.read())
    f.close()
    # If the user content was a tuple, it means we specified extra data for the <head>
    user_head_content = ""
    if type(user_content) is tuple:
        user_head_content = user_content[1]
        user_content = user_content[0]

    if cfg.has_option('core', 'titletemplate'):
        title = cfg.get('core', 'titletemplate')
    else:
        title = "%s | CSIRO's Data61" % cfg.get('core', 'rg_abbrev').upper()


    if title_re:
        title_end = title_re.end()
        title = "%s | %s" % (title_re.groups()[0], title)
    else:
        # Default to the ugly URL
        cur_url = req.filename[len(cfg.get('core', 'content_dir')):].strip('/')
        live_url = '%s' % cfg.get('hosts', 'url')+'/'+cur_url
        live_url = cur_url

        # Set the title
        title = "%s | %s" % (title, live_url)

    # See if page is requesting custom banner
    banner_img = None
    f = open(req.filename, "r")
    banner_re = re.search(r"\<banner\>(.*)\<\/banner\>", f.read())
    f.close()

    if banner_re:
        banner_img = banner_re.groups()[0]

    data = dict(psp=psp, breadcrumbs=breadcrumbs, title=title,
                banner_img=banner_img, user_head_content=user_head_content,
                user_content=user_content, cfg=cfg, nav_urls=nav_urls,
                messages=messages)

    template_file = cfg.get('core', 'template_file')
    if 'media' in query:
        if query['media'][0] == 'print':
            template_file = cfg.get('core', 'template_file_print')
    try:
        template = psp.PSP(req, filename=template_file)
    except Exception as e:
        req.send_http_header()
        req.write("Template prep failed, $s\n", str(e))
        traceback.print_exc()        
        return apache.OK        

    req.send_http_header()
    try:
        template.run(data)
    except Exception as e:
        req.write("template run failed, %s\n" % str(e))
        traceback.print_exc()
    return apache.OK
Esempio n. 27
0
def disk(req, name, params):

    if params.startswith('graph'):

        if not req.args:
            return error(req, 'Not sure what you mean')

        qargs = util.parse_qs(req.args)

        if not qargs.has_key('s'):
            return error(req, 'Where do I start?')

        start = '-' + qargs['s'][0]
        width = 484
        height = 70
        nolegend = ''
        if qargs.has_key('l'):
            nolegend = '-g'  # no legend

        # how many days back?
        secs = abs(int(start))
        if secs < 60 * 60 * 24:
            # we're talking hours
            title = 'last %d hours' % (secs / (60 * 60))
        else:
            title = 'last %d days' % (secs / (60 * 60 * 24))

        rrd = os.path.join(cfg.VAR_DB_OPENVPS, 'vsmon/%s.rrd' % name)
        tfile, tpath = tempfile.mkstemp('.gif', 'oh')
        os.close(tfile)

        args = [
            tpath, '--start', start, '--title', title, '-w',
            str(width), '-h',
            str(height), '-c', 'SHADEB#FFFFFF', '-c', 'SHADEA#FFFFFF', '-l',
            '0',
            'DEF:d=%s:vs_disk_b_used:AVERAGE' % rrd, 'CDEF:db=d,1024,*',
            'AREA:db#4eee94:bytes used'
        ]

        if qargs.has_key('l'):
            args.append('-g')  # no legend

        RRD.graph(*args)

        req.content_type = 'image/gif'
        req.sendfile(tpath)
        os.unlink(tpath)

        return apache.OK

    else:

        location = 'stats:disk'

        body_tmpl = _tmpl_path('disk_body.html')

        rrd = os.path.join(cfg.VAR_DB_OPENVPS, 'vsmon/%s.rrd' % name)
        data = _load_rrd_data(rrd, ['vs_disk_b_used'])

        body_vars = {'data': data}

        vars = {
            'global_menu': _global_menu(req, name, location),
            'body': psp.PSP(req, body_tmpl, vars=body_vars),
            'name': name
        }

        p = psp.PSP(req, _tmpl_path('main_frame.html'), vars=vars)

        p.run()

        return apache.OK
Esempio n. 28
0
def manageUsers(req, **args):
    _startPage(req)
    _printMenu(req)
    if args.has_key('do_action'):
        #here we do extended view, modify or delete
        if args['do_action'] == 'Delete':
            if lib.doDeleteUser(args['id']):
                req.write('User %s successfully deleted!' % (args['username']))
            else:
                req.write('Error when trying to delete user %s ...' %
                          (args['username']))
            _endPage(req)
            return
        elif args['do_action'] in ['View', 'Modify']:
            #if not args.has_key['id']:
            #    _endPage(req)
            #    return
            usr_list = lib.doGetUsers(('*', ), ('ID=%s' % (args['id']), ))
            template = psp.PSP(req,
                               filename='templates/template_manage_user.html')
            if args['do_action'] == 'View':
                action_target = (req.parsed_uri[apache.URI_PATH], 'OK')
            elif args['do_action'] == 'Modify':
                i = req.parsed_uri[apache.URI_PATH].rfind('/')
                action_target = (req.parsed_uri[apache.URI_PATH][0:i] +
                                 '/createUser', 'Modify')
            else:
                _endPage(req)
                return
            template_args = {
                'userAdd_URI':
                action_target,
                'userInfo':
                [('', 'hidden', 'user_id', usr_list[0][0]),
                 ('Name:', 'text', 'name', usr_list[0][1], '20', '20'),
                 ('First Name:', 'text', 'first_name', usr_list[0][2], '20',
                  '20'),
                 ('UserName:'******'text', 'username', usr_list[0][3], '15', '15'),
                 ('Affiliation:', 'textbox', 'affiliation', usr_list[0][4],
                  '100', '15', '6'),
                 ('CERN tel. no.:', 'text', 'cern_tel', usr_list[0][5], '12',
                  '12'),
                 ('CERN GSM no.:', 'text', 'cern_gsm', usr_list[0][6], '12',
                  '12'),
                 ('Known languages:', 'text', 'known_langs', usr_list[0][7],
                  '50', '25')]
            }
        else:
            req.write('Bad action!')
            return
    else:
        #show truncated users list
        base_cols = ('ID', 'NAME', 'FIRST_NAME', 'USERNAME')
        usr_list = lib.doGetUsers(base_cols)
        template = psp.PSP(req,
                           filename='templates/template_list_visualizer.html')
        tbl_header = [('ID', 'hidden'), ('Name', 'text'),
                      ('First Name', 'text'), ('Username', 'text')]
        col_items = []
        for j in range(len(usr_list)):
            for k in range(len(base_cols)):
                col_items.append((base_cols[k].lower(), usr_list[j][k]))
        template_args = {
            'theader':
            tbl_header,
            'actions':
            (req.parsed_uri[apache.URI_PATH], 'View', 'Modify', 'Delete'),
            'titems':
            col_items
        }
    template.run(template_args)
    _endPage(req)
Esempio n. 29
0
def index(req):
    req.content_type = "text/html"
    tmpl = psp.PSP(req, filename="templates/index.html")
    tmpl.run()
Esempio n. 30
0
def pyl_handler(req, query, messages):
    """new version of py_handler() to work with PSP templates"""

    # get string from our customized handler()
    fakereq = DummyPage(req)
    fakereq.user = req.user
    try:
        f = open(req.filename, "r")
        filepath, filename = os.path.split(req.filename)
        oldpath = sys.path
        sys.path.append(filepath) #Allow files to import from their directory - bad?
        module = imp.load_source(os.path.splitext(filename)[0], req.filename, f)
    except:
        req.status = apache.HTTP_NOT_FOUND
        return apache.OK

    sys.path = oldpath
    status = module.handler(fakereq, query)
    user_content = fakereq.get_page()

    # if this is a file download, then don't spit out template
    if "Content-Disposition" in req.headers_out:
        return apache.OK

    if cfg.has_option('core', 'titletemplate'):
        title = cfg.get('core', 'titletemplate')
    else:
        title = "%s | seL4" % cfg.get('core', 'rg_abbrev').upper()

    if "get_title" in dir(module):
        title = module.get_title(req) + " | " + title

    usr_head_content = ""
    if "get_head" in dir(module):
        usr_head_content = module.get_head(req)

    breadcrumbs = get_breadcrumbs(req)
    data = dict(cfg=cfg, psp=psp, breadcrumbs=breadcrumbs, title=title,
                user_content=user_content,
                user_head_content=usr_head_content,
                nav_urls=nav_urls, messages=messages)
    template_file = cfg.get('core', 'template_file')
    if 'media' in query:
        if query['media'][0] == 'print':
            template_file = cfg.get('core', 'template_file_print')

    if status != 0:
        req.status = status

    try:
        template = psp.PSP(req, filename=template_file)
    except Exception as e:
        req.write("psp failed: %s" % str(e))
        return apache.OK


    req.content_type = "text/html; charset=utf-8"
    try:
        template.run(data)
    except apache.SERVER_RETURN:
        req.page = fakereq.page
        req.status = fakereq.status
        return apache.OK
    except Exception as e:
        req.write("template run failed: %s" % str(e))
    return apache.OK