Merged in feature/HTTPASTE-5/backend/paste (pull request #4)

feat: add backend sanitizing
This commit is contained in:
Tiara Rodney 2022-04-02 16:52:26 +00:00
commit 6c1ffdcc0c
7 changed files with 82 additions and 1 deletions

View file

@ -92,6 +92,20 @@ def command_init_backend(**kwargs):
config.backend.paste.init() config.backend.paste.init()
def command_sanitize_backend(**kwargs):
"""sanitize the backend
"""
from httpaste import load_config
config, _ = load_config(kwargs.get('config'))
config, _ = load_config(kwargs.get('config'))
config.backend.user.sanitize()
config.backend.paste.sanitize()
def parser(): def parser():
p = argparse.ArgumentParser(description='Process some integers.') p = argparse.ArgumentParser(description='Process some integers.')
@ -121,6 +135,11 @@ def parser():
help=command_init_backend.__doc__) help=command_init_backend.__doc__)
p_init_backend.add_argument('--config', '-c', required=True) p_init_backend.add_argument('--config', '-c', required=True)
p_sanitize_backend = sp.add_parser(
'sanitize-backend',
help=command_sanitize_backend.__doc__)
p_sanitize_backend.add_argument('--config', '-c', required=True)
return p return p
@ -136,7 +155,8 @@ def main():
'cgi': command_cgi, 'cgi': command_cgi,
'fcgi': command_fcgi, 'fcgi': command_fcgi,
'default-config': command_default_config, 'default-config': command_default_config,
'init-backend': command_init_backend 'init-backend': command_init_backend,
'sanitize-backend': command_sanitize_backend
}[kwargs.pop('command')](**kwargs) }[kwargs.pop('command')](**kwargs)

View file

@ -58,6 +58,13 @@ class User(object):
return user.init(self.path) return user.init(self.path)
def sanitize(self):
if self.path.exists():
return user.sanitize(self.path, self.model_class, self.model_schema)
return None
class Paste(object): class Paste(object):
"""Filesystem paste model backend """Filesystem paste model backend
@ -96,3 +103,10 @@ class Paste(object):
def init(self): def init(self):
return paste.init(self.path) return paste.init(self.path)
def sanitize(self):
if self.path.exists():
return paste.sanitize(self.path, self.model_class, self.model_schema)
return None

View file

@ -5,6 +5,7 @@ acting as cells.
""" """
from pathlib import Path from pathlib import Path
from ast import literal_eval from ast import literal_eval
from time import time
COLUMNS = [ COLUMNS = [
@ -98,6 +99,22 @@ def init(path: Path):
return None return None
def sanitize(path: Path, model_class: type, model_schema: type):
for row in path.iterdir():
expiration_cell = row.joinpath('expiration')
if not expiration_cell.exists():
continue
expiration = literal_eval(expiration_cell.read_text())
if expiration < int(time()) and expiration > 0:
delete(model_class(bytes.fromhex(row.name)), path)
def _rm_tree(pth: Path): def _rm_tree(pth: Path):
for child in pth.iterdir(): for child in pth.iterdir():
if child.is_file(): if child.is_file():

View file

@ -82,6 +82,11 @@ def init(path: Path):
return None return None
def sanitize(path: Path, model_class: type, model_schema: type):
return None
def _rm_tree(pth: Path): def _rm_tree(pth: Path):
for child in pth.iterdir(): for child in pth.iterdir():
if child.is_file(): if child.is_file():

View file

@ -45,6 +45,10 @@ class User(object):
return user.init(self.connection) return user.init(self.connection)
def sanitize(self):
return user.sanitize(self.connection, self.model_class)
class Paste(object): class Paste(object):
"""SQLite paste model backend """SQLite paste model backend
@ -74,6 +78,10 @@ class Paste(object):
return paste.init(self.connection) return paste.init(self.connection)
def sanitize(self):
return paste.sanitize(self.connection, self.model_class)
def get_connection(parameters: Parameters): def get_connection(parameters: Parameters):
"""get an sqlite connection object """get an sqlite connection object

View file

@ -2,6 +2,7 @@
""" """
from os import path from os import path
from sqlite3 import Connection from sqlite3 import Connection
from time import time
def load(proto: object, connection: Connection, model_class: type): def load(proto: object, connection: Connection, model_class: type):
@ -67,3 +68,14 @@ def init(connection: Connection):
cur.execute(fh.read()) cur.execute(fh.read())
connection.commit() connection.commit()
def sanitize(connection: Connection, model_class: type) -> bool:
cur = connection.cursor()
cur.execute('''SELECT pid FROM pastes WHERE expiration < ? AND expiration > 0''', (int(time()),))
for row in cur.fetchall():
delete(model_class(row['pid']))

View file

@ -53,3 +53,8 @@ def init(connection: Connection):
cur.execute(fh.read()) cur.execute(fh.read())
connection.commit() connection.commit()
def sanitize(connection: Connection, model_class) -> bool:
return None