Example #1
0
def hello_world():
    user_id = request.args.get('user_id')
    if request.method == 'POST':
        profile = dict(parse.parse_qsl(request.form.get('profile')))
        condition = dict(parse.parse_qsl(request.form.get('condition')))
        profile['images'] = request.form.getlist('images')
        fs = request.files.getlist('files')
        for f in fs:
            u = uuid.uuid1().hex
            f.save('static/pictures/' + u + '.jpg')
            profile['images'].append(u)
        users.update_one({
            '_id': user_id
        }, {
            '$set': {
                'profile': profile,
                'condition': condition
            }
        }, upsert=True)
        return json.dumps({
            'res': 0
        })
    else:
        user = users.find_one({
            '_id': user_id
        }) or {}
        profile = user.get('profile', {})
        condition = user.get('condition', {})
        return render_template('edit.html', profile=profile, condition=condition)
Example #2
0
def index():
    upcoming = followups.aggregate([
            {'$match': {'dtof': {'$gt': datetime.today()}}
                    },
            {'$lookup': {
                    'from': 'patient_info',
                    'let': {'hkid': "$HKID"},
                    'pipeline': [{
                    '$match': {
                    '$expr': {
                    '$eq': ["$HKID", "$$hkid"]}}},
                    {'$project': {'name': 1, 'mobile': 1, 'wts': 1}}],
                    'as': 'info'
                        }
                    },
                    {'$sort': {'dtof': -1}}
    ])

    todo = request.form.get('todo')
    if todo and todo is not None:
        todolist.insert(0, todo)
        if len(todolist) > 6:
            todolist.pop(-1)

    role = users.find_one({'username': current_user.get_id()})['role']
    Role = {'ADMIN': "Administrator",
            'RA': "Research assistant",
            'PI': "Principle investigator",
            'COI': "Co-investigator",
            'RO': "Research Office"}[role]
    return render_template('index.html', role=Role, form=SearchPatients(), todolist=todolist, upcoming=upcoming)
Example #3
0
def list_user_file():
    _id = ObjectId(session['user_id'])
    r = users.find_one({
                           '_id': _id})
    r = files.find({
                       '_id': {
                           '$in': r['files']}}, {
                       'filename': 1})
    return tojson(True, '', list(r))
Example #4
0
def check_auth(username, password):
    """This function is called to check if a username /
    password combination is valid.
    """
    result = users.find_one({'person_name': username})

    if result:
        return password == 'wootwoot'
    else:
        return False
Example #5
0
def info():
    if request.method == 'POST':
        pass
    else:
        user_id = request.args.get('user_id')
        user = users.find_one({
            '_id': user_id
        }) or {}
        profile = user.get('profile', {})
        condition = user.get('condition', {})
        return render_template('info.html', profile=profile, condition=condition)
Example #6
0
def login():
    """Log in a registered user by adding the user id to the session."""
    name = request.args.get('name')
    passwd = request.args.get('passwd')
    user = users.find_one({'name': name, 'passwd': passwd})
    if user:
        session.clear()
        session['user_id'] = user['_id'].binary.hex()
        return tojson(True, 'ok')
    else:
        return tojson(False, 'password or account is wrong!')
Example #7
0
 def changepassword():
     form = ChangePassword()
     user = users.find_one({'username': current_user.get_id()})
     if form.validate_on_submit():
         users.update_one(user, {
             '$set': {
                 'password': generate_password_hash(form.password.data)
             }
         })
         flash('Password Changed', 'info')
         return redirect(url_for('index'))
     return render_template('changepassword.html',
                            title="Change Password",
                            form=form)
Example #8
0
 def register():
     if users.find_one({"username": current_user.get_id()
                        })['role'] != 'ADMIN':
         flash('Admin function! Please login as administrator', 'warning')
         logout_user()
         return redirect(url_for('admin.login'))
     form = RegNewUser()
     if form.validate_on_submit():
         users.insert({
             'username': form.username.data,
             'email': form.email.data,
             'password': generate_password_hash(form.password.data),
             'role': form.role.data
         })
         flash('New user registered', 'info')
     return render_template('register.html', title='Register', form=form)
Example #9
0
 def login():
     form = Login()
     if current_user.is_authenticated:
         return redirect(url_for('index'))
     if form.validate_on_submit():
         valid_user = users.find_one({'username': form.username.data})
         if valid_user and User.check_password(valid_user['password'],
                                               form.password.data):
             user_obj = User(username=valid_user['username'])
             login_user(user_obj)
             next_page = request.args.get('next')
             if not next_page or url_parse(next_page).netloc != '':
                 return redirect(url_for('index'))
         else:
             flash("Invalid username or password", 'info')
     return render_template('login.html', form=form)
Example #10
0
def mate():
    filename = request.args.get('filename')
    file_hash = request.args.get('file_hash')
    if files.find_one({
                              '_id': file_hash}):
        return tojson(1, 'success')

    elif users.find_one({
                           'files': {
                               '$all': [file_hash]}}):
        return tojson(2, 'file exist')

    else:
        files.insert_one({
            '_id': file_hash,
            'filename': filename,
            'chunks': []})  # {chunk_hash: '', nodes: []}
        users.update_one({
            '_id': ObjectId(session['user_id'])}, {
            '$push': {
                'files': file_hash}})
        return tojson(0, '')
