This repository was archived by the owner on Jan 30, 2021. It is now read-only.

Repository files navigation

Flask-GoogleAuth

This is a partial port of torando.auth to be used with Flask.

It is small, self contained and do not use any filesystem operations. Great for internal apps.

Written by Alexander Saltanov, inspired by Kenneth Reitz.

The Runscope fork is maintained by Ryan Park.

Changes in Runscope fork

  1. Set the cookie name via a parameter. (Before it was hard-coded to "openid".) This lets us invalidate existing cookies by changing cookie_name. We'll need to do that whenever we make changes to the g.user structure, or when we remove an authorized user from Google Apps. (Once the auth cookie is set, the extension never re-confirms with Google. If a user leaves the company, this is currently the only way to invalidate their existing sessions.)
  2. Require auth for all endpoints in an app, by adding required=True to the auth object constructor.
  3. Adds /auth/ endpoint, which can be used with the nginx module http_auth_request to authenticate other endpoints outside Flask. /auth/ returns a 200 OK response if the user's session can be authenticated, and 401 Unauthorized if it cannot.
  4. Adds token-based authentication for API access, by way of an Authorization header. If session-based auth fails, we check for an Authorization header matching this pattern: "Authorization: token <TOKEN-VALUE>". A list of valid tokens can be specified in the access_tokens parameter when constructing a GoogleAuth or GoogleFederated object.
  5. Adds the ability to specify a list of users who are authorized to use this application. The authorized_users list should contain email addresses or OpenID identity values for the authorized users. If authorized_users is not specified, all Google Accounts for the given domain will be able to use the application.

Usage

Example usage for Google Federated Login.

Routes /login/ and /logout/ will be provided automagically.

Require an account from a given Google Apps domain for your Flask apps:

from flask import Flask, g
from flask_googleauth import GoogleFederated
# Setup Flask
app = Flask(__name__)
app.secret_key = "random secret key"
# Setup Google Federated Auth
auth = GoogleFederated("mokote.com", app)
@app.route("/")
@auth.required
def secret():
# Once user is authenticated, his name and email are accessible as
# g.user.name and g.user.email.
return "You have rights to be here, %s (%s)" % (g.user.name, g.user.email)
app.run()

If you want to authenticate your users with general Google OpenID you should import and use GoogleAuth instead of GoogleFederated:

auth = GoogleAuth(app)

Install

To install Flask-GoogleAuth:

pip install flask-googleauth

Prerequisites

Be sure that your Google Apps domain is enabled to be an OpenID provider under "Advanced tools" → "Federated Login using OpenID".

About

Super simple Google OpenID and Federated Auth for Flask apps.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Jan 30, 2021. It is now read-only.

Repository files navigation

Flask-GoogleAuth

This is a partial port of torando.auth to be used with Flask.

It is small, self contained and do not use any filesystem operations. Great for internal apps.

Written by Alexander Saltanov, inspired by Kenneth Reitz.

The Runscope fork is maintained by Ryan Park.

Changes in Runscope fork

  1. Set the cookie name via a parameter. (Before it was hard-coded to "openid".) This lets us invalidate existing cookies by changing cookie_name. We'll need to do that whenever we make changes to the g.user structure, or when we remove an authorized user from Google Apps. (Once the auth cookie is set, the extension never re-confirms with Google. If a user leaves the company, this is currently the only way to invalidate their existing sessions.)
  2. Require auth for all endpoints in an app, by adding required=True to the auth object constructor.
  3. Adds /auth/ endpoint, which can be used with the nginx module http_auth_request to authenticate other endpoints outside Flask. /auth/ returns a 200 OK response if the user's session can be authenticated, and 401 Unauthorized if it cannot.
  4. Adds token-based authentication for API access, by way of an Authorization header. If session-based auth fails, we check for an Authorization header matching this pattern: "Authorization: token <TOKEN-VALUE>". A list of valid tokens can be specified in the access_tokens parameter when constructing a GoogleAuth or GoogleFederated object.
  5. Adds the ability to specify a list of users who are authorized to use this application. The authorized_users list should contain email addresses or OpenID identity values for the authorized users. If authorized_users is not specified, all Google Accounts for the given domain will be able to use the application.

