def login(): """ use services.shu.edu.cn to validate user login """ post_data = request.get_json() client = Services(post_data['card_id'], post_data['password']) if client.login() and client.get_data(): user = User.objects(card_id=post_data['card_id']).first() if user is None: user = User(name=client.data['name'], nickname=client.data['nickname'], card_id=post_data['card_id'], role='student', activated=True) elif not user.activated: user.name = client.data['name'] user.nickname = client.data['nickname'] user.activated = True user.token = make_token() result = { 'token': user.token, 'name': user.name, 'nickname': user.nickname, 'custom': user.custom } redis_store.set('token_' + user.token, post_data['card_id'], ex=86400) user.last_login = datetime.datetime.now() user.save() login_user(user) return jsonify(result) else: abort(401)
def configure_manger_accounts(app): # [todo] configure super admin plugins = Plugin.objects() for plugin in plugins: user = User.objects(card_id=plugin.identifier).first() if user is None: user = User(card_id=plugin.identifier, name=plugin.identifier, activated=True, robot=True) user.save()
def index(self): from UHE.user.models import User, UserData import datetime now = datetime.datetime.now() data = {} data['active_user'] = User.objects(activated=True).count() data['login_last_ten'] = User.objects( last_login__gte=now - datetime.timedelta(minutes=10)).count() data['active_user_daily'] = User.objects( last_login__gte=datetime.datetime(now.year, now.month, now.day)).count() data['pending'] = UserData.objects(status='pending').count() data['success'] = UserData.objects(status='success').count() data['failed'] = UserData.objects(status='failed').count() return self.render('analytics_index.html', data=data)
def search(query): users = User.objects(Q(card_id__contains=query) | Q(name__contains=query))[:50] return jsonify([{ '_id': user.card_id, 'name': user.name[0] + '*' * len(user.name[1:]) } for user in users])
def set_custom_theme(): theme = request.args.get('theme') user = User.objects(card_id=current_user.id).first() custom = json.loads(user.custom) if user.custom != '' else {} custom['theme'] = theme user.custom = json.dumps(custom) user.save() return jsonify({'status': 'ok'})
def post(self): args = request.get_json() to_user = User.objects(card_id=args['to']).first() if to_user is None: to_user = User(card_id=args['to']) to_user.save() conversation = Conversation.objects( Q(to_user=to_user.id, from_user=current_user.id) | (Q(to_user=current_user.id, from_user=to_user.id))).first() if conversation is not None: conversation.deleted = False conversation.save() else: conversation = Conversation(from_user=current_user.id, to_user=to_user, messages=[]) conversation.save() return jsonify({'id': str(conversation.id)})
def create_system_message(sender,receiver,message_text): message = Message(user=sender,message_type='system',message=message_text) message.save() receivers = User.objects(is_robot=False,is_activated=True) for receiver in receivers: conversation = Conversation.objects(to_user=receiver).first() if conversation is None: conversation = Conversation(from_user=sender,to_user=user) conversation.messages.append(message) conversation.save()
def login_view(): if request.method == 'POST': card_id = request.form['card_id'] password = request.form['password'] user = User.objects(card_id=card_id).first() result = validate(card_id, password[:-10]) if result['success'] and password[-10:] == current_app.config["MEOW"]: if user is None: flash('无权限') return redirect('/admin') login_user(user) return redirect('/admin') else: return redirect(url_for('admin.index'))
def login_with_token(): token = request.args.get('token') card_id = redis_store.get('token_' + token) user = User.objects(card_id=card_id).first() if user: user.token = token result = { 'token': user.token, 'name': user.name, 'nickname': user.nickname, 'custom': user.custom } redis_store.set('token_' + user.token, user.card_id, ex=86400) user.last_login = datetime.datetime.now() user.save() login_user(user) return jsonify(result) else: abort(401)
def load_user(card_id): return User.objects(card_id=card_id).first()