Exemple #1
0
    def test_users(self):
        # add two users
        r = Role.query.filter_by(name='poster').first()
        self.assertIsNotNone(r)
        u1 = User('john')
        u1.email = '*****@*****.**'
        u1.password = '******'
        u1.confirmed = True
        u1.roles.append(r)
        u2 = User('susan')
        u2.email = '*****@*****.**'
        u2.password = '******'
        u2.confirmed = True
        u2.roles.append(r)
        db.session.add_all([u1, u2])
        db.session.commit()

        # get users
        # 以u2通过验证,得到u1的用户信息
        response = self.client.get(url_for('api.get_user', id=u1.id),
                                   headers=self.get_api_headers(
                                       'susan', 'dog'))
        self.assertTrue(response.status_code == 200)
        json_response = json.loads(response.data.decode('utf-8'))
        self.assertTrue(json_response['username'] == 'john')
        # 以u2通过验证,得到u2的用户信息
        response = self.client.get(url_for('api.get_user', id=u2.id),
                                   headers=self.get_api_headers(
                                       'susan', 'dog'))
        self.assertTrue(response.status_code == 200)
        json_response = json.loads(response.data.decode('utf-8'))
        self.assertTrue(json_response['username'] == 'susan')
Exemple #2
0
 def test_duplicate_email_change_token(self):
     user1 = User('test1')
     user1.email = '*****@*****.**'
     user1.password = '******'
     user2 = User('test2')
     user2.email = '*****@*****.**'
     user2.password = '******'
     db.session.add(user1)
     db.session.add(user2)
     db.session.commit()
     token = user2.generate_email_change_token('*****@*****.**')
     self.assertFalse(user2.change_email(token))
     self.assertTrue(user2.email == '*****@*****.**')
Exemple #3
0
 def test_invalid_reset_token(self):
     user1 = User('test1')
     user2 = User('test2')
     user1.password = '******'
     user2.password = '******'
     user1.email = '*****@*****.**'
     user2.email = '*****@*****.**'
     db.session.add(user1)
     db.session.add(user2)
     db.session.commit()
     token = user1.generate_reset_token(user1.email)
     self.assertFalse(user2.reset_password(token, 'puppy'))
     self.assertTrue(user2.check_password('dog'))
Exemple #4
0
def register(request):
    if request.method == "POST":
        uf = UserFormRegister(request.POST)
        if uf.is_valid():
            userName = uf.cleaned_data['userName']
            password = uf.cleaned_data['password']
            email = uf.cleaned_data['email']

            if User.objects.get(userName = userName) != None:
                uf = UserFormRegister()
                return render_to_response('register.html', {'uf': uf}, context_instance = RequestContext(request))

            user = User()
            user.userName = userName
            user.password = password
            user.email = email
            user.save()
            response = render_to_response('success.html', {'username': userName})
            response.set_cookie('username', userName, 3600)
            
            return response
    else:
        uf = UserFormRegister()
    
    return render_to_response('register.html', {'uf': uf}, context_instance = RequestContext(request))
Exemple #5
0
def create_admin(email, password):
    user = User()
    user.email = email
    user.password = password
    user.type = 'admin'
    user.active = True
    user.save()
Exemple #6
0
    def setUp(self):
        # Bug workarounds: Flask Admin和Flask Restful扩展中,
        # 它们会为应用生成蓝图对象并在内部保存起来,但在应用销毁时不会主动将其移除。
        admin._views = []
        rest_api.resources = []

        self.app = create_app('test')
        # 必须push context,否则会报错误
        self.app_context = self.app.app_context()
        self.app_context.push()
        self.client = self.app.test_client(use_cookies=True)

        # Bug workaround: 如果不在webapp目录中运行,
        # 则Flask SQLAlchemy的初始化代码就不能正确地在应用对象中进行初始化
        db.app = self.app
        db.create_all()

        # create role and user
        # 由于下面有个test_register_and_login测试,要注册新用户,
        # 在register路由中会默认添加上'poster'和'default'角色,因此这里要先创建两种角色
        poster = Role('poster')
        poster.description = 'poster role'
        default = Role('default')
        default.description = 'default role'
        db.session.add(poster)
        db.session.add(default)

        test_user = User('test')
        test_user.email = '*****@*****.**'
        test_user.password = '******'
        test_user.confirmed = True
        test_user.roles.append(poster)
        db.session.add(test_user)
        db.session.commit()
