config.py (268 lines of code) (raw):
# Environment loading borrowed from
# https://github.com/marchibbins/teela/blob/9d65abaff804f9a79483529ed194581feafdd745/teela/config.py
import os
from enum import Enum
from dotenv import load_dotenv
from pathlib import Path
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)
def env_var(key, default=None):
""" Parse environment variable """
val = os.getenv(key, default)
if val == 'True':
val = True
elif val == 'False':
val = False
return val
class ReturnCodes(Enum):
PERMANENT = 301
TEMPORARY = 307
class Config(object):
"""
Configure the application with environment variables
"""
DEBUG = env_var('DEBUG', default=False)
FORCE_SSL = env_var('FORCE_SSL', default=False)
# Redirect Rules
# The key is the host header to match
# At [0]: the redirect target, without trailing slash, prefixed by https
# At [1]: the HTTP status code to return - use the ReturnCodes enum
# At [2]: a Tuple, indicating if the path and query are to be preserved ( {path}, {query} )
REDIRECT_RULES = {
'mofo-redirector.herokuapp.com': (
'https://www.mozillafoundation.org',
ReturnCodes.TEMPORARY,
(True, True),
),
'compass.mozillafoundation.org': (
'https://www.mozillafoundation.org/404/',
ReturnCodes.PERMANENT,
(False, False),
),
'movementbuilding.mozillafoundation.org': (
'https://www.mozillafoundation.org/en/research/library/'
'movement-building-landscape-analysis-acting-on-shared-purpose',
ReturnCodes.PERMANENT,
(False, False),
),
'chat.mozillafoundation.org': (
'https://mozfest.slack.com',
ReturnCodes.PERMANENT,
(False, False),
),
'aidatabase.mozilla.org': (
'https://www.mozillafoundation.org/en/insights/',
ReturnCodes.PERMANENT,
(False, False),
),
'donate.mozilla.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(True, True),
),
'www.hivelearningnetwork.org': (
'https://www.mozillafoundation.org/en/artifacts/hive-learning-networks',
ReturnCodes.PERMANENT,
(False, False)
),
'hivelearningnetwork.org': (
'https://www.mozillafoundation.org/en/artifacts/hive-learning-networks',
ReturnCodes.PERMANENT,
(False, False)
),
'www.hivelearningnetworks.org': (
'https://www.mozillafoundation.org/en/artifacts/hive-learning-networks',
ReturnCodes.PERMANENT,
(False, False)
),
'hivelearningnetworks.org': (
'https://www.mozillafoundation.org/en/artifacts/hive-learning-networks',
ReturnCodes.PERMANENT,
(False, False)
),
'validator.openbadges.org': (
'https://openbadgesvalidator.imsglobal.org',
ReturnCodes.PERMANENT,
(True, True)
),
'indicators.internethealthreport.org': (
'https://internethealthreport.consider.it',
ReturnCodes.PERMANENT,
(False, False)
),
'www.typeoutloud.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(False, False)
),
'science.typeoutloud.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(False, False)
),
'www.responsiblecs.org': (
'https://www.mozillafoundation.org/initiatives/responsible-cs/',
ReturnCodes.PERMANENT,
(False, True)
),
'www.responsiblecschallenge.org': (
'https://www.mozillafoundation.org/initiatives/responsible-cs/',
ReturnCodes.PERMANENT,
(False, True)
),
'www.iheartopendata.org': (
'https://www.mozillafoundation.org/campaigns/i-heart-open-data/',
ReturnCodes.PERMANENT,
(False, True)
),
'fbsurvey.mozillafoundation.org': (
'https://github.com/mozilla/shinysurvey/',
ReturnCodes.TEMPORARY,
(False, True)
),
'app.mozillafestival.org': (
'https://guidebook.com/guide/147793/',
ReturnCodes.PERMANENT,
(False, False)
),
'forum.learning.mozilla.org': (
'https://discourse.mozilla.org/',
ReturnCodes.PERMANENT,
(False, False)
),
'discourse.mozilla-advocacy.org': (
'https://discourse.mozilla.org/',
ReturnCodes.PERMANENT,
(False, False)
),
'forum.mozillascience.org': (
'https://discourse.mozilla.org/',
ReturnCodes.PERMANENT,
(False, False)
),
'popcorn.webmaker.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(False, False)
),
'postcrimes.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(False, False)
),
'www.postcrimes.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(False, False)
),
'mozillapopcorn.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(False, False)
),
'www.mozillapopcorn.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(False, False)
),
'maker.mozillapopcorn.org': (
'https://www.mozillafoundation.org/en/artifacts/popcorn-maker',
ReturnCodes.PERMANENT,
(False, False)
),
'static.mozillapopcorn.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(False, False)
),
'tedglobal.mozillapopcorn.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(False, False)
),
'directory.hivelearningnetworks.org': (
'https://www.mozillafoundation.org/en/artifacts/hive-learning-networks/',
ReturnCodes.PERMANENT,
(False, False)
),
'discourse.mozillafestival.org': (
'https://discourse-mozfest-redirect.netlify.com',
ReturnCodes.PERMANENT,
(True, True)
),
'firefox10.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(False, False)
),
'www.firefox10.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(False, False)
),
'www.drumbeat.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(False, False)
),
# Removing to stop scraper DDoSing MoFo. The Thimble project was archived 2019.
#
# 'thimble.mozilla.org': (
# 'https://www.mozillafoundation.org/en/artifacts/thimble/',
# ReturnCodes.PERMANENT,
# (False, False)
# ),
# 'thimble.webmaker.org': (
# 'https://www.mozillafoundation.org/en/artifacts/thimble/',
# ReturnCodes.PERMANENT,
# (False, False)
# ),
'www.mozillathimblelivepreview.net': (
'https://www.mozillafoundation.org/en/artifacts/thimble/',
ReturnCodes.PERMANENT,
(False, False)
),
'goggles.mozilla.org': (
'https://www.mozillafoundation.org/en/artifacts/x-ray-goggles/',
ReturnCodes.PERMANENT,
(False, False)
),
'goggles.webmaker.org': (
'https://www.mozillafoundation.org/en/artifacts/x-ray-goggles/',
ReturnCodes.PERMANENT,
(False, False)
),
# Removing to stop scraper DDoSing MoFo. The Thimble project was archived 2019.
#
# 'www.thimbleprojects.org': (
# 'https://www.mozillafoundation.org/en/artifacts/thimble/',
# ReturnCodes.PERMANENT,
# (False, False)
# ),
'give.mozilla.org': (
'https://donate.mozilla.org',
ReturnCodes.PERMANENT,
(True, True)
),
'learning.mozilla.org': (
'https://www.mozillafoundation.org/en/opportunity/web-literacy/',
ReturnCodes.PERMANENT,
(False, True)
),
'teach.mozilla.org': (
'https://www.mozillafoundation.org/en/opportunity/web-literacy/',
ReturnCodes.PERMANENT,
(False, True)
),
'www.webmaker.org': (
'https://www.mozillafoundation.org/en/artifacts/webmaker/',
ReturnCodes.PERMANENT,
(False, True)
),
'beta.webmaker.org': (
'https://www.mozillafoundation.org/en/artifacts/webmaker/',
ReturnCodes.PERMANENT,
(False, True)
),
'events.webmaker.org': (
'https://www.mozillafoundation.org/en/artifacts/webmaker/',
ReturnCodes.PERMANENT,
(False, True)
),
'science.mozilla.org': (
'https://wiki.mozilla.org/ScienceLab',
ReturnCodes.PERMANENT,
(False, False)
),
'schedule.mozillafestival.org': (
'https://www.mozillafestival.org/en/the-mozfest-plaza-is-closed/' \
'?utm_source=schedule&utm_medium=redirect&utm_campaign=plaza_closure',
ReturnCodes.TEMPORARY,
(False, False)
),
'www.mozillapulse.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(False, False)
),
'foundation.mozilla.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(True, True),
),
'mozillafoundation.org': (
'https://www.mozillafoundation.org',
ReturnCodes.PERMANENT,
(True, True),
)
}