Usage

Example usage for Google Federated Login.

Routes /login/ and /logout/ will be provided automagically.

Require an account from a given Google Apps domain for your Flask apps:

from flask import Flask, g
from flask_googleauth import GoogleFederated
# Setup Flask
app = Flask(__name__)
app.secret_key = "random secret key"
# Setup Google Federated Auth
auth = GoogleFederated("mokote.com", app)
@app.route("/")
@auth.required
def secret():
# Once user is authenticated, his name and email are accessible as
# g.user.name and g.user.email.
return "You have rights to be here, %s (%s)" % (g.user.name, g.user.email)
app.run()

If you want to authenticate your users with general Google OpenID you should import and use GoogleAuth instead of GoogleFederated:

auth = GoogleAuth(app)

Install

To install Flask-GoogleAuth:

pip install flask-googleauth

Prerequisites

Be sure that your Google Apps domain is enabled to be an OpenID provider under "Advanced tools" → "Federated Login using OpenID".

About

Super simple Google OpenID and Federated Auth for Flask apps.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 30, 2021. It is now read-only.

Repository files navigation

Flask-GoogleAuth

This is a partial port of torando.auth to be used with Flask.

It is small, self contained and do not use any filesystem operations. Great for internal apps.

Written by Alexander Saltanov, inspired by Kenneth Reitz.

The Runscope fork is maintained by Ryan Park.

Changes in Runscope fork

  1. Set the cookie name via a parameter. (Before it was hard-coded to "openid".) This lets us invalidate existing cookies by changing cookie_name. We'll need to do that whenever we make changes to the g.user structure, or when we remove an authorized user from Google Apps. (Once the auth cookie is set, the extension never re-confirms with Google. If a user leaves the company, this is currently the only way to invalidate their existing sessions.)
  2. Require auth for all endpoints in an app, by adding required=True to the auth object constructor.
  3. Adds /auth/ endpoint, which can be used with the nginx module http_auth_request to authenticate other endpoints outside Flask. /auth/ returns a 200 OK response if the user's session can be authenticated, and 401 Unauthorized if it cannot.
  4. Adds token-based authentication for API access, by way of an Authorization header. If session-based auth fails, we check for an Authorization header matching this pattern: "Authorization: token <TOKEN-VALUE>". A list of valid tokens can be specified in the access_tokens parameter when constructing a GoogleAuth or GoogleFederated object.
  5. Adds the ability to specify a list of users who are authorized to use this application. The authorized_users list should contain email addresses or OpenID identity values for the authorized users. If authorized_users is not specified, all Google Accounts for the given domain will be able to use the application.

Usage

Example usage for Google Federated Login.

Routes /login/ and /logout/ will be provided automagically.

Require an account from a given Google Apps domain for your Flask apps:

from flask import Flask, g
from flask_googleauth import GoogleFederated
# Setup Flask
app = Flask(__name__)
app.secret_key = "random secret key"
# Setup Google Federated Auth
auth = GoogleFederated("mokote.com", app)
@app.route("/")
@auth.required
def secret():
# Once user is authenticated, his name and email are accessible as
# g.user.name and g.user.email.
return "You have rights to be here, %s (%s)" % (g.user.name, g.user.email)
app.run()

If you want to authenticate your users with general Google OpenID you should import and use GoogleAuth instead of GoogleFederated:

auth = GoogleAuth(app)

Install

To install Flask-GoogleAuth:

pip install flask-googleauth

Prerequisites

Be sure that your Google Apps domain is enabled to be an OpenID provider under "Advanced tools" → "Federated Login using OpenID".

About

Super simple Google OpenID and Federated Auth for Flask apps.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 30, 2021. It is now read-only.

Repository files navigation

Flask-GoogleAuth

This is a partial port of torando.auth to be used with Flask.

It is small, self contained and do not use any filesystem operations. Great for internal apps.

Written by Alexander Saltanov, inspired by Kenneth Reitz.

The Runscope fork is maintained by Ryan Park.

