<?php
// Service base url
$BASE_URL = "https://example.com/signup";

// Language country code. The default language to look for. Leave empty for the default html folder
$LANG_CC = "";

// Ldap server
$HOST = 'localhost';
$PORT = 389;
$USER = "admin";
$PASSWORD = "myldappassword";
$BASE_DN = 'cn={},ou=organization,dc=example,dc=com';
$ENCRYPT_PASSWORDS = false;

$SERVICE_NAME = "Test Service";

// Redis password
$REDIS_PASS = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

// Mail
$SMTP = (object)[
        "from" => 'frommail@mail.com',
        'host' => 'tls://mail.com',
        'port' => '465',
        'username' => 'frommail@mail.com',
        'password' => 'xxxxxxxxx'
];
$FALLBACK_SMTP = (object)[
        "from" => 'another@gmail.com',
        'host' => 'tls://gmail.com',
        'port' => '465',
        'username' => 'signup@gmail.com',
        'password' => 'xxxxxxxxxx'
];

// User Validation
$VAL_USER = (object)[
        "min_username" => 5,
        "max_username" => 32,
        "min_first_name" => 3,
        "max_first_name" => 32,
        "min_last_name" => 3,
        "max_last_name" => 32,
        "min_password" => 8,
        "max_password" => 128
];
$CAPTCHA_LENGTH = 5;

// Use unsafe but easier captcha (no ocr testing)
$SIMPLECAPTCHA = false;

// not accept emails from
$MAIL_HOST_BLACKLIST = ["mailinator.com"];
// Use fallback_smtp directly for these hosts
$MAIL_HOST_DIRECT_FALLBACK = ["hotmail.com"];

// Max registrations from one ip per hour
$HOURLY_REGISTRATIONS = 3;

// Max Captcha requests for one  ip per hour
$HOURLY_CAPTCHAS = 15;

// Expiration delay for mail confirmation in seconds. After this time the email
// confirmation link will say 'token expired'
$MAIL_CONFIRMATION_AWAIT_DELAY = 3600;

// CONFIRMATION EMAIL TEMPLATE
// text is the version for mail clients that don't support html
// html is the version with html support
// You can create templaets for different languages under
// templates_cc/email.php
$MAIL_TEMPLATE = (object)[
        "subject" => "Confirm your email", 
        "text" => "To complete your registration please paste this to your browser: {{url}}",
        "html" => "<html><body>
                <h2>Almost there! Click on the link bellow to confirm your email address</h2>
                <a href='{{url}}'>Confirm</a>
        </body></html>"
];

$RECOVERY_EMAIL_TEMPLATE = (object)[
        "subject" => "Change your password!",
        "text"    => "Seems you requested a password change. If that wasn't you please ignore this message. Otherwise go to this url to change your password: {{url}}",
        "html"    => "<html><body>
                <h3>Seems you requested a password change. If that wasn't you please ignore this message. Otherwise go to this url to change your password</h3>
                <a href='{{url}}'>Click here</a> to change your password
        </body></html>"
];


$PASSWORD_CHANGED_EMAIL_TEMPLATE = (object)[
        "subject" => "Your password was changed",
        "text"    => "Your password was chanegd successfully. If this wasn't you please contact support",
        "html"    => "<html><body>
                <h3>Your password was chanegd successfully. If this wasn't you please contact support</h3>
        </body></html>"
];

// url to redirect to after mail confirmation. It will be 5 seconds of delay. Leave empty to none
$REDIRECT_TO = "";

// Registration callback. A function to run when registration is successfull
$POST_REGISTER_HOOK = function($user){
  echo "Welcome " . $user->name . "! Your ip is logged: " . $_SERVER['REMOTE_ADDR'];
};

// displays php errors on the html page. Set to false for production
$DEBUG = false;
