mirror of
https://github.com/simple-login/app.git
synced 2025-02-24 15:53:22 +08:00
user can choose a referral code
This commit is contained in:
parent
25de8001e2
commit
b4e5e3eecb
2 changed files with 54 additions and 15 deletions
|
@ -8,7 +8,19 @@
|
||||||
|
|
||||||
{% block default_content %}
|
{% block default_content %}
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<h1 class="h3 mb-5"> Referrals </h1>
|
<h1 class="h3 mb-5"> Referrals
|
||||||
|
<a class="ml-3 text-info" style="font-size: 12px" data-toggle="collapse" href="#howtouse" role="button"
|
||||||
|
aria-expanded="false" aria-controls="collapseExample">
|
||||||
|
How to use <i class="fe fe-chevrons-down"></i>
|
||||||
|
</a>
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<div class="alert alert-primary collapse" id="howtouse" role="alert">
|
||||||
|
On this page, you can create a <b>referral code</b> that you can use when referring people to SimpleLogin.
|
||||||
|
For every user who <b>upgrades</b>, you'll get $5 :). <br>
|
||||||
|
The payout can be initiated any time, just send us an email at
|
||||||
|
<a href="mailto:hi@simplelogin.io">hi@simplelogin.io</a> when you want to receive the payout.
|
||||||
|
</div>
|
||||||
|
|
||||||
{% if referrals|length == 0 %}
|
{% if referrals|length == 0 %}
|
||||||
<div class="alert alert-info">
|
<div class="alert alert-info">
|
||||||
|
@ -24,7 +36,6 @@
|
||||||
<input type="hidden" name="form-name" value="update">
|
<input type="hidden" name="form-name" value="update">
|
||||||
<input type="hidden" name="referral-id" value="{{ referral.id }}">
|
<input type="hidden" name="referral-id" value="{{ referral.id }}">
|
||||||
|
|
||||||
<b>Name</b>
|
|
||||||
<div class="d-flex mb-3">
|
<div class="d-flex mb-3">
|
||||||
<div class="mr-2">
|
<div class="mr-2">
|
||||||
<input name="name" class="form-control" value="{{ referral.name or '' }}">
|
<input name="name" class="form-control" value="{{ referral.name or '' }}">
|
||||||
|
@ -35,14 +46,13 @@
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
||||||
{% set nb_user = referral.nb_user() %}
|
{% set nb_user = referral.nb_user() %}
|
||||||
{% set nb_paid_user = referral.nb_paid_user() %}
|
{% set nb_paid_user = referral.nb_paid_user() %}
|
||||||
{% if nb_user > 0 %}
|
{% if nb_user > 0 %}
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<b class="h1">{{ nb_user }}</b>
|
<b class="h1">{{ nb_user }}</b>
|
||||||
{% if nb_user == 1 %} person {% else %} people {% endif %}
|
{% if nb_user == 1 %} person {% else %} people {% endif %}
|
||||||
has protected their emails thanks to you! <br>
|
has their online privacy protected thanks to you! <br>
|
||||||
|
|
||||||
Among them, <b class="h1">{{ nb_paid_user }}</b>
|
Among them, <b class="h1">{{ nb_paid_user }}</b>
|
||||||
{% if nb_paid_user == 1 %} person {% else %} people {% endif %}
|
{% if nb_paid_user == 1 %} person {% else %} people {% endif %}
|
||||||
|
@ -71,7 +81,14 @@
|
||||||
|
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
You can also use the referral code <b>{{ referral.code }}</b> when sharing any link on SimpleLogin. <br>
|
You can also use the referral code <b>{{ referral.code }}</b> when sharing any link on SimpleLogin. <br>
|
||||||
Just append <em>?slref={{ referral.code }}</em> to any link on SimpleLogin website.
|
Just append
|
||||||
|
<em data-toggle="tooltip"
|
||||||
|
title="Click to copy"
|
||||||
|
class="clipboard"
|
||||||
|
data-clipboard-text="{{ '?slref=' + referral.code }}" style="overflow-wrap: break-word">
|
||||||
|
?slref={{ referral.code }}
|
||||||
|
</em>
|
||||||
|
to any link on SimpleLogin website.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
@ -91,9 +108,24 @@
|
||||||
|
|
||||||
<form method="post" class="mt-6">
|
<form method="post" class="mt-6">
|
||||||
<input type="hidden" name="form-name" value="create">
|
<input type="hidden" name="form-name" value="create">
|
||||||
<input name="name" class="form-control"
|
|
||||||
|
<div class="form-group">
|
||||||
|
<input name="code" class="form-control"
|
||||||
|
pattern="[0-9a-z-_]{3,}"
|
||||||
|
placeholder="Referral Code"
|
||||||
|
title="At least 3 characters. Only lowercase letters, numbers, dashes (-) and underscores (_) are currently supported.">
|
||||||
|
<div class="small-text">
|
||||||
|
At least 3 characters. Only lowercase letters, numbers,
|
||||||
|
dashes (-) and underscores (_) are currently supported.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<input name="name" class="form-control"
|
||||||
placeholder="Referral name, something to help you remember why you create it :)">
|
placeholder="Referral name, something to help you remember why you create it :)">
|
||||||
<button class="btn btn-success mt-2">Create a new referral code</button>
|
</div>
|
||||||
|
|
||||||
|
<button class="btn btn-success mb-5">Create</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import re
|
||||||
|
|
||||||
from flask import render_template, request, flash, redirect, url_for
|
from flask import render_template, request, flash, redirect, url_for
|
||||||
from flask_login import login_required, current_user
|
from flask_login import login_required, current_user
|
||||||
|
|
||||||
|
@ -7,21 +9,26 @@ from app.log import LOG
|
||||||
from app.models import Referral
|
from app.models import Referral
|
||||||
from app.utils import random_string
|
from app.utils import random_string
|
||||||
|
|
||||||
|
_REFERRAL_PATTERN = r"[0-9a-z-_]{3,}"
|
||||||
|
|
||||||
|
|
||||||
@dashboard_bp.route("/referral", methods=["GET", "POST"])
|
@dashboard_bp.route("/referral", methods=["GET", "POST"])
|
||||||
@login_required
|
@login_required
|
||||||
def referral_route():
|
def referral_route():
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
if request.form.get("form-name") == "create":
|
if request.form.get("form-name") == "create":
|
||||||
# Generate a new unique ref code
|
code = request.form.get("code")
|
||||||
code = random_string(15)
|
if re.fullmatch(_REFERRAL_PATTERN, code) is None:
|
||||||
for _ in range(100):
|
flash(
|
||||||
if not Referral.get_by(code=code):
|
"At least 3 characters. Only lowercase letters, "
|
||||||
# found
|
"numbers, dashes (-) and underscores (_) are currently supported.",
|
||||||
break
|
"error",
|
||||||
|
)
|
||||||
|
return redirect(url_for("dashboard.referral_route"))
|
||||||
|
|
||||||
LOG.warning("Referral Code %s already used", code)
|
if Referral.get_by(code=code):
|
||||||
code = random_string(15)
|
flash("Code already used", "error")
|
||||||
|
return redirect(url_for("dashboard.referral_route"))
|
||||||
|
|
||||||
name = request.form.get("name")
|
name = request.form.get("name")
|
||||||
referral = Referral.create(user_id=current_user.id, code=code, name=name)
|
referral = Referral.create(user_id=current_user.id, code=code, name=name)
|
||||||
|
|
Loading…
Reference in a new issue