Ejemplo n.º 1
0
def create_account():
    """ Create a PythonAnywhere account """
    if not request.vars:
        raise HTTP(400)
    
    if request.vars.username and request.vars.web2py_admin_password:
        # Check if web2py is already there otherwise we get an error 500 too.
        client = ServerProxy('https://%(username)s:%(web2py_admin_password)s@%(username)s.pythonanywhere.com/admin/webservices/call/jsonrpc' % request.vars)
        try:
            if client.login() is True:
                return response.json({'status': 'ok'})
        except ProtocolError as error:
            pass

    import urllib, urllib2
    url = 'https://www.pythonanywhere.com/api/web2py/create_account'
    data = urllib.urlencode(request.vars)
    req = urllib2.Request(url, data)
    
    try:
        reply = urllib2.urlopen(req)
    except urllib2.HTTPError as error:
        if error.code == 400:
            reply = error
        elif error.code == 500:
            return response.json({'status':'error', 'errors':{'username': ['An App other than web2py is installed in the domain %(username)s.pythonanywhere.com' % request.vars]}})
        else:
            raise
    response.headers['Content-Type'] = 'application/json'
    return reply.read()
Ejemplo n.º 2
0
def test_chunks():
    response.view = 'generic.json'
    from gluon.contrib.simplejsonrpc import ServerProxy
    msg = "TEST"

    url = "https://127.0.0.1:8000/data_sync/chunk/call/jsonrpc"

    service = ServerProxy(url, verbose=True)

    chunk = service.get_chunk("user!", "key!", "chunk_id")
    return dict(msg=msg, chunk=chunk)
Ejemplo n.º 3
0
def list_apps():
    """ Get a list of apps both remote and local """
    if not request.vars.username or not request.vars.password:
        raise HTTP(400)
    client = ServerProxy('https://%(username)s:%(password)s@%(username)s.pythonanywhere.com/admin/webservices/call/jsonrpc' % request.vars)
    regex = re.compile('^\w+$')
    local = [f for f in os.listdir(apath(r=request)) if regex.match(f)]
    try:
        pythonanywhere = client.list_apps()
    except ProtocolError as error:
        raise HTTP(error.errcode)
    return response.json({'local': local, 'pythonanywhere': pythonanywhere})
Ejemplo n.º 4
0
def list_apps():
    """ Get a list of apps both remote and local """
    if not request.vars.username or not request.vars.password:
        raise HTTP(400)
    client = ServerProxy(
        'https://%(username)s:%(password)s@%(username)s.pythonanywhere.com/admin/webservices/call/jsonrpc'
        % request.vars)
    regex = re.compile('^\w+$')
    local = [f for f in os.listdir(apath(r=request)) if regex.match(f)]
    try:
        pythonanywhere = client.list_apps()
    except ProtocolError as error:
        raise HTTP(error.errcode)
    return response.json({'local': local, 'pythonanywhere': pythonanywhere})
Ejemplo n.º 5
0
def bulk_install():
    """ Install a list of apps """
    def b64pack(app):
        """
        Given an app's name, return the base64 representation of its packed version.
        """
        folder = apath(app, r=request)
        tmpfile = StringIO()
        tar = tarfile.TarFile(fileobj=tmpfile, mode='w')
        try:
            filenames = listdir(
                folder,
                '^[\w\.\-]+$',
                add_dirs=True,
                exclude_content_from=['cache', 'sessions', 'errors'])
            for fname in filenames:
                tar.add(os.path.join(folder, fname), fname, False)
        finally:
            tar.close()
        tmpfile.seek(0)
        gzfile = StringIO()
        w2pfp = gzip.GzipFile(fileobj=gzfile, mode='wb')
        w2pfp.write(tmpfile.read())
        w2pfp.close()
        gzfile.seek(0)
        return base64.b64encode(gzfile.read())

    request.vars.apps = request.vars['apps[]']
    if not request.vars.apps or not request.vars.username or not request.vars.password:
        raise HTTP(400)
    if not isinstance(request.vars.apps, list):
        request.vars.apps = [request.vars.apps]  # Only one app selected

    client = ServerProxy(
        'https://%(username)s:%(password)s@%(username)s.pythonanywhere.com/admin/webservices/call/jsonrpc'
        % request.vars)

    for app in request.vars.apps:
        try:
            client.install(app, app + '.w2p', b64pack(app))
        except ProtocolError as error:
            raise HTTP(error.errcode)

    return response.json({'status': 'ok'})
