Exemple #1
0
    def __init__(self):
        self.warpBasePath = config['warpDir']
        self.warpStaticPath = self.warpBasePath.child('static')
        self.warpTemplatePath = self.warpBasePath.child("templates")

        siteTemplateDir = config['siteDir'].child("templates").path
        warpTemplateDir = self.warpTemplatePath.path
        nodeDir = config['siteDir'].child("nodes").path
        templateLookup.__init__(directories=[siteTemplateDir, warpTemplateDir, nodeDir], 
                                output_encoding="utf-8")

        handle_login = config.get('loginHandler', self.handle_login)
        handle_logout = config.get('logoutHandler', self.handle_logout)
        handle_comet = config.get('cometHandler', self.handle_comet)
        handle_warpstatic = config.get('warpstaticHandler', self.handle_warpstatic)
        handle_default = config.get('defaultHandler', self.handle_default)

        self.dispatch =  {
            '__login__': handle_login,
            '__logout__': handle_logout,
            '_comet': handle_comet,
            '_warp': handle_warpstatic,
            '': handle_default,
        }

        self.caseInsensitiveUrl = False
Exemple #2
0
    def __init__(self):
        self.warpBasePath = config['warpDir']
        self.warpStaticPath = self.warpBasePath.child('static')
        self.warpTemplatePath = self.warpBasePath.child("templates")

        siteTemplateDir = config['siteDir'].child("templates").path
        warpTemplateDir = self.warpTemplatePath.path
        nodeDir = config['siteDir'].child("nodes").path
        templateLookup.__init__(
            directories=[siteTemplateDir, warpTemplateDir, nodeDir],
            output_encoding="utf-8")

        handle_login = config.get('loginHandler', self.handle_login)
        handle_logout = config.get('logoutHandler', self.handle_logout)
        handle_comet = config.get('cometHandler', self.handle_comet)
        handle_warpstatic = config.get('warpstaticHandler',
                                       self.handle_warpstatic)
        handle_default = config.get('defaultHandler', self.handle_default)

        self.dispatch = {
            '__login__': handle_login,
            '__logout__': handle_logout,
            '_comet': handle_comet,
            '_warp': handle_warpstatic,
            '': handle_default,
        }

        self.caseInsensitiveUrl = False
Exemple #3
0
def setupSession():
    conn_str = config['db'].replace("postgres", "postgresql")
    # check if is there any option for storm
    conn_str = conn_str.split("?")[0]
    engine = create_engine(conn_str, 
        isolation_level=config.get("isolation_level", "READ COMMITTED"),
        echo=config.get("trace"))
    Session = sessionmaker(bind=engine)
    Base = declarative_base()
    return Session(), Base
Exemple #4
0
    def getChildWithDefault(self, firstSegment, request):

        if firstSegment:
            fp = self.buildFilePath(request)
            if fp is not None:
                del request.postpath[:]
                return static.File(fp.path)

        # Init for everything except static files
        session = request.getSession()
        request.avatar = session.avatar

        getCurrentUser = config.get('getCurrentUser')
        if getCurrentUser and request.avatar:
            request.current_user = getCurrentUser(request.avatar.id)

        getRequestStore = config.get('getRequestStore')
        if getRequestStore is not None:
            request.store = getRequestStore(request)
        else:
            request.store = avatar_store

        if request.avatar is not None:
            getUser = config.get('getRequestUser')
            if getUser is not None:
                request.avatar.user = getUser(request)
            else:
                # Backward compatibility
                getUser = config.get('getAppUser')
                if getUser is not None:
                    warnings.warn(
                        "getAppUser is deprecated, use getRequestUser instead",
                        DeprecationWarning)
                    request.avatar.user = getUser(request.avatar)

        if config.get('reloadMessages'):
            translate.loadMessages()

        request.translateTerm = translate.getTranslator(session.language)

        segment = firstSegment
        if self.caseInsensitiveUrl:
            segment = firstSegment.lower()
        handler = self.dispatch.get(segment)

        if handler is not None:
            return handler(request)

        node = helpers.getNode(firstSegment)

        if node is not None:
            return NodeResource(node)

        return NoResource()