Changes in Runscope fork

  1. Set the cookie name via a parameter. (Before it was hard-coded to "openid".) This lets us invalidate existing cookies by changing cookie_name. We'll need to do that whenever we make changes to the g.user structure, or when we remove an authorized user from Google Apps. (Once the auth cookie is set, the extension never re-confirms with Google. If a user leaves the company, this is currently the only way to invalidate their existing sessions.)
  2. Require auth for all endpoints in an app, by adding required=True to the auth object constructor.
  3. Adds /auth/ endpoint, which can be used with the nginx module http_auth_request to authenticate other endpoints outside Flask. /auth/ returns a 200 OK response if the user's session can be authenticated, and 401 Unauthorized if it cannot.
  4. Adds token-based authentication for API access, by way of an Authorization header. If session-based auth fails, we check for an Authorization header matching this pattern: "Authorization: token <TOKEN-VALUE>". A list of valid tokens can be specified in the access_tokens parameter when constructing a GoogleAuth or GoogleFederated object.
  5. Adds the ability to specify a list of users who are authorized to use this application. The authorized_users list should contain email addresses or OpenID identity values for the authorized users. If authorized_users is not specified, all Google Accounts for the given domain will be able to use the application.

Usage

Example usage for Google Federated Login.

Routes /login/ and /logout/ will be provided automagically.

Require an account from a given Google Apps domain for your Flask apps:

from flask import Flask, g
from flask_googleauth import GoogleFederated
# Setup Flask
app = Flask(__name__)
app.secret_key = "random secret key"
# Setup Google Federated Auth
auth = GoogleFederated("mokote.com", app)
@app.route("/")
@auth.required
def secret():
# Once user is authenticated, his name and email are accessible as
# g.user.name and g.user.email.
return "You have rights to be here, %s (%s)" % (g.user.name, g.user.email)
app.run()

If you want to authenticate your users with general Google OpenID you should import and use GoogleAuth instead of GoogleFederated:

auth = GoogleAuth(app)

Install

To install Flask-GoogleAuth:

pip install flask-googleauth

Prerequisites

Be sure that your Google Apps domain is enabled to be an OpenID provider under "Advanced tools" → "Federated Login using OpenID".

About

Super simple Google OpenID and Federated Auth for Flask apps.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Jan 30, 2021. It is now read-only.

Repository files navigation

Flask-GoogleAuth

This is a partial port of torando.auth to be used with Flask.

It is small, self contained and do not use any filesystem operations. Great for internal apps.

Written by Alexander Saltanov, inspired by Kenneth Reitz.

The Runscope fork is maintained by Ryan Park.

Changes in Runscope fork

  1. Set the cookie name via a parameter. (Before it was hard-coded to "openid".) This lets us invalidate existing cookies by changing cookie_name. We'll need to do that whenever we make changes to the g.user structure, or when we remove an authorized user from Google Apps. (Once the auth cookie is set, the extension never re-confirms with Google. If a user leaves the company, this is currently the only way to invalidate their existing sessions.)
  2. Require auth for all endpoints in an app, by adding required=True to the auth object constructor.
  3. Adds /auth/ endpoint, which can be used with the nginx module http_auth_request to authenticate other endpoints outside Flask. /auth/ returns a 200 OK response if the user's session can be authenticated, and 401 Unauthorized if it cannot.
  4. Adds token-based authentication for API access, by way of an Authorization header. If session-based auth fails, we check for an Authorization header matching this pattern: "Authorization: token <TOKEN-VALUE>". A list of valid tokens can be specified in the access_tokens parameter when constructing a GoogleAuth or GoogleFederated object.
  5. Adds the ability to specify a list of users who are authorized to use this application. The authorized_users list should contain email addresses or OpenID identity values for the authorized users. If authorized_users is not specified, all Google Accounts for the given domain will be able to use the application.

Usage

Example usage for Google Federated Login.

Routes /login/ and /logout/ will be provided automagically.

Require an account from a given Google Apps domain for your Flask apps:

from flask import Flask, g
from flask_googleauth import GoogleFederated
# Setup Flask
app = Flask(__name__)
app.secret_key = "random secret key"
# Setup Google Federated Auth
auth = GoogleFederated("mokote.com", app)
@app.route("/")
@auth.required
def secret():
# Once user is authenticated, his name and email are accessible as
# g.user.name and g.user.email.
return "You have rights to be here, %s (%s)" % (g.user.name, g.user.email)
app.run()