Ejemplo n.º 6
0
def bulk_install():
    """ Install a list of apps """

    def b64pack(app):
        """
        Given an app's name, return the base64 representation of its packed version.
        """
        folder = apath(app, r=request)
        tmpfile = StringIO()
        tar = tarfile.TarFile(fileobj=tmpfile, mode="w")
        try:
            filenames = listdir(
                folder, "^[\w\.\-]+$", add_dirs=True, exclude_content_from=["cache", "sessions", "errors"]
            )
            for fname in filenames:
                tar.add(os.path.join(folder, fname), fname, False)
        finally:
            tar.close()
        tmpfile.seek(0)
        gzfile = StringIO()
        w2pfp = gzip.GzipFile(fileobj=gzfile, mode="wb")
        w2pfp.write(tmpfile.read())
        w2pfp.close()
        gzfile.seek(0)
        return base64.b64encode(gzfile.read())

    request.vars.apps = request.vars["apps[]"]
    if not request.vars.apps or not request.vars.username or not request.vars.password:
        raise HTTP(400)
    if not isinstance(request.vars.apps, list):
        request.vars.apps = [request.vars.apps]  # Only one app selected

    client = ServerProxy(
        "https://%(username)s:%(password)s@%(username)s.pythonanywhere.com/admin/webservices/call/jsonrpc"
        % request.vars
    )

    for app in request.vars.apps:
        try:
            client.install(app, app + ".w2p", b64pack(app))
        except ProtocolError as error:
            raise HTTP(error.errcode)

    return response.json({"status": "ok"})
Ejemplo n.º 7
0
 def f(*a, **b):
     if len(request.args) > 0:
         token = request.args[-1]
         res = None
         try:
             from gluon.contrib.simplejsonrpc import ServerProxy
             url = settings.rpc_server + "/cba/admin/call/jsonrpc"
             server = ServerProxy(url)
             res = server.check_permission(request.application, request.controller, request.function, token)
         except:
             # print auth.user.token
             # import traceback
             # traceback.print_exc()
             pass
         finally:
             if "result" in res and res["result"] is True:
                 return action(*a, **b)
     if request.is_restful:
         raise HTTP(401)
     else:
         return dict(error="You don't have permission to access!")
Ejemplo n.º 8
0
def create_account():
    """ Create a PythonAnywhere account """
    if not request.vars:
        raise HTTP(400)

    if request.vars.username and request.vars.web2py_admin_password:
        # Check if web2py is already there otherwise we get an error 500 too.
        client = ServerProxy(
            'https://%(username)s:%(web2py_admin_password)s@%(username)s.pythonanywhere.com/admin/webservices/call/jsonrpc'
            % request.vars)
        try:
            if client.login() is True:
                return response.json({'status': 'ok'})
        except ProtocolError as error:
            pass

    import urllib, urllib2
    url = 'https://www.pythonanywhere.com/api/web2py/create_account'
    data = urllib.urlencode(request.vars)
    req = urllib2.Request(url, data)

    try:
        reply = urllib2.urlopen(req)
    except urllib2.HTTPError as error:
        if error.code == 400:
            reply = error
        elif error.code == 500:
            return response.json({
                'status': 'error',
                'errors': {
                    'username': [
                        'An App other than web2py is installed in the domain %(username)s.pythonanywhere.com'
                        % request.vars
                    ]
                }
            })
        else:
            raise
    response.headers['Content-Type'] = 'application/json'
    return reply.read()
Ejemplo n.º 9
0
 def f(*a, **b):
     if auth.user is not None:
         res = None
         try:
             from gluon.contrib.simplejsonrpc import ServerProxy
             url = settings.rpc_server + "/cba/admin/call/jsonrpc"
             service = ServerProxy(url)
             res = service.check_permission(request.application, request.controller,
                                            request.function, auth.user.token)
         except:
             # print auth.user.token
             # import traceback
             # traceback.print_exc()
             pass
         finally:
             if res and "result" in res and res["result"] is True:
                 auth.user.permissions = res["permissions"]
                 return action(*a, **b)
     if request.is_restful:
         raise HTTP(401)
     else:
         #session.flash = "Bạn không có quyền truy cập!" if not "message" in res else res["message"]
         redirect(URL(c='default', f='index'))
