Add Sahana 00_settings.py modifications, resolves #32
This commit is contained in:
parent
8cb4627e7a
commit
2f6bf8bf94
17
02-sahana.sh
17
02-sahana.sh
@ -13,6 +13,13 @@ git -C /srv/sahana submodule update
|
||||
# Install Sahana
|
||||
git clone --depth 1 https://github.com/sahana/eden.git /srv/sahana/applications/eden
|
||||
|
||||
# Copy Czech language file
|
||||
cp ${SOURCE_DIR}/sahana/srv/sahana/applications/eden/languages/cs.py /srv/sahana/applications/eden/languages/cs.py
|
||||
|
||||
# Symlink fonts with Czech glyphs
|
||||
ln -s /usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf /srv/sahana/applications/eden/static/fonts/DejaVuSerif-Bold.ttf
|
||||
ln -s /usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf /srv/sahana/applications/eden/static/fonts/DejaVuSerif.ttf
|
||||
|
||||
# Create PostgreSQL user and database
|
||||
export SAHANA_PWD=$(head -c 18 /dev/urandom | base64)
|
||||
envsubst <${SOURCE_DIR}/sahana/tmp/sahana-createdb.sql >/tmp/sahana-createdb.sql
|
||||
@ -31,15 +38,7 @@ mkdir -p /srv/sahana/applications/eden/static/cache/chart
|
||||
mkdir -p /srv/sahana/applications/eden/uploads/{gis_cache,images,tracks}
|
||||
export SAHANA_HMAC=$(head -c 18 /dev/urandom | base64)
|
||||
envsubst <${SOURCE_DIR}/sahana/srv/sahana/applications/eden/models/000_config.py >/srv/sahana/applications/eden/models/000_config.py
|
||||
|
||||
# Copy Czech language file
|
||||
cp ${SOURCE_DIR}/sahana/srv/sahana/applications/eden/languages/cs.py /srv/sahana/applications/eden/languages/cs.py
|
||||
|
||||
# Symlink fonts with Czech glyphs
|
||||
ln -s /usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf /srv/sahana/applications/eden/static/fonts/DejaVuSerif-Bold.ttf
|
||||
ln -s /usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf /srv/sahana/applications/eden/static/fonts/DejaVuSerif.ttf
|
||||
|
||||
# Prepare template
|
||||
cp {SOURCE_DIR}/sahana/srv/sahana/applications/eden/models/00_settings.py /srv/sahana/applications/eden/models/00_settings.py
|
||||
export SAHANA_ADMIN_USER=admin@example.com
|
||||
export SAHANA_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
|
||||
cp ${SOURCE_DIR}/sahana/srv/sahana/applications/eden/modules/templates/default/config.py /srv/sahana/applications/eden/modules/templates/default/config.py
|
||||
|
17
03-sambro.sh
17
03-sambro.sh
@ -13,6 +13,13 @@ git -C /srv/sambro submodule update
|
||||
# Install Sahana
|
||||
git clone --depth 1 https://github.com/sahana/eden.git /srv/sambro/applications/eden
|
||||
|
||||
# Copy Czech language file
|
||||
cp ${SOURCE_DIR}/sahana/srv/sahana/applications/eden/languages/cs.py /srv/sambro/applications/eden/languages/cs.py
|
||||
|
||||
# Symlink fonts with Czech glyphs
|
||||
ln -s /usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf /srv/sambro/applications/eden/static/fonts/DejaVuSerif-Bold.ttf
|
||||
ln -s /usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf /srv/sambro/applications/eden/static/fonts/DejaVuSerif.ttf
|
||||
|
||||
# Create PostgreSQL user and database
|
||||
export SAMBRO_PWD=$(head -c 18 /dev/urandom | base64)
|
||||
envsubst <${SOURCE_DIR}/sambro/tmp/sambro-createdb.sql >/tmp/sambro-createdb.sql
|
||||
@ -31,15 +38,7 @@ mkdir -p /srv/sambro/applications/eden/static/cache/chart
|
||||
mkdir -p /srv/sambro/applications/eden/uploads/{gis_cache,images,tracks}
|
||||
export SAMBRO_HMAC=$(head -c 18 /dev/urandom | base64)
|
||||
envsubst <${SOURCE_DIR}/sambro/srv/sambro/applications/eden/models/000_config.py >/srv/sambro/applications/eden/models/000_config.py
|
||||
|
||||
# Copy Czech language file
|
||||
cp ${SOURCE_DIR}/sahana/srv/sahana/applications/eden/languages/cs.py /srv/sambro/applications/eden/languages/cs.py
|
||||
|
||||
# Symlink fonts with Czech glyphs
|
||||
ln -s /usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf /srv/sambro/applications/eden/static/fonts/DejaVuSerif-Bold.ttf
|
||||
ln -s /usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf /srv/sambro/applications/eden/static/fonts/DejaVuSerif.ttf
|
||||
|
||||
# Prepare template
|
||||
cp {SOURCE_DIR}/sahana/srv/sahana/applications/eden/models/00_settings.py /srv/sambro/applications/eden/models/00_settings.py
|
||||
export SAMBRO_ADMIN_USER=admin@example.com
|
||||
export SAMBRO_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
|
||||
cp ${SOURCE_DIR}/sambro/srv/sambro/applications/eden/modules/templates/SAMBRO/config.py /srv/sambro/applications/eden/modules/templates/SAMBRO/config.py
|
||||
|
313
sahana/srv/sahana/applications/eden/models/00_settings.py
Normal file
313
sahana/srv/sahana/applications/eden/models/00_settings.py
Normal file
@ -0,0 +1,313 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Global settings:
|
||||
|
||||
Those which are typically edited during a deployment are in
|
||||
000_config.py & their results parsed into here. Deployers
|
||||
shouldn't typically need to edit any settings here.
|
||||
"""
|
||||
|
||||
# Keep all our configuration options off the main global variables
|
||||
|
||||
# Use response.s3 for one-off variables which are visible in views without explicit passing
|
||||
s3.formats = Storage()
|
||||
|
||||
# Workaround for this Bug in Selenium with FF4:
|
||||
# http://code.google.com/p/selenium/issues/detail?id=1604
|
||||
s3.interactive = settings.get_ui_confirm()
|
||||
|
||||
s3.base_url = "%s/%s" % (settings.get_base_public_url(),
|
||||
appname)
|
||||
s3.download_url = "%s/default/download" % s3.base_url
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Client tests
|
||||
|
||||
# Check whether browser is Mobile & store result in session
|
||||
# - commented-out until we make use of it
|
||||
#if session.s3.mobile is None:
|
||||
# session.s3.mobile = s3base.s3_is_mobile_client(request)
|
||||
#if session.s3.browser is None:
|
||||
# session.s3.browser = s3base.s3_populate_browser_compatibility(request)
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Global variables
|
||||
|
||||
# Strings to i18n
|
||||
# Common Labels
|
||||
#messages["BREADCRUMB"] = ">> "
|
||||
messages["UNKNOWN_OPT"] = "Unknown"
|
||||
messages["NONE"] = ""
|
||||
messages["READ"] = settings.get_ui_label_read()
|
||||
messages["UPDATE"] = settings.get_ui_label_update()
|
||||
messages["DELETE"] = "Delete"
|
||||
messages["COPY"] = "Copy"
|
||||
messages["NOT_APPLICABLE"] = "N/A"
|
||||
messages["ADD_PERSON"] = "Create a Person"
|
||||
messages["ADD_LOCATION"] = "Create Location"
|
||||
messages["SELECT_LOCATION"] = "Select a location"
|
||||
messages["COUNTRY"] = "Country"
|
||||
messages["ORGANISATION"] = "Organization"
|
||||
messages["AUTOCOMPLETE_HELP"] = "Enter some characters to bring up a list of possible matches"
|
||||
|
||||
for u in messages:
|
||||
if isinstance(messages[u], str):
|
||||
globals()[u] = T(messages[u])
|
||||
|
||||
# CRUD Labels
|
||||
s3.crud_labels = Storage(READ=READ,
|
||||
UPDATE=UPDATE,
|
||||
DELETE=DELETE,
|
||||
COPY=COPY,
|
||||
NONE=NONE,
|
||||
)
|
||||
|
||||
# Error Messages
|
||||
ERROR["BAD_RECORD"] = "Record not found!"
|
||||
ERROR["BAD_METHOD"] = "Unsupported method!"
|
||||
ERROR["BAD_FORMAT"] = "Unsupported data format!"
|
||||
ERROR["BAD_REQUEST"] = "Invalid request"
|
||||
ERROR["BAD_SOURCE"] = "Invalid source"
|
||||
ERROR["BAD_TEMPLATE"] = "XSLT stylesheet not found"
|
||||
ERROR["BAD_RESOURCE"] = "Nonexistent or invalid resource"
|
||||
ERROR["DATA_IMPORT_ERROR"] = "Data import error"
|
||||
ERROR["INTEGRITY_ERROR"] = "Integrity error: record can not be deleted while it is referenced by other records"
|
||||
ERROR["METHOD_DISABLED"] = "Method disabled"
|
||||
ERROR["NO_MATCH"] = "No matching element found in the data source"
|
||||
ERROR["NOT_IMPLEMENTED"] = "Not implemented"
|
||||
ERROR["NOT_PERMITTED"] = "Operation not permitted"
|
||||
ERROR["PARSE_ERROR"] = "XML parse error"
|
||||
ERROR["TRANSFORMATION_ERROR"] = "XSLT transformation error"
|
||||
ERROR["UNAUTHORISED"] = "Not Authorized"
|
||||
ERROR["VALIDATION_ERROR"] = "Validation error"
|
||||
|
||||
# To get included in <HEAD>
|
||||
s3.stylesheets = []
|
||||
s3.external_stylesheets = []
|
||||
# To get included at the end of <BODY>
|
||||
s3.scripts = []
|
||||
s3.js_global = []
|
||||
s3.jquery_ready = []
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Languages
|
||||
|
||||
s3.l10n_languages = settings.get_L10n_languages()
|
||||
|
||||
# Default strings are in US English
|
||||
T.current_languages = ("en", "en-us")
|
||||
# Check if user has selected a specific language
|
||||
if get_vars._language:
|
||||
language = get_vars._language
|
||||
session.s3.language = language
|
||||
elif session.s3.language:
|
||||
# Use the last-selected language
|
||||
language = session.s3.language
|
||||
elif auth.is_logged_in():
|
||||
# Use user preference
|
||||
language = auth.user.language
|
||||
else:
|
||||
# Use system default
|
||||
language = settings.get_L10n_default_language()
|
||||
#else:
|
||||
# # Use what browser requests (default web2py behaviour)
|
||||
# T.force(T.http_accept_language)
|
||||
|
||||
# IE doesn't set request.env.http_accept_language
|
||||
#if language != "en":
|
||||
T.force(language)
|
||||
|
||||
# Store for views (e.g. Ext)
|
||||
if language.find("-") == -1:
|
||||
# Ext peculiarities
|
||||
if language == "vi":
|
||||
s3.language = "vn"
|
||||
elif language == "el":
|
||||
s3.language = "el_GR"
|
||||
else:
|
||||
s3.language = language
|
||||
else:
|
||||
lang_parts = language.split("-")
|
||||
s3.language = "%s_%s" % (lang_parts[0], lang_parts[1].upper())
|
||||
|
||||
# List of Languages which use a Right-to-Left script (Arabic, Hebrew, Farsi, Urdu)
|
||||
if language in ("ar", "prs", "ps", "ur"):
|
||||
s3.rtl = True
|
||||
else:
|
||||
s3.rtl = False
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Auth
|
||||
|
||||
_settings = auth.settings
|
||||
_settings.lock_keys = False
|
||||
|
||||
_settings.expiration = 28800 # seconds
|
||||
|
||||
if settings.get_auth_openid():
|
||||
# Requires http://pypi.python.org/pypi/python-openid/
|
||||
try:
|
||||
from gluon.contrib.login_methods.openid_auth import OpenIDAuth
|
||||
openid_login_form = OpenIDAuth(auth)
|
||||
from gluon.contrib.login_methods.extended_login_form import ExtendedLoginForm
|
||||
_settings.login_form = ExtendedLoginForm(auth, openid_login_form,
|
||||
signals=["oid", "janrain_nonce"])
|
||||
except ImportError:
|
||||
session.warning = "Library support not available for OpenID"
|
||||
|
||||
# Allow use of LDAP accounts for login
|
||||
# NB Currently this means that change password should be disabled:
|
||||
#_settings.actions_disabled.append("change_password")
|
||||
# (NB These are not automatically added to PR or to Authenticated role since they enter via the login() method not register())
|
||||
#from gluon.contrib.login_methods.ldap_auth import ldap_auth
|
||||
# Require even alternate login methods to register users 1st
|
||||
#_settings.alternate_requires_registration = True
|
||||
# Active Directory
|
||||
#_settings.login_methods.append(ldap_auth(mode="ad", server="dc.domain.org", base_dn="ou=Users,dc=domain,dc=org"))
|
||||
# or if not wanting local users at all (no passwords saved within DB):
|
||||
#_settings.login_methods = [ldap_auth(mode="ad", server="dc.domain.org", base_dn="ou=Users,dc=domain,dc=org")]
|
||||
# Domino
|
||||
#_settings.login_methods.append(ldap_auth(mode="domino", server="domino.domain.org"))
|
||||
# OpenLDAP
|
||||
#_settings.login_methods.append(ldap_auth(server="directory.sahanafoundation.org", base_dn="ou=users,dc=sahanafoundation,dc=org"))
|
||||
# Allow use of Email accounts for login
|
||||
#_settings.login_methods.append(email_auth("smtp.gmail.com:587", "@gmail.com"))
|
||||
|
||||
# Require captcha verification for registration
|
||||
#auth.settings.captcha = RECAPTCHA(request, public_key="PUBLIC_KEY", private_key="PRIVATE_KEY")
|
||||
# Require Email Verification
|
||||
_settings.registration_requires_verification = settings.get_auth_registration_requires_verification()
|
||||
_settings.on_failed_authorization = URL(c="default", f="user",
|
||||
args="not_authorized")
|
||||
_settings.reset_password_requires_verification = True
|
||||
_settings.verify_email_next = URL(c="default", f="index")
|
||||
|
||||
# Require Admin approval for self-registered users
|
||||
_settings.registration_requires_approval = settings.get_auth_registration_requires_approval()
|
||||
|
||||
# We don't wish to clutter the groups list with 1 per user.
|
||||
_settings.create_user_groups = False
|
||||
# We need to allow basic logins for Webservices
|
||||
_settings.allow_basic_login = True
|
||||
|
||||
_settings.logout_onlogout = s3_auth_on_logout
|
||||
_settings.login_onaccept = s3_auth_on_login
|
||||
_settings.login_next = settings.get_auth_login_next()
|
||||
if settings.has_module("vol") and \
|
||||
settings.get_auth_registration_volunteer():
|
||||
_settings.register_next = URL(c="vol", f="person")
|
||||
|
||||
# Languages available in User Profiles
|
||||
if len(s3.l10n_languages) > 1:
|
||||
_settings.table_user.language.requires = IS_IN_SET(s3.l10n_languages,
|
||||
zero=None)
|
||||
else:
|
||||
field = _settings.table_user.language
|
||||
field.default = s3.l10n_languages.keys()[0]
|
||||
field.readable = False
|
||||
field.writable = False
|
||||
|
||||
_settings.lock_keys = True
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Mail
|
||||
|
||||
# These settings could be made configurable as part of the Messaging Module
|
||||
# - however also need to be used by Auth (order issues)
|
||||
sender = settings.get_mail_sender()
|
||||
if sender:
|
||||
mail.settings.sender = sender
|
||||
mail.settings.server = settings.get_mail_server()
|
||||
mail.settings.tls = settings.get_mail_server_tls()
|
||||
mail_server_login = settings.get_mail_server_login()
|
||||
if mail_server_login:
|
||||
mail.settings.login = mail_server_login
|
||||
# Email settings for registration verification and approval
|
||||
_settings.mailer = mail
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Session
|
||||
|
||||
# Custom Notifications
|
||||
response.error = session.error
|
||||
response.confirmation = session.confirmation
|
||||
response.information = session.information
|
||||
response.warning = session.warning
|
||||
session.error = []
|
||||
session.confirmation = []
|
||||
session.information = []
|
||||
session.warning = []
|
||||
|
||||
# Shortcuts for system role IDs, see modules/s3aaa.py/AuthS3
|
||||
system_roles = auth.get_system_roles()
|
||||
ADMIN = system_roles.ADMIN
|
||||
AUTHENTICATED = system_roles.AUTHENTICATED
|
||||
ANONYMOUS = system_roles.ANONYMOUS
|
||||
EDITOR = system_roles.EDITOR
|
||||
MAP_ADMIN = system_roles.MAP_ADMIN
|
||||
ORG_ADMIN = system_roles.ORG_ADMIN
|
||||
ORG_GROUP_ADMIN = system_roles.ORG_GROUP_ADMIN
|
||||
|
||||
if s3.debug:
|
||||
# Add the developer toolbar from modules/s3/s3utils.py
|
||||
s3.toolbar = s3base.s3_dev_toolbar
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# CRUD
|
||||
|
||||
s3_formstyle = settings.get_ui_formstyle()
|
||||
s3_formstyle_read = settings.get_ui_formstyle_read()
|
||||
s3_formstyle_mobile = s3_formstyle
|
||||
submit_button = T("Save")
|
||||
_crud = s3.crud
|
||||
_crud.formstyle = s3_formstyle
|
||||
_crud.formstyle_read = s3_formstyle_read
|
||||
_crud.submit_button = submit_button
|
||||
# Optional class for Submit buttons
|
||||
#_crud.submit_style = "submit-button"
|
||||
_crud.confirm_delete = T("Do you really want to delete these records?")
|
||||
_crud.archive_not_delete = settings.get_security_archive_not_delete()
|
||||
_crud.navigate_away_confirm = settings.get_ui_navigate_away_confirm()
|
||||
|
||||
# Content Type Headers, default is application/xml for XML formats
|
||||
# and text/x-json for JSON formats, other content types must be
|
||||
# specified here:
|
||||
s3.content_type = Storage(
|
||||
tc = "application/atom+xml", # TableCast feeds
|
||||
rss = "application/rss+xml", # RSS
|
||||
georss = "application/rss+xml", # GeoRSS
|
||||
kml = "application/vnd.google-earth.kml+xml", # KML
|
||||
)
|
||||
|
||||
# JSON Formats
|
||||
s3.json_formats = ["geojson", "s3json"]
|
||||
|
||||
# CSV Formats
|
||||
s3.csv_formats = ["hrf", "s3csv"]
|
||||
|
||||
# Datatables default number of rows per page
|
||||
s3.ROWSPERPAGE = 20
|
||||
|
||||
# Valid Extensions for Image Upload fields
|
||||
s3.IMAGE_EXTENSIONS = ["png", "PNG", "jpg", "JPG", "jpeg", "JPEG"]
|
||||
|
||||
# Default CRUD strings
|
||||
s3.crud_strings = Storage(
|
||||
label_create = T("Add Record"),
|
||||
title_display = T("Record Details"),
|
||||
title_list = T("Records"),
|
||||
title_update = T("Edit Record"),
|
||||
title_map = T("Map"),
|
||||
title_report = T("Report"),
|
||||
label_list_button = T("List Records"),
|
||||
label_delete_button = T("Delete Record"),
|
||||
msg_record_created = T("Record added"),
|
||||
msg_record_modified = T("Record updated"),
|
||||
msg_record_deleted = T("Record deleted"),
|
||||
msg_list_empty = T("No Records currently available"),
|
||||
msg_match = T("Matching Records"),
|
||||
msg_no_match = T("No Matching Records"),
|
||||
)
|
||||
|
||||
# END =========================================================================
|
Loading…
Reference in New Issue
Block a user