@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Remove old, confusing configuration files

Summary:
Fixes T6230. These files have not been read by default for a long time, but users are frequently confused and try to edit `default.conf.php`.

Remove the actual files. Allow `phabricator_read_config_file(...)` to continue working as though they exist so as to not break config-file-based installs.

Test Plan:
I used this script to make sure that removing `default.conf.php` won't change things for installs which are still using config files:

```
<?php

require_once 'scripts/__init_script__.php';

$file = require 'conf/default.conf.php';
$global = new PhabricatorConfigDefaultSource();
$global_values = $global->getAllKeys();

foreach ($file as $key => $value) {
$global_value = idx($global_values, $key, (object)array());

if ($value !== $global_value) {
echo "{$key}\n\n";
echo "FILE VALUE\n";
var_dump($value);
echo "\n";
echo "DEFAULT VALUE\n";
var_dump($global_value);
return;
}
}
```

These were the keys that had issues:

- `log.access.format` Not specified in default.conf.php, safe to speciy.
- `mysql.pass` Empty string in file, null in global. Same effect.
- `metamta.default-addrress` One used `noreply@example.com`, one `noreply@phabricator.example.com`. These are just human-readable examples so it's safe to change behavior.
- `metamta.domain` same as above, `example.com` vs `phabricator.example.com`.
- `phpmailer.smtp-host` One used null, one empty string.
- `phpmailer.smtp-protocol` As above.
- `files.viewable-mime-types` File version is out of date.
- `repository.default-local-path` Null in file, set in global. This is correct to set to a default value now.
- `pygments.dropdown-choices` File version is out of date.
- `environment.append-paths` File version is empty, global version adds common paths. This //could// change behavior, but the web behavior is better and more reasonable in general, and a system would need to be configured in a very bizarre way for this to be relevant.

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T6230

Differential Revision: https://secure.phabricator.com/D10628