Ejemplo n.º 10
0
def member_register():
    links = None
    db.auth_user.id.readable = False
    # db.auth_user.first_name.writable = False
    # db.auth_user.last_name.writable = False
    # db.auth_user.first_name.readable = False
    # db.auth_user.last_name.readable = False
    db.auth_user.password.readable = False
    db.auth_user.username.readable = False
    db.auth_user.username.writable = False
    db.auth_user.province.readable = False
    db.auth_user.province.writable = False
    db.auth_user.address.readable = False
    db.auth_user.address.writable = False
    db.auth_user.country.readable = False
    db.auth_user.country.writable = False
    db.auth_user.bank_number.readable = False
    db.auth_user.bank_number.writable = False
    db.auth_user.bank_acc.readable = False
    db.auth_user.bank_acc.writable = False
    db.auth_user.phone.readable = False
    db.auth_user.phone.writable = False
    if not "new" in request.args:
        db.auth_user.email.writable = False
    db.auth_user.password.writable = False
    grid = SQLFORM.smartgrid(table=db.auth_user,
                             showbuttontext=False,
                             linked_tables=[],
                             csv=False,
                             links=links,
                             constraints={
                                 str(auth.table_user()):
                                 (db.auth_user.created_by == auth.user_id)
                             },
                             oncreate=member_register_oncreate,
                             onupdate=member_register_onupdate,
                             ondelete=member_register_ondelete)

    if grid.create_form or grid.update_form or grid.view_form:
        functions = list()
        roles = list()
        try:
            from gluon.contrib.simplejsonrpc import ServerProxy
            url = settings.rpc_server + "/cba/admin/call/jsonrpc"
            service = ServerProxy(url)
            if grid.create_form:
                res = service.get_cp_roles(request.application)
            else:
                res = service.get_cp_roles(request.application)
            if "result" in res and res["result"]:
                functions.extend(res["result"]["functions"])
                roles.extend(res["result"]["groups"])
        except:
            import traceback
            traceback.print_exc()
            pass

        groups = list()
        if grid.view_form or grid.update_form:
            groups = db(db.auth_membership.user_id == request.args[-1]).select(
                db.auth_membership.group_id)
            groups = [x.group_id for x in groups]

        div_permission = TABLE(
            _border=1, _style="border: 1px solid #C8CDD5;color: #45535e;")
        header = TR(
            TD(),
            _style="background: #ACB5C5 -webkit-gradient(linear, left top,"
            " left bottom, from(#D0D8E1), to(#ACB5C5));")
        for role in roles:
            header.append(
                TD(LABEL(str.replace(role["role"].encode("utf-8"), "CPUser_",
                                     ""),
                         _for=role["role"],
                         _style="font-weight:bold;padding: 5px 5px 0 5px;"
                         "margin-bottom:-7px;text-align: center;"),
                   INPUT(_type="checkbox",
                         _id=role["role"],
                         _name="roles",
                         _value=role["id"],
                         _checked='' if role["id"] in groups else None,
                         _disabled='' if grid.view_form else None),
                   _style="text-align: center;width: 80px;"))
        div_permission.append(header)
        old_cat = None
        bg_odd = "background-color: #eff1f4;"
        bg_even = ""
        bg = bg_odd
        for function in functions:
            cat_tr = TR(
                TD(function["category"],
                   _style="font-weight:bold;padding: 5px 5px 5px;"))
            if old_cat != function["category"]:
                bg = bg_odd if bg == bg_even else bg_even
                div_permission.append(cat_tr)
                old_cat = function["category"]
            cat_tr.attributes["_style"] = "%s" % bg
            cat_tr.append(TD(_colspan=len(roles)))

            tr = TR(TD(SPAN(function["name"], _style="margin-left: 20px;"),
                       _style="padding: 5px 5px 5px;"),
                    _style="%s" % bg)
            for role in roles:
                if function["id"] in role["functions"]:
                    tr.append(
                        TD(IMG(_src=URL('static', 'images/check_green.png')),
                           _style=
                           "text-align:center;min-width: 50px;padding: 5px 0 5px;"
                           ))
                else:
                    tr.append(
                        TD(IMG(_src=URL('static', 'images/check_grey.png')),
                           _style=
                           "text-align:center;min-width: 50px;padding: 5px 0 5px;"
                           ))
            div_permission.append(tr)
        div_permission = TR(TD("Phân Quyền:"), TD(div_permission))

        if grid.view_form:
            grid.view_form.element('table').insert(
                len(grid.view_form.element('table')), div_permission)
        if grid.update_form:
            grid.update_form.element('table').insert(-2, div_permission)
        if grid.create_form:
            grid.create_form.element('table').insert(-1, div_permission)
    js = SCRIPT("""
        //alert('test');
        //alert('test');
    """)

    return dict(grid=grid + js)