From 5a24771490b759c15b7cd7a483498624766c25e1 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Mon, 3 Jan 2022 12:50:21 +0000 Subject: [PATCH] first commit --- ainsit/hooks.py | 13 ++ ainsit/public/images/AINS_Favicon.png | Bin 0 -> 4005 bytes ainsit/public/images/AINS_Logo.jpg | Bin 0 -> 5846 bytes ainsit/public/images/AINS_Logo.png | Bin 0 -> 5363 bytes ainsit/www/__init__.py | 0 ainsit/www/__pycache__/__init__.py | 0 ainsit/www/login.html | 208 ++++++++++++++++++++++++++ ainsit/www/login.py | 110 ++++++++++++++ 8 files changed, 331 insertions(+) create mode 100644 ainsit/public/images/AINS_Favicon.png create mode 100644 ainsit/public/images/AINS_Logo.jpg create mode 100644 ainsit/public/images/AINS_Logo.png create mode 100644 ainsit/www/__init__.py create mode 100644 ainsit/www/__pycache__/__init__.py create mode 100644 ainsit/www/login.html create mode 100644 ainsit/www/login.py diff --git a/ainsit/hooks.py b/ainsit/hooks.py index b7e16d7..49fa6b6 100644 --- a/ainsit/hooks.py +++ b/ainsit/hooks.py @@ -8,6 +8,19 @@ app_icon = "octicon octicon-file-directory" app_color = "grey" app_email = "siva@hnsonline.com" app_license = "MIT" +app_logo_url = "/assets/ainsit/images/AINS_Logo.png" + +website_context = { +"favicon": "/assets/ainsit/images/AINS_Favicon.png", +"splash_image": "/assets/ainsit/images/AINS_Logo.png", +"app_name" : "AINS ERP" +} + +# for desk css +app_include_css = ["/assets/css/ainsit.min.css"] +# for web css +web_include_css = ["/assets/css/ainsit.min.css"] + # Includes in # ------------------ diff --git a/ainsit/public/images/AINS_Favicon.png b/ainsit/public/images/AINS_Favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..281025d65683318446bc04a0cd318096756fddda GIT binary patch literal 4005 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 literal 0 HcmV?d00001 diff --git a/ainsit/public/images/AINS_Logo.png b/ainsit/public/images/AINS_Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1bfbd494f523e6ee280481c7dd5d419fe01022f5 GIT binary patch literal 5363 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 +
+ + +
+ +
+ +
+ + + + + + {{ _('Show') }} +
+
+ +

+ {{ _("Forgot Password?") }}

+ + +
+ + + {% if ldap_settings and ldap_settings.enabled %} + + {% endif %} +
+{% endmacro %} + +{% block head_include %} + +{% endblock %} + +{% macro logo_section() %} +
+ + +

{{ _('Login to AINS ERP')}} +

+{% endmacro %} + +{% block page_content %} + +
+ + + + {%- if social_login -%} + + {%- endif -%} + + +
+ +
+
+{% endblock %} + +{% block script %} + +{% endblock %} + +{% block sidebar %}{% endblock %} diff --git a/ainsit/www/login.py b/ainsit/www/login.py new file mode 100644 index 0000000..735eb83 --- /dev/null +++ b/ainsit/www/login.py @@ -0,0 +1,110 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# MIT License. See license.txt + +from __future__ import unicode_literals +import frappe +import frappe.utils +from frappe.utils.oauth import get_oauth2_authorize_url, get_oauth_keys, login_via_oauth2, login_via_oauth2_id_token, login_oauth_user as _login_oauth_user, redirect_post_login +import json +from frappe import _ +from frappe.auth import LoginManager +from frappe.integrations.doctype.ldap_settings.ldap_settings import LDAPSettings +from frappe.utils.password import get_decrypted_password +from frappe.utils.html_utils import get_icon_html +from frappe.integrations.oauth2_logins import decoder_compat +from frappe.website.utils import get_home_page + +no_cache = True + +def get_context(context): + redirect_to = frappe.local.request.args.get("redirect-to") + + if frappe.session.user != "Guest": + if not redirect_to: + if frappe.session.data.user_type=="Website User": + redirect_to = get_home_page() + else: + redirect_to = "/app" + + if redirect_to != 'login': + frappe.local.flags.redirect_location = redirect_to + raise frappe.Redirect + + # get settings from site config + context.no_header = True + context.for_test = 'login.html' + context["title"] = "Login" + context["provider_logins"] = [] + context["disable_signup"] = frappe.utils.cint(frappe.db.get_single_value("Website Settings", "disable_signup")) + context["logo"] = (frappe.db.get_single_value('Website Settings', 'app_logo') or + frappe.get_hooks("app_logo_url")[-1]) + context["app_name"] = (frappe.db.get_single_value('Website Settings', 'app_name') or + frappe.get_system_settings("app_name") or _("Frappe")) + providers = [i.name for i in frappe.get_all("Social Login Key", filters={"enable_social_login":1}, order_by="name")] + for provider in providers: + client_id, base_url = frappe.get_value("Social Login Key", provider, ["client_id", "base_url"]) + client_secret = get_decrypted_password("Social Login Key", provider, "client_secret") + provider_name = frappe.get_value("Social Login Key", provider, "provider_name") + + icon = None + icon_url = frappe.get_value("Social Login Key", provider, "icon") + if icon_url: + if provider_name != "Custom": + icon = "{1}".format(icon_url, provider_name) + else: + icon = get_icon_html(icon_url, small=True) + + if (get_oauth_keys(provider) and client_secret and client_id and base_url): + context.provider_logins.append({ + "name": provider, + "provider_name": provider_name, + "auth_url": get_oauth2_authorize_url(provider, redirect_to), + "icon": icon + }) + context["social_login"] = True + ldap_settings = LDAPSettings.get_ldap_client_settings() + context["ldap_settings"] = ldap_settings + + login_label = [_("Email")] + + if frappe.utils.cint(frappe.get_system_settings("allow_login_using_mobile_number")): + login_label.append(_("Mobile")) + + if frappe.utils.cint(frappe.get_system_settings("allow_login_using_user_name")): + login_label.append(_("Username")) + + context['login_label'] = ' {0} '.format(_('or')).join(login_label) + + return context + +@frappe.whitelist(allow_guest=True) +def login_via_google(code, state): + login_via_oauth2("google", code, state, decoder=decoder_compat) + +@frappe.whitelist(allow_guest=True) +def login_via_github(code, state): + login_via_oauth2("github", code, state) + +@frappe.whitelist(allow_guest=True) +def login_via_facebook(code, state): + login_via_oauth2("facebook", code, state, decoder=decoder_compat) + +@frappe.whitelist(allow_guest=True) +def login_via_frappe(code, state): + login_via_oauth2("frappe", code, state, decoder=decoder_compat) + +@frappe.whitelist(allow_guest=True) +def login_via_office365(code, state): + login_via_oauth2_id_token("office_365", code, state, decoder=decoder_compat) + +@frappe.whitelist(allow_guest=True) +def login_via_token(login_token): + sid = frappe.cache().get_value("login_token:{0}".format(login_token), expires=True) + if not sid: + frappe.respond_as_web_page(_("Invalid Request"), _("Invalid Login Token"), http_status_code=417) + return + + frappe.local.form_dict.sid = sid + frappe.local.login_manager = LoginManager() + + redirect_post_login(desk_user = frappe.db.get_value("User", frappe.session.user, "user_type")=="System User")