Add extension_redirect endpoint (#1093)
* Add extension_redirect endpoint * Add test for extension_redirect
This commit is contained in:
parent
332fcb27d9
commit
ba6c5f93ac
|
@ -3,4 +3,5 @@ from .views import (
|
||||||
final,
|
final,
|
||||||
setup_done,
|
setup_done,
|
||||||
account_activated,
|
account_activated,
|
||||||
|
extension_redirect,
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from enum import Enum
|
||||||
|
from flask import request
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
CHROME_EXTENSION_LINK = "https://chrome.google.com/webstore/detail/simpleloginreceive-send-e/dphilobhebphkdjbpfohgikllaljmgbn"
|
||||||
|
FIREFOX_EXTENSION_LINK = "https://addons.mozilla.org/firefox/addon/simplelogin/"
|
||||||
|
EDGE_EXTENSION_LINK = "https://microsoftedge.microsoft.com/addons/detail/simpleloginreceive-sen/diacfpipniklenphgljfkmhinphjlfff"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class ExtensionInfo:
|
||||||
|
browser: str
|
||||||
|
url: str
|
||||||
|
|
||||||
|
|
||||||
|
class Browser(Enum):
|
||||||
|
Firefox = 1
|
||||||
|
Chrome = 2
|
||||||
|
Edge = 3
|
||||||
|
Other = 4
|
||||||
|
|
||||||
|
|
||||||
|
def is_mobile() -> bool:
|
||||||
|
return request.user_agent.platform in [
|
||||||
|
"android",
|
||||||
|
"blackberry",
|
||||||
|
"ipad",
|
||||||
|
"iphone",
|
||||||
|
"symbian",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def get_browser() -> Browser:
|
||||||
|
if is_mobile():
|
||||||
|
return Browser.Other
|
||||||
|
|
||||||
|
user_agent = request.user_agent
|
||||||
|
if user_agent.browser == "edge":
|
||||||
|
return Browser.Edge
|
||||||
|
elif user_agent.browser in ["chrome", "opera", "webkit"]:
|
||||||
|
return Browser.Chrome
|
||||||
|
elif user_agent.browser in ["mozilla", "firefox"]:
|
||||||
|
return Browser.Firefox
|
||||||
|
return Browser.Other
|
||||||
|
|
||||||
|
|
||||||
|
def get_extension_info() -> Optional[ExtensionInfo]:
|
||||||
|
browser = get_browser()
|
||||||
|
if browser == Browser.Chrome:
|
||||||
|
extension_link = CHROME_EXTENSION_LINK
|
||||||
|
browser_name = "Chrome"
|
||||||
|
elif browser == Browser.Firefox:
|
||||||
|
extension_link = FIREFOX_EXTENSION_LINK
|
||||||
|
browser_name = "Firefox"
|
||||||
|
elif browser == Browser.Edge:
|
||||||
|
extension_link = EDGE_EXTENSION_LINK
|
||||||
|
browser_name = "Edge"
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
return ExtensionInfo(
|
||||||
|
browser=browser_name,
|
||||||
|
url=extension_link,
|
||||||
|
)
|
|
@ -1,63 +1,18 @@
|
||||||
from app.onboarding.base import onboarding_bp
|
from app.onboarding.base import onboarding_bp
|
||||||
from enum import Enum
|
from app.onboarding.utils import get_extension_info
|
||||||
from flask import redirect, render_template, request, url_for
|
from flask import redirect, render_template, url_for
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
|
|
||||||
CHROME_EXTENSION_LINK = "https://chrome.google.com/webstore/detail/simpleloginreceive-send-e/dphilobhebphkdjbpfohgikllaljmgbn"
|
|
||||||
FIREFOX_EXTENSION_LINK = "https://addons.mozilla.org/firefox/addon/simplelogin/"
|
|
||||||
EDGE_EXTENSION_LINK = "https://microsoftedge.microsoft.com/addons/detail/simpleloginreceive-sen/diacfpipniklenphgljfkmhinphjlfff"
|
|
||||||
|
|
||||||
|
|
||||||
class Browser(Enum):
|
|
||||||
Firefox = 1
|
|
||||||
Chrome = 2
|
|
||||||
Edge = 3
|
|
||||||
Other = 4
|
|
||||||
|
|
||||||
|
|
||||||
def is_mobile() -> bool:
|
|
||||||
return request.user_agent.platform in [
|
|
||||||
"android",
|
|
||||||
"blackberry",
|
|
||||||
"ipad",
|
|
||||||
"iphone",
|
|
||||||
"symbian",
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def get_browser() -> Browser:
|
|
||||||
if is_mobile():
|
|
||||||
return Browser.Other
|
|
||||||
|
|
||||||
user_agent = request.user_agent
|
|
||||||
if user_agent.browser == "edge":
|
|
||||||
return Browser.Edge
|
|
||||||
elif user_agent.browser in ["chrome", "opera", "webkit"]:
|
|
||||||
return Browser.Chrome
|
|
||||||
elif user_agent.browser in ["mozilla", "firefox"]:
|
|
||||||
return Browser.Firefox
|
|
||||||
return Browser.Other
|
|
||||||
|
|
||||||
|
|
||||||
@onboarding_bp.route("/account_activated", methods=["GET"])
|
@onboarding_bp.route("/account_activated", methods=["GET"])
|
||||||
@login_required
|
@login_required
|
||||||
def account_activated():
|
def account_activated():
|
||||||
browser = get_browser()
|
info = get_extension_info()
|
||||||
if browser == Browser.Chrome:
|
if not info:
|
||||||
extension_link = CHROME_EXTENSION_LINK
|
|
||||||
browser_name = "Chrome"
|
|
||||||
elif browser == Browser.Firefox:
|
|
||||||
extension_link = FIREFOX_EXTENSION_LINK
|
|
||||||
browser_name = "Firefox"
|
|
||||||
elif browser == Browser.Edge:
|
|
||||||
extension_link = EDGE_EXTENSION_LINK
|
|
||||||
browser_name = "Edge"
|
|
||||||
else:
|
|
||||||
return redirect(url_for("dashboard.index"))
|
return redirect(url_for("dashboard.index"))
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"onboarding/account_activated.html",
|
"onboarding/account_activated.html",
|
||||||
extension_link=extension_link,
|
extension_link=info.url,
|
||||||
browser_name=browser_name,
|
browser_name=info.browser,
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
from app.onboarding.base import onboarding_bp
|
||||||
|
from app.onboarding.utils import get_extension_info
|
||||||
|
from flask import redirect, url_for
|
||||||
|
|
||||||
|
|
||||||
|
@onboarding_bp.route("/extension_redirect", methods=["GET"])
|
||||||
|
def extension_redirect():
|
||||||
|
info = get_extension_info()
|
||||||
|
if not info:
|
||||||
|
return redirect(url_for("dashboard.index"))
|
||||||
|
return redirect(info.url)
|
|
@ -0,0 +1,15 @@
|
||||||
|
from http import HTTPStatus
|
||||||
|
from app.onboarding.utils import CHROME_EXTENSION_LINK
|
||||||
|
|
||||||
|
|
||||||
|
CHROME_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"
|
||||||
|
|
||||||
|
|
||||||
|
def test_extension_redirect_is_working(flask_client):
|
||||||
|
res = flask_client.get(
|
||||||
|
"/onboarding/extension_redirect", headers={"User-Agent": CHROME_USER_AGENT}
|
||||||
|
)
|
||||||
|
assert res.status_code == HTTPStatus.FOUND
|
||||||
|
|
||||||
|
location_header = res.headers.get("Location")
|
||||||
|
assert location_header == CHROME_EXTENSION_LINK
|
Loading…
Reference in New Issue