If you want to authenticate your users with general Google OpenID you should import and use GoogleAuth instead of GoogleFederated:

auth = GoogleAuth(app)

Install

To install Flask-GoogleAuth:

pip install flask-googleauth

Prerequisites

Be sure that your Google Apps domain is enabled to be an OpenID provider under "Advanced tools" → "Federated Login using OpenID".

About

Super simple Google OpenID and Federated Auth for Flask apps.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 30, 2021. It is now read-only.

Repository files navigation

Flask-GoogleAuth

This is a partial port of torando.auth to be used with Flask.

It is small, self contained and do not use any filesystem operations. Great for internal apps.

Written by Alexander Saltanov, inspired by Kenneth Reitz.

The Runscope fork is maintained by Ryan Park.

Changes in Runscope fork

  1. Set the cookie name via a parameter. (Before it was hard-coded to "openid".) This lets us invalidate existing cookies by changing cookie_name. We'll need to do that whenever we make changes to the g.user structure, or when we remove an authorized user from Google Apps. (Once the auth cookie is set, the extension never re-confirms with Google. If a user leaves the company, this is currently the only way to invalidate their existing sessions.)
  2. Require auth for all endpoints in an app, by adding required=True to the auth object constructor.
  3. Adds /auth/ endpoint, which can be used with the nginx module http_auth_request to authenticate other endpoints outside Flask. /auth/ returns a 200 OK response if the user's session can be authenticated, and 401 Unauthorized if it cannot.
  4. Adds token-based authentication for API access, by way of an Authorization header. If session-based auth fails, we check for an Authorization header matching this pattern: "Authorization: token <TOKEN-VALUE>". A list of valid tokens can be specified in the access_tokens parameter when constructing a GoogleAuth or GoogleFederated object.
  5. Adds the ability to specify a list of users who are authorized to use this application. The authorized_users list should contain email addresses or OpenID identity values for the authorized users. If authorized_users is not specified, all Google Accounts for the given domain will be able to use the application.

Usage

Example usage for Google Federated Login.

Routes /login/ and /logout/ will be provided automagically.

Require an account from a given Google Apps domain for your Flask apps:

from flask import Flask, g
from flask_googleauth import GoogleFederated
# Setup Flask
app = Flask(__name__)
app.secret_key = "random secret key"
# Setup Google Federated Auth
auth = GoogleFederated("mokote.com", app)
@app.route("/")
@auth.required
def secret():
# Once user is authenticated, his name and email are accessible as
# g.user.name and g.user.email.
return "You have rights to be here, %s (%s)" % (g.user.name, g.user.email)
app.run()

If you want to authenticate your users with general Google OpenID you should import and use GoogleAuth instead of GoogleFederated:

auth = GoogleAuth(app)

Install

To install Flask-GoogleAuth:

pip install flask-googleauth

Prerequisites

Be sure that your Google Apps domain is enabled to be an OpenID provider under "Advanced tools" → "Federated Login using OpenID".

About

Super simple Google OpenID and Federated Auth for Flask apps.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jan 30, 2021. It is now read-only.

Repository files navigation

Flask-GoogleAuth

This is a partial port of torando.auth to be used with Flask.

It is small, self contained and do not use any filesystem operations. Great for internal apps.

Written by Alexander Saltanov, inspired by Kenneth Reitz.

The Runscope fork is maintained by Ryan Park.

Changes in Runscope fork

  1. Set the cookie name via a parameter. (Before it was hard-coded to "openid".) This lets us invalidate existing cookies by changing cookie_name. We'll need to do that whenever we make changes to the g.user structure, or when we remove an authorized user from Google Apps. (Once the auth cookie is set, the extension never re-confirms with Google. If a user leaves the company, this is currently the only way to invalidate their existing sessions.)
  2. Require auth for all endpoints in an app, by adding required=True to the auth object constructor.
  3. Adds /auth/ endpoint, which can be used with the nginx module http_auth_request to authenticate other endpoints outside Flask. /auth/ returns a 200 OK response if the user's session can be authenticated, and 401 Unauthorized if it cannot.
  4. Adds token-based authentication for API access, by way of an Authorization header. If session-based auth fails, we check for an Authorization header matching this pattern: "Authorization: token <TOKEN-VALUE>". A list of valid tokens can be specified in the access_tokens parameter when constructing a GoogleAuth or GoogleFederated object.
  5. Adds the ability to specify a list of users who are authorized to use this application. The authorized_users list should contain email addresses or OpenID identity values for the authorized users. If authorized_users is not specified, all Google Accounts for the given domain will be able to use the application.

