# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Defines settings for the avm99963 bugs monorail instance."""
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import

import os
import six

from google.appengine.api import app_identity

from framework import framework_constants
from mrproto import project_pb2
from mrproto import site_pb2


# This file is divided into the following parts:
# 1. Settings you must edit before deploying your site.
# 2. Settings you would edit on certain occasions while maintaining your site.
# 3. Settings enable specific features.
# 4. Settings that you can usually leave as-is.

# TODO(jrobbins): Store these settings in the database and implement
# servlets for domain admins to edit them without needing to redeploy the
# app.


####
# Part 1: settings that you must edit before deploying your site.

# Email address that is offered to users who might need help using the tool.
feedback_email = 'me+monorail.feedback@avm99963.com'

# For debugging when running in staging: send all outbound
# email to this address rather than to the actual address that
# it would normally be sent to.
send_all_email_to = 'monorail-staging-emails+all+%(user)s+%(domain)s@dontsend.avm99963.com'

# For debugging when running the server locally: send all outbound
# email to this address rather than to the actual address that
# it would normally be sent to.
send_local_email_to = (
    send_all_email_to or
    'monorail-staging-emails+dev+%(user)s+%(domain)s@dontsend.avm99963.com')

# User to send emails from Monorail as. The reply_to sections of emails will be
# set to appspotmail addresses.
# Note: If configuring a new monorail instance without DNS records and reserved
#       email addresses then setting these values to
#       'reply@${app_id}.appspotmail.com' and 'noreply@{app_id}.appspotmail.com'
#       is likely the best option.

# Old values (TODO: set up DNS records and uncomment this):
#send_email_as_format = 'monorail@%(domain)s'
#send_noreply_email_as_format = 'monorail+noreply@%(domain)s'

send_email_as_format = 'reply@avm99963-bugs.appspotmail.com'
send_noreply_email_as_format = 'noreply@avm99963-bugs.appspotmail.com'

# The default is to look for a database named "monorail" in replicas
# named "replica-00" .. "replica-09"
# Replica names for -prod, -staging, and -dev may diverge if replicas ever fail.
# In such cases the db_replica_names list can be overwritten in Part 5.
db_database_name = 'monorail'
db_primary_name = 'primary'
db_replica_prefix = 'replica'
db_region = 'europe-west1'

# The default connection pool size for mysql connections.
db_cnxn_pool_size = 20

# The number of logical database shards used.  Each replica is complete copy
# of the primary, so any replica DB can answer queries about any logical shard.
num_logical_shards = 1

# "Learn more" link for the site home page
learn_more_link = None

# Site name, displayed above the search box on the site home page.
site_name = 'avm99963 bugs'

# Who is allowed to create new projects?  Set to ANYONE or ADMIN_ONLY.
project_creation_restriction = site_pb2.UserTypeRestriction.ADMIN_ONLY

# Default access level when creating a new project.
default_access_level = project_pb2.ProjectAccess.ANYONE

# Possible access levels to offer when creating a new project.
allowed_access_levels = [
    project_pb2.ProjectAccess.ANYONE,
    project_pb2.ProjectAccess.MEMBERS_ONLY]

# Who is allowed to create user groups?  Set to ANYONE or ADMIN_ONLY.
group_creation_restriction = site_pb2.UserTypeRestriction.ADMIN_ONLY

# Who is allowed to create hotlists? Set to ANYONE or ADMIN_ONLY.
hotlist_creation_restriction = site_pb2.UserTypeRestriction.ANYONE

# Text that mentions these words as shorthand host names will be autolinked
# regardless of the lack of "https://" or ".com".
autolink_shorthand_hosts = [
    'go',
    ]
autolink_numeric_shorthand_hosts = []


# We only allow self-service account linking invites when the child account is
# linking to a parent account in an allowed domain.
linkable_domains = {
  # Child account domain: [parent account domains]
}


####
# Part 2: Settings you would edit on certain occasions.

# Read-only mode prevents changes while we make server-side changes.
read_only = False

# Timestamp used to notify users when the read only mode or other status
# described in the banner message takes effect.  It is
# expressed as a tuple of ints: (year, month, day[, hour[, minute[, second]]])
# e.g. (2009, 3, 20, 21, 45) represents March 20 2009 9:45PM UTC.
banner_time = None

# Display a site maintenance banner on every monorail page.
banner_message = ''

# User accounts with email addresses at these domains are all banned.
banned_user_domains = []