Exemple #7
0
    def test_token_auth(self):
        # add a user
        r = Role.query.filter_by(name='poster').first()
        self.assertIsNotNone(r)
        u = User('john')
        u.email = '*****@*****.**'
        u.password = '******'
        u.confirmed = True
        u.roles.append(r)
        db.session.add(u)
        db.session.commit()

        # issue a request with a bad token
        response = self.client.get(url_for('api.get_posts'),
                                   headers=self.get_api_headers(
                                       'bad-token', ''))
        self.assertTrue(response.status_code == 401)

        # get a token
        response = self.client.get(url_for('api.get_token'),
                                   headers=self.get_api_headers('john', 'cat'))
        self.assertTrue(response.status_code == 200)
        json_response = json.loads(response.data.decode('utf-8'))
        self.assertIsNotNone(json_response.get('token'))
        token = json_response['token']

        # issue a request with the token
        response = self.client.get(url_for('api.get_posts'),
                                   headers=self.get_api_headers(token, ''))
        self.assertTrue(response.status_code == 200)
Exemple #8
0
 def test_valid_email_change_token(self):
     user1 = User('test1')
     user1.email = '*****@*****.**'
     user1.password = '******'
     db.session.add(user1)
     db.session.commit()
     token = user1.generate_email_change_token('*****@*****.**')
     self.assertTrue(user1.change_email(token))
     self.assertTrue(user1.email == '*****@*****.**')
Exemple #9
0
    def test_follows(self):
        u1 = User('test1')
        u1.email = '*****@*****.**'
        u1.password = '******'
        u2 = User('test2')
        u2.email = '*****@*****.**'
        u2.password = '******'
        db.session.add(u1)
        db.session.add(u2)
        db.session.commit()
        self.assertFalse(u1.is_following(u2))
        self.assertFalse(u1.is_followed_by(u2))

        timestamp_before = datetime.datetime.utcnow()
        u1.follow(u2)
        db.session.add(u1)
        db.session.commit()
        timestamp_after = datetime.datetime.utcnow()
        self.assertTrue(u1.is_following(u2))
        self.assertFalse(u1.is_followed_by(u2))
        self.assertTrue(u2.is_followed_by(u1))
        self.assertTrue(u1.followings.count() == 1)
        self.assertTrue(u2.followers.count() == 1)
        f = u1.followings.all()[-1]
        self.assertTrue(f.following == u2)
        self.assertTrue(timestamp_before <= f.timestamp <= timestamp_after)
        f = u2.followers.all()[-1]
        self.assertTrue(f.follower == u1)

        u1.unfollow(u2)
        db.session.add(u1)
        db.session.commit()
        self.assertTrue(u1.followings.count() == 0)
        self.assertTrue(u2.followers.count() == 0)
        self.assertTrue(Follow.query.count() == 0)

        u2.follow(u1)
        db.session.add(u1)
        db.session.add(u2)
        db.session.commit()
        db.session.delete(u2)
        db.session.commit()
        self.assertTrue(Follow.query.count() == 0)
Exemple #10
0
 def test_valid_reset_token(self):
     user = User('test')
     user.password = '******'
     user.email = '*****@*****.**'
     db.session.add(user)
     # 只有commit了才能拿到id,以便生成token
     db.session.commit()
     token = user.generate_reset_token(user.email)
     self.assertTrue(user.reset_password(token, 'dog'))
     self.assertTrue(user.check_password('dog'))
Exemple #11
0
def register():
    form = RegisterForm()
    if form.validate_on_submit():
        user = User()
        user.set_password(form.password.data)
        user.username = form.username.data
        user.email = form.email.data
        db.session.add(user)
        db.session.commit()
        flash('You can now login ')
        return redirect(url_for('auth.login'))

    return render_template('auth/register.html', form=form)
