Esempio n. 1
0
    def handle_object(self, obj):

        if type(obj) == dict and len(obj.keys()) == 1 and obj.has_key('_ref'):

            L.info("ReferenceFetcher: Attempting to fetch %r" % obj)

            url = obj['_ref']
            if url.strip() == '':
                return None

            data = None
            try:
                data = internal_find(url, follow=False, lang=self.token.lang)
                if data != None:
                    return data
            except Exception:
                L.exception("ReferenceFetcher: Failed to fetch %r" % obj)

        elif type(obj) == dict:
            return dict([(k, self.handle_object(v))
                         for k, v in obj.iteritems()])

        elif type(obj) == list:
            return [self.handle_object(el) for el in obj]

        return obj
Esempio n. 2
0
    def handle_object(self,obj):
        
        if type(obj) == dict and len(obj.keys())==1 and obj.has_key('_ref'):
            
            L.info("ReferenceFetcher: Attempting to fetch %r" % obj)
            
            url = obj['_ref']
            if url.strip() == '':
                return None
            
            data = None
            try:
                data = internal_find(url,follow=False,lang=self.token.lang)
                if data != None:
                    return data
            except Exception:
                L.exception("ReferenceFetcher: Failed to fetch %r" % obj)
            
        elif type(obj) == dict:
            return dict([ (k,self.handle_object(v)) for k,v in obj.iteritems()])

        elif type(obj) == list:
            return [ self.handle_object(el) for el in obj]
        
        return obj
Esempio n. 3
0
def before_request():
    g.db = DB()
    g.app = app
    g.user = None
    if 'openid' in session:
        openid_key = urllib.quote(urllib.quote(session['openid'],safe=''))
        user = internal_find('/data/admin/users/%s' % openid_key)
        if user != None:
            g.user = user
Esempio n. 4
0
def before_request():
    g.db = DB()
    g.app = app
    g.user = None
    if 'openid' in session:
        openid_key = urllib.quote(urllib.quote(session['openid'], safe=''))
        user = internal_find('/data/admin/users/%s' % openid_key)
        if user != None:
            g.user = user
Esempio n. 5
0
def before_request():
    g.db = DB()
    g.app = app
    g.user = None
    if 'openid' in session:
        openid_key = session['openid'].encode('hex')
        user = internal_find('/data/admin/users/%s' % openid_key)
        if user != None:
            g.user = user