# We use this for specifying cloud task parent
CLOUD_TASKS_REGION = 'europe-west1'

# We only send subscription notifications to users who have visited the
# site in the last 6 months.
subscription_timeout_secs = 180 * framework_constants.SECS_PER_DAY

# Location of GCS spam classification staging trainer. Whenever the training
# code is changed, this should be updated to point to the new package.
trainer_staging = ('gs://monorail-staging-mlengine/spam_trainer_1517870972/'
                   'packages/befc9b29d9beb7e89d509bd1e9866183c138e3a32317cc'
                   'e253342ac9f8e7c375/trainer-0.1.tar.gz')

# Location of GCS spam classification prod trainer. Whenever the training
# code is changed, this should be updated to point to the new package.
trainer_prod = ('gs://monorail-prod-mlengine/spam_trainer_1521755738/packages/'
                '3339dfcb5d7b6c9d714fb9b332fd72d05823e9a1850ceaf16533a6124bcad'
                '6fd/trainer-0.1.tar.gz')
####
# Part 3: Settings that enable specific features

# Enables "My projects" drop down menu
enable_my_projects_menu = True

# Enables stars in the UI for projects
enable_project_stars = True

# Enables stars in the UI for users
enable_user_stars = True

# Enable quick edit mode in issue peek dialog and show dialog on hover
enable_quick_edit = True


####
# Part 4: Settings that you can usually leave as-is.

# local_mode makes the server slower and more dynamic for easier debugging.
# E.g., template files are reloaded on each request.
unit_test_mode = os.environ['SERVER_SOFTWARE'].startswith('test')
local_mode = not (os.getenv('GAE_ENV') == 'standard' or unit_test_mode)

# If we assume 1KB each, then this would be 10 MB for this cache in frontends
# that have only 1024 MB total.
issue_cache_max_size = 10 * 1000

# If we assume 1KB each, then this would be 10 MB for this cache in frontends
# that have only 1024 MB total.
comment_cache_max_size = 10 * 1000

user_cache_max_size = 10 * 1000

# Normally we use the default namespace, but during development it is
# sometimes useful to run a tainted version on staging that has a separate
# memcache namespace.  E.g., os.environ.get('CURRENT_VERSION_ID')
memcache_namespace = None  # Should be None when committed.

# Recompute derived issue fields via work items rather than while
# the user is waiting for a page to load.
recompute_derived_fields_in_worker = True

# The issue search SQL queries have a LIMIT clause with this amount.
search_limit_per_shard = 10 * 1000  # This is more than all open in chromium.

# The GAE search feature is slow, so don't request too many results.
# This limit is approximately the most results that we can get from
# the fulltext engine in 1s.  If we reach this limit in any shard,
# the user will see a message explaining that results were capped.
fulltext_limit_per_shard = 1 * 2000

# Retrieve at most this many issues from the DB when showing an issue grid.
max_issues_in_grid = 6000
# This is the most tiles that we show in grid view.  If the number of results
# is larger than this, we display IDs instead.
max_tiles_in_grid = 1000

# Maximum number of project results to display on a single pagination page
max_project_search_results_per_page = 100

# Maximum number of results per pagination page, regardless of what
# the user specified in their request.  This exists to prevent someone
# from doing a DoS attack that makes our servers do a huge amount of work.
max_artifact_search_results_per_page = 1000

# Maximum number of comments to display on a single pagination page
max_comments_per_page = 500

# Max number of issue starrers to notify via email.  Issues with more
# that this many starrers will only notify the last N of them after a
# comment from a project member.
max_starrers_to_notify = 4000

# In projects that have more than this many issues the next and prev
# links on the issue detail page will not be shown when the user comes
# directly to an issue without specifying any query terms.
threshold_to_suppress_prev_next = 10000

# Format string for the name of the FTS index shards for issues.
search_index_name_format = 'issues%02d'

# Name of the FTS index for projects (not sharded).
project_search_index_name = 'projects'

# Each backend has this many seconds to respond, otherwise frontend gives up
# on that shard.
backend_deadline = 45

# If the initial call to a backend fails, try again this many times.
# Initial backend calls are failfast, meaning that they fail immediately rather
# than queue behind other requests.  The last 2 retries will wait in queue.
backend_retries = 3

# Do various extra logging at INFO level.
enable_profiler_logging = True

# Mail sending domain.  Normally set this to None and it will be computed
# automatically from your AppEngine APP_ID. But, it can be overridden below.
mail_domain = None

