示例#1
0
    def render_view(self, view='404.html', getfile=False):
        """
        Fetches the raw HTML temlate from the given directory

        """
        if not getfile:
            getfile = self.apppath + '/views/' + str(view)
        else:
            getfile = getfile.replace('.', '') + '/views/' + str(view)
        return serve_file(getfile)
示例#2
0
    def serve(self):
        """
        Webservice Serves the request
        check if it's a media request else check the world directory
        if not then kickin the controllers

        """        
        verzoek = self.url[1:] or 'index.html'
        if self.url.startswith('/' + self.m.settings.dbmedia_folder + '/'):
            return self.download()

        else:      
            w = self.apppath + '/world/'
            # the result
            sttc = serve_file(w + verzoek)
            if sttc != '404':   
                data = self.alt_view(sttc)         
                return self.commit([self.status, self.headers, data])
            else:
                return self.create_page()
示例#3
0
 def load_class(self,
                module,
                path='controllers',
                blanc_env=False,
                func=False,
                forcepath=False):
     if not forcepath:
         forcepath = self.apppath
     try:
         if not blanc_env:
             blanc_env = dict()
         ophalen = forcepath + '/' + path + '/' + module + '.py'
         exec(serve_file(ophalen), blanc_env)
         if not func and module.title() in blanc_env:
             q = blanc_env[module.title()]
             return q(self)
         else:
             return blanc_env
     except:
         return False
示例#4
0
    def load_languages(self, folder='languages', extend=False):
        pad = str(self.folder) + '/' + str(self.appfolder) + '/' + str(folder)
        for root, dirs, files in os.walk(pad):
            for taal in files:
                if taal.endswith('.lang') and not taal.startswith('__'):
                    try:
                        d = {}
                        c = taal.split('.lang')[0]

                        b = pad + '/' + taal
                        waarde = serve_file(b)
                        opt = literal_evil(waarde)

                        for k, v in opt.items():
                            v = v.decode('string-escape')
                            v = v.decode('utf8')
                            d[hash(k)] = v
                            if extend:
                                self.language[c].append(d)
                            else:
                                self.language[c] = d
                    except:
                        pass
示例#5
0
 def forbidden(self):
     # serve a 403 page
     self.status = '403 forbidden'
     output = serve_file(self.apppath + '/views/' \
                 + memory.base_template + '/http/403.html')
     return output
示例#6
0
 def raw_view(self, pagina, **kwargs):
     #quick and dirty
     path = self.apppath + '/views/'
     if 'getfile' in kwargs:
         path = kwargs['getfile']
     return serve_file(path + pagina)
示例#7
0
def server(environ, start_response):
    app = ''
    eget = environ.get
    if not eget('PATH_INFO', None) and eget('REQUEST_URI', None):
        items = environ['REQUEST_URI'].split('?')
        environ['PATH_INFO'] = items[0]
        if len(items) > 1:
            environ['QUERY_STRING'] = items[1]
    # some vars
    ip = environ['REMOTE_ADDR']
    uri = environ['PATH_INFO']
    ext = extension(uri)
    response_headers = False
    status = '200 ok'
    output = ' '
    """
     block some bogus request
     show our unimplemented idiot filter by to many bad requests

    """

    if ip in memory.vuurmuur and memory.vuurmuur[ip] >= 8:
        #to many errors from this ip, idiot filter not implemented
        status = '501 Not Implemented'
        pad = memory.folder + '/' + memory.appfolder + '/views/' + memory.base_template \
            + '/http/blocked.html'
        output = serve_file(pad)
        start_response(status, [('Content-type', 'text/html')])

        # to many errors from this ip
        return [_(output)]

    elif [k for k in memory.settings.blacklist if k in uri.lower()]:

        if ip in memory.vuurmuur:
            memory.vuurmuur[ip] = memory.vuurmuur[ip] + 1
        else:
            memory.vuurmuur.update({ip: 1})

        status = '403 forbidden'
        output = serve_file(memory.folder + '/' + memory.appfolder + '/views/' \
                            + memory.base_template + '/http/403.html')
        start_response(status, [('Content-type', 'text/html')])
        return [_(output)]
    else:
        try:
            # static requests
            if uri.lower() in ['/favicon.ico', '/robots.txt', '/humans.txt']:
                output = serve_file(memory.folder + '/' + 'static' + uri)

            elif uri.startswith('/' + memory.settings.media_folder + '/'):
                bst = uri.replace('/' + memory.settings.media_folder + '/', '')
                output = serve_file(memory.folder + '/' +
                                    memory.settings.media_folder + '/' +
                                    str(bst))
            # output    directly + cache

            else:
                app = Simplecms(environ, memory)
                status, response_headers, output = app.serve()
                # del app
        except:
            print traceback.format_exc()
            if memory.settings.log:
                try:
                    fout = traceback.format_exc()
                    print(fout)
                    output = '404'
                    if app:
                        if not hasattr(app, 'create_ticket'):
                            app = Simplecms(environ, memory)
                    app.create_ticket(ticket=app.encrypt(str(fout)),\
                                  data=fout)
                except:
                    output = '404'
            else:
                # testing
                output = '404'
    """
    if a request returns a simple 404 string we'll show an error page
    or

    """
    del app

    if output == '404':
        status = '404 not found'
        ext = 'text/html'
        output = serve_file(memory.folder + '/' + memory.appfolder \
                    + '/views/' + memory.base_template + '/http/404.html')
    elif output == 'redirect':
        output = serve_file(memory.folder + '/' + memory.appfolder \
                    + '/views/' + memory.base_template + '/http/307.html')

    if not response_headers:
        req = ext.split('/')
        if [k for k in ['image', 'css', 'javascript'] if k in req]:

            response_headers = [('Content-type', ext),
                                ('Cache-Control', 'public, max-age=290304000')]

        else:

            response_headers = [('Content-type', ext)]
    else:
        #if not content type in responseheaders
        response_headers.append(('Content-type', ext))

    start_response(status, response_headers)
    return [_(output)]
示例#8
0
    else:
        return bytes(s.encode(enc))


def get_folder():
    p = __file__.split('simplecms_server')
    folder = os.path.abspath(p[0])
    sys.path.append(folder)
    return folder


memory = Memory()
memory.folder = get_folder()
# enforce the local default path

memory.config(serve_file(memory.folder + '/config.scms'))
# ad import path
sys.path.append(memory.folder + '/' + memory.appfolder)

# overwrite on sys.args request
if len(sys.argv) == 2:
    memory.settings.port = int(sys.argv[1])
if len(sys.argv) == 3:
    memory.settings.port = int(sys.argv[1])
    memory.settings.hostname = str(sys.argv[2])


def startserver(port=memory.settings.port, hostname=memory.settings.hostname):
    pid = os.getpid()
    echo("SimpleCMS - v{0}.{1}", [__version__, __release__], ret=False)
    echo("A fast,stable,secure and minimalistic framework", ret=False)