From ccf072963043e4f8e402c2adcc36804fcd71b02d Mon Sep 17 00:00:00 2001 From: bacalhau Date: Fri, 6 Mar 2026 23:16:08 +0000 Subject: [PATCH 1/8] made it so it automaticly trusts every pgp key --- src/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.py b/src/main.py index 47f97ef..bdab837 100644 --- a/src/main.py +++ b/src/main.py @@ -107,7 +107,7 @@ def pgp_encrypt_and_import(pgp_key: str, message: str): return None, None fingerprint = result.fingerprints[0] # encrypts message to the user's fingerprint - encrypted = gpg.encrypt(message, recipients=[fingerprint]) + encrypted = gpg.encrypt(message, recipients=[fingerprint], always_trust=True) if not encrypted.ok: return fingerprint, None return fingerprint, str(encrypted) From ae07e823dac06f49a1203e6db5e17ee610e0c93f Mon Sep 17 00:00:00 2001 From: bacalhau Date: Sat, 7 Mar 2026 22:22:42 +0000 Subject: [PATCH 2/8] Update README.md --- README.md | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/README.md b/README.md index b638102..5d8fcea 100644 --- a/README.md +++ b/README.md @@ -5,19 +5,11 @@ It uses flask to render the HTML, saves the data in a MySQL database and also fe It's also supposed to be very easy to use, currently its still in development but the vision is that you can be enganged on the website right from the start featuring a very powerfull search page and not needing an account to use the website. This website also does not use JavaScript making it easy to run on any browser. -## TODO -- making the website responsive -- adding search features -- likes and dislikes -- cool css -- a grid with all of the users on the index page (where the search will also be) -- security audits -- maybe more stuff later... - ## Contributing If you have suggestions, find bugs, or want to provide code, just open an issue before submiting a PR. I will probably not accept a PR unless I see that it's actually somewhat important, exceptions can be made, but its kinda goofy to write the code before submiting an issue. ## Running the program +### start the database: #### Docker/Podman `docker compose up -d` / `podman-compose up -d` From 8e7e1539893c0c392b1850af21243d29ed2868fa Mon Sep 17 00:00:00 2001 From: bacalhau Date: Sat, 7 Mar 2026 23:04:17 +0000 Subject: [PATCH 3/8] uses sqlite now --- docker-compose.yml | 15 --------------- requirements.txt | 1 - src/lovedb.db | Bin 0 -> 24576 bytes src/main.py | 8 +++----- 4 files changed, 3 insertions(+), 21 deletions(-) delete mode 100644 docker-compose.yml create mode 100644 src/lovedb.db diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 7885b4a..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,15 +0,0 @@ - -services: - db: - image: mariadb:latest - container_name: lovedb - restart: always - environment: - MARIADB_ROOT_PASSWORD: love - MARIADB_DATABASE: lovedb - MARIADB_USER: love - MARIADB_PASSWORD: love - ports: - - "3309:3306" - volumes: - - ./data:/var/lib/mysql diff --git a/requirements.txt b/requirements.txt index 9524e22..b4fccf0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,4 @@ Flask Flask-SQLAlchemy SQLAlchemy -PyMySQL python-gnupg diff --git a/src/lovedb.db b/src/lovedb.db new file mode 100644 index 0000000000000000000000000000000000000000..56b8f63d9c542a4fc0a3a242f126b94df305a6d0 GIT binary patch literal 24576 zcmeI%&rj1}7zgmT43I78^gw!jhX+_9ux@puF-Gz6`RHgzxSoIZ1U4HL z;qimxCH|Vzq9dlQ>{vNH!y8cYxaR(h?bJG!Rf9Rf6k1wS}Y{~Ys!}f1k+2gYIpJ}9JpX2flce!PC{daJ&^u~nt>N57Crr%Wi)5#|u-apd~xM0##wQoS{!5Ye~zfwyl5 z7uY5n`h&1-%Gpg_zE94Lj||Moz=^ro$iS=&9G@E-8K}v?SnyvmCI3$@2fK3RBMDyE zAOHafKmY;|fB*y_009U<00RHDz$-&hiMpezGpUW2`>E6=MO9O&G$HX_X4{@tE*ErN zD;2Vp^6ILQ$>~O>R4CodRrH&Bsj!^aw2Ge93w_b;vhau=v$D@rSbGmVVOgmdkb+3tXDbJyZw z)>PiQx%1<5;~OUM89{QoCO{=B# Date: Sun, 8 Mar 2026 00:05:33 +0000 Subject: [PATCH 4/8] Update README.md --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 5d8fcea..6d614ce 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,6 @@ This website also does not use JavaScript making it easy to run on any browser. If you have suggestions, find bugs, or want to provide code, just open an issue before submiting a PR. I will probably not accept a PR unless I see that it's actually somewhat important, exceptions can be made, but its kinda goofy to write the code before submiting an issue. ## Running the program -### start the database: -#### Docker/Podman -`docker compose up -d` / `podman-compose up -d` - ### python enviornment `python -m venv venv` From 2cc5d78acdcbdfeae7a59f635805cff9de24973c Mon Sep 17 00:00:00 2001 From: bacalhau Date: Sun, 8 Mar 2026 00:06:07 +0000 Subject: [PATCH 5/8] Update .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 0f0c103..1377bfe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ -data venv src/static/uploads From 069d2b1667d7cf2c0aea9cac65c86bf1a396731c Mon Sep 17 00:00:00 2001 From: bacalhau Date: Sun, 8 Mar 2026 00:09:09 +0000 Subject: [PATCH 6/8] removed plan.md --- README.md | 2 +- plan.md | 93 ------------------------------------------------------- 2 files changed, 1 insertion(+), 94 deletions(-) delete mode 100644 plan.md diff --git a/README.md b/README.md index 6d614ce..a2f8e8c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Dating-Website ## Description Minimal dating website made in python. -It uses flask to render the HTML, saves the data in a MySQL database and also features an authentication method using PGP where the database stores the user's PGP key's fingerprint and uses that to encrypt a message only you decrypt, but successfully decrypting the message you athenticate to your account. +It uses flask to render the HTML, saves the data in a database and also features an authentication method using PGP where the database stores the user's PGP key's fingerprint and uses that to encrypt a message only you decrypt, but successfully decrypting the message you athenticate to your account. It's also supposed to be very easy to use, currently its still in development but the vision is that you can be enganged on the website right from the start featuring a very powerfull search page and not needing an account to use the website. This website also does not use JavaScript making it easy to run on any browser. diff --git a/plan.md b/plan.md deleted file mode 100644 index 1b47670..0000000 --- a/plan.md +++ /dev/null @@ -1,93 +0,0 @@ -# User System Plan - -## 1. Database Schema (`User` model) - -- **Identity & Security** - - `username` (unique, required) - - `pgp` (unique, required) - - `is_verified` (boolean) - -- **Contacts** - - `xmpp` (unique, required) - - `email` (unique, optional) - - `phone` (unique, optional) - -- **Personal Info** - - `firstname` (required) - - `lastname` (required) - - `sex` (`male` / `female`, required) - - `date_of_birth` (required) - - `race` (optional) - -- **Profile & Media** - - `profile_picture` (required) - - `pictures` (optional array) - -- **Location** - - `country` (required) - - `city` (optional) - -- **Physical Attributes** - - `height` (optional float) - - `weight` (optional int) - -- **Preferences** - - `prefered_age_range` (optional) - - `likes` (optional array) - - `dislikes` (optional array) - ---- - -## 2. Registration - -1. **User fills form** - - All fields except `id`, `is_verified`. - -2. **Server receives data** - - Validate required fields and unique constraints. - - Temporarily store as **unverified**. - -3. **PGP Verification** - - Server encrypts a message with user's PGP public key. - - Show **validation page** with encrypted message. - - User decrypts message and submits. - - Server validates ownership and sets `is_verified=True`. - -4. **Create Profile Page & Redirect** - - Generate user profile page with all info. - - Redirect user to main page or search page. - ---- - -## 3. Search Page - -- **Display**: Public user profiles as cards - - Show `profile_picture`, `firstname`, `lastname`, age, `country`, `city`. - -- **Filters**: - - All fields **except** `pgp`, `id`, `username`. - - Include boolean checks for presence of `email`, `phone`, `xmpp`. - -- **Profile Click** - - Open full profile page with all info, pictures, likes/dislikes. - ---- - -## 4. Login Flow - -1. User enters `username` + `PGP key`. -2. Server verifies PGP via challenge. -3. On success: - - User can edit **all fields** execpt `id` and `username`. - - User can change pgp key, new pgp key must be verified. - ---- - -## 5. Software Stack - -- **Software used**: - - Flask (backend framework) - - MySQL (Database) - - SQLAlchemy (ORM) - - python-gnupg (PGP validation) - - Flask-WTF (Forms validation) From 6652284dbc729909fd793d9c2dc33f337514c24e Mon Sep 17 00:00:00 2001 From: bacalhau Date: Sun, 8 Mar 2026 17:30:55 +0000 Subject: [PATCH 7/8] added dockerfile, so you can run this in 1 click --- .gitignore | 2 ++ Dockerfile | 19 +++++++++++++++++++ docker-compose.yml | 14 ++++++++++++++ src/__pycache__/main.cpython-314.pyc | Bin 0 -> 28385 bytes 4 files changed, 35 insertions(+) create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 src/__pycache__/main.cpython-314.pyc diff --git a/.gitignore b/.gitignore index 1377bfe..1433b19 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ venv src/static/uploads +data +src/lovedb.db diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..55488c7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +FROM python:3.14.3-alpine3.23 + +WORKDIR /app + +COPY requirements.txt . + +RUN apk add gpg + +RUN pip install --no-cache-dir -r requirements.txt + +COPY src/ ./src/ + +EXPOSE 5000 + +ENV FLASK_APP=src/main.py +ENV FLASK_RUN_HOST=0.0.0.0 +ENV FLASK_ENV=production + +CMD ["flask", "run"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..55b906c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,14 @@ +services: + web: + build: . + container_name: dating + ports: + - "5000:5000" + volumes: + - ./src:/app/src + - ./data:/app/data + environment: + - FLASK_APP=src/main.py + - FLASK_RUN_HOST=0.0.0.0 + - FLASK_ENV=development + restart: unless-stopped diff --git a/src/__pycache__/main.cpython-314.pyc b/src/__pycache__/main.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b97211c8b4700630021a742531f3c0f465ddbad GIT binary patch literal 28385 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 z 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 F|6lb(+D`xg literal 0 HcmV?d00001 From d44c1b5f973e1ec4290ff344bf401628a9323a1a Mon Sep 17 00:00:00 2001 From: bacalhau Date: Mon, 9 Mar 2026 18:50:53 +0000 Subject: [PATCH 8/8] added about to db --- .gitignore | 1 + src/__pycache__/main.cpython-314.pyc | Bin 28385 -> 28385 bytes src/lovedb.db | Bin 24576 -> 24576 bytes src/main.py | 3 +- src/static/drip.css | 94 +++++++++++++++++++++------ src/templates/page.html | 1 + 6 files changed, 79 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 1433b19..4fa2b83 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ venv src/static/uploads data src/lovedb.db +src/__pycache__ diff --git a/src/__pycache__/main.cpython-314.pyc b/src/__pycache__/main.cpython-314.pyc index 2b97211c8b4700630021a742531f3c0f465ddbad..a2385183e80d8d83f3662f96e9e5b79bc0c35e39 100644 GIT binary patch delta 22 ccmaEOm+|3UMs96BUM>b8Sn_J!M(%5Q09|GX761SM delta 22 ccmaEOm+|3UMs96BUM>b8c(Q8kM(%5Q09~O76#xJL diff --git a/src/lovedb.db b/src/lovedb.db index 56b8f63d9c542a4fc0a3a242f126b94df305a6d0..db658736da50b7115578bffc344f4da8b8d9fea2 100644 GIT binary patch delta 94 wcmZoTz}Rqrae_1><3t%}Rz?QBE|HBX3;3BB1U3sgyyl-6z|Y3T00iW50ZF+P?f?J) delta 459 zcmZoTz}Rqrae_1>(?l6(Rwf3$-k%#&7Vxt%@*QE|JF;0&U>9F~lO>}#gLtgCxTs=a zW1*rVJEOR`qM{}P17}iVPEN6*v$MI0iJ_CZk&CmNo27xViKT&)xs$1}i;1a;levYN zp`nY3k%@U;W_o%eSVwMRPO71$rMa$wv96(|esM`+NoKNsX+chYVoI?-Sc$$%u(O+) zk%^I>SABqcv=Tl=#wL1R0q#mV3iwnRngfj@LX`nnRjhMjQocf1YEepRo(IU?3dxxz zmG-}{bJ-RwzV6{zoSB$sW~pmt8Lb5NR Dating Website +

Dating Website