def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    engine = engine_from_config(settings, 'sqlalchemy.')
    DBSession.configure(bind=engine)
    Base.metadata.bind = engine
    Base.metadata.create_all()
    config = Configurator(settings=settings, root_factory='projetoredesmultimidia.auth.resource.Root')

    #criando uma estrutura de objetos para poder testar a aplicação.
    init = Initialize()
    init.create_users_and_principals()
    init.createObjects()
    #Politica de segurança
    print("Configurando a Autenicação e configuração ")
    autenticacao_po = AuthTktAuthenticationPolicy(settings['app.secret'], callback=groupfinder, hashalg='sha512')
    autorizacao_po = ACLAuthorizationPolicy()
    config.set_authentication_policy(autenticacao_po)
    config.set_authorization_policy(autorizacao_po)

    config.include('pyramid_jinja2')
    config.add_static_view('static', 'static', cache_max_age=3600)
    config.add_route('home', '/')
    config.add_route('cursos', '/cursos')
    config.add_route('curso', '/cursos/curso')
    config.add_route('video_aula', '/cursos/curso/video_aula')
    config.add_route('live', '/live')
    config.add_route('liveroom', '/live/{room}')
    #config.add_route('signaling', '/ws/{room}')
    config.add_route('login', '/login')
    config.add_route('logout', '/logout')
    config.add_route('iptest', '/iptest')

    config.scan()
    return config.make_wsgi_app()
def main(argv=sys.argv):
    if len(argv) < 2:
        usage(argv)
    config_uri = argv[1]
    options = parse_vars(argv[2:])
    setup_logging(config_uri)
    settings = get_appsettings(config_uri, options=options)
    engine = engine_from_config(settings, 'sqlalchemy.')
    DBSession.configure(bind=engine)
 def setUp(self):
     self.config = testing.setUp()
     from sqlalchemy import create_engine
     engine = create_engine('sqlite://')
     from projetoredesmultimidia.domain.models import (
         Base,
         MyModel,
         )
     DBSession.configure(bind=engine)
     Base.metadata.create_all(engine)
     with transaction.manager:
         model = MyModel(name='one', value=55)
         DBSession.add(model)
def groupfinder(userid, request):
    print("Request do group finder %r: userid: %r" % (request.params, userid))
    user = DBSession.query(Usuario).filter(Usuario.login == userid).first()
    print("USER: %r" % user)
    if user:
        print("Principals %r" % user.principals[0].nome)
        return [principal.nome for principal in user.principals]
    def login(self):
        print("Login")
        print(self.request.params)

        if "login" in self.request.params:
            print("AQUI")
            username = self.request.params["username"]
            senha = self.request.params["senha"]

            usuario = DBSession.query(Usuario).filter(Usuario.login == username).first()
            print(usuario)
            print(username)
            if(usuario):
                ok = usuario.validate_senha(senha)
                if ok:
                    print("Login ok")
                    headers = remember(self.request, username)
                    print("HEADERS %r" % headers)
                    return HTTPFound(location=self.request.route_url("home"), headers=headers)
            msg = "Login Falhou! Usuário e/ou senha inválidos"

            if msg:
                Response(msg, content_type='text/plain', status_int=500)

        return {"msg": "okokokokoko"}
    def createObjects(self):
        print("createObjects")
        curso = DBSession.query(Curso).all()
        print(curso)
        if not curso:
            print("aqui")
            curso = Curso()
            curso.nome, curso.dateCreated = "Curso sobre Pyramid Framework", datetime.datetime.now()
            topico1 = Topico()
            topico1.nome = "Introdução"
            subtopico1 = SubTopico()
            subtopico1.nome = "conhecendo o pyramid e o hello world"
            video = Video()
            video.nome, video.path = "hello world", "testeSimpleScreeRecoder-2015-08-31_22.08.41.mp4"
            video.dateCreated = datetime.datetime.now()
            subtopico1.video = video
            topico1.subtopicos.append(subtopico1)
            curso.topicos.append(topico1)
            # DBSession.add(curso)

            topico2 = Topico()
            topico2.nome = "Usando o framework"

            subtopico20 = SubTopico()
            subtopico20.nome = "estrutura de diretótios"
            video = Video()
            video.nome, video.path = "diretorios", "aula2Pyramid-2015-08-16_08.24.29.mp4"
            video.dateCreated = datetime.datetime.now()
            subtopico20.video = video
            topico2.subtopicos.append(subtopico20)

            subtopico21 = SubTopico()
            subtopico21.nome = "estrutura de diretótios(sem audio)"
            video = Video()
            video.nome, video.path = "diretorios(sem audio)", "Aula2Pyramid-2015-08-14_08.13.40.mp4"
            video.dateCreated = datetime.datetime.now()
            subtopico21.video = video
            topico2.subtopicos.append(subtopico21)
            curso.topicos.append(topico2)
            DBSession.add(curso)
            transaction.commit()
 def videoAula(request):
     curso = DBSession.query(Curso).first()
     return {'curso': curso}
 def tearDown(self):
     DBSession.remove()
     testing.tearDown()
 def setUp(self):
     self.config = testing.setUp()
     from sqlalchemy import create_engine
     engine = create_engine('sqlite://')
     DBSession.configure(bind=engine)
    def create_users_and_principals(self):
        user = DBSession.query(Usuario).filter(Usuario.login == "anderson").first()
        teacher = DBSession.query(Usuario).filter(Usuario.login == "turing").first()
        print(user)
        if not user:
            user = Usuario()
            user.login = "******"
            user.add_senha("123456")
            p = Principal()
            p.nome = "role_user"
            # p.usuarios.append(user)
            user.principals.append(p)

            DBSession.add(p)
            DBSession.add(user)
            transaction.commit()

        if not teacher:
            teacher = Usuario()
            teacher.login = "******"
            teacher.add_senha("science")
            p = Principal()
            p.nome = "role_teacher"
            # p.usuarios.append(user)
            teacher.principals.append(p)

            DBSession.add(p)
            DBSession.add(teacher)
            transaction.commit()

            p = Principal()
            p.nome = "role_user"
            # p.usuarios.append(user)
            teacher.principals.append(p)

            DBSession.add(p)
            DBSession.add(teacher)
            transaction.commit()