# URL format to browse source code revisions.  This can be overridden
# in specific projects by setting project.revision_url_format.
# The format string may include "{revnum}" for the revision number.
revision_url_format = 'https://crrev.com/{revnum}'

# Users with emails in the "priviledged" domains do NOT get any advantage
# but they do default their preference to show unobscured email addresses.
priviledged_user_domains = [
  'avm99963.com',
  ]

# Branded domains:  Any UI GET to a project listed below on prod or staging
# should have the specified host, otherwise it will be redirected such that
# the specified host is used.
branded_domains = {}  # defaults to empty for localhost
branded_domains_staging = {} # now staging is used for the local server
branded_domains_prod = {
    '*': 'bugs.avm99963.com',
}

# The site home page will immediately redirect to a default project for these
# domains, if the project can be viewed.  Structure is {hostport: project_name}.
domain_to_default_project = {}  # defaults to empty for localhost
domain_to_default_project_staging = {} # now staging is used for the local server
domain_to_default_project_prod = {}


# Names of projects on code.google.com which we allow cross-linking to.
recognized_codesite_projects = [
]

####
# Part 5:  Instance-specific settings that override lines above.
# This ID is for -staging and other misc deployments. Prod is defined below.

# IDs of the project for which label freezing should happen
label_freeze_project_ids = set()
analytics_id = ''

# Project IDs which have opted into freezing project configs.
config_freeze_project_ids = set()

if unit_test_mode:
  db_cloud_project = ''  # No real database is used during unit testing.
  app_id = ''
else:
  app_id = app_identity.get_application_id()

  if app_id == 'avm99963-bugs':
    send_all_email_to = None  # Deliver it to the intended users.
    # The Google Cloud SQL databases to use.
    db_cloud_project = app_id
    analytics_id = ''
    branded_domains = branded_domains_prod
    domain_to_default_project = domain_to_default_project_prod

    label_freeze_project_ids = {}
    config_freeze_project_ids = {}
    config_freeze_override_users = {}

  elif app_id == 'monorail-staging':
    site_name = 'Monorail Staging'
    banner_message = 'This staging site does not send emails.'
    # The Google Cloud SQL databases to use.
    db_cloud_project = app_id
    branded_domains = branded_domains_staging
    domain_to_default_project = domain_to_default_project_staging

    label_freeze_project_ids = {16}
    config_freeze_project_ids = {16}
    config_freeze_override_users = {
        16:
            {
                'benhenry@google.com', 'zhangtiff@google.com',
                'summermcdonald@google.com', 'example@example.com'
            }
    }

  elif app_id == 'monorail-dev':
    site_name = 'Monorail Dev'
    banner_message = 'This dev site does not send emails.'
    # The Google Cloud SQL databases to use.
    db_cloud_project = app_id
    branded_domains = branded_domains
    domain_to_default_project = domain_to_default_project
    # Use replicas created when testing the restore procedures on 2021-02-24
    db_replica_prefix = 'replica-2'

    label_freeze_project_ids = {16, 36}
    config_freeze_project_ids = {16, 36}
    config_freeze_override_users = {
        16:
            {
                'benhenry@google.com', 'zhangtiff@google.com',
                'summermcdonald@google.com', 'example@example.com'
            },
        36: {'viccontreras@google.com', 'nmulcahey@google.com'}
    }

if local_mode:
  site_name = 'Monorail Local'
  num_logical_shards = 10
  # Run cloud tasks emulator at port 9090
  CLOUD_TASKS_EMULATOR_ADDRESS = '127.0.0.1:9090'
  CLOUD_TASKS_REGION = 'us-central1'

# Combine the customized info above to make the name of the primary DB instance.
db_instance = db_cloud_project + ':' + db_region + ':' + db_primary_name

# Combine the customized info above to make the names of the replica DB
# instances.
db_replica_names = [db_primary_name for i in range(num_logical_shards)]

# Format string for the name of the physical database replicas.
physical_db_name_format = (db_cloud_project + ':' + db_region + ':%s')

# preferred domains to display
preferred_domains = {
    'avm99963-bugs.appspot.com': 'bugs.avm99963.com'}

# Borg robot service account
borg_service_account = 'chrome-infra-prod-borg-NOTUSEDBYAVM99963BUGS@system.gserviceaccount.com'

# Prediction API params.
classifier_project_id = 'project-id-testing-only'

# Necessary for tests.
if six.PY2 and 'APPLICATION_ID' not in os.environ:
  os.environ['APPLICATION_ID'] = 'testing-app'

