mirror of
https://github.com/Lynnesbian/FediBooks/
synced 2024-11-25 16:48:58 +00:00
implemented adding accounts to bots
This commit is contained in:
parent
dc03ebed18
commit
bf10de0e17
3 changed files with 43 additions and 4 deletions
|
@ -36,7 +36,7 @@ CREATE TABLE IF NOT EXISTS `bots` (
|
||||||
CREATE TABLE IF NOT EXISTS `fedi_accounts` (
|
CREATE TABLE IF NOT EXISTS `fedi_accounts` (
|
||||||
`handle` VARCHAR(128) PRIMARY KEY,
|
`handle` VARCHAR(128) PRIMARY KEY,
|
||||||
`outbox` VARCHAR(256),
|
`outbox` VARCHAR(256),
|
||||||
`credentials_id` INT NOT NULL,
|
`credentials_id` INT,
|
||||||
`icon` VARCHAR(512),
|
`icon` VARCHAR(512),
|
||||||
`icon_update_time` DATETIME DEFAULT 0,
|
`icon_update_time` DATETIME DEFAULT 0,
|
||||||
FOREIGN KEY (`credentials_id`) REFERENCES credentials(id) ON DELETE CASCADE
|
FOREIGN KEY (`credentials_id`) REFERENCES credentials(id) ON DELETE CASCADE
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1 class="thin centred">Add account</h1>
|
<h1 class="thin centred">Add account</h1>
|
||||||
<p class="large thin centred">Step {{ session['step'] }}</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="container centred">
|
<div class="container centred">
|
||||||
|
|
44
webui.py
44
webui.py
|
@ -117,10 +117,50 @@ def bot_blacklist(id):
|
||||||
|
|
||||||
@app.route("/bot/accounts/<id>")
|
@app.route("/bot/accounts/<id>")
|
||||||
def bot_accounts(id):
|
def bot_accounts(id):
|
||||||
return render_template("bot_accounts.html")
|
if bot_check(id):
|
||||||
|
session['bot'] = id
|
||||||
|
return render_template("bot_accounts.html")
|
||||||
|
|
||||||
@app.route("/bot/accounts/add")
|
@app.route("/bot/accounts/add", methods = ['GET', 'POST'])
|
||||||
def bot_accounts_add():
|
def bot_accounts_add():
|
||||||
|
if request.method == 'POST':
|
||||||
|
if session['step'] == 1:
|
||||||
|
# look up user
|
||||||
|
handle_list = request.form['account'].split('@')
|
||||||
|
username = handle_list[1]
|
||||||
|
instance = handle_list[2]
|
||||||
|
|
||||||
|
# 1. download host-meta to find webfinger URL
|
||||||
|
r = requests.get("https://{}/.well-known/host-meta".format(instance), timeout=10)
|
||||||
|
# 2. use webfinger to find user's info page
|
||||||
|
#TODO: use more reliable method
|
||||||
|
uri = re.search(r'template="([^"]+)"', r.text).group(1)
|
||||||
|
uri = uri.format(uri = "{}@{}".format(username, instance))
|
||||||
|
r = requests.get(uri, headers={"Accept": "application/json"}, timeout=10)
|
||||||
|
j = r.json()
|
||||||
|
found = False
|
||||||
|
for link in j['links']:
|
||||||
|
if link['rel'] == 'self':
|
||||||
|
#this is a link formatted like "https://instan.ce/users/username", which is what we need
|
||||||
|
uri = link['href']
|
||||||
|
found = True
|
||||||
|
break
|
||||||
|
if not found:
|
||||||
|
return "Couldn't find a valid ActivityPub outbox URL."
|
||||||
|
|
||||||
|
# 3. format as outbox URL and check to make sure it works
|
||||||
|
outbox = "{}/outbox?page=true".format(uri)
|
||||||
|
r = requests.get(uri, headers={"Accept": "application/json"}, timeout=10)
|
||||||
|
if r.status_code == 200:
|
||||||
|
# success!!
|
||||||
|
c = mysql.connection.cursor()
|
||||||
|
c.execute("INSERT INTO `fedi_accounts` (`handle`, `outbox`) VALUES (%s, %s)", (request.form['account'], outbox))
|
||||||
|
c.execute("INSERT INTO `bot_learned_accounts` (`bot_id`, `fedi_id`) VALUES (%s, %s)", (session['bot'], request.form['account']))
|
||||||
|
c.close()
|
||||||
|
mysql.connection.commit()
|
||||||
|
|
||||||
|
return redirect("/bot/accounts/{}".format(session['bot']))
|
||||||
|
|
||||||
return render_template("bot_accounts_add.html")
|
return render_template("bot_accounts_add.html")
|
||||||
|
|
||||||
@app.route("/bot/create/", methods=['GET', 'POST'])
|
@app.route("/bot/create/", methods=['GET', 'POST'])
|
||||||
|
|
Loading…
Reference in a new issue