+18 -1104
+18
conf/__init_conf__.php
··· 22 22 23 23 if ($conf === false) { 24 24 if (!Filesystem::pathExists($full_config_path)) { 25 + 26 + // These are very old configuration files which we used to ship with 27 + // by default. File based configuration was de-emphasized once web-based 28 + // configuration was built. The actual files were removed to reduce 29 + // user confusion over how to configure Phabricator. 30 + 31 + switch ($config) { 32 + case 'default': 33 + case 'production': 34 + return array(); 35 + case 'development': 36 + return array( 37 + 'phabricator.developer-mode' => true, 38 + 'darkconsole.enabled' => true, 39 + 'celerity.minify' => false, 40 + ); 41 + } 42 + 25 43 $files = id(new FileFinder($root.'/conf/')) 26 44 ->withType('f') 27 45 ->withSuffix('conf.php')
-1090
conf/default.conf.php
··· 1 - <?php 2 - 3 - // IMPORTANT: DO NOT EDIT THIS FILE. 4 - // This file is no longer read by default, and your efforts will have no effect. 5 - // Follow the instructions in the documentation to configure Phabricator. 6 - 7 - return array( 8 - 9 - // The root URI which Phabricator is installed on. 10 - // Example: "http://phabricator.example.com/" 11 - 'phabricator.base-uri' => null, 12 - 13 - // If you have multiple environments, provide the production environment URI 14 - // here so that emails, etc., generated in development/sandbox environments 15 - // contain the right links. 16 - 'phabricator.production-uri' => null, 17 - 18 - // -- IMPORTANT! Security! -------------------------------------------------- // 19 - 20 - // IMPORTANT: By default, Phabricator serves files from the same domain the 21 - // application lives on. This is convenient but not secure: it creates a large 22 - // class of vulnerabilities which can not be generally mitigated. 23 - // 24 - // To avoid this, you should configure a second domain in the same way you 25 - // have the primary domain configured (e.g., point it at the same machine and 26 - // set up the same vhost rules) and provide it here. For instance, if your 27 - // primary install is on "http://www.phabricator-example.com/", you could 28 - // configure "http://www.phabricator-files.com/" and specify the entire 29 - // domain (with protocol) here. This will enforce that files are 30 - // served only from the alternate domain. Ideally, you should use a 31 - // completely separate domain name rather than just a different subdomain. 32 - // 33 - // It is STRONGLY RECOMMENDED that you configure this. Your install is NOT 34 - // SECURE unless you do so. 35 - 'security.alternate-file-domain' => null, 36 - 37 - // Default key for HMAC digests where the key is not important (i.e., the 38 - // hash itself is secret). You can change this if you want (to any other 39 - // string), but doing so will break existing sessions and CSRF tokens. 40 - 'security.hmac-key' => '[D\t~Y7eNmnQGJ;rnH6aF;m2!vJ8@v8C=Cs:aQS\.Qw', 41 - 42 - // If the web server responds to both HTTP and HTTPS requests but you want 43 - // users to connect with only HTTPS, you can set this to true to make 44 - // Phabricator redirect HTTP requests to HTTPS. 45 - // 46 - // Normally, you should just configure your server not to accept HTTP traffic, 47 - // but this setting may be useful if you originally used HTTP and have now 48 - // switched to HTTPS but don't want to break old links, or if your webserver 49 - // sits behind a load balancer which terminates HTTPS connections and you 50 - // can not reasonably configure more granular behavior there. 51 - // 52 - // NOTE: Phabricator determines if a request is HTTPS or not by examining the 53 - // PHP $_SERVER['HTTPS'] variable. If you run Apache/mod_php this will 54 - // probably be set correctly for you automatically, but if you run Phabricator 55 - // as CGI/FCGI (e.g., through nginx or lighttpd), you need to configure your 56 - // web server so that it passes the value correctly based on the connection 57 - // type. Alternatively, you can add a PHP snippet to the top of this 58 - // configuration file to directly set $_SERVER['HTTPS'] to the correct value. 59 - 'security.require-https' => false, 60 - 61 - // Is Phabricator permitted to make outbound HTTP requests? 62 - 'security.allow-outbound-http' => true, 63 - 64 - 65 - // -- Internationalization -------------------------------------------------- // 66 - 67 - // This allows customizing texts used in Phabricator. The class must extend 68 - // PhabricatorTranslation. 69 - 'translation.provider' => 'PhabricatorEnglishTranslation', 70 - 71 - // You can use 'translation.override' if you don't want to create a full 72 - // translation to give users an option for switching to it and you just want 73 - // to override some strings in the default translation. 74 - 'translation.override' => array(), 75 - 76 - 77 - // -- Access Policies ------------------------------------------------------- // 78 - 79 - // Phabricator allows you to set the visibility of objects (like repositories 80 - // and source code) to "Public", which means anyone on the internet can see 81 - // them, even without being logged in. This is great for open source, but 82 - // some installs may never want to make anything public, so this policy is 83 - // disabled by default. You can enable it here, which will let you set the 84 - // policy for objects to "Public". With this option disabled, the most open 85 - // policy is "All Users", which means users must be logged in to view things. 86 - 'policy.allow-public' => false, 87 - 88 - 89 - // -- Logging --------------------------------------------------------------- // 90 - 91 - // To enable the Phabricator access log, specify a path here. The Phabricator 92 - // access log can provide more detailed information about Phabricator access 93 - // than normal HTTP access logs (for instance, it can show logged-in users, 94 - // controllers, and other application data). If not set, no log will be 95 - // written. 96 - // 97 - // Make sure the PHP process can write to the log! 98 - 'log.access.path' => null, 99 - 100 - // Format for the access log. If not set, the default format will be used: 101 - // 102 - // "[%D]\t%h\t%u\t%M\t%C\t%m\t%U\t%c\t%T" 103 - // 104 - // Available variables are: 105 - // 106 - // - %c The HTTP response code. 107 - // - %C The controller which handled the request. 108 - // - %D The request date. 109 - // - %e Epoch timestamp. 110 - // - %h The webserver's host name. 111 - // - %p The PID of the server process. 112 - // - %R The HTTP referrer. 113 - // - %r The remote IP. 114 - // - %T The request duration, in microseconds. 115 - // - %U The request path. 116 - // - %u The logged-in username, if one is logged in. 117 - // - %P The logged-in user PHID, if one is logged in. 118 - // - %M The HTTP method. 119 - // - %m For conduit, the Conduit method which was invoked. 120 - // 121 - // If a variable isn't available (for example, %m appears in the file format 122 - // but the request is not a Conduit request), it will be rendered as "-". 123 - // 124 - // Note that the default format is subject to change in the future, so if you 125 - // rely on the log's format, specify it explicitly. 126 - 'log.access.format' => null, 127 - 128 - 129 - // -- DarkConsole ----------------------------------------------------------- // 130 - 131 - // DarkConsole is a administrative debugging/profiling tool built into 132 - // Phabricator. You can leave it disabled unless you're developing against 133 - // Phabricator. 134 - 135 - // Determines whether or not DarkConsole is available. DarkConsole exposes 136 - // some data like queries and stack traces, so you should be careful about 137 - // turning it on in production (although users can not normally see it, even 138 - // if the deployment configuration enables it). 139 - 'darkconsole.enabled' => false, 140 - 141 - // Always enable DarkConsole, even for logged out users. This potentially 142 - // exposes sensitive information to users, so make sure untrusted users can 143 - // not access an install running in this mode. You should definitely leave 144 - // this off in production. It is only really useful for using DarkConsole 145 - // utilities to debug or profile logged-out pages. You must set 146 - // 'darkconsole.enabled' to use this option. 147 - 'darkconsole.always-on' => false, 148 - 149 - // Map of additional configuration values to lock. 150 - 'config.lock' => array(), 151 - 152 - // Map of additional configuration values to hide. 153 - 'config.hide' => array(), 154 - 155 - // Map of additional configuration values to mask. 156 - 'config.mask' => array(), 157 - 158 - // Ignore setup warnings of the following issues. 159 - 'config.ignore-issues' => array(), 160 - 161 - // -- MySQL --------------------------------------------------------------- // 162 - 163 - // Class providing database configuration. It must implement 164 - // DatabaseConfigurationProvider. 165 - 'mysql.configuration-provider' => 'DefaultDatabaseConfigurationProvider', 166 - 167 - // The username to use when connecting to MySQL. 168 - 'mysql.user' => 'root', 169 - 170 - // The password to use when connecting to MySQL. 171 - 'mysql.pass' => '', 172 - 173 - // The MySQL server to connect to. 174 - 'mysql.host' => 'localhost', 175 - 176 - // If you want to connect to a different port than the default (which is 3306) 177 - 'mysql.port' => null, 178 - 179 - // Phabricator supports PHP extensions MySQL and MySQLi. It is possible to 180 - // implement also other access mechanism (e.g. PDO_MySQL). The class must 181 - // extend AphrontMySQLDatabaseConnectionBase. 182 - 'mysql.implementation' => (extension_loaded('mysqli') 183 - ? 'AphrontMySQLiDatabaseConnection' 184 - : 'AphrontMySQLDatabaseConnection'), 185 - 186 - 187 - // -- Notifications --------------------------------------------------------- // 188 - 189 - // Set this to true to enable real-time notifications. You must also run a 190 - // notification server for this to work. Consult the documentation in 191 - // "Notifications User Guide: Setup and Configuration" for instructions. 192 - 'notification.enabled' => false, 193 - 194 - // Client port for the realtime server to listen on, and for realtime clients 195 - // to connect to. Use "localhost" if you are running the notification server 196 - // on the same host as the web server. 197 - 'notification.client-uri' => 'http://localhost:22280/', 198 - 199 - // URI and port for the notification root server. 200 - 'notification.server-uri' => 'http://localhost:22281/', 201 - 202 - // The server must be started as root so it can bind to privileged ports, but 203 - // if you specify a user here it will drop permissions after binding. 204 - 'notification.user' => null, 205 - 206 - // Location where the server should log to. 207 - 'notification.log' => '/var/log/aphlict.log', 208 - 209 - // PID file to use. 210 - 'notification.pidfile' => '/var/run/aphlict.pid', 211 - 212 - // Enable this option to get additional debug output in the browser. 213 - 'notification.debug' => false, 214 - 215 - 216 - // -- Email ----------------------------------------------------------------- // 217 - 218 - // Some Phabricator tools send email notifications, e.g. when Differential 219 - // revisions are updated or Maniphest tasks are changed. These options allow 220 - // you to configure how email is delivered. 221 - 222 - // You can test your mail setup by going to "MetaMTA" in the web interface, 223 - // clicking "Send New Message", and then composing a message. 224 - 225 - // Default address to send mail "From". 226 - 'metamta.default-address' => 'noreply@example.com', 227 - 228 - // Domain used to generate Message-IDs. 229 - 'metamta.domain' => 'example.com', 230 - 231 - // When a message is sent to multiple recipients (for example, several 232 - // reviewers on a code review), Phabricator can either deliver one email to 233 - // everyone (e.g., "To: alincoln, usgrant, htaft") or separate emails to each 234 - // user (e.g., "To: alincoln", "To: usgrant", "To: htaft"). The major 235 - // advantages and disadvantages of each approach are: 236 - // 237 - // - One mail to everyone: 238 - // - Recipients can see To/Cc at a glance. 239 - // - If you use mailing lists, you won't get duplicate mail if you're 240 - // a normal recipient and also Cc'd on a mailing list. 241 - // - Getting threading to work properly is harder, and probably requires 242 - // making mail less useful by turning off options. 243 - // - Sometimes people will "Reply All" and everyone will get two mails, 244 - // one from the user and one from Phabricator turning their mail into 245 - // a comment. 246 - // - Not supported with a private reply-to address. 247 - // - Mails are sent in the server default translation. 248 - // - One mail to each user: 249 - // - Recipients need to look in the mail body to see To/Cc. 250 - // - If you use mailing lists, recipients may sometimes get duplicate 251 - // mail. 252 - // - Getting threading to work properly is easier, and threading settings 253 - // can be customzied by each user. 254 - // - "Reply All" no longer spams all other users. 255 - // - Required if private reply-to addresses are configured. 256 - // - Mails are sent in the language of user preference. 257 - // 258 - // In the code, splitting one outbound email into one-per-recipient is 259 - // sometimes referred to as "multiplexing". 260 - 'metamta.one-mail-per-recipient' => true, 261 - 262 - // When sending a message that has no To recipient (i.e. all recipients 263 - // are CC'd, for example when multiplexing mail), set the To field to the 264 - // following value. If no value is set, messages with no To will have 265 - // their CCs upgraded to To. 266 - 'metamta.placeholder-to-recipient' => null, 267 - 268 - // When a user takes an action which generates an email notification (like 269 - // commenting on a Differential revision), Phabricator can either send that 270 - // mail "From" the user's email address (like "alincoln@logcabin.com") or 271 - // "From" the 'metamta.default-address' address. The user experience is 272 - // generally better if Phabricator uses the user's real address as the "From" 273 - // since the messages are easier to organize when they appear in mail clients, 274 - // but this will only work if the server is authorized to send email on behalf 275 - // of the "From" domain. Practically, this means: 276 - // - If you are doing an install for Example Corp and all the users will 277 - // have corporate @corp.example.com addresses and any hosts Phabricator 278 - // is running on are authorized to send email from corp.example.com, 279 - // you can enable this to make the user experience a little better. 280 - // - If you are doing an install for an open source project and your 281 - // users will be registering via Facebook and using personal email 282 - // addresses, you MUST NOT enable this or virtually all of your outgoing 283 - // email will vanish into SFP blackholes. 284 - // - If your install is anything else, you're much safer leaving this 285 - // off since the risk in turning it on is that your outgoing mail will 286 - // mostly never arrive. 287 - 'metamta.can-send-as-user' => false, 288 - 289 - // Limit the maximum size of the body of an email generated for a diff 290 - // (in bytes). 291 - 'metamta.email-body-limit' => 524288, 292 - 293 - // Adapter class to use to transmit mail to the MTA. The default uses 294 - // PHPMailerLite, which will invoke "sendmail". This is appropriate 295 - // if sendmail actually works on your host, but if you haven't configured mail 296 - // it may not be so great. A number of other mailers are available (e.g., SES, 297 - // SendGrid, SMTP, custom mailers), consult "Configuring Outbound Email" in 298 - // the documentation for details. 299 - 'metamta.mail-adapter' => 300 - 'PhabricatorMailImplementationPHPMailerLiteAdapter', 301 - 302 - // When email is sent, what format should Phabricator use for user's 303 - // email addresses? Valid values are: 304 - // - 'short' - 'gwashington <gwashington@example.com>' 305 - // - 'real' - 'George Washington <gwashington@example.com>' 306 - // - 'full' - 'gwashington (George Washington) <gwashington@example.com>' 307 - // The default is 'full'. 308 - 'metamta.user-address-format' => 'full', 309 - 310 - // If you're using PHPMailer to send email, provide the mailer and options 311 - // here. PHPMailer is much more enormous than PHPMailerLite, and provides more 312 - // mailers and greater enormity. You need it when you want to use SMTP 313 - // instead of sendmail as the mailer. 314 - 'phpmailer.mailer' => 'smtp', 315 - 'phpmailer.smtp-host' => '', 316 - 'phpmailer.smtp-port' => 25, 317 - 318 - // When using PHPMailer with SMTP, you can set this to one of "tls" or "ssl" 319 - // to use TLS or SSL. Leave it blank for vanilla SMTP. If you're sending 320 - // via Gmail, set it to "ssl". 321 - 'phpmailer.smtp-protocol' => '', 322 - 323 - // Set following if your smtp server requires authentication. 324 - 'phpmailer.smtp-user' => null, 325 - 'phpmailer.smtp-password' => null, 326 - 327 - // If you're using Amazon SES to send email, provide your AWS access key 328 - // and AWS secret key here. To set up Amazon SES with Phabricator, you need 329 - // to: 330 - // - Make sure 'metamta.mail-adapter' is set to: 331 - // "PhabricatorMailImplementationAmazonSESAdapter" 332 - // - Make sure 'metamta.can-send-as-user' is false. 333 - // - Make sure 'metamta.default-address' is configured to something sensible. 334 - // - Make sure 'metamta.default-address' is a validated SES "From" address. 335 - 'amazon-ses.access-key' => null, 336 - 'amazon-ses.secret-key' => null, 337 - 338 - // If you're using Sendgrid to send email, provide your access credentials 339 - // here. This will use the REST API. You can also use Sendgrid as a normal 340 - // SMTP service. 341 - 'sendgrid.api-user' => null, 342 - 'sendgrid.api-key' => null, 343 - 344 - // You can configure a reply handler domain so that email sent from Maniphest 345 - // will have a special "Reply To" address like "T123+82+af19f@example.com" 346 - // that allows recipients to reply by email and interact with tasks. For 347 - // instructions on configurating reply handlers, see the article 348 - // "Configuring Inbound Email" in the Phabricator documentation. By default, 349 - // this is set to 'null' and Phabricator will use a generic 'noreply@' address 350 - // or the address of the acting user instead of a special reply handler 351 - // address (see 'metamta.default-address'). If you set a domain here, 352 - // Phabricator will begin generating private reply handler addresses. See 353 - // also 'metamta.maniphest.reply-handler' to further configure behavior. 354 - // This key should be set to the domain part after the @, like "example.com". 355 - 'metamta.maniphest.reply-handler-domain' => null, 356 - 357 - // You can follow the instructions in "Configuring Inbound Email" in the 358 - // Phabricator documentation and set 'metamta.maniphest.reply-handler-domain' 359 - // to support updating Maniphest tasks by email. If you want more advanced 360 - // customization than this provides, you can override the reply handler 361 - // class with an implementation of your own. This will allow you to do things 362 - // like have a single public reply handler or change how private reply 363 - // handlers are generated and validated. 364 - // 365 - // This key should be set to a loadable subclass of 366 - // PhabricatorMailReplyHandler. 367 - 'metamta.maniphest.reply-handler' => 'ManiphestReplyHandler', 368 - 369 - // If you don't want phabricator to take up an entire domain 370 - // (or subdomain for that matter), you can use this and set a common 371 - // prefix for mail sent by phabricator. It will make use of the fact that 372 - // a mail-address such as phabricator+D123+1hjk213h@example.com will be 373 - // delivered to the phabricator users mailbox. 374 - // Set this to the left part of the email address and it well get 375 - // prepended to all outgoing mail. If you want to use e.g. 376 - // 'phabricator@example.com' this should be set to 'phabricator'. 377 - 'metamta.single-reply-handler-prefix' => null, 378 - 379 - // Prefix prepended to mail sent by Maniphest. You can change this to 380 - // distinguish between testing and development installs, for example. 381 - 'metamta.maniphest.subject-prefix' => '[Maniphest]', 382 - 383 - // See 'metamta.maniphest.reply-handler-domain'. This does the same thing, but 384 - // affects Pholio. 385 - 'metamta.pholio.reply-handler-domain' => null, 386 - 387 - // Prefix prepended to mail sent by Pholio. 388 - 'metamta.pholio.subject-prefix' => '[Pholio]', 389 - 390 - // See 'metamta.maniphest.reply-handler-domain'. This does the same thing, but 391 - // affects Macro. 392 - 'metamta.macro.reply-handler-domain' => null, 393 - 394 - // Prefix prepended to mail sent by Macro. 395 - 'metamta.macro.subject-prefix' => '[Macro]', 396 - 397 - // See 'metamta.maniphest.reply-handler-domain'. This does the same thing, 398 - // but allows email replies via Differential. 399 - 'metamta.differential.reply-handler-domain' => null, 400 - 401 - // See 'metamta.maniphest.reply-handler'. This does the same thing, but 402 - // affects Differential. 403 - 'metamta.differential.reply-handler' => 'DifferentialReplyHandler', 404 - 405 - // Prefix prepended to mail sent by Differential. 406 - 'metamta.differential.subject-prefix' => '[Differential]', 407 - 408 - // Set this to true if you want patches to be attached to mail from 409 - // Differential. This won't work if you are using SendGrid as your mail 410 - // adapter. 411 - 'metamta.differential.attach-patches' => false, 412 - 413 - // To include patches in email bodies, set this to a positive integer. Patches 414 - // will be inlined if they are at most that many lines. For instance, a value 415 - // of 100 means "inline patches if they are no longer than 100 lines". By 416 - // default, patches are not inlined. 417 - 'metamta.differential.inline-patches' => 0, 418 - 419 - // If you enable either of the options above, you can choose what format 420 - // patches are sent in. Valid options are 'unified' (like diff -u) or 'git'. 421 - 'metamta.differential.patch-format' => 'unified', 422 - 423 - // Enables a different format for comments in differential emails. 424 - // Differential will create unified diffs around the comment, which 425 - // will give enough context for people who are only viewing the 426 - // reviews in email to understand what is going on. The context will 427 - // be created based on the range of the comment. 428 - 'metamta.differential.unified-comment-context' => false, 429 - 430 - // Prefix prepended to mail sent by Diffusion. 431 - 'metamta.diffusion.subject-prefix' => '[Diffusion]', 432 - 433 - // See 'metamta.maniphest.reply-handler-domain'. This does the same thing, 434 - // but allows email replies via Diffusion. 435 - 'metamta.diffusion.reply-handler-domain' => null, 436 - 437 - // See 'metamta.maniphest.reply-handler'. This does the same thing, but 438 - // affects Diffusion. 439 - 'metamta.diffusion.reply-handler' => 'PhabricatorAuditReplyHandler', 440 - 441 - // Set this to true if you want patches to be attached to commit notifications 442 - // from Diffusion. This won't work with SendGrid. 443 - 'metamta.diffusion.attach-patches' => false, 444 - 445 - // To include patches in Diffusion email bodies, set this to a positive 446 - // integer. Patches will be inlined if they are at most that many lines. 447 - // By default, patches are not inlined. 448 - 'metamta.diffusion.inline-patches' => 0, 449 - 450 - // If you've enabled attached patches or inline patches for commit emails, you 451 - // can establish a hard byte limit on their size. You should generally set 452 - // reasonable byte and time limits (defaults are 1MB and 60 seconds) to avoid 453 - // sending ridiculously enormous email for changes like "importing an external 454 - // library" or "accidentally committed this full-length movie as text". 455 - 'metamta.diffusion.byte-limit' => 1024 * 1024, 456 - 457 - // If you've enabled attached patches or inline patches for commit emails, you 458 - // can establish a hard time limit on generating them. 459 - 'metamta.diffusion.time-limit' => 60, 460 - 461 - // Prefix prepended to mail sent by Package. 462 - 'metamta.package.subject-prefix' => '[Package]', 463 - 464 - // See 'metamta.maniphest.reply-handler'. This does similar thing for package 465 - // except that it only supports sending out mail and doesn't handle incoming 466 - // email. 467 - 'metamta.package.reply-handler' => 'OwnersPackageReplyHandler', 468 - 469 - // By default, Phabricator generates unique reply-to addresses and sends a 470 - // separate email to each recipient when you enable reply handling. This is 471 - // more secure than using "From" to establish user identity, but can mean 472 - // users may receive multiple emails when they are on mailing lists. Instead, 473 - // you can use a single, non-unique reply to address and authenticate users 474 - // based on the "From" address by setting this to 'true'. This trades away 475 - // a little bit of security for convenience, but it's reasonable in many 476 - // installs. Object interactions are still protected using hashes in the 477 - // single public email address, so objects can not be replied to blindly. 478 - 'metamta.public-replies' => false, 479 - 480 - // You can configure an email address like "bugs@phabricator.example.com" 481 - // which will automatically create Maniphest tasks when users send email 482 - // to it. This relies on the "From" address to authenticate users, so it is 483 - // is not completely secure. To set this up, enter a complete email 484 - // address like "bugs@phabricator.example.com" and then configure mail to 485 - // that address so it routed to Phabricator (if you've already configured 486 - // reply handlers, you're probably already done). See "Configuring Inbound 487 - // Email" in the documentation for more information. 488 - 'metamta.maniphest.public-create-email' => null, 489 - 490 - // If you enable 'metamta.public-replies', Phabricator uses "From" to 491 - // authenticate users. You can additionally enable this setting to try to 492 - // authenticate with 'Reply-To'. Note that this is completely spoofable and 493 - // insecure (any user can set any 'Reply-To' address) but depending on the 494 - // nature of your install or other deliverability conditions this might be 495 - // okay. Generally, you can't do much more by spoofing Reply-To than be 496 - // annoying (you can write but not read content). But, you know, this is 497 - // still **COMPLETELY INSECURE**. 498 - 'metamta.insecure-auth-with-reply-to' => false, 499 - 500 - // If you enable 'metamta.maniphest.public-create-email' and create an 501 - // email address like "bugs@phabricator.example.com", it will default to 502 - // rejecting mail which doesn't come from a known user. However, you might 503 - // want to let anyone send email to this address; to do so, set a default 504 - // author here (a Phabricator username). A typical use of this might be to 505 - // create a "System Agent" user called "bugs" and use that name here. If you 506 - // specify a valid username, mail will always be accepted and used to create 507 - // a task, even if the sender is not a system user. The original email 508 - // address will be stored in an 'From Email' field on the task. 509 - 'metamta.maniphest.default-public-author' => null, 510 - 511 - 'metamta.herald.show-hints' => true, 512 - 513 - // You can disable the hints under "REPLY HANDLER ACTIONS" if users prefer 514 - // smaller messages. The actions themselves will still work properly. 515 - 'metamta.reply.show-hints' => true, 516 - 517 - // You can disable the "To:" and "Cc:" footers in mail if users prefer 518 - // smaller messages. 519 - 'metamta.recipients.show-hints' => true, 520 - 521 - // If this option is enabled, Phabricator will add a "Precedence: bulk" 522 - // header to transactional mail (e.g., Differential, Maniphest and Herald 523 - // notifications). This may improve the behavior of some auto-responder 524 - // software and prevent it from replying. However, it may also cause 525 - // deliverability issues -- notably, you currently can not send this header 526 - // via Amazon SES, and enabling this option with SES will prevent delivery 527 - // of any affected mail. 528 - 'metamta.precedence-bulk' => false, 529 - 530 - // Mail.app on OS X Lion won't respect threading headers unless the subject 531 - // is prefixed with "Re:". If you enable this option, Phabricator will add 532 - // "Re:" to the subject line of all mail which is expected to thread. If 533 - // you've set 'metamta.one-mail-per-recipient', users can override this 534 - // setting in their preferences. 535 - 'metamta.re-prefix' => false, 536 - 537 - // If true, allow MetaMTA to change mail subjects to put text like 538 - // '[Accepted]' and '[Commented]' in them. This makes subjects more useful, 539 - // but might break threading on some clients. If you've set 540 - // 'metamta.one-mail-per-recipient', users can override this setting in their 541 - // preferences. 542 - 'metamta.vary-subjects' => true, 543 - 544 - // -- Auth ------------------------------------------------------------------ // 545 - 546 - // If true, email addresses must be verified (by clicking a link in an 547 - // email) before a user can login. By default, verification is optional 548 - // unless 'auth.email-domains' is nonempty (see below). 549 - 'auth.require-email-verification' => false, 550 - 551 - // You can restrict allowed email addresses to certain domains (like 552 - // "yourcompany.com") by setting a list of allowed domains here. Users will 553 - // only be allowed to register using email addresses at one of the domains, 554 - // and will only be able to add new email addresses for these domains. If 555 - // you configure this, it implies 'auth.require-email-verification'. 556 - // 557 - // To configure email domains, set a list of domains like this: 558 - // 559 - // array( 560 - // 'yourcompany.com', 561 - // 'yourcompany.co.uk', 562 - // ) 563 - // 564 - // You should omit the "@" from domains. Note that the domain must match 565 - // exactly. If you allow "yourcompany.com", that permits "joe@yourcompany.com" 566 - // but rejects "joe@mail.yourcompany.com". 567 - 'auth.email-domains' => array(), 568 - 569 - // You can provide an arbitrary block of HTML here, which will appear on the 570 - // login screen. Normally, you'd use this to provide login or registration 571 - // instructions to users. 572 - 'auth.login-message' => null, 573 - 574 - 575 - // -- Accounts -------------------------------------------------------------- // 576 - 577 - // Is basic account information (email, real name, profile picture) editable? 578 - // If you set up Phabricator to automatically synchronize account information 579 - // from some other authoritative system, you can disable this to ensure 580 - // information remains consistent across both systems. 581 - 'account.editable' => true, 582 - 583 - // When users set or reset a password, it must have at least this many 584 - // characters. 585 - 'account.minimum-password-length' => 8, 586 - 587 - 588 - // -- Recaptcha ------------------------------------------------------------- // 589 - 590 - // Is Recaptcha enabled? If disabled, captchas will not appear. You should 591 - // enable Recaptcha if your install is public-facing, as it hinders 592 - // brute-force attacks. 593 - 'recaptcha.enabled' => false, 594 - 595 - // Your Recaptcha public key, obtained from Recaptcha. 596 - 'recaptcha.public-key' => null, 597 - 598 - // Your Recaptcha private key, obtained from Recaptcha. 599 - 'recaptcha.private-key' => null, 600 - 601 - 602 - // -- Misc ------------------------------------------------------------------ // 603 - 604 - // This is hashed with other inputs to generate CSRF tokens. If you want, you 605 - // can change it to some other string which is unique to your install. This 606 - // will make your install more secure in a vague, mostly theoretical way. But 607 - // it will take you like 3 seconds of mashing on your keyboard to set it up so 608 - // you might as well. 609 - 'phabricator.csrf-key' => '0b7ec0592e0a2829d8b71df2fa269b2c6172eca3', 610 - 611 - // This is hashed with other inputs to generate mail tokens. If you want, you 612 - // can change it to some other string which is unique to your install. In 613 - // particular, you will want to do this if you accidentally send a bunch of 614 - // mail somewhere you shouldn't have, to invalidate all old reply-to 615 - // addresses. 616 - 'phabricator.mail-key' => '5ce3e7e8787f6e40dfae861da315a5cdf1018f12', 617 - 618 - 619 - // PHP requires that you set a timezone in your php.ini before using date 620 - // functions, or it will emit a warning. If this isn't possible (for instance, 621 - // because you are using HPHP) you can set some valid constant for 622 - // date_default_timezone_set() here and Phabricator will set it on your 623 - // behalf, silencing the warning. 624 - 'phabricator.timezone' => null, 625 - 626 - // Show stack traces when unhandled exceptions occur, force reloading of 627 - // static resources (skipping the cache), show an error callout if a page 628 - // generated PHP errors, warnings, or notices, force disk reads when 629 - // reloading, and generally make development easier. This option should not 630 - // be enabled in production. 631 - 'phabricator.developer-mode' => false, 632 - 633 - // Contains a list of uninstalled applications 634 - 'phabricator.uninstalled-applications' => array(), 635 - 636 - // Allowing non-members to interact with tasks over email. 637 - 'phabricator.allow-email-users' => false, 638 - 639 - // -- Welcome Screen -------------------------------------------------------- // 640 - 641 - // The custom HTML content for the Phabricator welcome screen. 642 - 'welcome.html' => null, 643 - 644 - // -- Files ----------------------------------------------------------------- // 645 - 646 - // Lists which uploaded file types may be viewed in the browser. If a file 647 - // has a mime type which does not appear in this list, it will always be 648 - // downloaded instead of displayed. This is mainly a usability 649 - // consideration, since browsers tend to freak out when viewing enormous 650 - // binary files. 651 - // 652 - // The keys in this array are viewable mime types; the values are the mime 653 - // types they will be delivered as when they are viewed in the browser. 654 - // 655 - // IMPORTANT: Configure 'security.alternate-file-domain' above! Your install 656 - // is NOT safe if it is left unconfigured. 657 - 'files.viewable-mime-types' => array( 658 - 'image/jpeg' => 'image/jpeg', 659 - 'image/jpg' => 'image/jpg', 660 - 'image/png' => 'image/png', 661 - 'image/gif' => 'image/gif', 662 - 'text/plain' => 'text/plain; charset=utf-8', 663 - 'text/x-diff' => 'text/plain; charset=utf-8', 664 - 665 - // ".ico" favicon files, which have mime type diversity. See: 666 - // http://en.wikipedia.org/wiki/ICO_(file_format)#MIME_type 667 - 'image/x-ico' => 'image/x-icon', 668 - 'image/x-icon' => 'image/x-icon', 669 - 'image/vnd.microsoft.icon' => 'image/x-icon', 670 - ), 671 - 672 - // List of mime types which can be used as the source for an <img /> tag. 673 - // This should be a subset of 'files.viewable-mime-types' and exclude files 674 - // like text. 675 - 'files.image-mime-types' => array( 676 - 'image/jpeg' => true, 677 - 'image/jpg' => true, 678 - 'image/png' => true, 679 - 'image/gif' => true, 680 - 'image/x-ico' => true, 681 - 'image/x-icon' => true, 682 - 'image/vnd.microsoft.icon' => true, 683 - ), 684 - 685 - // Configuration option for enabling imagemagick 686 - // to resize animated profile pictures (gif) 687 - 'files.enable-imagemagick' => false, 688 - 689 - // -- Storage --------------------------------------------------------------- // 690 - 691 - // Phabricator allows users to upload files, and can keep them in various 692 - // storage engines. This section allows you to configure which engines 693 - // Phabricator will use, and how it will use them. 694 - 695 - // The largest filesize Phabricator will store in the MySQL BLOB storage 696 - // engine, which just uses a database table to store files. While this isn't a 697 - // best practice, it's really easy to set up. Set this to 0 to disable use of 698 - // the MySQL blob engine. 699 - 'storage.mysql-engine.max-size' => 1000000, 700 - 701 - // Phabricator provides a local disk storage engine, which just writes files 702 - // to some directory on local disk. The webserver must have read/write 703 - // permissions on this directory. This is straightforward and suitable for 704 - // most installs, but will not scale past one web frontend unless the path 705 - // is actually an NFS mount, since you'll end up with some of the files 706 - // written to each web frontend and no way for them to share. To use the 707 - // local disk storage engine, specify the path to a directory here. To 708 - // disable it, specify null. 709 - 'storage.local-disk.path' => null, 710 - 711 - // If you want to store files in Amazon S3, specify an AWS access and secret 712 - // key here and a bucket name below. 713 - 'amazon-s3.access-key' => null, 714 - 'amazon-s3.secret-key' => null, 715 - 716 - // To use a custom endpoint, specify it here. Normally, you do not need to 717 - // configure this. 718 - 'amazon-s3.endpoint' => null, 719 - 720 - // Set this to a valid Amazon S3 bucket to store files there. You must also 721 - // configure S3 access keys above. 722 - 'storage.s3.bucket' => null, 723 - 724 - // Phabricator uses a storage engine selector to choose which storage engine 725 - // to use when writing file data. If you add new storage engines or want to 726 - // provide very custom rules (e.g., write images to one storage engine and 727 - // other files to a different one), you can provide an alternate 728 - // implementation here. The default engine will use choose MySQL, Local Disk, 729 - // and S3, in that order, if they have valid configurations above and a file 730 - // fits within configured limits. 731 - 'storage.engine-selector' => 'PhabricatorDefaultFileStorageEngineSelector', 732 - 733 - // Set the size of the largest file a user may upload. This is used to render 734 - // text like "Maximum file size: 10MB" on interfaces where users can upload 735 - // files, and files larger than this size will be rejected. 736 - // 737 - // Specify this limit in bytes, or using a "K", "M", or "G" suffix. 738 - // 739 - // NOTE: Setting this to a large size is NOT sufficient to allow users to 740 - // upload large files. You must also configure a number of other settings. To 741 - // configure file upload limits, consult the article "Configuring File Upload 742 - // Limits" in the documentation. Once you've configured some limit across all 743 - // levels of the server, you can set this limit to an appropriate value and 744 - // the UI will then reflect the actual configured limit. 745 - 'storage.upload-size-limit' => null, 746 - 747 - // Phabricator puts databases in a namespace, which defualts to "phabricator" 748 - // -- for instance, the Differential database is named 749 - // "phabricator_differential" by default. You can change this namespace if you 750 - // want. Normally, you should not do this unless you are developing 751 - // Phabricator and using namespaces to separate multiple sandbox datasets. 752 - 'storage.default-namespace' => 'phabricator', 753 - 754 - 755 - // -- Search ---------------------------------------------------------------- // 756 - 757 - // Phabricator supports Elastic Search; to use it, specify a host like 758 - // 'http://elastic.example.com:9200/' here. 759 - 'search.elastic.host' => null, 760 - 761 - // Phabricator uses a search engine selector to choose which search engine 762 - // to use when indexing and reconstructing documents, and when executing 763 - // queries. You can override the engine selector to provide a new selector 764 - // class which can select some custom engine you implement, if you want to 765 - // store your documents in some search engine which does not have default 766 - // support. 767 - 'search.engine-selector' => 'PhabricatorDefaultSearchEngineSelector', 768 - 769 - 770 - // -- Differential ---------------------------------------------------------- // 771 - 772 - // List of file regexps where whitespace is meaningful and should not 773 - // use 'ignore-all' by default 774 - 'differential.whitespace-matters' => array( 775 - '/\.py$/', 776 - '/\.l?hs$/', 777 - ), 778 - 779 - // Differential has a required "Test Plan" field by default. You can make it 780 - // optional by setting this to false. You can also completely remove it above, 781 - // if you prefer. 782 - 'differential.require-test-plan-field' => true, 783 - 784 - // If you set this to true, users can "!accept" revisions via email (normally, 785 - // they can take other actions but can not "!accept"). This action is disabled 786 - // by default because email authentication can be configured to be very weak, 787 - // and, socially, email "!accept" is kind of sketchy and implies revisions may 788 - // not actually be receiving thorough review. 789 - 'differential.enable-email-accept' => false, 790 - 791 - // List of file regexps that should be treated as if they are generated by 792 - // an automatic process, and thus get hidden by default in differential. 793 - 'differential.generated-paths' => array( 794 - // '/config\.h$/', 795 - // '#/autobuilt/#', 796 - ), 797 - 798 - // If you set this to true, users can accept their own revisions. This action 799 - // is disabled by default because it's most likely not a behavior you want, 800 - // but it proves useful if you are working alone on a project and want to make 801 - // use of all of differential's features. 802 - 'differential.allow-self-accept' => false, 803 - 804 - // If you set this to true, any user can close any revision so long as it has 805 - // been accepted. This can be useful depending on your development model. For 806 - // example, github-style pull requests where the reviewer is often the 807 - // actual committer can benefit from turning this option to true. If false, 808 - // only the submitter can close a revision. 809 - 'differential.always-allow-close' => false, 810 - 811 - // If you set this to true, any user can abandon any revision. If false, only 812 - // the submitter can abandon a revision. 813 - 'differential.always-allow-abandon' => false, 814 - 815 - // If you set this to true, any user can reopen a revision so long as it has 816 - // been closed. This can be useful if a revision is accidentally closed or 817 - // if a developer changes his or her mind after closing a revision. If it is 818 - // false, reopening is not allowed. 819 - 'differential.allow-reopen' => false, 820 - 821 - // Revisions newer than this number of days are marked as fresh in Action 822 - // Required and Revisions Waiting on You views. Only work days (not weekends 823 - // and holidays) are included. Set to 0 to disable this feature. 824 - 'differential.days-fresh' => 1, 825 - 826 - // Similar to 'differential.days-fresh' but marks stale revisions. If the 827 - // revision is even older than it is marked as old. 828 - 'differential.days-stale' => 3, 829 - 830 - // -- Repositories ---------------------------------------------------------- // 831 - 832 - // The default location in which to store local copies of repositories. 833 - // Anything stored in this directory will be assumed to be under the 834 - // control of phabricator, which means that Phabricator will try to do some 835 - // maintenance on working copies if there are problems (such as a change 836 - // to the remote origin url). This maintenance may include completely 837 - // removing (and recloning) anything in this directory. 838 - // 839 - // When set to null, this option is ignored (i.e. Phabricator will not fully 840 - // control any working copies). 841 - 'repository.default-local-path' => null, 842 - 843 - // -- Maniphest ------------------------------------------------------------- // 844 - 845 - // What should the default task priority be in create flows? 846 - // See the constants in @{class:ManiphestTaskPriority} for valid values. 847 - // Defaults to "needs triage". 848 - 'maniphest.default-priority' => 90, 849 - 850 - // -- Phame ----------------------------------------------------------------- // 851 - 852 - // Should Phame users have Disqus comment widget, and if so what's the 853 - // website shortname to use? For example, secure.phabricator.org uses 854 - // "phabricator", which we registered with Disqus. If you aren't familiar 855 - // with Disqus, see: 856 - // Disqus quick start guide - http://docs.disqus.com/help/4/ 857 - // Information on shortnames - http://docs.disqus.com/help/68/ 858 - 'disqus.shortname' => null, 859 - 860 - // Directories to look for Phame skins inside of. 861 - 'phame.skins' => array( 862 - 'externals/skins/', 863 - ), 864 - 865 - // -- Remarkup -------------------------------------------------------------- // 866 - 867 - // If you enable this, linked YouTube videos will be embeded inline. This has 868 - // mild security implications (you'll leak referrers to YouTube) and is pretty 869 - // silly (but sort of awesome). 870 - 'remarkup.enable-embedded-youtube' => false, 871 - 872 - 873 - // -- Cache ----------------------------------------------------------------- // 874 - 875 - // Set this to false to disable the use of gzdeflate()-based compression in 876 - // some caches. This may give you less performant (but more debuggable) 877 - // caching. 878 - 'cache.enable-deflate' => true, 879 - 880 - // -- Garbage Collection ---------------------------------------------------- // 881 - 882 - // Phabricator generates various logs and caches in the database which can 883 - // be garbage collected after a while to make the total data size more 884 - // manageable. To run garbage collection, launch a 885 - // PhabricatorGarbageCollector daemon. 886 - 887 - // These 'ttl' keys configure how much old data the GC daemon keeps around. 888 - // Objects older than the ttl will be collected. Set any value to 0 to store 889 - // data indefinitely. 890 - 891 - 'gcdaemon.ttl.herald-transcripts' => 30 * (24 * 60 * 60), 892 - 'gcdaemon.ttl.daemon-logs' => 7 * (24 * 60 * 60), 893 - 'gcdaemon.ttl.differential-parse-cache' => 14 * (24 * 60 * 60), 894 - 'gcdaemon.ttl.markup-cache' => 30 * (24 * 60 * 60), 895 - 'gcdaemon.ttl.task-archive' => 14 * (24 * 60 * 60), 896 - 'gcdaemon.ttl.general-cache' => 30 * (24 * 60 * 60), 897 - 898 - 899 - // -- Feed ------------------------------------------------------------------ // 900 - 901 - // If you set this to true, you can embed Phabricator activity feeds in other 902 - // pages using iframes. These feeds are completely public, and a login is not 903 - // required to view them! This is intended for things like open source 904 - // projects that want to expose an activity feed on the project homepage. 905 - // 906 - // NOTE: You must also set `policy.allow-public` to true for this setting 907 - // to work properly. 908 - 'feed.public' => false, 909 - 910 - // If you set this to a list of http URIs, when a feed story is published a 911 - // task will be created for each uri that posts the story data to the uri. 912 - // Daemons automagically retry failures 100 times, waiting $fail_count * 60s 913 - // between each subsequent failure. Be sure to keep the daemon console 914 - // (/daemon/) open while developing and testing your end points. You may need 915 - // to restart your daemons to start sending http requests. 916 - // 917 - // NOTE: URIs are not validated, the URI must return http status 200 within 918 - // 30 seconds, and no permission checks are performed. 919 - 'feed.http-hooks' => array(), 920 - 921 - // -- Drydock --------------------------------------------------------------- // 922 - 923 - // If you want to use Drydock's builtin EC2 Blueprints, configure your AWS 924 - // EC2 credentials here. 925 - 'amazon-ec2.access-key' => null, 926 - 'amazon-ec2.secret-key' => null, 927 - 928 - 929 - // -- Customization --------------------------------------------------------- // 930 - 931 - // Paths to additional phutil libraries to load. 932 - 'load-libraries' => array(), 933 - 934 - 'aphront.default-application-configuration-class' => 935 - 'AphrontDefaultApplicationConfiguration', 936 - 937 - // Directory that phd (the Phabricator daemon control script) should use to 938 - // track running daemons. 939 - 'phd.pid-directory' => '/var/tmp/phd/pid', 940 - 941 - // Directory that the Phabricator daemons should use to store the log file 942 - 'phd.log-directory' => '/var/tmp/phd/log', 943 - 944 - // Number of "TaskMaster" daemons that "phd start" should start. You can 945 - // raise this if you have a task backlog, or explicitly launch more with 946 - // "phd launch <N> taskmaster". 947 - 'phd.start-taskmasters' => 4, 948 - 949 - // Launch daemons in "verbose" mode by default. This creates a lot of output, 950 - // but can help debug issues. Daemons launched in debug mode with "phd debug" 951 - // are always launched in verbose mode. See also 'phd.trace'. 952 - 'phd.verbose' => false, 953 - 954 - // Launch daemons in "trace" mode by default. This creates an ENORMOUS amount 955 - // of output, but can help debug issues. Daemons launched in debug mode with 956 - // "phd debug" are always launched in trace mdoe. See also 'phd.verbose'. 957 - 'phd.trace' => false, 958 - 959 - // This value is an input to the hash function when building resource hashes. 960 - // It has no security value, but if you accidentally poison user caches (by 961 - // pushing a bad patch or having something go wrong with a CDN, e.g.) you can 962 - // change this to something else and rebuild the Celerity map to break user 963 - // caches. Unless you are doing Celerity development, it is exceptionally 964 - // unlikely that you need to modify this. 965 - 'celerity.resource-hash' => 'd9455ea150622ee044f7931dabfa52aa', 966 - 967 - // Minify static resources by removing whitespace and comments. You should 968 - // enable this in production, but disable it in development. 969 - 'celerity.minify' => true, 970 - 971 - // You can respond to various application events by installing listeners, 972 - // which will receive callbacks when interesting things occur. Specify a list 973 - // of classes which extend PhabricatorEventListener here. 974 - 'events.listeners' => array(), 975 - 976 - // -- Syntax Highlighting --------------------------------------------------- // 977 - 978 - // Phabricator can highlight PHP by default and use Pygments for other 979 - // languages if enabled. You can provide a custom highlighter engine by 980 - // extending class PhutilSyntaxHighlighterEngine. 981 - 'syntax-highlighter.engine' => 'PhutilDefaultSyntaxHighlighterEngine', 982 - 983 - // If you want syntax highlighting for other languages than PHP then you can 984 - // install the python package 'Pygments', make sure the 'pygmentize' script is 985 - // available in the $PATH of the webserver, and then enable this. 986 - 'pygments.enabled' => false, 987 - 988 - // In places that we display a dropdown to syntax-highlight code, 989 - // this is where that list is defined. 990 - // Syntax is 'lexer-name' => 'Display Name', 991 - 'pygments.dropdown-choices' => array( 992 - 'apacheconf' => 'Apache Configuration', 993 - 'bash' => 'Bash Scripting', 994 - 'brainfuck' => 'Brainf*ck', 995 - 'c' => 'C', 996 - 'coffee-script' => 'CoffeeScript', 997 - 'cpp' => 'C++', 998 - 'css' => 'CSS', 999 - 'd' => 'D', 1000 - 'diff' => 'Diff', 1001 - 'django' => 'Django Templating', 1002 - 'erb' => 'Embedded Ruby/ERB', 1003 - 'erlang' => 'Erlang', 1004 - 'go' => 'Golang', 1005 - 'groovy' => 'Groovy', 1006 - 'haskell' => 'Haskell', 1007 - 'html' => 'HTML', 1008 - 'java' => 'Java', 1009 - 'js' => 'Javascript', 1010 - 'json' => 'JSON', 1011 - 'mysql' => 'MySQL', 1012 - 'objc' => 'Objective-C', 1013 - 'perl' => 'Perl', 1014 - 'php' => 'PHP', 1015 - 'puppet' => 'Puppet', 1016 - 'rest' => 'reStructuredText', 1017 - 'text' => 'Plain Text', 1018 - 'python' => 'Python', 1019 - 'rainbow' => 'Rainbow', 1020 - 'remarkup' => 'Remarkup', 1021 - 'ruby' => 'Ruby', 1022 - 'xml' => 'XML', 1023 - 'yaml' => 'YAML', 1024 - ), 1025 - 1026 - // This is an override list of regular expressions which allows you to choose 1027 - // what language files are highlighted as. If your projects have certain rules 1028 - // about filenames or use unusual or ambiguous language extensions, you can 1029 - // create a mapping here. This is an ordered dictionary of regular expressions 1030 - // which will be tested against the filename. They should map to either an 1031 - // explicit language as a string value, or a numeric index into the captured 1032 - // groups as an integer. 1033 - 'syntax.filemap' => array( 1034 - // Example: Treat all '*.xyz' files as PHP. 1035 - // '@\\.xyz$@' => 'php', 1036 - 1037 - // Example: Treat 'httpd.conf' as 'apacheconf'. 1038 - // '@/httpd\\.conf$@' => 'apacheconf', 1039 - 1040 - // Example: Treat all '*.x.bak' file as '.x'. NOTE: we map to capturing 1041 - // group 1 by specifying the mapping as "1". 1042 - // '@\\.([^.]+)\\.bak$@' => 1, 1043 - 1044 - '@\.arcconfig$@' => 'js', 1045 - '@\.arclint$@' => 'js', 1046 - '@\.divinerconfig$@' => 'js', 1047 - ), 1048 - 1049 - // Set the default monospaced font style for users who haven't set a custom 1050 - // style. 1051 - 'style.monospace' => '10px "Menlo", "Consolas", "Monaco", monospace', 1052 - 'style.monospace.windows' => '11px "Menlo", "Consolas", "Monaco", monospace', 1053 - 1054 - 1055 - // -- Debugging ------------------------------------------------------------- // 1056 - 1057 - // Enable this to change HTTP redirects into normal pages with a link to the 1058 - // redirection target. For example, after you submit a form you'll get a page 1059 - // saying "normally, you'd be redirected...". This is useful to examine 1060 - // service or profiler information on write pathways, or debug redirects. It 1061 - // also makes the UX horrible for normal use, so you should enable it only 1062 - // when debugging. 1063 - // 1064 - // NOTE: This does not currently work for forms with Javascript "workflow", 1065 - // since the redirect happens in Javascript. 1066 - 'debug.stop-on-redirect' => false, 1067 - 1068 - // Set the rate for how often to do sampled profiling. On average, one 1069 - // request for every number of requests specified here will be sampled. 1070 - // Set this value to 0 to completely disable profiling. In a production 1071 - // environment, this value should either be set to 0 (to disable) or to 1072 - // a large number (to sample only a few requests). 1073 - 'debug.profile-rate' => 0, 1074 - 1075 - // -- Environment ---------------------------------------------------------- // 1076 - 1077 - // Phabricator occasionally shells out to other binaries on the server. 1078 - // An example of this is the "pygmentize" command, used to syntax-highlight 1079 - // code written in languages other than PHP. By default, it is assumed that 1080 - // these binaries are in the $PATH of the user running Phabricator (normally 1081 - // 'apache', 'httpd', or 'nobody'). Here you can add extra directories to 1082 - // the $PATH environment variable, for when these binaries are in non-standard 1083 - // locations. 1084 - 'environment.append-paths' => array(), 1085 - 1086 - // -- Audit ---------------------------------------------------------- // 1087 - 1088 - // Controls whether or not task creator can Close Audits 1089 - 'audit.can-author-close-audit' => false, 1090 - );
-9
conf/development.conf.php
··· 1 - <?php 2 - 3 - return array( 4 - 5 - 'phabricator.developer-mode' => true, 6 - 'darkconsole.enabled' => true, 7 - 'celerity.minify' => false, 8 - 9 - ) + phabricator_read_config_file('default');
-5
conf/production.conf.php
··· 1 - <?php 2 - 3 - return array( 4 - 5 - ) + phabricator_read_config_file('default');