Esempio n. 1
0
    def get(self, user_id, thumbnail=None):
        avatar = yield AvatarDocument.find_one({
            'owner': DBRef(UserDocument.meta['collection'], ObjectId(user_id))
        })

        modified = avatar['upload_time']

        self.set_header('Last-Modified', modified)
        self.set_header('Content-Type', avatar['content_type'])
        self.set_header('Cache-Control', 'public')

        ims_value = self.request.headers.get('If-Modified-Since')
        if ims_value is not None:
            date_tuple = email.utils.parsedate(ims_value)
            if_since = datetime.fromtimestamp(time.mktime(date_tuple))

            if if_since >= modified.replace(microsecond=0):
                self.set_status(304)
                self.finish()
            else:
                self._send_avatar(avatar, thumbnail)
        else:
            self._send_avatar(avatar, thumbnail)
Esempio n. 2
0
    def get(self, user_id, thumbnail=None):
        avatar = yield AvatarDocument.find_one({
            'owner':
            DBRef(UserDocument.meta['collection'], ObjectId(user_id))
        })

        modified = avatar['upload_time']

        self.set_header('Last-Modified', modified)
        self.set_header('Content-Type', avatar['content_type'])
        self.set_header('Cache-Control', 'public')

        ims_value = self.request.headers.get('If-Modified-Since')
        if ims_value is not None:
            date_tuple = email.utils.parsedate(ims_value)
            if_since = datetime.fromtimestamp(time.mktime(date_tuple))

            if if_since >= modified.replace(microsecond=0):
                self.set_status(304)
                self.finish()
            else:
                self._send_avatar(avatar, thumbnail)
        else:
            self._send_avatar(avatar, thumbnail)
Esempio n. 3
0
    def post(self):
        response_data = {}

        form = RegisterForm(self.request.arguments)
        if form.validate():
            name = form.name.data
            email = form.email.data
            password = form.password.data

            if (yield UserDocument.find_one({'name': name})):
                response_data["error"] = "用户名已被占用"

            if (yield UserDocument.find_one({"email": email})):
                response_data["error"] = "邮箱已被注册"

            if not response_data:
                password = yield UserDocument.encrypt_password(password)

                document = {
                    'email': email,
                    'name': name,
                    'password': password,
                    'user_type': "person",
                    'register_date': datetime.now()
                }

                try:
                    user_id = yield UserDocument.insert(document)
                except:
                    raise HTTPError(500)

                # 头像初始化
                avatar = open(
                    os.path.join(APPLICATION_SETTINGS['static_path'],
                                 'img/default.jpg'))
                content = avatar.read()
                avatar.close()

                document = {
                    'name':
                    'default.jpg',
                    'upload_time':
                    datetime.now(),
                    'content_type':
                    'jpeg',
                    'owner':
                    DBRef(UserDocument.meta['collection'], ObjectId(user_id)),
                    'content':
                    Binary(content),
                    'thumbnail50x50':
                    Binary(content),
                    'thumbnail180x180':
                    Binary(content)
                }
                yield AvatarDocument.insert(document)

                # 用户设置初始化
                _ = yield OfficialProfileCoverDocument.get_profile_cover_list()
                profile_cover = random.sample(_, 1)[0]

                document = {
                    'user':
                    DBRef(UserDocument.meta['collection'], ObjectId(user_id)),
                    'profile_cover':
                    DBRef(OfficialProfileCoverDocument.meta['collection'],
                          ObjectId(profile_cover['_id']))
                }
                yield UserSettingDocument.insert(document)

                # Ejabberd注册
                try:
                    Ejabberd.register(user_id, password)
                except:
                    pass

                # 给用户发送验证邮件
                document = {
                    'uid':
                    user_id,
                    'code':
                    CodeDocument.generate_code(),
                    'expired_time':
                    datetime.now() +
                    timedelta(days=USER_SETTINGS['code_expired_after'])
                }
                code_id = yield CodeDocument.insert(document)
                WriterManager.pub(MessageTopic.SEND_ACTIVATION_EMAIL, code_id)

                response_data.update(
                    {'success': '注册成功! 系统已经向你的注册邮箱发送了一封激活'
                     '邮件, 请验证后登录!'})

        else:
            for field in form.errors:
                response_data.update({'error': form.errors[field][0]})
                break

        self.finish(json.dumps(response_data))
Esempio n. 4
0
    def post(self):
        response_data = {}

        form = RegisterForm(self.request.arguments)
        if form.validate():
            name = form.name.data
            email = form.email.data
            password = form.password.data

            if (yield UserDocument.find_one({'name': name})):
                response_data["error"] = "用户名已被占用"

            if (yield UserDocument.find_one({"email": email})):
                response_data["error"] = "邮箱已被注册"

            if not response_data:
                password = yield UserDocument.encrypt_password(password)

                document = {
                    'email': email,
                    'name': name,
                    'password': password,
                    'user_type': "person",
                    'register_date': datetime.now()
                }

                try:
                    user_id = yield UserDocument.insert(document)
                except:
                    raise HTTPError(500)

                # 头像初始化
                avatar = open(os.path.join(
                    APPLICATION_SETTINGS['static_path'], 'img/default.jpg')
                )
                content = avatar.read()
                avatar.close()

                document = {
                    'name': 'default.jpg',
                    'upload_time': datetime.now(),
                    'content_type': 'jpeg',
                    'owner': DBRef(
                        UserDocument.meta['collection'], ObjectId(user_id)
                    ),
                    'content': Binary(content),
                    'thumbnail50x50': Binary(content),
                    'thumbnail180x180': Binary(content)
                }
                yield AvatarDocument.insert(document)

                # 用户设置初始化
                _ = yield OfficialProfileCoverDocument.get_profile_cover_list()
                profile_cover = random.sample(_, 1)[0]

                document = {
                    'user': DBRef(
                        UserDocument.meta['collection'], ObjectId(user_id)
                    ),
                    'profile_cover': DBRef(
                        OfficialProfileCoverDocument.meta['collection'],
                        ObjectId(profile_cover['_id'])
                    )
                }
                yield UserSettingDocument.insert(document)

                # Ejabberd注册
                try:
                    Ejabberd.register(user_id, password)
                except:
                    pass

                # 给用户发送验证邮件
                document = {
                    'uid': user_id,
                    'code': CodeDocument.generate_code(),
                    'expired_time': datetime.now() + timedelta(
                        days=USER_SETTINGS['code_expired_after']
                    )
                }
                code_id = yield CodeDocument.insert(document)
                WriterManager.pub(MessageTopic.SEND_ACTIVATION_EMAIL, code_id)

                response_data.update({
                    'success': '注册成功! 系统已经向你的注册邮箱发送了一封激活'
                               '邮件, 请验证后登录!'
                })

        else:
            for field in form.errors:
                response_data.update({'error': form.errors[field][0]})
                break

        self.write_json(response_data)