Exemple #5
0
    def getChildWithDefault(self, firstSegment, request):

        if firstSegment:
            fp = self.buildFilePath(request)
            if fp is not None:
                del request.postpath[:]
                return static.File(fp.path)

        # Init for everything except static files
        session = request.getSession()
        request.avatar = session.avatar

        getRequestStore = config.get('getRequestStore')
        if getRequestStore is not None:
            request.store = getRequestStore(request)
        else:
            request.store = avatar_store

        if request.avatar is not None:
            getUser = config.get('getRequestUser')
            if getUser is not None:
                request.avatar.user = getUser(request)
            else:
                # Backward compatibility
                getUser = config.get('getAppUser')
                if getUser is not None:
                    warnings.warn("getAppUser is deprecated, use getRequestUser instead",
                                  DeprecationWarning)
                    request.avatar.user = getUser(request.avatar)

        if config.get('reloadMessages'):
            translate.loadMessages()

        request.translateTerm = translate.getTranslator(session.language)


        segment = firstSegment
        if self.caseInsensitiveUrl:
            segment = firstSegment.lower()
        handler = self.dispatch.get(segment)

        if handler is not None:
            return handler(request)

        node = helpers.getNode(firstSegment)

        if node is not None:
            if not access.allowed(request.avatar, node):
                return AccessDenied()
            return NodeResource(node)

        return NoResource()
Exemple #6
0
def addUser():
    email = raw_input("Email: ").decode("utf-8").strip()
    if not email:
        print "You must give an email address."
        return addUser()

    password = _getPassword().decode("utf-8")

    hasher = config.get('hashPassword')
    if hasher is not None:
        password = hasher(password)

    roleNames = raw_input("Roles (space-separated):").split()

    av = avatar.Avatar()
    av.email = email
    av.password = password

    avatar_store.add(av)

    for (position, roleName) in enumerate(roleNames):
        role = avatar.AvatarRole()
        role.avatar = av
        role.role_name = roleName
        role.position = position
        avatar_store.add(role)

    avatar_store.commit()
Exemple #7
0
def setupStore():
    avatar_store.__init__(create_database(config['db']))

    if config.get('trace'):
        import sys
        from storm.tracer import debug
        debug(True, stream=sys.stdout)

    # Only sqlite uses this now
    sqlBundle = getCreationSQL(avatar_store)
    if not sqlBundle:
        return

    tableExists = sql['tableExists'] = sqlBundle['tableExists']

    for (table, creationSQL) in sqlBundle['creations']:

        if not tableExists(avatar_store, table):

            # Unlike log.message, this works during startup
            print "~~~ Creating Warp table '%s'" % table

            if not isinstance(creationSQL, tuple): creationSQL = [creationSQL]
            for sqlCmd in creationSQL:
                avatar_store.execute(sqlCmd)
            avatar_store.commit()
Exemple #8
0
    def getChildWithDefault(self, firstSegment, request):

        if firstSegment:
            fp = self.buildFilePath(request)
            if fp is not None:
                del request.postpath[:]
                return static.File(fp.path)

        # Init for everything except static files
        session = request.getSession()
        request.avatar = session.avatar

        if config.get("reloadMessages"):
            translate.loadMessages()

        request.translateTerm = translate.getTranslator(session.language)

        handler = self.dispatch.get(firstSegment)

        if handler is not None:
            return handler(request)

        node = helpers.getNode(firstSegment)

        if node is not None:
            if not access.allowed(request.avatar, node):
                return AccessDenied()
            return NodeResource(node)

        return NoResource()
Exemple #9
0
    def doIt(self, request):
        if request.method != 'POST':
            return False

        [email] = request.args.get('email', [None])
        [password] = request.args.get('password', [None])

        if not (email and password):
            request.session.addFlashMessage("Login failed: Email or password not given",
                                            _domain="_warp:login")
            return False

        avatar = avatar_store.find(Avatar,
                                   Avatar.email == email.decode("utf-8")
                                   ).one()

        checker = config.get('checkPassword', defaultCheckPassword)
        
        if avatar is None or not checker(avatar, password):
            request.session.addFlashMessage("Login failed: Email or password incorrect",
                                            _domain="_warp:login")
            return False

        request.session.setAvatarID(avatar.id)
        request.avatar = request.session.avatar

        return True