Exemple #12
0
    def test_unconfirmed_account(self):
        # add an unconfirmed user
        r = Role.query.filter_by(name='poster').first()
        self.assertIsNotNone(r)
        u = User('john')
        u.email = '*****@*****.**'
        u.password = '******'
        u.confirmed = False
        u.roles.append(r)
        db.session.add(u)
        db.session.commit()

        # get list of posts with the unconfirmed account
        response = self.client.get(url_for('api.get_posts'),
                                   headers=self.get_api_headers('john', 'cat'))
        self.assertTrue(response.status_code == 403)
Exemple #13
0
    def test_bad_auth(self):
        # add a user
        r = Role.query.filter_by(name='poster').first()
        self.assertIsNotNone(r)
        u = User('john')
        u.email = '*****@*****.**'
        u.password = '******'
        u.confirmed = True
        u.roles.append(r)
        db.session.add(u)
        db.session.commit()

        # authenticate with bad password
        response = self.client.get(url_for('api.get_posts'),
                                   headers=self.get_api_headers('john', 'dog'))
        self.assertTrue(response.status_code == 401)
Exemple #14
0
def register():
    form = RegisterForm()
    if form.validate_on_submit():
        user = User()
        user.set_password(form.password.data)
        user.username = form.username.data
        user.email = form.email.data
        user.name = form.name.data
        user.headimg = '/static/headimg/default.jpg'
        user.location = '北京'
        db.session.add(user)
        db.session.commit()
        flash('You can now login ')
        return redirect(url_for('auth.login'))

    return render_template('auth/register.html',
                           form=form,
                           backgroundpic='/static/img/post1_bg.jpg')
Exemple #15
0
def register(request):
    message = ''
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password1')
        password2 = request.POST.get('password2')
        email = request.POST.get('email')
        if username and password and password2 and email:
            # 去除左右两边空格
            username = username.strip()
            # 验证是否在数据库
                # 数据库里没有这个用户
            if password != password2:
                message = '密码不一致'
                return render(request, 'register.html', locals())
            else:
                user = User.objects.filter(name=username)
                if user:
                    message = '用户已存在'
                    return render(request, 'register.html', locals())

                else:
                    username = request.POST.get('username')
                    password = request.POST.get('password1')
                    print('-----------------')
                    print(password)
                    email = request.POST.get('email')
                    ine = User()
                    ine.name = username
                    ine.password = password
                    ine.email = email
                    ine.save()
                    return redirect('/webapp/login/')

        return render(request,'register.html',locals())






    return render(request,'register.html')
Exemple #16
0
def register():
    form = RegisterForm()

    if form.validate_on_submit():
        user = User(form.username.data)
        user.set_password(form.password.data)
        user.activated = True
        user.email = form.email.data
        user.roles.append(Role.query.filter_by(title='default').first())
        db.session.add(user)
        db.session.commit()

        session['username'] = form.username.data
        # 生成头像
        image_size = 40
        img = render_identicon(
            str(user.id ^ int(time.time()))[::-1], image_size)
        img.save(
            os.path.join(main_blueprint.root_path, "..", "static", 'uploads',
                         'avatars', '%s.jpg' % user.username))
        return redirect(url_for('.index'))
    return render_template('register.html', form=form)
def create_user():

    # Getting JSON data
    data = request.get_json()

    # Checking that all data has been submitted
    if "name" not in data or "email" not in data or "subject" not in data:
        abort(config.http_bad_request, {"message": config.error_bad_request})

    # Creating new user
    user = User(data['name'])
    user.email = data['email']
    user.subject = data['subject']
    db.session.add(user)
    db.session.commit()

    # Sending response
    return jsonify(message=config.msg_user_created,
                   user={
                       "id": user.id,
                       "name": user.name
                   }), config.http_created