Esempio n. 5
0
    def get(self, option):
        if option == 'avatar':
            avatar = yield AvatarDocument.find_one({
                'owner': DBRef(
                    UserDocument.meta['collection'],
                    ObjectId(self.current_user['_id'])
                )
            })

            self.render(
                'setting/template/setting-avatar.html',
                avatar=avatar,
                preview=self.get_avatar(self.current_user['_id'])
            )

        elif option == 'profile':
            user_setting = yield UserSettingDocument.find_one({
                'user': DBRef(
                    UserDocument.meta['collection'],
                    ObjectId(self.current_user['_id'])
                )
            })

            self.render(
                'setting/template/setting-profile.html',
                user_setting=user_setting
            )

        elif option == 'password':
            self.render('setting/template/setting-password.html')

        elif option == 'profile/cover':
            cover_list_f = OfficialProfileCoverDocument.get_profile_cover_list
            profile_cover_list = yield cover_list_f()

            user_setting = yield UserSettingDocument.find_one({
                'user': DBRef(
                    UserDocument.meta['collection'],
                    ObjectId(self.current_user['_id'])
                )
            })

            self.render(
                'setting/template/setting-profile-cover.html',
                profile_cover_list=profile_cover_list,
                user_setting=user_setting
            )

        elif option == 'private':
            user_setting = yield UserSettingDocument.find_one({
                'user': DBRef(
                    UserDocument.meta['collection'],
                    ObjectId(self.current_user['_id'])
                )
            })

            self.render(
                'setting/template/setting-private.html',
                user_setting=user_setting
            )
        elif option == 'notification':
            user_setting = yield UserSettingDocument.find_one({
                'user': DBRef(
                    UserDocument.meta['collection'],
                    ObjectId(self.current_user['_id'])
                )
            })
            self.render(
                'setting/template/setting-notification.html',
                user_setting=user_setting
            )
        elif option == 'theme':
            user_setting = yield UserSettingDocument.find_one({
                'user': DBRef(
                    UserDocument.meta['collection'],
                    ObjectId(self.current_user['_id'])
                )
            })

            self.render(
                'setting/template/setting-theme.html',
                user_setting=user_setting
            )
        else:
            raise HTTPError(404)
Esempio n. 6
0
    def post(self):
        form = AvatarSetForm(self.request.arguments)
        if not form.validate() or 'avatar' not in self.request.files:
            raise HTTPError(404)

        x = form.x.data
        y = form.y.data
        w = form.w.data
        h = form.h.data
        target_width = form.target_width.data

        crop_area = {
            'x': x,
            'y': y,
            'w': w,
            'h': h,
            'target_width': target_width
        }

        upload_file = self.request.files['avatar'][0]

        document = {
            'name': upload_file['filename'],
            'upload_time': datetime.now(),
            'content': Binary(upload_file['body']),
            'content_type': upload_file['content_type'],
            'owner': DBRef(
                UserDocument.meta['collection'],
                ObjectId(self.current_user['_id'])
            ),
            'crop_area': crop_area
        }

        try:
            image = Image.open(StringIO(upload_file['body']))
        except:
            raise HTTPError(404)

        scale = image.size[0] * 1.0 / target_width

        x = int(x * scale)
        y = int(y * scale)
        w = int(w * scale)
        h = int(h * scale)

        box = (x, y, x + w, y + h)
        image = image.crop(box)

        output50x50 = StringIO()
        output180x180 = StringIO()

        image50x50 = image.resize((50, 50), Image.ANTIALIAS)
        image180x180 = image.resize((180, 180), Image.ANTIALIAS)

        image50x50.save(
            output50x50,
            document['content_type'].split('/')[1].upper(),
            quality=100
        )
        image180x180.save(
            output180x180,
            document['content_type'].split('/')[1].upper(),
            quality=100
        )

        document['thumbnail50x50'] = Binary(output50x50.getvalue())
        document['thumbnail180x180'] = Binary(output180x180.getvalue())

        output50x50.close()
        output180x180.close()

        user_dbref = DBRef(
            UserDocument.meta['collection'],
            ObjectId(self.current_user['_id'])
        )

        yield AvatarDocument.remove({'owner': user_dbref}, multi=True)
        yield AvatarDocument.insert(document)
        yield UserDocument.update(
            {'_id': ObjectId(self.current_user['_id'])},
            {'$set': {'avatar_updated': True}}
        )

        self.finish()