if local_mode:
  # There is no local stub for ML Engine.
  classifier_project_id = 'monorail-staging'
else:
  classifier_project_id = app_identity.get_application_id()

classifier_model_id = '20170302'

# Number of distinct users who have to flag an issue before it
# is automatically removed as spam.
# Currently effectively disabled.
spam_flag_thresh = 1000

# If the classifier's confidence is less than this value, the
# item will show up in the spam moderation queue for manual
# review.
classifier_moderation_thresh = 1.0

# If the classifier's confidence is greater than this value,
# and the label is 'spam', the item will automatically be created
# with is_spam=True, and will be filtered out from search results.
classifier_spam_thresh = 0.995

# Users with email addresses ending with these will not be subject to
# spam filtering.
spam_allowlisted_suffixes = (
    '@chromium.org',
    '.gserviceaccount.com',
    '@google.com',
    '@webrtc.org',
    '@avm99963.com',
)

# New issues filed by these users in these groups
# automatically get the Restrict-View-Google label.
restrict_new_issues_user_groups = []

# Users in these groups see a "corp mode" warning dialog when commenting
# on public issues, informing them that their comments are public by default.
public_issue_notice_user_groups = []

full_emails_perm_groups = []

# These email suffixes are allowed to create new alert bugs via email.
alert_allowlisted_suffixes = ('@avm99963.com',)

# The person who is notified if there is an unexpected problem in the alert
# pipeline.
alert_escalation_email = 'me@avm99963.com'

# Bugs autogenerated from alert emails are created through this account.
alert_service_account = 'autogenerated-bug-from-alert-mails-monorail@noreply.avm99963.com'

# The number of hash buckets to use when vectorizing text from Issues and
# Comments. This should be the same value that the model was trained with.
spam_feature_hashes = 500

# The number of features to use when vectorizing text from Issues and
# Comments. This should be the same value that the model was trained with.
component_features = 5000

# The name of the spam model in ML Engine.
spam_model_name = 'spam_only_words'

ratelimiting_enabled = True

# Requests that hit ratelimiting_cost_thresh_sec get one extra count
# added to their bucket at the end of the request for each additional
# multiple of this latency.
ratelimiting_ms_per_count = 1000

api_ratelimiting_enabled = True

# When we post an auto-ping comment, it is posted by this user @ the preferred
# domain name.  E.g., 'monorail@bugs.chromium.org'.
date_action_ping_author = 'monorail'

# Hard-coding this so that we don't rely on sys.maxsize, which could
# potentially differ. It is equal to the maximum unsigned 32 bit integer,
# because the `int(10) unsigned` column type in MySQL is 32 bits.
maximum_snapshot_period_end = 4294967295

# The maximum number of rows chart queries can scan.
chart_query_max_rows = 10000

# Client ID to use for loading the Google API client, gapi.js.
# (This is not used by avm99963 bugs, this is only useful for buganizer bugs)
gapi_client_id = ''

# The pub/sub topic on which to publish issue update messages.
if local_mode:
  # In local dev, send issue updates to the monorail-dev project.
  # There also exists a pubsub emulator we could potentially use in the future:
  # https://cloud.google.com/pubsub/docs/emulator
  pubsub_project = 'monorail-dev'
else:
  pubsub_project = app_identity.get_application_id()

pubsub_topic_id = 'projects/%s/topics/issue-updates' % pubsub_project

# All users in the following domains will have API access.
# Important: the @ symbol must be included.
api_allowed_email_domains = ('@avm99963.com', '@avm99963-bugs.iam.gserviceaccount.com')

label_prefix_allowlist = [
    'CVE-',
    'reward_to-',
    'merge-merge-',
    'migrated-to-b-',
    'copybara-migration-complete-',
    'cob-migrated-to-b-',
    'incident-id-',
    'version-',
    'copybara-migrate-c-',
    'reward-',
    'b-',
]


def is_label_allowed(project_id, label):
  # Only allowlist label prefixes for 'Chromium' project.
  if project_id == 16:
    return any(label.startswith(prefix) for prefix in label_prefix_allowlist)


# This list should stay in sync with MIGRATED_BUGANIZER_ISSUE_PREFIXES in
# `appengine/monorail/static_src/reducers/issueV0.js`.
migrated_buganizer_issue_prefixes = [
    'migrated-to-b-',
    'copybara-migration-complete-',
    'cob-migrated-to-b-',
]
