mirror of
https://git.pleroma.social/pleroma/relay.git
synced 2024-11-10 02:17:59 +00:00
Compare commits
5 commits
ebe3337823
...
7329ef4fd9
Author | SHA1 | Date | |
---|---|---|---|
7329ef4fd9 | |||
c5acc5aa16 | |||
9a0400d84f | |||
c54aeabc90 | |||
16fcea90f2 |
|
@ -19,7 +19,7 @@ dependencies = [
|
|||
"aiohttp-swagger[performance] == 1.0.16",
|
||||
"argon2-cffi == 23.1.0",
|
||||
"barkshark-lib >= 0.2.2.post2, < 0.3.0",
|
||||
"barkshark-sql >= 0.2.0rc2, < 0.3.0",
|
||||
"barkshark-sql >= 0.2.0, < 0.3.0",
|
||||
"click == 8.1.2",
|
||||
"hiredis == 2.3.2",
|
||||
"idna == 3.4",
|
||||
|
|
|
@ -145,7 +145,7 @@ class Config:
|
|||
if not config:
|
||||
raise ValueError('Config is empty')
|
||||
|
||||
pgcfg = config.get('postgresql', {})
|
||||
pgcfg = config.get('postgres', {})
|
||||
rdcfg = config.get('redis', {})
|
||||
|
||||
for key in type(self).KEYS():
|
||||
|
|
|
@ -40,7 +40,7 @@ WHERE domain = :value or inbox = :value or actor = :value;
|
|||
|
||||
|
||||
-- name: get-request
|
||||
SELECT * FROM inboxes WHERE accepted = 0 and domain = :domain;
|
||||
SELECT * FROM inboxes WHERE accepted = false and domain = :domain;
|
||||
|
||||
|
||||
-- name: get-user
|
||||
|
@ -64,7 +64,7 @@ RETURNING *;
|
|||
|
||||
-- name: del-user
|
||||
DELETE FROM users
|
||||
WHERE username = :value or handle = :value;
|
||||
WHERE username = :username or handle = :username;
|
||||
|
||||
|
||||
-- name: get-app
|
||||
|
@ -91,6 +91,10 @@ DELETE FROM apps
|
|||
WHERE client_id = :id and client_secret = :secret and token = :token;
|
||||
|
||||
|
||||
-- name: del-token-user
|
||||
DELETE FROM apps WHERE "user" = :username;
|
||||
|
||||
|
||||
-- name: get-software-ban
|
||||
SELECT * FROM software_bans WHERE name = :name;
|
||||
|
||||
|
|
|
@ -138,7 +138,7 @@ class Connection(SqlConnection):
|
|||
|
||||
|
||||
def get_inboxes(self) -> Iterator[schema.Instance]:
|
||||
return self.execute("SELECT * FROM inboxes WHERE accepted = 1").all(schema.Instance)
|
||||
return self.execute("SELECT * FROM inboxes WHERE accepted = true").all(schema.Instance)
|
||||
|
||||
|
||||
# todo: check if software is different than stored row
|
||||
|
@ -196,7 +196,7 @@ class Connection(SqlConnection):
|
|||
|
||||
|
||||
def get_requests(self) -> Iterator[schema.Instance]:
|
||||
return self.execute('SELECT * FROM inboxes WHERE accepted = 0').all(schema.Instance)
|
||||
return self.execute('SELECT * FROM inboxes WHERE accepted = false').all(schema.Instance)
|
||||
|
||||
|
||||
def put_request_response(self, domain: str, accepted: bool) -> schema.Instance:
|
||||
|
@ -275,10 +275,10 @@ class Connection(SqlConnection):
|
|||
if (user := self.get_user(username)) is None:
|
||||
raise KeyError(username)
|
||||
|
||||
with self.run('del-user', {'value': user.username}):
|
||||
with self.run('del-token-user', {'username': user.username}):
|
||||
pass
|
||||
|
||||
with self.run('del-token-user', {'username': user.username}):
|
||||
with self.run('del-user', {'username': user.username}):
|
||||
pass
|
||||
|
||||
|
||||
|
@ -315,8 +315,8 @@ class Connection(SqlConnection):
|
|||
'website': website,
|
||||
'client_id': secrets.token_hex(20),
|
||||
'client_secret': secrets.token_hex(20),
|
||||
'created': Date.new_utc().timestamp(),
|
||||
'accessed': Date.new_utc().timestamp()
|
||||
'created': Date.new_utc(),
|
||||
'accessed': Date.new_utc()
|
||||
}
|
||||
|
||||
with self.insert('apps', params) as cur:
|
||||
|
@ -336,8 +336,8 @@ class Connection(SqlConnection):
|
|||
'client_secret': secrets.token_hex(20),
|
||||
'auth_code': None,
|
||||
'token': secrets.token_hex(20),
|
||||
'created': Date.new_utc().timestamp(),
|
||||
'accessed': Date.new_utc().timestamp()
|
||||
'created': Date.new_utc(),
|
||||
'accessed': Date.new_utc()
|
||||
}
|
||||
|
||||
with self.insert('apps', params) as cur:
|
||||
|
|
|
@ -45,20 +45,14 @@ class Instance(Row):
|
|||
followid: Column[str] = Column('followid', 'text')
|
||||
software: Column[str] = Column('software', 'text')
|
||||
accepted: Column[Date] = Column('accepted', 'boolean')
|
||||
created: Column[Date] = Column(
|
||||
'created', 'timestamp', nullable = False,
|
||||
deserializer = deserialize_timestamp, serializer = Date.timestamp
|
||||
)
|
||||
created: Column[Date] = Column('created', 'timestamp', nullable = False)
|
||||
|
||||
|
||||
@TABLES.add_row
|
||||
class Whitelist(Row):
|
||||
domain: Column[str] = Column(
|
||||
'domain', 'text', primary_key = True, unique = True, nullable = True)
|
||||
created: Column[Date] = Column(
|
||||
'created', 'timestamp', nullable = False,
|
||||
deserializer = deserialize_timestamp, serializer = Date.timestamp
|
||||
)
|
||||
created: Column[Date] = Column('created', 'timestamp', nullable = False)
|
||||
|
||||
|
||||
@TABLES.add_row
|
||||
|
@ -70,10 +64,7 @@ class DomainBan(Row):
|
|||
'domain', 'text', primary_key = True, unique = True, nullable = True)
|
||||
reason: Column[str] = Column('reason', 'text')
|
||||
note: Column[str] = Column('note', 'text')
|
||||
created: Column[Date] = Column(
|
||||
'created', 'timestamp', nullable = False,
|
||||
deserializer = deserialize_timestamp, serializer = Date.timestamp
|
||||
)
|
||||
created: Column[Date] = Column('created', 'timestamp', nullable = False)
|
||||
|
||||
|
||||
@TABLES.add_row
|
||||
|
@ -84,10 +75,7 @@ class SoftwareBan(Row):
|
|||
name: Column[str] = Column('name', 'text', primary_key = True, unique = True, nullable = True)
|
||||
reason: Column[str] = Column('reason', 'text')
|
||||
note: Column[str] = Column('note', 'text')
|
||||
created: Column[Date] = Column(
|
||||
'created', 'timestamp', nullable = False,
|
||||
deserializer = deserialize_timestamp, serializer = Date.timestamp
|
||||
)
|
||||
created: Column[Date] = Column('created', 'timestamp', nullable = False)
|
||||
|
||||
|
||||
@TABLES.add_row
|
||||
|
@ -99,10 +87,7 @@ class User(Row):
|
|||
'username', 'text', primary_key = True, unique = True, nullable = False)
|
||||
hash: Column[str] = Column('hash', 'text', nullable = False)
|
||||
handle: Column[str] = Column('handle', 'text')
|
||||
created: Column[Date] = Column(
|
||||
'created', 'timestamp', nullable = False,
|
||||
deserializer = deserialize_timestamp, serializer = Date.timestamp
|
||||
)
|
||||
created: Column[Date] = Column('created', 'timestamp', nullable = False)
|
||||
|
||||
|
||||
@TABLES.add_row
|
||||
|
@ -119,14 +104,8 @@ class App(Row):
|
|||
token: Column[str | None] = Column('token', 'text')
|
||||
auth_code: Column[str | None] = Column('auth_code', 'text')
|
||||
user: Column[str | None] = Column('user', 'text')
|
||||
created: Column[Date] = Column(
|
||||
'created', 'timestamp', nullable = False,
|
||||
deserializer = deserialize_timestamp, serializer = Date.timestamp
|
||||
)
|
||||
accessed: Column[Date] = Column(
|
||||
'accessed', 'timestamp', nullable = False,
|
||||
deserializer = deserialize_timestamp, serializer = Date.timestamp
|
||||
)
|
||||
created: Column[Date] = Column('created', 'timestamp', nullable = False)
|
||||
accessed: Column[Date] = Column('accessed', 'timestamp', nullable = False)
|
||||
|
||||
|
||||
def get_api_data(self, include_token: bool = False) -> dict[str, Any]:
|
||||
|
@ -159,10 +138,10 @@ def migrate_20240206(conn: Connection) -> None:
|
|||
@migration
|
||||
def migrate_20240310(conn: Connection) -> None:
|
||||
conn.execute('ALTER TABLE "inboxes" ADD COLUMN "accepted" BOOLEAN').close()
|
||||
conn.execute('UPDATE "inboxes" SET accepted = 1').close()
|
||||
conn.execute('UPDATE "inboxes" SET "accepted" = true').close()
|
||||
|
||||
|
||||
@migration
|
||||
def migrate_20240625(conn: Connection) -> None:
|
||||
conn.create_tables()
|
||||
conn.execute('DROP TABLE tokens').close()
|
||||
conn.execute('DROP TABLE "tokens"').close()
|
||||
|
|
|
@ -16,6 +16,7 @@ from . import http_client as http
|
|||
from . import logger as logging
|
||||
from .application import Application
|
||||
from .compat import RelayConfig, RelayDatabase
|
||||
from .config import Config
|
||||
from .database import RELAY_SOFTWARE, get_database, schema
|
||||
from .misc import ACTOR_FORMATS, SOFTWARE, IS_DOCKER, Message
|
||||
|
||||
|
@ -329,6 +330,33 @@ def cli_editconfig(ctx: click.Context, editor: str) -> None:
|
|||
)
|
||||
|
||||
|
||||
@cli.command('switch-backend')
|
||||
@click.pass_context
|
||||
def cli_switchbackend(ctx: click.Context) -> None:
|
||||
"""
|
||||
Copy the database from one backend to the other
|
||||
|
||||
Be sure to set the database type to the backend you want to convert from. For instance, set
|
||||
the database type to `sqlite`, fill out the connection details for postgresql, and the
|
||||
data from the sqlite database will be copied to the postgresql database. This only works if
|
||||
the database in postgresql already exists.
|
||||
"""
|
||||
|
||||
config = Config(ctx.obj.config.path, load = True)
|
||||
config.db_type = "sqlite" if config.db_type == "postgres" else "postgres"
|
||||
database = get_database(config, migrate = False)
|
||||
|
||||
with database.session(True) as new, ctx.obj.database.session(False) as old:
|
||||
new.create_tables()
|
||||
|
||||
for table in schema.TABLES.keys():
|
||||
for row in old.execute(f"SELECT * FROM {table}"):
|
||||
new.insert(table, row).close()
|
||||
|
||||
config.save()
|
||||
click.echo(f"Converted database to {repr(config.db_type)}")
|
||||
|
||||
|
||||
@cli.group('config')
|
||||
def cli_config() -> None:
|
||||
'Manage the relay settings stored in the database'
|
||||
|
|
Loading…
Reference in a new issue