예제 #1
0
파일: gdrive.py 프로젝트: yonouf/uSeRBeGo
async def generate_credentials(gdrive):
    """ - Only generate once for long run - """
    if helper.get_credentials(str(gdrive.from_id)) is not None:
        await gdrive.edit("`You already authorized token...`")
        await asyncio.sleep(1.5)
        await gdrive.delete()
        return False
    """ - Generate credentials - """
    if G_DRIVE_DATA is not None:
        try:
            configs = json.loads(G_DRIVE_DATA)
        except json.JSONDecodeError:
            await gdrive.edit(
                "`[AUTHENTICATE - ERROR]`\n\n"
                "`Status` : **BAD**\n"
                "`Reason` : **G_DRIVE_DATA** entity is not valid!"
            )
            return False
    else:
        """ - Only for old user - """
        if G_DRIVE_CLIENT_ID is None and G_DRIVE_CLIENT_SECRET is None:
            await gdrive.edit(
                "`[AUTHENTICATE - ERROR]`\n\n"
                "`Status` : **BAD**\n"
                "`Reason` : please get your **G_DRIVE_DATA** "
                "[here](https://telegra.ph/How-To-Setup-Google-Drive-04-03)"
            )
            return False
        configs = {
            "installed": {
                "client_id": G_DRIVE_CLIENT_ID,
                "client_secret": G_DRIVE_CLIENT_SECRET,
                "auth_uri": GOOGLE_AUTH_URI,
                "token_uri": GOOGLE_TOKEN_URI,
            }
        }
    await gdrive.edit("`Creating credentials...`")
    flow = InstalledAppFlow.from_client_config(
        configs, SCOPES, redirect_uri=REDIRECT_URI
    )
    auth_url, _ = flow.authorization_url(access_type="offline", prompt="consent")
    msg = await gdrive.respond("`Go to your BOTLOG group to authenticate token...`")
    async with gdrive.client.conversation(BOTLOG_CHATID) as conv:
        url_msg = await conv.send_message(
            "Please go to this URL:\n" f"{auth_url}\nauthorize then reply the code"
        )
        r = conv.wait_event(events.NewMessage(outgoing=True, chats=BOTLOG_CHATID))
        r = await r
        code = r.message.message.strip()
        flow.fetch_token(code=code)
        creds = flow.credentials
        await asyncio.sleep(3.5)
        await gdrive.client.delete_messages(gdrive.chat_id, msg.id)
        await gdrive.client.delete_messages(BOTLOG_CHATID, [url_msg.id, r.id])
        """ - Unpack credential objects into strings - """
        creds = base64.b64encode(pickle.dumps(creds)).decode()
        await gdrive.edit("`Credentials created...`")
    helper.save_credentials(str(gdrive.from_id), creds)
    await gdrive.delete()
    return
예제 #2
0
async def generate_credentials(gdrive):
    """ - Only generate once for long run - """
    if helper.get_credentials(str(gdrive.from_id)) is not None:
        await gdrive.edit("`Anda sudah mengotorisasi token...`")
        await asyncio.sleep(1.5)
        await gdrive.delete()
        return False
    """ - Generate credentials - """
    if G_DRIVE_DATA is not None:
        try:
            configs = json.loads(G_DRIVE_DATA)
        except json.JSONDecodeError:
            await gdrive.edit(
                "`[AUTENTIKASi - ERROR]`\n\n"
                "`Status` : **BAD**\n"
                "`Alasan` : **G_DRIVE_DATA** entitas tidak valid!"
            )
            return False
    else:
        """ - Only for old user - """
        if G_DRIVE_CLIENT_ID is None and G_DRIVE_CLIENT_SECRET is None:
            await gdrive.edit(
                "`[AUTENTIKASi - ERROR]`\n\n"
                "`Status` : **BAD**\n"
                "`Alasan` : Lord, tolong ambil **G_DRIVE_DATA** "
                "[Disini](https://telegra.ph/How-To-Setup-Google-Drive-04-03)"
            )
            return False
        configs = {
            "installed": {
                "client_id": G_DRIVE_CLIENT_ID,
                "client_secret": G_DRIVE_CLIENT_SECRET,
                "auth_uri": GOOGLE_AUTH_URI,
                "token_uri": GOOGLE_TOKEN_URI,
            }
        }
    await gdrive.edit("`Membuat kredensial...`")
    flow = InstalledAppFlow.from_client_config(
        configs, SCOPES, redirect_uri=REDIRECT_URI
    )
    auth_url, _ = flow.authorization_url(access_type="offline", prompt="consent")
    msg = await gdrive.respond("`Buka grup BOTLOG Anda untuk mengautentikasi token...`")
    async with gdrive.client.conversation(BOTLOG_CHATID) as conv:
        url_msg = await conv.send_message(
            "Silakan buka URL ini:\n" f"{auth_url}\notorisasi lalu balas kodenya"
        )
        r = conv.wait_event(events.NewMessage(outgoing=True, chats=BOTLOG_CHATID))
        r = await r
        code = r.message.message.strip()
        flow.fetch_token(code=code)
        creds = flow.credentials
        await asyncio.sleep(3.5)
        await gdrive.client.delete_messages(gdrive.chat_id, msg.id)
        await gdrive.client.delete_messages(BOTLOG_CHATID, [url_msg.id, r.id])
        """ - Unpack credential objects into strings - """
        creds = base64.b64encode(pickle.dumps(creds)).decode()
        await gdrive.edit("`Kredensial dibuat...`")
    helper.save_credentials(str(gdrive.from_id), creds)
    await gdrive.delete()
    return
예제 #3
0
async def create_app(gdrive):
    """ - Create google drive service app - """
    creds = helper.get_credentials(str(gdrive.from_id))
    if creds is not None:
        """ - Repack credential objects from strings - """
        creds = pickle.loads(base64.b64decode(creds.encode()))
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            await gdrive.edit("`Refreshing credentials...`")
            """ - Refresh credentials - """
            creds.refresh(Request())
            try:
                helper.save_credentials(
                    str(gdrive.from_id),
                    base64.b64encode(pickle.dumps(creds)).decode())
            except Exception:
                for name in ['creds', 'gdrive']:
                    delete_table(name)
                helper.save_credentials(
                    str(gdrive.from_id),
                    base64.b64encode(pickle.dumps(creds)).decode())
        else:
            await gdrive.edit("`Credentials is empty, please generate it...`")
            return False
    service = build('drive', 'v3', credentials=creds, cache_discovery=False)
    return service
예제 #4
0
async def generate_credentials(gdrive):
    """ - Only generate once for long run - """
    if helper.get_credentials(str(gdrive.from_id)) is not None:
        await gdrive.edit("`Token já autorizado...`")
        await asyncio.sleep(1.5)
        await gdrive.delete()
        return False
    """ - Generate credentials - """
    if G_DRIVE_DATA is not None:
        try:
            configs = json.loads(G_DRIVE_DATA)
        except json.JSONDecodeError:
            await gdrive.edit("`[AUTENTICAÇÃO - ERRO]`\n\n"
                              "`Status` : **FALHA**\n"
                              "`Motivo` : **G_DRIVE_DATA** elemento inválido!")
            return False
    else:
        """ - Only for old user - """
        if G_DRIVE_CLIENT_ID is None and G_DRIVE_CLIENT_SECRET is None:
            await gdrive.edit(
                "`[AUTENTICAÇÃO - ERRO]`\n\n"
                "`Status` : **FALHA**\n"
                "`Motivo` : obtenha sua **G_DRIVE_DATA** "
                "[aqui](https://telegra.ph/How-To-Setup-Google-Drive-04-03)")
            return False
        configs = {
            "installed": {
                "client_id": G_DRIVE_CLIENT_ID,
                "client_secret": G_DRIVE_CLIENT_SECRET,
                "auth_uri": GOOGLE_AUTH_URI,
                "token_uri": GOOGLE_TOKEN_URI,
            }
        }
    await gdrive.edit("`Criando credenciais...`")
    flow = InstalledAppFlow.from_client_config(configs,
                                               SCOPES,
                                               redirect_uri=REDIRECT_URI)
    auth_url, _ = flow.authorization_url(access_type="offline",
                                         prompt="consent")
    msg = await gdrive.respond(
        "`Vá para o seu grupo BOTLOG para autenticar o token...`")
    async with gdrive.client.conversation(BOTLOG_CHATID) as conv:
        url_msg = await conv.send_message(
            "Vá para este URL:\n"
            f"{auth_url}\nautorize e responda com o código")
        r = conv.wait_event(
            events.NewMessage(outgoing=True, chats=BOTLOG_CHATID))
        r = await r
        code = r.message.message.strip()
        flow.fetch_token(code=code)
        creds = flow.credentials
        await asyncio.sleep(3.5)
        await gdrive.client.delete_messages(gdrive.chat_id, msg.id)
        await gdrive.client.delete_messages(BOTLOG_CHATID, [url_msg.id, r.id])
        """ - Unpack credential objects into strings - """
        creds = base64.b64encode(pickle.dumps(creds)).decode()
        await gdrive.edit("`Credenciais criadas...`")
    helper.save_credentials(str(gdrive.from_id), creds)
    await gdrive.delete()
    return
예제 #5
0
async def generate_credentials(gdrive):
    """ - Only generate once for long run - """
    if helper.get_credentials(str(gdrive.from_id)) is not None:
        await gdrive.edit("`You already authorized token...`")
        await asyncio.sleep(1.5)
        return await gdrive.delete()
    """ - Generate credentials - """
    if G_DRIVE_DATA is not None:
        configs = json.loads(G_DRIVE_DATA)
    else:
        """ - Only for old user - """
        configs = {
            "installed": {
                "client_id": G_DRIVE_CLIENT_ID,
                "client_secret": G_DRIVE_CLIENT_SECRET,
                "auth_uri": GOOGLE_AUTH_URI,
                "token_uri": GOOGLE_TOKEN_URI,
            }
        }
    await gdrive.edit("`Creating credentials...`")
    flow = InstalledAppFlow.from_client_config(
         configs, SCOPES, redirect_uri=REDIRECT_URI)
    auth_url, _ = flow.authorization_url(
                access_type='offline', prompt='consent')
    msg = await gdrive.respond(
        "`Go to your BOTLOG group to authenticate token...`"
        )
    async with gdrive.client.conversation(BOTLOG_CHATID) as conv:
        url_msg = await conv.send_message(
                      "Please go to this URL:\n"
                      f"{auth_url}\nauthorize then reply the code"
                  )
        r = conv.wait_event(
          events.NewMessage(outgoing=True, chats=BOTLOG_CHATID))
        r = await r
        code = r.message.message.strip()
        flow.fetch_token(code=code)
        creds = flow.credentials
        await asyncio.sleep(3.5)
        await gdrive.client.delete_messages(gdrive.chat_id, msg.id)
        await gdrive.client.delete_messages(BOTLOG_CHATID, [url_msg.id, r.id])
        """ - Unpack credential objects into strings - """
        creds = base64.b64encode(pickle.dumps(creds)).decode()
        await gdrive.edit("`Credentials created...`")
    try:
        helper.save_credentials(str(gdrive.from_id), creds)
    except Exception:
        for name in ['creds', 'gdrive']:
            delete_table(name)
        helper.save_credentials(str(gdrive.from_id), creds)
    await gdrive.delete()
    return
예제 #6
0
async def create_app(gdrive):
    creds = helper.get_credentials(str(gdrive.from_id))
    if creds is not None:
        creds = pickle.loads(
            base64.b64decode(creds.encode()))
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            await gdrive.edit("`Refreshing credentials...`")
            creds.refresh(Request())
            helper.save_credentials(str(gdrive.from_id),
                                    base64.b64encode(pickle.dumps(creds)).decode())
        else:
            await gdrive.edit("`Credentials is empty, please generate it...`")
            return False
    return build('drive', 'v3', credentials=creds, cache_discovery=False)
예제 #7
0
async def create_app(gdrive):
    """ - Create google drive service app - """
    creds = helper.get_credentials(str(gdrive.sender_id))
    if creds is not None:
        """ - Repack credential objects from strings - """
        creds = pickle.loads(base64.b64decode(creds.encode()))
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            await gdrive.edit("`Refreshing credentials...`")
            """ - Refresh credentials - """
            creds.refresh(Request())
            helper.save_credentials(
                str(gdrive.sender_id),
                base64.b64encode(pickle.dumps(creds)).decode())
        else:
            await gdrive.edit("`Credentials is empty, please generate it...`")
            return False
    return build("drive", "v3", credentials=creds, cache_discovery=False)
예제 #8
0
async def create_app(gdrive):
    """ - Create google drive service app - """
    creds = helper.get_credentials(str(gdrive.from_id))
    if creds is not None:
        """ - Repack credential objects from strings - """
        creds = pickle.loads(base64.b64decode(creds.encode()))
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            await gdrive.edit("`Atualizando credenciais...`")
            """ - Refresh credentials - """
            creds.refresh(Request())
            helper.save_credentials(
                str(gdrive.from_id), base64.b64encode(pickle.dumps(creds)).decode()
            )
        else:
            await gdrive.edit("`As credenciais estão vazias, crie-as primeiro...`")
            return False
    service = build("drive", "v3", credentials=creds, cache_discovery=False)
    return service
예제 #9
0
async def create_app(gdrive):
    """- Create google drive service app -"""
    creds = helper.get_credentials(str(gdrive.from_id))
    if creds is not None:
        """- Repack credential objects from strings -"""
        creds = pickle.loads(base64.b64decode(creds.encode()))
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            await gdrive.edit("`Menyegarkan kredensial...`")
            """ - Refresh credentials - """
            creds.refresh(Request())
            helper.save_credentials(
                str(gdrive.from_id),
                base64.b64encode(pickle.dumps(creds)).decode())
        else:
            await gdrive.edit("`Kredensial kosong, harap buat...`")
            return False
    service = build("drive", "v3", credentials=creds, cache_discovery=False)
    return service