moar nntp, working post list
parent
19269a1ade
commit
d43b3f9979
|
@ -8,6 +8,8 @@ import ssl
|
|||
import email.utils
|
||||
from collections import namedtuple
|
||||
|
||||
import os
|
||||
|
||||
class BBJNews(object):
|
||||
# this module isnt exactly complete. The below description claims
|
||||
# `all of its endpoints are mapped to native methods` though this
|
||||
|
@ -74,22 +76,23 @@ class BBJNews(object):
|
|||
If you set this to False, anonymous network usage is
|
||||
guaranteed.
|
||||
"""
|
||||
host = "news.tildeverse.org"
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.tls = https
|
||||
self.group = "tilde.team"
|
||||
self.group = "local.test"
|
||||
|
||||
self.user_name = None
|
||||
self.user_auth = None
|
||||
self.send_auth = True
|
||||
self.user = {
|
||||
"user_id": "",
|
||||
"user_name": "",
|
||||
"user_name": "anonymous",
|
||||
"is_admin": False,
|
||||
"color": 0,
|
||||
}
|
||||
self.instance_info = {
|
||||
"instance_name": "",
|
||||
"instance_name": "TEST nntp TEST",
|
||||
"allow_anon": True,
|
||||
"admins": [],
|
||||
}
|
||||
|
@ -120,12 +123,11 @@ class BBJNews(object):
|
|||
|
||||
|
||||
def connect(self):
|
||||
self.conn = nntplib.NNTP(self.host, self.port)
|
||||
self.conn = nntplib.NNTP(self.host, self.port, usenetrc=False)
|
||||
if self.tls:
|
||||
context = ssl.create_default_context()
|
||||
self.conn.starttls(context)
|
||||
|
||||
|
||||
# TODO: reconnect automatically
|
||||
|
||||
|
||||
|
@ -147,6 +149,19 @@ class BBJNews(object):
|
|||
See raise_exception() for details on how this function reacts
|
||||
to various failure conditions.
|
||||
"""
|
||||
|
||||
if endpoint == "get_me":
|
||||
return {"error": False, "data": self.user.copy(), "usermap": {}}
|
||||
|
||||
return {
|
||||
"error": {
|
||||
"code": 0,
|
||||
"description": "unsupported endpoint",
|
||||
},
|
||||
"data": None,
|
||||
"usermap": {},
|
||||
}
|
||||
|
||||
headers = {"Content-Type": "application/json"}
|
||||
if params.get("no_auth"):
|
||||
params.pop("no_auth")
|
||||
|
@ -222,8 +237,9 @@ class BBJNews(object):
|
|||
"admins": (list) // usernames of those who have admin rights on the server
|
||||
}
|
||||
"""
|
||||
response = self("instance_info")
|
||||
self.instance_info = response["data"]
|
||||
# TODO
|
||||
#response = self("instance_info")
|
||||
#self.instance_info = response["data"]
|
||||
|
||||
|
||||
# unsupported
|
||||
|
@ -321,14 +337,12 @@ class BBJNews(object):
|
|||
)
|
||||
"""
|
||||
self.conn.login(user_name, user_auth, usernetrc=False)
|
||||
|
||||
if check_validity and not self.validate_credentials(user_name, user_auth):
|
||||
self.user_auth = self.user_name = None
|
||||
raise ConnectionRefusedError("Auth and User do not match")
|
||||
# TODO: catch
|
||||
|
||||
self.user_auth = user_auth
|
||||
self.user_name = user_name
|
||||
self.user = self("get_me")["data"]
|
||||
#self.user = self("get_me")["data"]
|
||||
self.user['user_name'] = user_name
|
||||
return True
|
||||
|
||||
|
||||
|
@ -440,7 +454,7 @@ class BBJNews(object):
|
|||
self.user_name = params["user_name"]
|
||||
if params.get("auth_hash"):
|
||||
self.user_auth = params["auth_hash"]
|
||||
self.user = dict(params)
|
||||
self.user.update(**params)
|
||||
return self.user
|
||||
|
||||
|
||||
|
@ -486,6 +500,8 @@ class BBJNews(object):
|
|||
# :lines - the number of lines in the body (deprecated)
|
||||
|
||||
response, overviews = self.conn.over((first, None))
|
||||
with open("overview_cache.bbj.json", "wt") as f:
|
||||
json.dump(overviews, f)
|
||||
|
||||
if False:
|
||||
# build up a map of message references
|
||||
|
@ -546,11 +562,14 @@ class BBJNews(object):
|
|||
print(usermap[author_id]["user_name"])
|
||||
print(message["body"])
|
||||
"""
|
||||
return {}, {}
|
||||
|
||||
response = self("thread_load",
|
||||
format=format, thread_id=thread_id, op_only=op_only)
|
||||
return response["data"], response["usermap"]
|
||||
|
||||
|
||||
# POST
|
||||
def thread_create(self, title, body):
|
||||
"""
|
||||
Submit a new thread, and return its new object. Requires the
|
||||
|
@ -558,15 +577,20 @@ class BBJNews(object):
|
|||
120 chars in length, else UserWarning is raised. Body must
|
||||
also not be empty.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
response = self("thread_create", title=title, body=body)
|
||||
return response["data"]
|
||||
|
||||
|
||||
# POST
|
||||
def thread_reply(self, thread_id, body):
|
||||
"""
|
||||
Submits a new reply to a thread and returns the new object.
|
||||
Requires the thread's id and a non-empty body string.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
response = self("thread_reply", thread_id=thread_id, body=body)
|
||||
return response["data"]
|
||||
|
||||
|
|
|
@ -20,7 +20,10 @@ Please mail me (~desvox) for feedback and for any of your
|
|||
"OH MY GOD WHY WOULD YOU DO THIS"'s or "PEP8 IS A THING"'s.
|
||||
"""
|
||||
|
||||
from network import BBJ, URLError
|
||||
import sys, os; sys.path.append(os.path.dirname(os.path.dirname(__file__)))
|
||||
|
||||
#from network import BBJ, URLError
|
||||
from nntp_client import BBJNews as BBJ, URLError
|
||||
from string import punctuation
|
||||
from datetime import datetime
|
||||
from sys import argv, version
|
||||
|
@ -2599,9 +2602,10 @@ def main():
|
|||
exit()
|
||||
|
||||
try:
|
||||
network = BBJ(get_arg("host", "127.0.0.1"),
|
||||
get_arg("port", 7099),
|
||||
get_arg("https", False, False))
|
||||
#network = BBJ(get_arg("host", "127.0.0.1"),
|
||||
# get_arg("port", 7099),
|
||||
# get_arg("https", False, False))
|
||||
network = BBJ(https=get_arg("https", False, False))
|
||||
except URLError as e:
|
||||
# print the connection error in red
|
||||
exit("\033[0;31m%s\033[0m" % repr(e))
|
||||
|
|
Loading…
Reference in New Issue