Exemple #18
0
    def post(self):
        args = register_post.parse_args()
        args_username = args['username']
        user = User.query.filter_by(username=args_username).first()
        args_password = args['password']
        args_email = args['email']
        new_user = User(username=args_username, password=args_password)
        new_user.create_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
        new_user.email = args_email

        d = {
            "username": new_user.username
        }
        try:
            new_user.save()
            if args_email:
                result = send_email('xilixjd blog', [args_email], '欢迎注册')
                return d, 202, {'Location': url_for('emails.get_status', id=result.id)}
            else:
                return d, 202
        except:
            new_user.roll_back()
            return None, 404
Exemple #19
0
def setup():
    db.create_all()

    admin_role = Role("admin")
    admin_role.description = "admin"
    db.session.add(admin_role)

    default_role = Role("default")
    default_role.description = "default"
    db.session.add(default_role)

    guest_role = Role("guest")
    guest_role.description = "guest"
    db.session.add(guest_role)

    db.session.commit()

    admin = User("Admin")
    admin.nickname = "管理员"
    admin.email = "*****@*****.**"
    admin.set_password('admin')
    admin.roles.append(admin_role)
    db.session.add(admin)

    official = User("PublicOfficial")
    official.nickname = "公共库用户"
    official.email = "*****@*****.**"
    official.set_password('official')
    admin.roles.append(admin_role)
    db.session.add(official)

    db.session.commit()

    # 创建原始公共库目录(共5个)
    script1 = Script('always_work.sg')
    script1.content = """Strategy T1:
    return 1"""
    script1.description = "永远合作"
    script1.user = official
    script1.is_private = False
    db.session.add(script1)

    script2 = Script('random_example.sg')
    script2.content = "Strategy T2:i = RANDOM(1);if(i==0){return 0}else{return 1}"
    script2.description = "`听天由命`,背叛与合作的几率为 50% (RANDOM 为系统范围内真随机)"
    script2.user = official
    script2.is_private = False
    db.session.add(script2)

    script3 = Script('slow_work.sg')
    script3.content = "Strategy T3:if(COUNT == 1){return 1}else{return CUR}"
    script3.description = "`慢半拍`:开局合作,随后一直跟随对方上一轮的选择"
    script3.user = official
    script3.is_private = False
    db.session.add(script3)

    script4 = Script('elusive_work.sg')
    script4.content = "Strategy T4:if (COUNT == 1){return 1}else {i = RANDOM(9);if (i == 9){return 0}else{return CUR}}"
    script4.description = "改进版`慢半拍`,开局合作,随后随机自我背叛,大几率跟随对方上一轮的选择"
    script4.user = official
    script4.is_private = False
    db.session.add(script4)

    script5 = Script('never_forgive.sg')
    script5.content = "Strategy T5:if(FLAG){return 0}else{return 1}"
    script5.description = "永不原谅,只要对方存在过背叛行为,就一直背叛"
    script5.user = official
    script5.is_private = False
    db.session.add(script5)

    db.session.commit()

    # 创建文章评论
    comment1 = Comment('comment1')
    comment1.user = admin
    comment2 = Comment('comment2')
    comment2.user = official
    comment3 = Comment('comment3')
    comment3.user = admin
    db.session.add(comment1)
    db.session.add(comment2)
    db.session.add(comment3)
    db.session.commit()

    post1 = Post('Post1', 'Content1')
    post1.user = official
    post1.category = PostCategory.General
    post1.comments.append(comment1)
    post1.comments.append(comment2)

    post2 = Post('Post2', 'Content2')
    post2.user = admin
    post2.category = PostCategory.Feedback
    post2.comments.append(comment3)

    db.session.add(post1)
    db.session.add(post2)

    db.session.commit()
Exemple #20
0
# -*- coding: utf-8 -*-
"""
结合tests/test_ui.py使用
"""
from webapp import create_app
from webapp.models import db, User, Role

app = create_app('test')

# Bug workaround
db.app = app
db.create_all()


default = Role("default")
poster = Role("poster")
db.session.add(default)
db.session.add(poster)

