def register_google(cls, response):
        access_token = response.get(u"access_token", None)
        if not access_token:
            return {u"ok": False, u"msg": u"Google 로그인에 실패했습니다."}

        r = GoogleAPI(access_token=access_token).fetch()

        if r.status != 200:
            return {u"ok": False, u"msg": u"개인 정보를 불러오는 데 실패했습니다."}

        data = r.data
        user_email = data.get("email")
        user_data = db.query(User).filter_by(email=user_email).first()
        if user_data:
            return {u"ok": True, u"user": user_data, u"created": False}

        user_id = user_email.split("@")[0]
        user_pw = md5("%s%s%s" % ("go", user_id, "google")).hexdigest()[:20]
        user_pic = data.get("picture")

        created_user = User(id_str=user_email.split("@")[0], email=user_email, password=user_pw, picture=user_pic)
        db.add(created_user)
        db.commit()

        created_feed = NewsFeed(
            news_type=(3,), data={u"user": {u"picture": user_pic, u"id_int": created_user.id_int, u"id_str": user_id}}
        )

        db.add(created_feed)
        db.commit()

        return {u"ok": True, u"user": created_user, u"created": True}
    def create(cls, **kwargs):
        """
        Parameters:
        news_type: type of news
                    * 1: archive
                    * 2: add media to playlist

        user: user object (models.User)
        media: media object (models.Media)
        playlist: playlist object (models.Playlist)
        """
        news_type = kwargs.get(u'news_type', 0)

        user = kwargs.get(u'user', g.user)
        if not user:
            return {u'ok': False, u'msg': u'login required.'}

        media = kwargs.get(u'media', None)
        if not media:
            return {u'ok': False, u'msg': u'media was required.'}

        playlist = kwargs.get(u'playlist', None)
        if not playlist:
            return {u'ok': False, u'msg': u'playlist was required.'}

        param = {
            u'user': {
                u'id_int': user.id_int,
                u'id_str': user.id_str,
                u'picture': user.picture,
            },
            u'media': {
                u'id_int': media.id_int,
                u'title': media.title,
                u'duration': media.duration,
                u'thumbnail': media.thumbnail,
            },
            u'playlist': {
                u'id_int': playlist.id_int,
                u'title': playlist.title,
            },
        }

        created_news_feed = NewsFeed(news_type=(news_type, ),
                                     data=param)
        db.add(created_news_feed)
        db.commit()

        return {u'ok': True}
    def create(cls, media_info):
        """
        Parameters:
        media_info: tuple like this (<int>media_type, <str>id_str)
        """
        created_media = None
        parsed_data = cls.route_parser(media_info)
        if parsed_data.get(u'ok'):
            info = parsed_data.get(u'info')
            created_media = Media(id_str=media_info[1],
                                  media_type=media_info,
                                  data=info)
            db.add(created_media)
            db.commit()

        return created_media
    def add_media(cls, playlist, media):
        if isinstance(playlist, int):
            playlist = db.query(Playlist).get(playlist)

        if isinstance(media, int):
            media = db.query(Media).get(media)

        if None in [playlist, media]:
            return False

        playlist.media_list.append(media)
        db.add(playlist)
        db.commit()

        NewsFeedController.create(news_type=1 if playlist.default else 2,
                                  media=media,
                                  playlist=playlist)

        return True
    def create(cls, **kwargs):
        """
        Parameters:
        user: owner of playlist (default: connected_user)
        title: title of playlist (default: None, *required)
        limit: embargo of media in playlist (default: 20)
        """
        user = kwargs.get('user', g.user)
        if not user:
            return {u'ok': False, u'msg': u'Need to sign in.'}

        title = kwargs.get('title', None)
        if not title:
            return {u'ok': False, u'msg': u'title was required'}

        limit = kwargs.get('limit', 20)
        default = kwargs.get('default', False)

        created_playlist = Playlist(title=title, owner=user, limit=limit, default=default)
        db.add(created_playlist)
        db.commit()

        return {u'ok': True, u'playlist': created_playlist}