| #!/usr/bin/env python3 |
| # -*- coding: utf-8 -*- |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| class ServerConfig: |
| port: int |
| ip: str |
| |
| def __init__(self, subyaml: dict): |
| self.ip = subyaml.get("bind", "0.0.0.0") |
| self.port = int(subyaml.get("port", 8080)) |
| |
| |
| class TaskConfig: |
| refresh_rate: int |
| |
| def __init__(self, subyaml: dict): |
| self.refresh_rate = int(subyaml.get("refresh_rate", 150)) |
| |
| |
| class UIConfig: |
| wordcloud: bool |
| mailhost: str |
| sender_domains: str |
| traceback: bool |
| mgmt_enabled: bool |
| focus_domain: str |
| fully_delete: bool |
| |
| def __init__(self, subyaml: dict): |
| self.wordcloud = bool(subyaml.get("wordcloud", False)) |
| self.mailhost = subyaml.get("mailhost", "") # Default to nothing (disabled) |
| self.sender_domains = subyaml.get( |
| "sender_domains", "" |
| ) # Default to nothing (disabled) |
| # Default to spitting out traceback to web clients |
| # Set to false in yaml to redirect to stderr instead. |
| self.traceback = subyaml.get("traceback", True) |
| self.mgmt_enabled = bool(subyaml.get("mgmtconsole", False)) # Whether to enable online mgmt component or not |
| self.fully_delete = bool(subyaml.get("allow_delete", False)) # Whether to enforce full expunging of deleted emails |
| # Default to all lists, "*". Use "" for host. Wildcard subdomain globs also supported |
| self.focus_domain = subyaml.get("focus_domain", "*") |
| |
| |
| class OAuthConfig: |
| authoritative_domains: list |
| admins: list |
| google_client_id: str |
| github_client_id: str |
| github_client_secret: str |
| |
| def __init__(self, subyaml: dict): |
| self.authoritative_domains = subyaml.get("authoritative_domains", []) |
| self.admins = subyaml.get("admins", []) |
| self.google_client_id = subyaml.get("google_client_id", "") |
| self.github_client_id = subyaml.get("github_client_id", "") |
| self.github_client_secret = subyaml.get("github_client_secret", "") |
| |
| |
| class DBConfig: |
| dburl: str |
| hostname: str |
| port: int |
| secure: bool |
| url_prefix: str |
| db_prefix: str |
| max_hits: int |
| max_lists: int |
| pool_size: int |
| |
| def __init__(self, subyaml: dict): |
| self.dburl = str(subyaml.get("dburl", "")) |
| self.hostname = str(subyaml.get("server", "localhost")) |
| self.port = int(subyaml.get("port", 9200)) |
| self.secure = bool(subyaml.get("secure", False)) |
| self.url_prefix = subyaml.get("url_prefix", "") |
| self.db_prefix = str(subyaml.get("db_prefix", "ponymail")) |
| self.max_hits = int(subyaml.get("max_hits", 5000)) |
| self.max_lists = int(subyaml.get("max_lists", 8192)) |
| self.pool_size = int(subyaml.get("pool_size", 15)) |
| |
| |
| class Configuration: |
| server: ServerConfig |
| database: DBConfig |
| tasks: TaskConfig |
| oauth: OAuthConfig |
| ui: UIConfig |
| |
| def __init__(self, yml: dict): |
| self.server = ServerConfig(yml.get("server", {})) |
| self.database = DBConfig(yml.get("database", {})) |
| self.tasks = TaskConfig(yml.get("tasks", {})) |
| self.oauth = OAuthConfig(yml.get("oauth", {})) |
| self.ui = UIConfig(yml.get("ui", {})) |
| |
| |
| class InterData: |
| """ |
| A mix of various global variables used throughout processes |
| """ |
| |
| lists: dict |
| sessions: dict |
| activity: dict |
| |
| def __init__(self): |
| self.lists = {} |
| self.sessions = {} |
| self.activity = {} |