Usage

Example usage for Google Federated Login.

Routes /login/ and /logout/ will be provided automagically.

Require an account from a given Google Apps domain for your Flask apps:

from flask import Flask, g
from flask_googleauth import GoogleFederated
# Setup Flask
app = Flask(__name__)
app.secret_key = "random secret key"
# Setup Google Federated Auth
auth = GoogleFederated("mokote.com", app)
@app.route("/")
@auth.required
def secret():
# Once user is authenticated, his name and email are accessible as
# g.user.name and g.user.email.
return "You have rights to be here, %s (%s)" % (g.user.name, g.user.email)
app.run()

If you want to authenticate your users with general Google OpenID you should import and use GoogleAuth instead of GoogleFederated:

auth = GoogleAuth(app)

Install

To install Flask-GoogleAuth:

pip install flask-googleauth

Prerequisites

Be sure that your Google Apps domain is enabled to be an OpenID provider under "Advanced tools" → "Federated Login using OpenID".

About

Super simple Google OpenID and Federated Auth for Flask apps.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Jan 30, 2021. It is now read-only.

Repository files navigation

Flask-GoogleAuth

This is a partial port of torando.auth to be used with Flask.

It is small, self contained and do not use any filesystem operations. Great for internal apps.

Written by Alexander Saltanov, inspired by Kenneth Reitz.

The Runscope fork is maintained by Ryan Park.

Changes in Runscope fork

  1. Set the cookie name via a parameter. (Before it was hard-coded to "openid".) This lets us invalidate existing cookies by changing cookie_name. We'll need to do that whenever we make changes to the g.user structure, or when we remove an authorized user from Google Apps. (Once the auth cookie is set, the extension never re-confirms with Google. If a user leaves the company, this is currently the only way to invalidate their existing sessions.)
  2. Require auth for all endpoints in an app, by adding required=True to the auth object constructor.
  3. Adds /auth/ endpoint, which can be used with the nginx module http_auth_request to authenticate other endpoints outside Flask. /auth/ returns a 200 OK response if the user's session can be authenticated, and 401 Unauthorized if it cannot.
  4. Adds token-based authentication for API access, by way of an Authorization header. If session-based auth fails, we check for an Authorization header matching this pattern: "Authorization: token <TOKEN-VALUE>". A list of valid tokens can be specified in the access_tokens parameter when constructing a GoogleAuth or GoogleFederated object.
  5. Adds the ability to specify a list of users who are authorized to use this application. The authorized_users list should contain email addresses or OpenID identity values for the authorized users. If authorized_users is not specified, all Google Accounts for the given domain will be able to use the application.

Usage

Example usage for Google Federated Login.

Routes /login/ and /logout/ will be provided automagically.

Require an account from a given Google Apps domain for your Flask apps:

from flask import Flask, g
from flask_googleauth import GoogleFederated
# Setup Flask
app = Flask(__name__)
app.secret_key = "random secret key"
# Setup Google Federated Auth
auth = GoogleFederated("mokote.com", app)
@app.route("/")
@auth.required
def secret():
# Once user is authenticated, his name and email are accessible as
# g.user.name and g.user.email.
return "You have rights to be here, %s (%s)" % (g.user.name, g.user.email)
app.run()

If you want to authenticate your users with general Google OpenID you should import and use GoogleAuth instead of GoogleFederated:

auth = GoogleAuth(app)

Install

To install Flask-GoogleAuth:

pip install flask-googleauth

Prerequisites

Be sure that your Google Apps domain is enabled to be an OpenID provider under "Advanced tools" → "Federated Login using OpenID".

About

Super simple Google OpenID and Federated Auth for Flask apps.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages