From ba97c336950af4f23e3a4fa60846fc6c58e4b791 Mon Sep 17 00:00:00 2001 From: Schimon Jehudah Date: Tue, 5 Dec 2023 08:18:29 +0000 Subject: [PATCH] Disable activation token and mastership mechanism --- slixfeed/datahandler.py | 31 ++--- slixfeed/datetimehandler.py | 3 +- slixfeed/sqlitehandler.py | 6 +- slixfeed/taskhandler.py | 13 +- slixfeed/xmpphandler.py | 254 +++++++++++++++++++++--------------- 5 files changed, 170 insertions(+), 137 deletions(-) diff --git a/slixfeed/datahandler.py b/slixfeed/datahandler.py index 944e268..5639b87 100644 --- a/slixfeed/datahandler.py +++ b/slixfeed/datahandler.py @@ -14,32 +14,29 @@ TODO """ -from aiohttp import ClientError -from aiohttp import ClientSession -from aiohttp import ClientTimeout +from aiohttp import ClientError, ClientSession, ClientTimeout from asyncio import TimeoutError from asyncio.exceptions import IncompleteReadError from bs4 import BeautifulSoup from feedparser import parse from http.client import IncompleteRead from lxml import html -from datetimehandler import now -from datetimehandler import rfc2822_to_iso8601 +from datetimehandler import now, rfc2822_to_iso8601 from confighandler import get_list from listhandler import is_listed -from sqlitehandler import add_entry_and_set_date -from sqlitehandler import insert_feed -from sqlitehandler import check_entry_exist -from sqlitehandler import check_feed_exist -from sqlitehandler import get_feeds_url -from sqlitehandler import remove_nonexistent_entries -from sqlitehandler import update_source_status -from sqlitehandler import update_source_validity +from sqlitehandler import ( + add_entry_and_set_date, + insert_feed, + check_entry_exist, + check_feed_exist, + get_feeds_url, + remove_nonexistent_entries, + update_source_status, + update_source_validity + ) from urllib import error # from xml.etree.ElementTree import ElementTree, ParseError -from urllib.parse import urljoin -from urllib.parse import urlsplit -from urllib.parse import urlunsplit +from urllib.parse import urljoin, urlsplit, urlunsplit # NOTE Why (if res[0]) and (if res[1] == 200)? async def download_updates(db_file, url=None): @@ -328,7 +325,7 @@ async def view_entry(url, num): # "For more information, visit " # "https://pythonhosted.org/feedparser/bozo.html" # ).format(url) - msg = await probe_page(view_entry, url, result[0], num) + msg = await probe_page(view_entry, url, result[0], num=num) return msg except ( IncompleteReadError, diff --git a/slixfeed/datetimehandler.py b/slixfeed/datetimehandler.py index 1964ebd..38db541 100644 --- a/slixfeed/datetimehandler.py +++ b/slixfeed/datetimehandler.py @@ -7,8 +7,7 @@ https://feedparser.readthedocs.io/en/latest/date-parsing.html from datetime import datetime from dateutil.parser import parse -from email.utils import parsedate -from email.utils import parsedate_to_datetime +from email.utils import parsedate, parsedate_to_datetime async def now(): """ diff --git a/slixfeed/sqlitehandler.py b/slixfeed/sqlitehandler.py index 5fed7c8..2244be7 100644 --- a/slixfeed/sqlitehandler.py +++ b/slixfeed/sqlitehandler.py @@ -22,10 +22,8 @@ from datetime import date import confighandler as confighandler # from slixfeed.datahandler import join_url import datahandler as datahandler -from datetimehandler import current_time -from datetimehandler import rfc2822_to_iso8601 -from sqlite3 import connect -from sqlite3 import Error +from datetimehandler import current_time, rfc2822_to_iso8601 +from sqlite3 import connect, Error # from eliot import start_action, to_file # # with start_action(action_type="list_feeds()", db=db_file): diff --git a/slixfeed/taskhandler.py b/slixfeed/taskhandler.py index 0cfe828..38e9f8c 100644 --- a/slixfeed/taskhandler.py +++ b/slixfeed/taskhandler.py @@ -46,12 +46,13 @@ import slixmpp from datahandler import download_updates from datetimehandler import current_time -from filehandler import initdb -from filehandler import get_default_dbdir -from sqlitehandler import get_entry_unread -from sqlitehandler import get_settings_value -from sqlitehandler import get_number_of_items -from sqlitehandler import get_number_of_entries_unread +from filehandler import initdb, get_default_dbdir +from sqlitehandler import ( + get_entry_unread, + get_settings_value, + get_number_of_items, + get_number_of_entries_unread + ) # from xmpphandler import Slixfeed import xmpphandler as xmpphandler diff --git a/slixfeed/xmpphandler.py b/slixfeed/xmpphandler.py index d4383c2..763ba87 100644 --- a/slixfeed/xmpphandler.py +++ b/slixfeed/xmpphandler.py @@ -53,30 +53,36 @@ import asyncio import logging # import os import slixmpp +from slixmpp.exceptions import IqError from random import randrange -from datahandler import add_feed -from datahandler import add_feed_no_check -from datahandler import feed_to_http -from datahandler import view_entry -from datahandler import view_feed +from datahandler import ( + add_feed, + add_feed_no_check, + feed_to_http, + view_entry, + view_feed + ) from datetimehandler import current_time from filehandler import initdb -from listhandler import add_to_list -from listhandler import remove_from_list -from sqlitehandler import get_settings_value -from sqlitehandler import set_settings_value -from sqlitehandler import mark_source_as_read -from sqlitehandler import last_entries -from sqlitehandler import list_feeds -from sqlitehandler import remove_feed -from sqlitehandler import search_feeds -from sqlitehandler import statistics -from sqlitehandler import toggle_status -from taskhandler import clean_tasks_xmpp -from taskhandler import start_tasks_xmpp -from taskhandler import refresh_task -from taskhandler import send_status -from taskhandler import send_update +from listhandler import add_to_list, remove_from_list +from sqlitehandler import ( + get_settings_value, + set_settings_value, + mark_source_as_read, + last_entries, + list_feeds, + remove_feed, + search_feeds, + statistics, + toggle_status + ) +from taskhandler import ( + clean_tasks_xmpp, + start_tasks_xmpp, + refresh_task, + send_status, + send_update + ) from slixmpp.plugins.xep_0363.http_upload import FileTooBig, HTTPError, UploadServiceNotFound # from slixmpp.plugins.xep_0402 import BookmarkStorage, Conference from slixmpp.plugins.xep_0048.stanza import Bookmarks @@ -237,24 +243,26 @@ class Slixfeed(slixmpp.ClientXMPP): async def join_muc(self, inviter, muc_jid): - token = await initdb( - muc_jid, - get_settings_value, - "token" - ) - if token != "accepted": - token = randrange(10000, 99999) - await initdb( - muc_jid, - set_settings_value, - ["token", token] - ) - self.send_message( - mto=inviter, - mbody=( - "Send activation token {} to groupchat xmpp:{}?join." - ).format(token, muc_jid) - ) + # token = await initdb( + # muc_jid, + # get_settings_value, + # "token" + # ) + # if token != "accepted": + # token = randrange(10000, 99999) + # await initdb( + # muc_jid, + # set_settings_value, + # ["token", token] + # ) + # self.send_message( + # mto=inviter, + # mbody=( + # "Send activation token {} to groupchat xmpp:{}?join." + # ).format(token, muc_jid) + # ) + print("muc_jid") + print(muc_jid) self.plugin['xep_0045'].join_muc( muc_jid, "Slixfeed (RSS News Bot)", @@ -265,6 +273,13 @@ class Slixfeed(slixmpp.ClientXMPP): result = await self.plugin['xep_0048'].get_bookmarks() bookmarks = result["private"]["bookmarks"] conferences = bookmarks["conferences"] + print("result") + print(result) + print("bookmarks") + print(bookmarks) + print("conferences") + print(conferences) + breakpoint() mucs = [] for conference in conferences: jid = conference["jid"] @@ -596,20 +611,43 @@ class Slixfeed(slixmpp.ClientXMPP): if (msg['muc']['nick'] == "Slixfeed (RSS News Bot)" or not msg["body"].startswith("!")): return - token = await initdb( + # token = await initdb( + # jid, + # get_settings_value, + # "token" + # ) + # if token == "accepted": + # operator = await initdb( + # jid, + # get_settings_value, + # "masters" + # ) + # if operator: + # if nick not in operator: + # return + approved = False + role = self.plugin['xep_0045'].get_jid_property( jid, - get_settings_value, - "token" - ) - if token == "accepted": - operator = await initdb( - jid, - get_settings_value, - "masters" - ) - if operator: - if nick not in operator: - return + msg["from"], + "role") + if role == "moderator": + approved = True + # TODO Implement a list of temporary operators + # Once an operator is appointed, the control would last + # untile the participant has been disconnected from MUC + # An operator is a function to appoint non moderators. + # Changing nickname is fine and consist of no problem. + # if not approved: + # operator = await initdb( + # jid, + # get_settings_value, + # "masters" + # ) + # if operator: + # if nick in operator: + # approved = True + if not approved: + return # # Begin processing new JID # # Deprecated in favour of event "presence_available" @@ -649,30 +687,30 @@ class Slixfeed(slixmpp.ClientXMPP): print(jid) await self.autojoin_muc() - case _ if message_lowercase.startswith("activate"): - if msg["type"] == "groupchat": - acode = message[9:] - token = await initdb( - jid, - get_settings_value, - "token" - ) - if int(acode) == token: - await initdb( - jid, - set_settings_value, - ["masters", nick] - ) - await initdb( - jid, - set_settings_value, - ["token", "accepted"] - ) - action = "{}, your are in command.".format(nick) - else: - action = "Activation code is not valid." - else: - action = "This command is valid for groupchat only." + # case _ if message_lowercase.startswith("activate"): + # if msg["type"] == "groupchat": + # acode = message[9:] + # token = await initdb( + # jid, + # get_settings_value, + # "token" + # ) + # if int(acode) == token: + # await initdb( + # jid, + # set_settings_value, + # ["masters", nick] + # ) + # await initdb( + # jid, + # set_settings_value, + # ["token", "accepted"] + # ) + # action = "{}, your are in command.".format(nick) + # else: + # action = "Activation code is not valid." + # else: + # action = "This command is valid for groupchat only." case _ if message_lowercase.startswith("add"): message = message[4:] url = message.split(" ")[0] @@ -937,30 +975,30 @@ class Slixfeed(slixmpp.ClientXMPP): ).format(val) else: action = "Missing value." - case _ if message_lowercase.startswith("mastership"): - key = message[:7] - val = message[11:] - if val: - names = await initdb( - jid, - get_settings_value, - key - ) - val = await add_to_list( - val, - names - ) - await initdb( - jid, - set_settings_value, - [key, val] - ) - action = ( - "Operators\n" - "```\n{}\n```" - ).format(val) - else: - action = "Missing value." + # case _ if message_lowercase.startswith("mastership"): + # key = message[:7] + # val = message[11:] + # if val: + # names = await initdb( + # jid, + # get_settings_value, + # key + # ) + # val = await add_to_list( + # val, + # names + # ) + # await initdb( + # jid, + # set_settings_value, + # [key, val] + # ) + # action = ( + # "Operators\n" + # "```\n{}\n```" + # ).format(val) + # else: + # action = "Missing value." case "new": await initdb( jid, @@ -1345,14 +1383,14 @@ def print_help(): "GROUPCHAT OPTIONS\n" " ! (command initiation)\n" " Use exclamation mark to initiate an actionable command.\n" - " activate CODE\n" - " Activate and command bot.\n" - " demaster NICKNAME\n" - " Remove master privilege.\n" - " mastership NICKNAME\n" - " Add master privilege.\n" - " ownership NICKNAME\n" - " Set new owner.\n" + # " activate CODE\n" + # " Activate and command bot.\n" + # " demaster NICKNAME\n" + # " Remove master privilege.\n" + # " mastership NICKNAME\n" + # " Add master privilege.\n" + # " ownership NICKNAME\n" + # " Set new owner.\n" "\n" "FILTER OPTIONS\n" " allow +\n"