From 3ce3a05c7b1ee793a0924632de260e5dc3b12e27 Mon Sep 17 00:00:00 2001
From: Son NK <>
Date: Sat, 2 May 2020 18:08:05 +0200
Subject: [PATCH 1/4] Add referral name
---
app/models.py | 5 ++++-
server.py | 13 +++++++++++++
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/app/models.py b/app/models.py
index 2cedaf81..0f68b97e 100644
--- a/app/models.py
+++ b/app/models.py
@@ -158,7 +158,9 @@ class User(db.Model, ModelMixin, UserMixin):
db.Boolean, default=True, nullable=False, server_default="1"
)
- referral_id = db.Column(db.ForeignKey("referral.id"), nullable=True, default=None)
+ referral_id = db.Column(
+ db.ForeignKey("referral.id", ondelete="SET NULL"), nullable=True, default=None
+ )
referral = db.relationship("Referral", foreign_keys=[referral_id])
@@ -1153,6 +1155,7 @@ class Referral(db.Model, ModelMixin):
"""Referral code so user can invite others"""
user_id = db.Column(db.ForeignKey(User.id, ondelete="cascade"), nullable=False)
+ name = db.Column(db.String(512), nullable=True, default=None)
code = db.Column(db.String(128), unique=True, nullable=False)
diff --git a/server.py b/server.py
index 99ae24ba..3f1ad13f 100644
--- a/server.py
+++ b/server.py
@@ -51,6 +51,7 @@ from app.models import (
DeletedAlias,
Contact,
EmailLog,
+ Referral,
)
from app.monitor.base import monitor_bp
from app.oauth.base import oauth_bp
@@ -216,6 +217,18 @@ def fake_data():
DeletedAlias.create(user_id=user.id, email="d2@ab.cd")
db.session.commit()
+ referral = Referral.create(user_id=user.id, code="REFCODE", name="First referral")
+ db.session.commit()
+
+ User.create(
+ email="winston@continental.com",
+ name="Winston",
+ password="password",
+ activated=True,
+ referral_id=referral.id,
+ )
+ db.session.commit()
+
@login_manager.user_loader
def load_user(user_id):
From 16673567420fc0bbba8eb0a4cdb19ceea870388a Mon Sep 17 00:00:00 2001
From: Son NK <>
Date: Sat, 2 May 2020 18:11:10 +0200
Subject: [PATCH 2/4] User can update/create referral name
---
.../templates/dashboard/referral.html | 35 +++++++++++++----
app/dashboard/views/referral.py | 39 ++++++++++++-------
2 files changed, 54 insertions(+), 20 deletions(-)
diff --git a/app/dashboard/templates/dashboard/referral.html b/app/dashboard/templates/dashboard/referral.html
index 77b78f43..c30f8702 100644
--- a/app/dashboard/templates/dashboard/referral.html
+++ b/app/dashboard/templates/dashboard/referral.html
@@ -19,8 +19,23 @@
{% for referral in referrals %}
-
Referral Code: {{ referral.code }}
-
+
+
+
+
{% if referral.nb_user() > 0 %}
@@ -33,8 +48,8 @@
Please use this referral link to invite your friends trying out SimpleLogin:
-
-
+
+
@@ -49,6 +64,11 @@
+
+ You can also use the referral code {{ referral.code }} when sharing any link on SimpleLogin.
+ Just append ?slref={{ referral.code }} to any link on SimpleLogin website.
+
+
{% endfor %}
@@ -57,9 +77,10 @@
{% endif %}
-
-
{% endblock %}
\ No newline at end of file
diff --git a/app/dashboard/views/referral.py b/app/dashboard/views/referral.py
index f9aedfa0..05333bef 100644
--- a/app/dashboard/views/referral.py
+++ b/app/dashboard/views/referral.py
@@ -4,7 +4,7 @@ from flask_login import login_required, current_user
from app.dashboard.base import dashboard_bp
from app.extensions import db
from app.log import LOG
-from app.models import Referral
+from app.models import Referral, User
from app.utils import random_string
@@ -12,20 +12,33 @@ from app.utils import random_string
@login_required
def referral_route():
if request.method == "POST":
- # Generate a new unique ref code
- code = random_string(15)
- for _ in range(100):
- if not Referral.get_by(code=code):
- # found
- break
-
- LOG.warning("Referral Code %s already used", code)
+ if request.form.get("form-name") == "create":
+ # Generate a new unique ref code
code = random_string(15)
+ for _ in range(100):
+ if not Referral.get_by(code=code):
+ # found
+ break
- referral = Referral.create(user_id=current_user.id, code=code)
- db.session.commit()
- flash("A new referral code has been created", "success")
- return redirect(url_for("dashboard.referral_route", highlight_id=referral.id))
+ LOG.warning("Referral Code %s already used", code)
+ code = random_string(15)
+
+ name = request.form.get("name")
+ referral = Referral.create(user_id=current_user.id, code=code, name=name)
+ db.session.commit()
+ flash("A new referral code has been created", "success")
+ return redirect(
+ url_for("dashboard.referral_route", highlight_id=referral.id)
+ )
+ elif request.form.get("form-name") == "update":
+ referral_id = request.form.get("referral-id")
+ referral = Referral.get(referral_id)
+ if referral and referral.user_id == current_user.id:
+ referral.name = request.form.get("name")
+ db.session.commit()
+ flash("Referral name updated", "success")
+ return redirect(
+ url_for("dashboard.referral_route", highlight_id=referral.id)
# Highlight a referral
highlight_id = request.args.get("highlight_id")
From eff0eb9e3203959af4841beb1247d1950b167a5c Mon Sep 17 00:00:00 2001
From: Son NK <>
Date: Sat, 2 May 2020 18:14:09 +0200
Subject: [PATCH 3/4] can delete referral
---
.../templates/dashboard/referral.html | 37 +++++++++++++++++++
app/dashboard/views/referral.py | 9 +++++
2 files changed, 46 insertions(+)
diff --git a/app/dashboard/templates/dashboard/referral.html b/app/dashboard/templates/dashboard/referral.html
index c30f8702..73eb0e5e 100644
--- a/app/dashboard/templates/dashboard/referral.html
+++ b/app/dashboard/templates/dashboard/referral.html
@@ -69,6 +69,14 @@
Just append ?slref={{ referral.code }} to any link on SimpleLogin website.