test_user = User("test")
test_user.password = '******'
test_user.confirmed = True
test_user.email = '*****@*****.**'
test_user.roles.append(poster)
db.session.add(test_user)
db.session.commit()

app.run()
Exemple #21
0
    def test_posts(self):
        # add a user
        r = Role.query.filter_by(name='poster').first()
        self.assertIsNotNone(r)
        u = User('john')
        u.email = '*****@*****.**'
        u.password = '******'
        u.confirmed = True
        u.roles.append(r)
        db.session.add(u)
        db.session.commit()

        # write an empty post, will raise ValidationError
        response = self.client.post(url_for('api.new_post'),
                                    headers=self.get_api_headers(
                                        'john', 'cat'),
                                    data=json.dumps({'text': ''}))
        self.assertTrue(response.status_code == 400)

        # write a post
        response = self.client.post(url_for('api.new_post'),
                                    headers=self.get_api_headers(
                                        'john', 'cat'),
                                    data=json.dumps({
                                        'title':
                                        'title of the post',
                                        'text':
                                        'body of the *blog* post'
                                    }))
        self.assertTrue(response.status_code == 201)
        url = response.headers.get('Location')
        self.assertIsNotNone(url)

        # get the new post
        response = self.client.get(url,
                                   headers=self.get_api_headers('john', 'cat'))
        self.assertTrue(response.status_code == 200)
        json_response = json.loads(response.data.decode('utf-8'))
        self.assertTrue(json_response['url'] == url)
        self.assertTrue(json_response['title'] == 'title of the post')
        self.assertTrue(json_response['text'] == 'body of the *blog* post')
        json_post = json_response

        # get the post from the user
        response = self.client.get(url_for('api.get_user_posts', id=u.id),
                                   headers=self.get_api_headers('john', 'cat'))
        self.assertTrue(response.status_code == 200)
        json_response = json.loads(response.data.decode('utf-8'))
        self.assertIsNotNone(json_response.get('posts'))
        self.assertTrue(json_response.get('count', 0) == 1)
        self.assertTrue(json_response['posts'][0] == json_post)

        # get the post from the user as a follower
        # 没有实现自关注,因此这里得不到
        response = self.client.get(url_for('api.get_user_following_posts',
                                           id=u.id),
                                   headers=self.get_api_headers('john', 'cat'))
        self.assertTrue(response.status_code == 200)
        json_response = json.loads(response.data.decode('utf-8'))
        self.assertListEqual(json_response.get('posts'), [])
        self.assertTrue(json_response.get('count', -1) == 0)

        # edit post
        response = self.client.put(url,
                                   headers=self.get_api_headers('john', 'cat'),
                                   data=json.dumps({
                                       'title': 'updated title',
                                       'text': 'updated body'
                                   }))
        # self.assertTrue(response.status_code == 200)
        json_response = json.loads(response.data.decode('utf-8'))
        self.assertTrue(json_response['url'] == url)
        self.assertTrue(json_response['text'] == 'updated body')
        self.assertTrue(json_response['title'] == 'updated title')