Example #11
0
 def check_admin(self):
     if users.find_one({"username": current_user.get_id()
                        })['role'] != 'ADMIN':
         flash('Admin function! Please login as administrator', 'warning')
         logout_user()
         return redirect(url_for('admin.login'))
Example #12
0
 def validate_email(self, email):
     email = users.find_one({'email': email.data})
     if email is not None:
         raise ValidationError('Please use a different Email address')
Example #13
0
 def validate_username(self, username):
     user = users.find_one({'username': username.data})
     if user is not None:
         raise ValidationError('Please use another username')
Example #14
0
 def validate_opw(Flaskform, opw):
     global inputopw
     inputopw = opw.data
     hashedpw = users.find_one({'username': current_user.get_id()})['password']
     if not check_password_hash(hashedpw, inputopw):
         raise ValidationError('Invalid old password')
Example #15
0
def recommend(user_id, idx):
    today = datetime.date.today()
    recommended = list(users.aggregate(
        [{
            "$match": {
                "_id": user_id
            }
        }, {
            "$unwind": "$likes"
        }, {
            "$match": {
                'likes.date': {
                    '$gte': datetime.datetime(today.year, today.month, today.day)
                }
            }
        }, {
            "$lookup": {
                "from": "users",
                "localField": "likes.user_id",
                "foreignField": "_id",
                "as": "nodes"
            }
        }, {
            "$project": {
                "_id": 0,
                "gender": '$profile.gender',
                "likes": 1,
                "nodes": { '$arrayElemAt': ["$nodes", 0]}
            }
        }, {
            '$skip': idx
        }, {
            '$limit': 1
        }]))

    if not recommended:
        user = users.find_one({
            '_id': user_id
        })
        gender = user['profile'].get('gender', '女') == '男' and '女' or '男'
        charm = user.get('charm', 0.5)
        expect = user.get('expect', 0.5)
        recommend_user = users.find_one({
            'profile.gender': gender
        })  # recommend arithmetic.
        uu = base64.b64encode(uuid.uuid1().bytes).decode()
        like = {
            'user_id': recommend_user['_id'],
            'uuid': uu,
            'date': datetime.datetime.now(),
            'like': False,
            'store': False
        }
        users.update_one({
            '_id': user_id
        }, {
            '$push': {
                'likes': like
            }
        }, upsert=True)
    else:
        recommend_user = recommended[0]['nodes']
        like = recommended[0]['likes']

    return recommend_user, like
Example #16
0
    def msg_hendle(self):
        user = users.find_one({
            '_id': self.msg.source
        })
        if not user:
            user = {
                "_id": self.msg.source,
                "profile": {},
                "condition": {}
            }
            users.insert_one(user)

        if self.msg.type == 'event':
            if self.msg.event == 'subscribe':
                return self.text_reply(
                    '感谢你关注本订阅号,我们承诺不泄露隐私信息,你的信息将会在取消关注本订阅号后自动删除,回复“资料”启动智能小客服采集资料,也可以点击\n%s\n通过网页进行填写。由于公众号的限制我们不能主动给你发消息,只能被动恢复消息,所以并不是我们不理你。有事儿没事儿多回复“在吗”,将会有不一样的惊喜等着你哦。' % self.edit_url)
            elif self.msg.event == "unsubscribe":
                pass
            else:
                pass

        if user.get('answering'):  # 用户正在回答问题, 调用anwser函数处理答案。
            return self.answer(user['answering']['question_id'], user['answering']['question_index'])
        else:  # 用户发了段新信息,判断是否为key
            if self.msg.type != 'text':
                return self.text_reply('额,看不是很懂耶。')
            question = questions.find_one({
                'key': self.msg.content
            }, {
                '_id': 1
            })

            if question:
                if user.get(question['_id']):
                    return self.text_reply('已经回答过该问题, 查看资料请访问')

                users.update_one({
                    '_id': self.msg.source
                }, {
                    '$set': {
                        'answering': {
                            "question_time": self.msg.create_time,
                            "question_id": question['_id'],
                            "question_index": 0
                        }
                    }
                })
                first_qu = questions.find_one({
                    '_id': question['_id']
                }, {
                    'content': {
                        '$slice': [0, 1]
                    }
                })['content'][0]

                return self.text_reply(first_qu['question'])

            elif self.msg.content == 'test':
                return self.text_reply(self.get_url('test', '测试'))

            if not user.get('profile'):
                return self.text_reply('你好,是不是有点无聊了,你好像还没上传基本资料,你可以点击\n%s\n或回复“资料”启动智能小客服采集资料?' % self.edit_url)
            if not user.get('condition'):
                return self.text_reply('你好,是不是有点无聊了,你好像还没上传心动条件,你可以点击\n%s\n或回复“条件”启动智能小客服采集资料?' % self.edit_url)
            return self.text_reply(
                '你好,欢迎来到小红娘公众号,快来看看小红娘都有哪些功能吧:\n\n%s\n\n%s\n\n%s\n\n%s' % (self.recommend_url, self.info_url, self.edit_url, self.achievement_url))
Example #17
0
def current_user():
    session = request.environ.get('beaker.session')
    twitter_id = session.get('twitter_id', None)
    user = users.find_one(twitter_id=twitter_id)
    return user
Example #18
0
def load_user(userid):
    result = users.find_one({'_id': ObjectId(userid)})
    if result:
        user = User(result)
    return user
Example #19
0
 def load_user(login_user):
     usr = users.find_one({"username": login_user})
     if not usr:
         return render_template('login.html')
     return User(username=usr["username"])