Exemple #10
0
def url(node, facet="index", args=(), query=()):
    segments = nodeSegments(node)
    segments.append(facet)
    segments.extend(args)
    u = "%s/%s" % (config.get('baseURL', ''), "/".join(map(str, segments)))
    if query:
        u = "%s?%s" % (u, urllib.urlencode(query))
    return u
Exemple #11
0
def url(node, facet="index", args=(), query=()):
    segments = nodeSegments(node)
    segments.append(facet)
    segments.extend(args)
    u = "%s/%s" % (config.get('baseURL', ''), "/".join(map(str, segments)))
    if query:
        u = "%s?%s" % (u, urllib.urlencode(query))
    return u
Exemple #12
0
def getConfig(config=config):
    schemaConfig = {
        # Directory storing site's DB migrations
        # (twisted.python.filepath.FilePath)
        "migrations_dir": config["siteDir"].child("migrations"),
        # Whether to check schema on startup
        "check": True,
    }
    schemaConfig.update(config.get("schema", {}))
    return schemaConfig
Exemple #13
0
    def getTinyTemplate(self):
        if not self.tinyTemplate:
            self.tinyTemplate = """
<html>
  <head>
    <link rel="stylesheet" href="%s/_warp/reset.css" type="text/css"></link>
  </head>
  <body>
    %%s
  </body>
</html>
""" % config.get("baseURL", '')
        return self.tinyTemplate
Exemple #14
0
    def getTinyTemplate(self):
        if not self.tinyTemplate:
            self.tinyTemplate = """
<html>
  <head>
    <link rel="stylesheet" href="%s/_warp/reset.css" type="text/css"></link>
  </head>
  <body>
    %%s
  </body>
</html>
""" % config.get("baseURL", '')
        return self.tinyTemplate
Exemple #15
0
    def getSession(self, uid):
        session = self.sessionManager.getSession(uid)

        if session is None:
            raise KeyError(uid)

        if session.hasAvatar():
            maxAge = config.get("sessionMaxAge")
            if maxAge is not None and session.age() > maxAge:
                session.addFlashMessage("You were logged out due to inactivity", _domain="_warp:login")
                session.setAvatarID(None)

        return session
Exemple #16
0
    def getSession(self, uid):
        session = self.sessionManager.getSession(uid)

        if session is None:
            raise KeyError(uid)

        if session.isPersistent:
            return session

        if session.hasAvatar():
            maxAge = config.get("sessionMaxAge")
            if maxAge is not None and session.age() > maxAge:
                session.addFlashMessage("You were logged out due to inactivity", _domain="_warp:login")
                session.setAvatarID(None)

        return session
Exemple #17
0
def setupStore():
    avatar_store.__init__(create_database(config['db']))

    if config.get('trace'):
        import sys
        from storm.tracer import debug
        debug(True, stream=sys.stdout)

    sqlBundle = getCreationSQL(avatar_store)
    tableExists = sql['tableExists'] = sqlBundle['tableExists']

    for (table, creationSQL) in sqlBundle['creations']:

        if not tableExists(avatar_store, table):

            # Unlike log.message, this works during startup
            print "~~~ Creating Warp table '%s'" % table

            if not isinstance(creationSQL, tuple): creationSQL = [creationSQL]
            for sqlCmd in creationSQL: avatar_store.execute(sqlCmd)
            avatar_store.commit()
Exemple #18
0
def getTemplate(templatePath):
    return Template(filename=templatePath,
                    lookup=templateLookup,
                    format_exceptions=config.get('makoErrorPages', True),
                    output_encoding="utf-8")
Exemple #19
0
def getTemplate(templatePath):
    return Template(filename=templatePath,
                    lookup=templateLookup,
                    format_exceptions=config.get('makoErrorPages', True),
                    output_encoding="utf-8")
Exemple #20
0
def with_base(url):
    base = config.get("baseUrl", "")
    return base + url
Exemple #21
0
def loadMessages():
    config.get("messageLoader", defaultLoader)()
Exemple #22
0
def loadMessages():
    config.get("messageLoader", defaultLoader)()
Exemple #23
0
def getTemplate(templatePath):
    return Template(filename=templatePath,
                    lookup=templateLookup,
                    format_exceptions=config.get('makoErrorPages', True),
                    default_filters=['decode.utf8','h'],
                    output_encoding="utf-8")