Example #1
0
def auth_complete_view(context, request):
    entry = context.entry

    if entry.uri is None:
        # check verified emails
        if entry.verified:
            session = ptah.get_session()

            user = session.query(ptahcrowd.CrowdUser)\
                   .filter(ptahcrowd.CrowdUser.email == entry.email).first()
            if user is not None:
                entry.uri = user.__uri__
            else:
                # create user
                tinfo = ptahcrowd.get_user_type()

                user = tinfo.create(
                    name=entry.name,
                    login=entry.email,
                    email=entry.email,
                    password=entry.access_token)
                session.add(user)
                session.flush()
                entry.uri = user.__uri__
            user.properties.validated = True
        else:
            # verify email
            return HTTPFound(
                request.route_url(
                    'ptah-crowd-verify-email', subpath=(entry.uid,)))

    return login(entry.uri, request)
Example #2
0
    def verify_handler(self):
        data, errors = self.extract()

        if errors:
            self.message(errors, 'form-error')
            return

        entry = self.entry
        request = self.request
        new_user = False
        email = data['email']

        user = self.session.query(ptahcrowd.CrowdUser).filter(
            ptahcrowd.CrowdUser.email == email).first()
        if user is None:
            new_user = True

            # create user
            tinfo = ptahcrowd.get_user_type()

            user = tinfo.create(
                name=entry.name,
                login=email,
                email=email,
                password=entry.access_token)
            tinfo.add(user)

            # fixme: temporary
            ptah.get_session().flush()

            uri = user.__uri__
            entry.uri = uri
            entry.email = email
        else:
            uri = user.__uri__

        data = {'uri': uri,
                'email': email,
                'uid': entry.uid}

        t = ptah.token.service.generate(TOKEN_TYPE, json.dumps(data))
        template = VerifyTemplate(entry, request, email=email, token=t)
        template.send()

        # login
        if new_user:
            self.message('Email verification email has been sent.')
            cfg = ptah.get_settings(ptahcrowd.CFG_ID_CROWD, request.registry)
            if cfg['validation']:
                if cfg['allow-unvalidated']:
                    entry.uri = uri
                    return login(uri, request)
            else:
                entry.uri = uri
                return login(uri, request)
        else:
            self.message('User with this email already exists. '
                         'You have to verify email before you can login.')

        return HTTPFound(location=request.application_url)
Example #3
0
def auth_complete_view(context, request):
    entry = context.entry

    if entry.uri is None:
        # check verified emails
        if entry.verified:
            session = ptah.get_session()

            user = session.query(ptahcrowd.CrowdUser)\
                   .filter(ptahcrowd.CrowdUser.email == entry.email).first()
            if user is not None:
                entry.uri = user.__uri__
            else:
                # create user
                tinfo = ptahcrowd.get_user_type()

                user = tinfo.create(
                    name=entry.name,
                    login=entry.email,
                    email=entry.email,
                    password=entry.access_token)
                session.add(user)
                session.flush()
                entry.uri = user.__uri__
            user.properties.validated = True
        else:
            # verify email
            return HTTPFound(
                request.route_url(
                    'ptahcrowd-verify-email', subpath=(entry.uid,)))

    return login(entry.uri, request)
Example #4
0
def create_admin_user(registry):
    crowd_cfg = ptah.get_settings(ptahcrowd.CFG_ID_CROWD, registry)
    if not crowd_cfg['admin-login']:
        return

    session = ptah.get_session()
    ptah_cfg = ptah.get_settings(ptah.CFG_ID_PTAH, registry)

    rec = session.query(SettingRecord).filter(
        SettingRecord.name == 'ptahcrowd.admin-uri').first()
    if rec is not None:
        user = ptah.resolve(rec.value)
        if user is not None:
            return

    user = session.query(ptahcrowd.CrowdUser).\
           filter(ptahcrowd.CrowdUser.username==crowd_cfg['admin-login']).first()

    if user is None:
        tinfo = ptahcrowd.get_user_type(registry)

        log = logging.getLogger('ptahcrowd')
        log.info("Creating admin user `%s`",
                 crowd_cfg['admin-login'])

        # create user
        user = tinfo.create(
            fullname=crowd_cfg['admin-name'],
            username=crowd_cfg['admin-login'],
            email=ptah_cfg['email_from_address'])
        user.password = ptah.pwd_tool.encode(crowd_cfg['admin-password'])
        user.validated = True
        user.suspended = False

        tinfo.add(user)

        if crowd_cfg['admin-role']:
            user.properties['roles'] = (crowd_cfg['admin-role'],)

        session.add(
            SettingRecord(name='ptahcrowd.admin-uri', value=user.__uri__))
Example #5
0
def create_admin_user(registry):
    crowd_cfg = ptah.get_settings(ptahcrowd.CFG_ID_CROWD, registry)
    if not crowd_cfg['admin-login']:
        return

    session = ptah.get_session()
    ptah_cfg = ptah.get_settings(ptah.CFG_ID_PTAH, registry)

    rec = session.query(SettingRecord).filter(
        SettingRecord.name == 'ptahcrowd.admin-uri').first()
    if rec is not None:
        user = ptah.resolve(rec.value)
        if user is not None:
            return

    user = session.query(ptahcrowd.CrowdUser).\
           filter(ptahcrowd.CrowdUser.username==crowd_cfg['admin-login']).first()

    if user is None:
        tinfo = ptahcrowd.get_user_type(registry)

        log = logging.getLogger('ptahcrowd')
        log.info("Creating admin user `%s`", crowd_cfg['admin-login'])

        # create user
        user = tinfo.create(fullname=crowd_cfg['admin-name'],
                            username=crowd_cfg['admin-login'],
                            email=ptah_cfg['email_from_address'])
        user.password = ptah.pwd_tool.encode(crowd_cfg['admin-password'])
        user.validated = True
        user.suspended = False

        tinfo.add(user)

        if crowd_cfg['admin-role']:
            user.properties['roles'] = (crowd_cfg['admin-role'], )

        session.add(
            SettingRecord(name='ptahcrowd.admin-uri', value=user.__uri__))
Example #6
0
    def verify_handler(self):
        data, errors = self.extract()

        if errors:
            self.add_error_message(errors)
            return

        entry = self.entry
        request = self.request
        new_user = False
        email = data['email']

        user = self.session.query(ptahcrowd.CrowdUser).filter(
            ptahcrowd.CrowdUser.email == email).first()
        if user is None:
            new_user = True

            # create user
            tinfo = ptahcrowd.get_user_type()

            user = tinfo.create(
                name=entry.name,
                login=email,
                email=email,
                password=entry.access_token)
            tinfo.add(user)

            # fixme: temporary
            ptah.get_session().flush()

            uri = user.__uri__
            entry.uri = uri
            entry.email = email
        else:
            uri = user.__uri__

        data = {'uri': uri,
                'email': email,
                'uid': entry.uid}

        t = ptah.token.service.generate(TOKEN_TYPE, json.dumps(data))
        template = VerifyTemplate(entry, request, email=email, token=t)
        template.send()

        # login
        if new_user:
            self.request.add_message('Email verification email has been sent.')
            cfg = ptah.get_settings(ptahcrowd.CFG_ID_CROWD, request.registry)
            if cfg['validation']:
                if cfg['allow-unvalidated']:
                    entry.uri = uri
                    return login(uri, request)
            else:
                entry.uri = uri
                return login(uri, request)
        else:
            self.request.add_message(
                'User with this email already exists. '
                'You have to verify email before you can login.')

        return HTTPFound(location=request.application_url)