From 57e6665185499b3efef8d023fd83e47c8d4cd7a6 Mon Sep 17 00:00:00 2001 From: Rico Date: Sun, 1 Sep 2019 23:11:31 +0200 Subject: [PATCH 01/13] ADD: Upload logo This logo was created by a very talented graphics designer going by the name of dotvhs --- documentation/pastepwn_logo.png | Bin 0 -> 89285 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 documentation/pastepwn_logo.png diff --git a/documentation/pastepwn_logo.png b/documentation/pastepwn_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..09489234d061dda218e47f9a782596c132ad3ffd GIT binary patch literal 89285 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 HMaX{v9WJD| literal 0 HcmV?d00001 From 04d9bb3ab81db2967f5feef4c129183313a906ba Mon Sep 17 00:00:00 2001 From: Rico Date: Sun, 1 Sep 2019 23:11:58 +0200 Subject: [PATCH 02/13] TASK: Add pastepwn logo to readme --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 72aa086..b84bcdc 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,12 @@ +![Logo](documentation/pastepwn_logo.png) + + + +# pastepwn - Paste-Scraping Python Framework [![Build Status](https://travis-ci.org/d-Rickyy-b/pastepwn.svg?branch=master)](https://travis-ci.org/d-Rickyy-b/pastepwn) [![PyPI version](https://badge.fury.io/py/pastepwn.svg)](https://badge.fury.io/py/pastepwn) [![Coverage Status](https://coveralls.io/repos/github/d-Rickyy-b/pastepwn/badge.svg?branch=master)](https://coveralls.io/github/d-Rickyy-b/pastepwn?branch=master) -# pastepwn - Paste-Scraping Python Framework - [Pastebin](https://pastebin.com) is a very helpful tool to store or rather share ascii encoded data online. In the world of OSINT, pastebin is being used by [researchers all around the world](https://www.troyhunt.com/introducing-paste-searches-and/) to retreive e.g. leaked account data, in order to find indicators about security breaches. *Pastepwn* is a framework to scrape pastes and scan them for certain indicators. There are several analyzers and actions to be used out-of-the-box, but it is also easily extensible - you can create your own analyzers and actions on the fly. From 1e7c5debf35c6b2583238e886deaea9870448e66 Mon Sep 17 00:00:00 2001 From: Rico Date: Sun, 1 Sep 2019 23:17:46 +0200 Subject: [PATCH 03/13] FIX: Remove sanic from requirements The API features were not ready for release yet --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 5249a2b..15cbeaf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,3 @@ pymongo mysql-connector-python requests -sanic From 4fcd81252c0e1ff977deb620591052522592dbbd Mon Sep 17 00:00:00 2001 From: Rico Date: Sun, 1 Sep 2019 23:19:54 +0200 Subject: [PATCH 04/13] TASK: Remove API features Not ready for production yet --- pastepwn/api/__init__.py | 6 - pastepwn/api/api.py | 88 -------------- pastepwn/api/apiresponse.py | 14 --- pastepwn/api/apiroutes.py | 27 ----- pastepwn/api/apiserver.py | 89 -------------- pastepwn/api/documentation/pastepwn.yaml | 142 ----------------------- 6 files changed, 366 deletions(-) delete mode 100644 pastepwn/api/__init__.py delete mode 100644 pastepwn/api/api.py delete mode 100644 pastepwn/api/apiresponse.py delete mode 100644 pastepwn/api/apiroutes.py delete mode 100644 pastepwn/api/apiserver.py delete mode 100644 pastepwn/api/documentation/pastepwn.yaml diff --git a/pastepwn/api/__init__.py b/pastepwn/api/__init__.py deleted file mode 100644 index d9dd949..0000000 --- a/pastepwn/api/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# -*- coding: utf-8 -*- - -from .apiserver import APIServer -from .apiresponse import APIResponse - -__all__ = ['APIServer', 'APIResponse'] diff --git a/pastepwn/api/api.py b/pastepwn/api/api.py deleted file mode 100644 index a1f8e4d..0000000 --- a/pastepwn/api/api.py +++ /dev/null @@ -1,88 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging -from threading import Event, Lock - -from tornado.httpserver import HTTPServer -from tornado.ioloop import IOLoop -from tornado.web import RequestHandler, Application - -from pastepwn.util import start_thread - -logger = logging.getLogger(__name__) - - -class APIServer(object): - - def __init__(self, port, app, ssl_ctx, exception_event=None): - self.http_server = HTTPServer(app, ssl_options=ssl_ctx) - self.port = port - self.loop = None - self.logger = logging.getLogger(__name__) - self.is_running = False - self.server_lock = Lock() - self.shutdown_lock = Lock() - self._exception_event = exception_event or Event() - self._api_thread = None - - def start(self): - if self.is_running: - logger.warning("APIServer is already running!") - return - - self._api_thread = start_thread(self._start, "pastepwnAPI", Event()) - - def _start(self): - with self.server_lock: - IOLoop().make_current() - self.is_running = True - self.logger.debug('API Server started.') - self.http_server.listen(self.port) - self.loop = IOLoop.current() - self.loop.start() - self.logger.debug('API Server stopped.') - self.is_running = False - - def stop(self): - with self.shutdown_lock: - if not self.is_running: - self.logger.warning('API Server already stopped.') - return - else: - # self.http_server.close_all_connections() - # TODO Somehow the sockets keep existing which is why at some point there will - # TODO be an OS error because the library tries to open another socked which already exists - self.http_server.stop() - self.loop.add_callback(self.loop.stop) - - def handle_error(self, request, client_address): - """Handle an error gracefully.""" - self.logger.debug('Exception happened during processing of request from %s', - client_address, exc_info=True) - - -class APIAppClass(Application): - - def __init__(self, base_path="api"): - handlers = [ - (r"/{0}/pastes/(.*)".format(base_path), PasteHandler) - ] - Application.__init__(self, handlers) - - -class PasteHandler(RequestHandler): - SUPPORTED_METHODS = ["GET"] - - def __init__(self, application, request, **kwargs): - super(PasteHandler, self).__init__(application, request, **kwargs) - self.logger = logging.getLogger(__name__) - - def set_default_headers(self): - self.set_header("Content-Type", 'application/json; charset="utf-8"') - - def get(self, *args, **kwargs): - # TODO Remove debug code - print(self.path_args) - self.set_status(200) - logger.info(self.request.body) - self.write("Hi") diff --git a/pastepwn/api/apiresponse.py b/pastepwn/api/apiresponse.py deleted file mode 100644 index bc6bec1..0000000 --- a/pastepwn/api/apiresponse.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- - -import json - - -class APIResponse(object): - - def __init__(self, status, message): - self.status = status - self.message = message - self.error = None - - def __str__(self): - return json.dumps({"status": self.status, "error": self.error, "message": self.message}) diff --git a/pastepwn/api/apiroutes.py b/pastepwn/api/apiroutes.py deleted file mode 100644 index f6651bf..0000000 --- a/pastepwn/api/apiroutes.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -from sanic import Sanic -from sanic.response import json - - -async def default(request): - return json({"hello": "world"}) - - -async def ignore_404s(request, exception): - return json({"error": "site not found"}, status=404) - - -async def get_paste_by_id(request, pasteId): - return json({"pasteId": pasteId}) - - -async def get_pastes_by_date(request): - return json({"hello1": "world2"}) - - -async def scrape_paste(request): - return json({"hello1": "world2"}) - - -async def pastepwn(request): - return json({"hello1": "world2"}) diff --git a/pastepwn/api/apiserver.py b/pastepwn/api/apiserver.py deleted file mode 100644 index ac1688f..0000000 --- a/pastepwn/api/apiserver.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- coding: utf-8 -*- -import asyncio -import logging -import socket -from threading import Event, Lock - -from sanic import Sanic -from sanic.exceptions import NotFound - -from pastepwn.util import start_thread -from .apiroutes import get_paste_by_id, get_pastes_by_date, scrape_paste, default, pastepwn, ignore_404s - - -# on linux we can use -# import uvloop - - -class APIServer(object): - - def __init__(self, host="0.0.0.0", port=8080, base_url="", exception_event=None): - self.logger = logging.getLogger(__name__) - self.host = host - self.port = port - self.is_running = False - - if base_url.endswith("/"): - base_url = base_url[:-1] - - self.base_url = base_url - self._server_lock = Lock() - self._exception_event = exception_event or Event() - self.loop = None - self._api_thread = None - self.app = Sanic("APIServer") - - self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.sock.bind((host, port)) - - self._init_routes() - - def _init_routes(self): - self._init_route(default, "/") - self._init_route(get_paste_by_id, "/pastes/") - self._init_route(get_pastes_by_date, "/pastes/findByDate") - self._init_route(scrape_paste, "/pastes/scrape", methods=["POST"]) - self._init_route(pastepwn, "/pastepwn") - self.app.error_handler.add(NotFound, ignore_404s) - - def _init_route(self, callback, path, methods=None): - allowed_methods = methods or ["GET"] - - if path.startswith("/"): - path = path[1:] - - self.app.add_route(callback, "{0}/{1}".format(self.base_url, path, methods=allowed_methods)) - - def start(self): - with self._server_lock: - if self.is_running: - return - - self._api_thread = start_thread(self._start_server, "sanicAPI", Event()) - self.is_running = True - - def stop(self): - with self._server_lock: - if not self.is_running: - return - - try: - self.loop.stop() - self.logger.info("Stopping API Server!") - self._api_thread.join() - self.loop = None - self.is_running = False - except Exception as e: - self.logger.error(e) - - def _start_server(self): - asyncio.set_event_loop(asyncio.new_event_loop()) - server = self.app.create_server(sock=self.sock) - self.loop = asyncio.get_event_loop() - asyncio.ensure_future(server) - - try: - self.loop.run_forever() - except Exception as e: - print(e) - self.loop.stop() diff --git a/pastepwn/api/documentation/pastepwn.yaml b/pastepwn/api/documentation/pastepwn.yaml deleted file mode 100644 index 127dd53..0000000 --- a/pastepwn/api/documentation/pastepwn.yaml +++ /dev/null @@ -1,142 +0,0 @@ -swagger: "2.0" -info: - description: "This is the documentation of the pastepwn API. You can find out more about Pastepwn on [GitHub](https://github.com/d-Rickyy-b/pastepwn)." - version: "1.0.0" - title: "Pastepwn API" - contact: - email: "pastepwn@rickyy.de" - license: - name: "MIT" - url: "https://github.com/d-Rickyy-b/pastepwn/blob/master/LICENSE" -host: "pastepwn.rickyy.de" -basePath: "/" -tags: -- name: "pastes" - description: "Everything about pastes" -schemes: -- "https" -paths: - /pastes/{pasteId}: - get: - tags: - - "pastes" - summary: "Get the content of a specific paste by ID" - description: "" - operationId: "getPaste" - consumes: - - "application/json" - produces: - - "application/json" - parameters: - - name: "pasteId" - in: "path" - description: "ID of the paste" - required: true - type: "string" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/Paste" - 400: - description: "Invalid ID supplied" - 404: - description: "Paste not found" - 405: - description: "Validation exception" - /pastes/findByDate: - get: - tags: - - "pastes" - summary: "Get pastes from within certain time frame" - description: "" - operationId: "addPet" - consumes: - - "application/json" - produces: - - "application/json" - parameters: - - name: "fromDate" - in: "body" - description: "Starting date for the search" - required: true - schema: - type: "integer" - format: "int64" - responses: - 200: - description: "successful operation" - schema: - type: "array" - items: - $ref: "#/definitions/Paste" - 405: - description: "Invalid input" - -securityDefinitions: - api_key: - type: "apiKey" - name: "api_key" - in: "header" -definitions: - Tag: - type: "object" - properties: - id: - type: "integer" - format: "int64" - name: - type: "string" - Paste: - type: "object" - required: - - "key" - - "title" - - "size" - - "date" - - properties: - key: - type: "string" - example: "0CeaNm8Y" - title: - type: "string" - example: "Once we all know when we goto function" - date: - type: "integer" - format: "int64" - example: 1442911802 - expire: - type: "integer" - format: "int64" - example: 1442998159 - syntax: - type: "string" - example: "java" - user: - type: "string" - example: "admin" - size: - type: "integer" - format: "int64" - example: 890 - full_url: - type: "string" - example: "https://pastebin.com/0CeaNm8Y" - scrape_url: - type: "string" - example: "https://scrape.pastebin.com/api_scrape_item.php?i=0CeaNm8Y" - tags: - type: "array" - items: - $ref: "#/definitions/Tag" - ApiResponse: - type: "object" - properties: - code: - type: "integer" - format: "int32" - type: - type: "string" - message: - type: "string" \ No newline at end of file From bda3c7ebba9f65ab6e469a653e835013cdf760b2 Mon Sep 17 00:00:00 2001 From: Rico Date: Mon, 2 Sep 2019 22:53:30 +0200 Subject: [PATCH 05/13] TASK: Use the travis tag when building pypi package Forgot to update the version file to the latest version? No problem, use the travis tag instead! --- setup.py | 79 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 45 insertions(+), 34 deletions(-) diff --git a/setup.py b/setup.py index 2116390..44097fa 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- import os + from setuptools import setup, find_packages packages = find_packages(exclude=['tests*']) @@ -20,37 +21,47 @@ def requirements(): with open("README.md", "r", encoding="utf-8") as file: readme = file.read() -# Taken from https://packaging.python.org/guides/single-sourcing-package-version/ -version = {} -version_file = os.path.join('pastepwn', 'version.py') -with open(version_file, "r", encoding="utf-8") as file: - exec(file.read(), version) - - setup(name='pastepwn', - version=version['__version__'], - install_requires=requirements(), - keywords='python pastebin scraping osint framework', - description='Python framework to scrape PasteBin pastes and analyze them', - long_description=readme, - long_description_content_type='text/markdown', - url='https://github.com/d-Rickyy-b/pastepwn', - author='d-Rickyy-b', - author_email='pastepwn@rickyy.de', - license='MIT', - packages=packages, - include_package_data=True, - classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Environment :: Console', - 'Intended Audience :: Developers', - 'Intended Audience :: Science/Research', - 'License :: OSI Approved :: MIT License', - 'Operating System :: OS Independent', - 'Topic :: Software Development :: Libraries :: Python Modules', - 'Topic :: Security', - 'Topic :: Internet', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7' - ], ) +# If present, take tag from travis and not locally +travis_tag = os.environ.get("TRAVIS_TAG") + +if travis_tag is not None: + # Travis versions can look like 'v1.5.2' - pypi versions look like '1.5.2' + version = travis_tag.replace("v", "") +else: + # Taken from https://packaging.python.org/guides/single-sourcing-package-version/ + version_dict = {} + version_file = os.path.join('pastepwn', 'version.py') + with open(version_file, "r", encoding="utf-8") as file: + exec(file.read(), version_dict) + version = version_dict['__version__'] + +print("Building version {} of pastepwn".format(version)) + +setup(name='pastepwn', + version=version, + install_requires=requirements(), + keywords='python pastebin scraping osint framework', + description='Python framework to scrape PasteBin pastes and analyze them', + long_description=readme, + long_description_content_type='text/markdown', + url='https://github.com/d-Rickyy-b/pastepwn', + author='d-Rickyy-b', + author_email='pastepwn@rickyy.de', + license='MIT', + packages=packages, + include_package_data=True, + classifiers=[ + 'Development Status :: 5 - Production/Stable', + 'Environment :: Console', + 'Intended Audience :: Developers', + 'Intended Audience :: Science/Research', + 'License :: OSI Approved :: MIT License', + 'Operating System :: OS Independent', + 'Topic :: Software Development :: Libraries :: Python Modules', + 'Topic :: Security', + 'Topic :: Internet', + 'Programming Language :: Python', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7' + ], ) From 42eca9bd5a21d01bd2bf1e01c074e9f2748a8948 Mon Sep 17 00:00:00 2001 From: Rico Date: Mon, 2 Sep 2019 23:35:47 +0200 Subject: [PATCH 06/13] FIX: Broken paths in setup.py --- setup.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 44097fa..3c4dfa4 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,9 @@ def requirements(): return requirements_list -with open("README.md", "r", encoding="utf-8") as file: +setup_path = os.path.dirname(os.path.abspath(__file__)) + +with open(os.path.join(setup_path, "README.md"), "r", encoding="utf-8") as file: readme = file.read() # If present, take tag from travis and not locally @@ -30,7 +32,7 @@ def requirements(): else: # Taken from https://packaging.python.org/guides/single-sourcing-package-version/ version_dict = {} - version_file = os.path.join('pastepwn', 'version.py') + version_file = os.path.join(setup_path, 'pastepwn', 'version.py') with open(version_file, "r", encoding="utf-8") as file: exec(file.read(), version_dict) version = version_dict['__version__'] From cc7edf41a093b1c53a9b9db309db05a19df3e44d Mon Sep 17 00:00:00 2001 From: Rico Date: Mon, 2 Sep 2019 23:42:47 +0200 Subject: [PATCH 07/13] FIX: Broken path to requirements.txt --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 3c4dfa4..c47d4c0 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ def requirements(): """Build the requirements list for this project""" requirements_list = [] - with open('requirements.txt') as reqs: + with open(os.path.join(setup_path, "requirements.txt")) as reqs: for install in reqs: requirements_list.append(install.strip()) From 01c8e84de85b7619002c4707b6922ffa1008454d Mon Sep 17 00:00:00 2001 From: Rico Date: Tue, 3 Sep 2019 00:13:40 +0200 Subject: [PATCH 08/13] TASK: Move path definition to top in setup.py --- setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/setup.py b/setup.py index c47d4c0..11dc88f 100644 --- a/setup.py +++ b/setup.py @@ -3,6 +3,7 @@ from setuptools import setup, find_packages +setup_path = os.path.dirname(os.path.abspath(__file__)) packages = find_packages(exclude=['tests*']) @@ -18,8 +19,6 @@ def requirements(): return requirements_list -setup_path = os.path.dirname(os.path.abspath(__file__)) - with open(os.path.join(setup_path, "README.md"), "r", encoding="utf-8") as file: readme = file.read() From 83b371fcf0da10eff5033ec9f0339ef43598b98d Mon Sep 17 00:00:00 2001 From: Rico Date: Tue, 3 Sep 2019 00:14:17 +0200 Subject: [PATCH 09/13] TASK: Add more python versions to travis config I should test more versions than only 3.5 and 3.6 --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index b03dcf5..32b1333 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,10 @@ language: python sudo: require python: + - "3.4" - "3.5" - "3.6" + - "3.7" # command to install dependencies install: - pip install -r requirements.txt From e04f4761ba574df89a4972e7b88281ce57880fb0 Mon Sep 17 00:00:00 2001 From: Rico Date: Tue, 3 Sep 2019 22:50:11 +0200 Subject: [PATCH 10/13] FEATURE: Decide if you want to store all pastes --- pastepwn/core/pastepwn.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/pastepwn/core/pastepwn.py b/pastepwn/core/pastepwn.py index 432c19e..9aec9ca 100644 --- a/pastepwn/core/pastepwn.py +++ b/pastepwn/core/pastepwn.py @@ -12,7 +12,13 @@ class PastePwn(object): - def __init__(self, database=None, proxies=None): + def __init__(self, database=None, proxies=None, store_all_pastes=True): + """ + Basic PastePwn object handling the connection to pastebin and all the analyzers and actions + :param database: Database object extending AbstractDB + :param proxies: Dict of proxies as defined in the requests documentation + :param store_all_pastes: Bool to decide if all pastes should be stored into the db + """ self.logger = logging.getLogger(__name__) self.database = database self.paste_queue = Queue() @@ -36,14 +42,16 @@ def __init__(self, database=None, proxies=None): self.action_handler = ActionHandler(action_queue=self.action_queue, exception_event=self.__exception_event) - if self.database is not None: + if self.database is not None and store_all_pastes: # Save every paste to the database with the AlwaysTrueAnalyzer self.logger.info("Database provided! Storing pastes in there.") database_action = DatabaseAction(self.database) always_true = AlwaysTrueAnalyzer(database_action) self.add_analyzer(always_true) - else: + elif store_all_pastes: self.logger.info("No database provided!") + else: + self.logger.info("Not storing all pastes!") def add_scraper(self, scraper): scraper.init_exception_event(self.__exception_event) From 3fb3821115e1973fea4af8835cfac65f48849fed Mon Sep 17 00:00:00 2001 From: Rico Date: Tue, 3 Sep 2019 22:50:36 +0200 Subject: [PATCH 11/13] FIX: Missing column 'syntax' in table layout --- pastepwn/database/sqlitedb.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pastepwn/database/sqlitedb.py b/pastepwn/database/sqlitedb.py index e149d24..5585c46 100644 --- a/pastepwn/database/sqlitedb.py +++ b/pastepwn/database/sqlitedb.py @@ -41,6 +41,7 @@ def _create_tables(self): 'size' INTEGER, 'date' INTEGER, 'expire' INTEGER, + 'syntax' TEXT, 'scrape_url' TEXT, 'full_url' TEXT, 'body' TEXT, From cf4996366cf27d7a98bfc06282e241129f771206 Mon Sep 17 00:00:00 2001 From: Rico Date: Tue, 3 Sep 2019 22:51:14 +0200 Subject: [PATCH 12/13] FIX: Broken variable substitution I have no idea why I never tested this before... --- pastepwn/database/sqlitedb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pastepwn/database/sqlitedb.py b/pastepwn/database/sqlitedb.py index 5585c46..e8f4696 100644 --- a/pastepwn/database/sqlitedb.py +++ b/pastepwn/database/sqlitedb.py @@ -50,7 +50,7 @@ def _create_tables(self): def _insert_data(self, paste): self.cursor.execute("INSERT INTO pastes (key, title, user, size, date, expire, syntax, scrape_url, full_url, body) " - "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (paste.key, paste.title, paste.user, From f47ec62cec23fa2adc1f2ed2a8fce04a9b8a041a Mon Sep 17 00:00:00 2001 From: Rico Date: Tue, 3 Sep 2019 22:51:33 +0200 Subject: [PATCH 13/13] FIX: Allow multiple threads to write to the database --- pastepwn/database/sqlitedb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pastepwn/database/sqlitedb.py b/pastepwn/database/sqlitedb.py index e8f4696..178e2bd 100644 --- a/pastepwn/database/sqlitedb.py +++ b/pastepwn/database/sqlitedb.py @@ -21,7 +21,7 @@ def __init__(self, dbpath="pastepwn"): open(self.dbpath, "a").close() try: - self.db = sqlite3.connect(dbpath) + self.db = sqlite3.connect(dbpath, check_same_thread=False) self.db.text_factory = lambda x: str(x, 'utf-8', "ignore") self.cursor = self.db.cursor() self._create_tables()