Esempio n. 6
0
def create_or_login(resp):
    session['openid'] = resp.identity_url
    openid_key = urllib.quote(urllib.quote(session['openid'],safe=''))
    user = internal_find('/data/admin/users/%s' % openid_key)
    if user != None:
        L.info(u'Successfully signed in fullname=%s, email=%s (%r)' % (resp.fullname, resp.email, resp.__dict__))
    else:
        data = { "fullname"     : resp.fullname,
                 "email"        : resp.email,
                 "key"          : openid_key }
        user = internal_save('/data/admin/users/%s' % openid_key, data)
        L.info(u'Successfully created fullname=%s, email=%s (%r)' % (resp.fullname, resp.email, resp.__dict__))
    g.user = user        
    return redirect(oid.get_next_url())
    def process(self):

        method = self.token.request.method

        self.should_stop = False

        self.app = self.token.request.args.get('apikey', None)
        if self.app != None:
            if self.app == "admin":
                return

            if not self.validate_api(self.app):
                return

        self.user = None  ## TODO: '''<<getuser>>'''

        if self.token.slug != None:
            fullpath = os.path.join(self.token.path, self.token.slug)
        else:
            fullpath = self.token.path
        L.debug("PermissionChecker: full_path=%r" % fullpath)
        fullpath = fullpath.split('/')
        L.debug("PermissionChecker: full_path=%r" % fullpath)

        perms = set()

        for i in range(len(fullpath)):
            partial_path = fullpath[0:i + 1]
            L.debug("PermissionChecker: partial_path=%r" % partial_path)
            spec = json.dumps({"ref": "/" + "/".join(partial_path)})
            data = internal_find('/data/admin/permissions/',
                                 query=spec,
                                 apikey='admin')
            for rec in data:
                auth = rec.get('auth')
                if self.match_auth(auth):
                    perms.update(set(rec.get('perms', set())))
                    L.info("PermissionChecker: rule %s, perms=%r" %
                           (rec.get('_src'), set(rec.get('perms', set()))))

        if ((method == "POST" and "new" in perms)
                or (method == "DELETE" and "delete" in perms)
                or (method == "PUT" and "edit" in perms)
                or (method == "GET" and "read" in perms)):
            pass
        else:
            self.should_stop = True
 def condition(self):
     format = self.token.get_request_format()
     if not (format == None or format.startswith('template')):
         return False
     try:
         templates = internal_find( self.token.path, fields=["templates"] ).get("templates",{})
     except:
         return False
     self.template_name = ("%s:" % format).split(':')[1]
     if self.template_name == "":
         if self.token.slug != None:
             self.template = templates.get('detail')
         else: 
             self.template = templates.get('list')
     else:
         self.template = templates.get('%s' % self.template_name)
     return self.template != None 
    def process(self):
        
        method = self.token.request.method
        
        self.should_stop = False 

        self.app = self.token.request.args.get('apikey',None)
        if self.app != None:
            if self.app == "admin":
                return
            
            if not self.validate_api(self.app):
                return

        self.user = None ## TODO: '''<<getuser>>'''


        if self.token.slug != None:
            fullpath = os.path.join(self.token.path, self.token.slug)
        else:
            fullpath = self.token.path
        L.debug("PermissionChecker: full_path=%r" % fullpath)
        fullpath = fullpath.split('/')
        L.debug("PermissionChecker: full_path=%r" % fullpath)
        
        perms = set()
        
        for i in range(len(fullpath)):
            partial_path = fullpath[0:i+1]
            L.debug("PermissionChecker: partial_path=%r" % partial_path)
            spec = json.dumps({ "ref" : "/" + "/".join(partial_path) })
            data = internal_find('/data/admin/permissions/',query=spec,apikey='admin')
            for rec in data:
                auth = rec.get('auth')
                if self.match_auth(auth):
                    perms.update(set(rec.get('perms',set())))
                    L.info("PermissionChecker: rule %s, perms=%r" % (rec.get('_src'),set(rec.get('perms',set()))))
        
        if ( (method == "POST"   and "new"    in perms) or
             (method == "DELETE" and "delete" in perms) or
             (method == "PUT"    and "edit"   in perms) or
             (method == "GET"    and "read"   in perms) ):
            pass
        else:
            self.should_stop = True
Esempio n. 10
0
def create_or_login(resp):
    session['openid'] = resp.identity_url
    openid_key = urllib.quote(urllib.quote(session['openid'], safe=''))
    user = internal_find('/data/admin/users/%s' % openid_key)
    if user != None:
        L.info(u'Successfully signed in fullname=%s, email=%s (%r)' %
               (resp.fullname, resp.email, resp.__dict__))
    else:
        data = {
            "fullname": resp.fullname,
            "email": resp.email,
            "key": openid_key
        }
        user = internal_save('/data/admin/users/%s' % openid_key, data)
        L.info(u'Successfully created fullname=%s, email=%s (%r)' %
               (resp.fullname, resp.email, resp.__dict__))
    g.user = user
    return redirect(oid.get_next_url())
Esempio n. 11
0
 def condition(self):
     format = self.token.get_request_format()
     if not (format == None or format.startswith('template')):
         return False
     try:
         templates = internal_find(self.token.path,
                                   fields=["templates"
                                           ]).get("templates", {})
     except:
         return False
     self.template_name = ("%s:" % format).split(':')[1]
     if self.template_name == "":
         if self.token.slug != None:
             self.template = templates.get('detail')
         else:
             self.template = templates.get('list')
     else:
         self.template = templates.get('%s' % self.template_name)
     return self.template != None
 def format(self):
     real_path = self.token.path[:-len(self.STATIC_SUFFIX)]
     statics = internal_find( real_path, fields=["static-files"] ).get("static-files",{})
     self.token.content_type, self.token.response = statics.get(self.token.slug.replace('.','__'),("text/html",""))
     self.token.response = self.token.response.decode('base64')