92 lines
2.6 KiB
Python
92 lines
2.6 KiB
Python
import frappe
|
|
from frappe import _
|
|
from frappe.model.naming import append_number_if_name_exists
|
|
from frappe.utils import escape_html, random_string
|
|
from frappe.website.utils import cleanup_page_name, is_signup_disabled
|
|
|
|
from lms.lms.utils import get_country_code, get_lms_route
|
|
|
|
|
|
def validate_username_duplicates(doc, method):
|
|
while not doc.username or doc.username_exists():
|
|
doc.username = append_number_if_name_exists(
|
|
doc.doctype, cleanup_page_name(doc.full_name), fieldname="username"
|
|
)
|
|
if " " in doc.username:
|
|
doc.username = doc.username.replace(" ", "")
|
|
|
|
if len(doc.username) < 4:
|
|
doc.username = doc.email.replace("@", "").replace(".", "")
|
|
|
|
|
|
def after_insert(doc, method):
|
|
doc.add_roles("LMS Student")
|
|
|
|
|
|
@frappe.whitelist(allow_guest=True)
|
|
def sign_up(email: str, full_name: str, verify_terms: bool, user_category: str):
|
|
if is_signup_disabled():
|
|
frappe.throw(_("Sign Up is disabled"), _("Not Allowed"))
|
|
|
|
user = frappe.db.get("User", {"email": email})
|
|
if user:
|
|
if user.enabled:
|
|
return 0, _("Already Registered")
|
|
else:
|
|
return 0, _("Registered but disabled")
|
|
else:
|
|
if frappe.db.get_creation_count("User", 60) > 300:
|
|
frappe.respond_as_web_page(
|
|
_("Temporarily Disabled"),
|
|
_(
|
|
"Too many users signed up recently, so the registration is disabled. Please try back in an hour"
|
|
),
|
|
http_status_code=429,
|
|
)
|
|
|
|
user = frappe.get_doc(
|
|
{
|
|
"doctype": "User",
|
|
"email": email,
|
|
"first_name": escape_html(full_name),
|
|
"verify_terms": verify_terms,
|
|
"user_category": user_category,
|
|
"country": "",
|
|
"enabled": 1,
|
|
"new_password": random_string(10),
|
|
"user_type": "Website User",
|
|
}
|
|
)
|
|
user.flags.ignore_permissions = True
|
|
user.flags.ignore_password_policy = True
|
|
user.insert()
|
|
|
|
# set default signup role as per Portal Settings
|
|
default_role = frappe.db.get_single_value("Portal Settings", "default_role")
|
|
if default_role:
|
|
user.add_roles(default_role)
|
|
|
|
user.add_roles("LMS Student")
|
|
set_country_from_ip(None, user.name)
|
|
|
|
if user.flags.email_sent:
|
|
return 1, _("Please check your email for verification")
|
|
else:
|
|
return 2, _("Please ask your administrator to verify your sign-up")
|
|
|
|
|
|
def set_country_from_ip(login_manager: object = None, user: str = None):
|
|
if not user and login_manager:
|
|
user = login_manager.user
|
|
user_country = frappe.db.get_value("User", user, "country")
|
|
if user_country:
|
|
return
|
|
frappe.db.set_value("User", user, "country", get_country_code())
|
|
return
|
|
|
|
|
|
def on_login(login_manager):
|
|
default_app = frappe.db.get_single_value("System Settings", "default_app")
|
|
if default_app == "lms":
|
|
frappe.local.response["home_page"] = get_lms_route()
|