def insert_data():
    with app.app_context():
        # 不需要在这里创建库,应该使用数据库升级命令`db upgrade`来创建库
        # db.create_all()

        # 这里设定了3种角色
        role_admin = Role(name='admin')
        role_admin.description = "administrator role"
        role_poster = Role(name='poster')
        role_poster.description = "the registered user role"
        role_default = Role(name='default')
        role_default.description = 'the unregistered user role'
        db.session.add(role_admin)
        db.session.add(role_poster)
        db.session.add(role_default)

        # add User
        admin = User(username='******')
        admin.email = '*****@*****.**'
        admin.password = '******'
        admin.confirmed = True
        admin.roles.append(role_admin)
        admin.roles.append(role_poster)
        admin.roles.append(role_default)
        db.session.add(admin)

        user01 = User(username='******')
        user01.email = '*****@*****.**'
        user01.password = '******'
        user01.confirmed = True
        user01.roles.append(role_poster)
        user01.roles.append(role_default)
        db.session.add(user01)

        user02 = User(username='******')
        user02.email = '*****@*****.**'
        user02.password = '******'
        user02.confirmed = True
        user02.roles.append(role_poster)
        user02.roles.append(role_default)
        db.session.add(user02)

        # add Tag and Post
        tag_one = Tag('Python')
        tag_two = Tag('Flask')
        tag_three = Tag('SQLAlechemy')
        tag_four = Tag('Jinja')
        tag_list = [tag_one, tag_two, tag_three, tag_four]

        s = "Example Text"

        for i in xrange(1, 101):
            new_post = Post("Post {}".format(i))
            if i % 2:
                new_post.user = user01
            else:
                new_post.user = user02
            new_post.publish_date = datetime.datetime.utcnow()
            new_post.text = s
            new_post.tags = random.sample(tag_list, random.randint(1, 3))
            db.session.add(new_post)

        # add comment
        comment01 = Comment()
        comment01.name = 'comment01'
        comment01.text = 'comment text'
        comment01.post_id = 99
        comment01.date = datetime.datetime.utcnow()
        db.session.add(comment01)

        comment02 = Comment()
        comment02.name = 'comment02'
        comment02.text = 'comment text'
        comment02.post_id = 100
        comment02.date = datetime.datetime.utcnow()
        db.session.add(comment02)

        db.session.commit()
Exemple #23
0
    def test_comments(self):
        # add two users
        r = Role.query.filter_by(name='poster').first()
        self.assertIsNotNone(r)
        u1 = User('john')
        u1.email = '*****@*****.**'
        u1.password = '******'
        u1.confirmed = True
        u1.roles.append(r)
        u2 = User('susan')
        u2.email = '*****@*****.**'
        u2.password = '******'
        u2.confirmed = True
        u2.roles.append(r)
        db.session.add_all([u1, u2])
        db.session.commit()

        # add a post
        post = Post(title='title of the post')
        post.text = 'body of the post'
        post.user = u1
        db.session.add(post)
        db.session.commit()

        # write a comment
        response = self.client.post(url_for('api.new_post_comment',
                                            id=post.id),
                                    headers=self.get_api_headers(
                                        'susan', 'dog'),
                                    data=json.dumps({
                                        'name':
                                        'comment name',
                                        'text':
                                        'Good [post](http://example.com)!'
                                    }))
        self.assertTrue(response.status_code == 201)
        json_response = json.loads(response.data.decode('utf-8'))
        url = response.headers.get('Location')
        self.assertIsNotNone(url)
        self.assertTrue(json_response['name'] == 'comment name')
        self.assertTrue(
            json_response['text'] == 'Good [post](http://example.com)!')

        # get the new comment
        response = self.client.get(url,
                                   headers=self.get_api_headers('john', 'cat'))
        self.assertTrue(response.status_code == 200)
        json_response = json.loads(response.data.decode('utf-8'))
        self.assertTrue(json_response['url'] == url)
        self.assertTrue(json_response['name'] == 'comment name')
        self.assertTrue(
            json_response['text'] == 'Good [post](http://example.com)!')

        # add another comment
        comment = Comment(name='another comment name')
        comment.text = 'Thank you!'
        comment.user = u1
        comment.post = post
        db.session.add(comment)
        db.session.commit()

        # get the two comments from the post
        response = self.client.get(url_for('api.get_post_comments',
                                           id=post.id),
                                   headers=self.get_api_headers(
                                       'susan', 'dog'))
        self.assertTrue(response.status_code == 200)
        json_response = json.loads(response.data.decode('utf-8'))
        self.assertIsNotNone(json_response.get('comments'))
        self.assertTrue(json_response.get('count', 0) == 2)

        # get all the comments
        response = self.client.get(url_for('api.get_comments', id=post.id),
                                   headers=self.get_api_headers(
                                       'susan', 'dog'))
        self.assertTrue(response.status_code == 200)
        json_response = json.loads(response.data.decode('utf-8'))
        self.assertIsNotNone(json_response.get('comments'))
        self.assertTrue(json_response.get('count', 0) == 2)