Пример #1
0
function abdulrauf_adminreCaptcha_addjs()
{
    $siteKey = yourls_get_option('abdulrauf_adminreCaptcha_pub_key');
    ?>
	<script type="text/javascript">
	//JQuery function to add div for reCaptcha widget and load js only on login screen
	$(document).ready(function() {
		var logindiv = document.getElementById('login');
		if (logindiv != null) { //check if we are on login screen
			//getting reCaptcha script by jquery only on login screen
			$.getScript( "https://www.google.com/recaptcha/api.js?onload=loadCaptcha&render=explicit");
			var form = logindiv.innerHTML;
			var index = form.indexOf('<p style="text-align: right;">'); //finding tag before which reCaptcha widget should appear
			document.getElementById('login').innerHTML = form.slice(0, index) + '<div id="captcha_container"></div>' + form.slice(index);	    
		}
    });
	// JavaScript function to explicitly render the reCAPTCHA widget
	var loadCaptcha = function() {
	  captchaContainer = grecaptcha.render('captcha_container', {
		'sitekey' : '<?php 
    echo $siteKey;
    ?>
'
	  });
	};
	</script>
	<?php 
}
Пример #2
0
function temp_instead_admin_page_update()
{
    $mode = $_POST['temp_instead_mode'];
    if ($mode) {
        $mode = intval($mode);
        if (yourls_get_option('temp_instead_mode') !== false) {
            echo '<b>Redirect mode was updated successfully.</b>';
            yourls_update_option('temp_instead_mode', $mode);
        } else {
            echo '<b>Redirect mode was stored successfully.</b>';
            yourls_add_option('temp_instead_mode', $mode);
        }
    }
}
Пример #3
0
function ozh_yourls_samplepage_do_page()
{
    // Check if a form was submitted
    if (isset($_POST['test_option'])) {
        ozh_yourls_samplepage_update_option();
    }
    // Get value from database
    $test_option = yourls_get_option('test_option');
    echo <<<HTML
\t\t<h2>Sample Plugin Administration Page</h2>
\t\t<p>This plugin stores an integer in the option database</p>
\t\t<form method="post">
\t\t<p><label for="test_option">Enter an integer</label> <input type="text" id="test_option" name="test_option" value="{$test_option}" /></p>
\t\t<p><input type="submit" value="Update value" /></p>
\t\t</form>
HTML;
}
Пример #4
0
/**
 * Main func for upgrade from 1.4.3 to 1.5
 *
 */
function yourls_upgrade_to_15()
{
    // Create empty 'active_plugins' entry in the option if needed
    if (yourls_get_option('active_plugins') === false) {
        yourls_add_option('active_plugins', array());
    }
    echo "<p>Enabling the plugin API. Please wait...</p>";
    // Alter URL table to store titles
    global $ydb;
    $table_url = YOURLS_DB_TABLE_URL;
    $sql = "ALTER TABLE `{$table_url}` ADD `title` TEXT AFTER `url`;";
    $ydb->query($sql);
    echo "<p>Updating table structure. Please wait...</p>";
    // Update .htaccess
    yourls_create_htaccess();
    echo "<p>Updating .htaccess file. Please wait...</p>";
}
Пример #5
0
/**
 * Display a notice if there is a newer version of YOURLS available
 *
 * @since 1.7
 */
function yourls_new_core_version_notice()
{
    yourls_debug_log('Check for new version: ' . (yourls_maybe_check_core_version() ? 'yes' : 'no'));
    $checks = yourls_get_option('core_version_checks');
    if (isset($checks->last_result->latest) and version_compare($checks->last_result->latest, YOURLS_VERSION, '>')) {
        $msg = yourls_s('<a href="%s">YOURLS version %s</a> is available. Please update!', 'http://yourls.org/download', $checks->last_result->latest);
        yourls_add_notice($msg);
    }
}
Пример #6
0
function yourls_load_plugins()
{
    global $ydb;
    $ydb->plugins = array();
    $active_plugins = yourls_get_option('active_plugins');
    // Don't load plugins when installing or updating
    if (!$active_plugins or defined('YOURLS_INSTALLING') and YOURLS_INSTALLING or yourls_upgrade_is_needed()) {
        return;
    }
    foreach ((array) $active_plugins as $key => $plugin) {
        if (yourls_validate_plugin_file(YOURLS_PLUGINDIR . '/' . $plugin)) {
            include_once YOURLS_PLUGINDIR . '/' . $plugin;
            $ydb->plugins[] = $plugin;
            unset($active_plugins[$key]);
        }
    }
    // $active_plugins should be empty now, if not, a plugin could not be find: remove it
    if (count($active_plugins)) {
        $missing = '<strong>' . join('</strong>, <strong>', $active_plugins) . '</strong>';
        yourls_update_option('active_plugins', $ydb->plugins);
        $message = 'Could not find and deactivated ' . yourls_plural('plugin', count($active_plugins)) . ' ' . $missing;
        yourls_add_notice($message);
    }
}
Пример #7
0
/**
 * Add an option to the DB
 *
 * Pretty much stolen from WordPress
 *
 * @since 1.4
 * @param string $option Name of option to add. Expected to not be SQL-escaped.
 * @param mixed $value Optional option value. Must be serializable if non-scalar. Expected to not be SQL-escaped.
 * @return bool False if option was not added and true otherwise.
 */
function yourls_add_option($name, $value = '')
{
    global $ydb;
    $table = YOURLS_DB_TABLE_OPTIONS;
    $name = trim($name);
    if (empty($name)) {
        return false;
    }
    // Use clone to break object refs -- see commit 09b989d375bac65e692277f61a84fede2fb04ae3
    if (is_object($value)) {
        $value = clone $value;
    }
    $name = yourls_escape($name);
    // Make sure the option doesn't already exist
    if (false !== yourls_get_option($name)) {
        return false;
    }
    $_value = yourls_escape(yourls_maybe_serialize($value));
    yourls_do_action('add_option', $name, $_value);
    $ydb->query("INSERT INTO `{$table}` (`option_name`, `option_value`) VALUES ('{$name}', '{$_value}')");
    $ydb->option[$name] = $value;
    return true;
}
Пример #8
0
function yourls_load_plugins()
{
    // Don't load plugins when installing or updating
    if (yourls_is_installing() or yourls_is_upgrading()) {
        return;
    }
    $active_plugins = yourls_get_option('active_plugins');
    if (false === $active_plugins) {
        return;
    }
    global $ydb;
    $ydb->plugins = array();
    foreach ((array) $active_plugins as $key => $plugin) {
        if (yourls_validate_plugin_file(YOURLS_PLUGINDIR . '/' . $plugin)) {
            include_once YOURLS_PLUGINDIR . '/' . $plugin;
            $ydb->plugins[] = $plugin;
            unset($active_plugins[$key]);
        }
    }
    // $active_plugins should be empty now, if not, a plugin could not be find: remove it
    if (count($active_plugins)) {
        yourls_update_option('active_plugins', $ydb->plugins);
        $message = yourls_n('Could not find and deactivated plugin :', 'Could not find and deactivated plugins :', count($active_plugins));
        $missing = '<strong>' . join('</strong>, <strong>', $active_plugins) . '</strong>';
        yourls_add_notice($message . ' ' . $missing);
    }
}
Пример #9
0
 * The following code is a shim that helps users store passwords securely in config.php
 * by storing a password hash and removing the plaintext.
 *
 * TODO: Remove this once real user management is implemented
 */
// Did we just fail at encrypting passwords ?
if (isset($_GET['dismiss']) && $_GET['dismiss'] == 'hasherror') {
    yourls_update_option('defer_hashing_error', time() + 86400 * 7);
    // now + 1 week
} else {
    // Encrypt passwords that are clear text
    if (!defined('YOURLS_NO_HASH_PASSWORD') && yourls_has_cleartext_passwords()) {
        $hash = yourls_hash_passwords_now(YOURLS_CONFIGFILE);
        if ($hash === true) {
            // Hashing succesful. Remove flag from DB if any.
            if (yourls_get_option('defer_hashing_error')) {
                yourls_delete_option('defer_hashing_error');
            }
        } else {
            // It failed, display message for first time or if last time was a week ago
            if (time() > yourls_get_option('defer_hashing_error') or !yourls_get_option('defer_hashing_error')) {
                $message = yourls_s('Could not auto-encrypt passwords. Error was: "%s".', $hash);
                $message .= ' ';
                $message .= yourls_s('<a href="%s">Get help</a>.', 'http://yourls.org/userpassword');
                $message .= '</p><p>';
                $message .= yourls_s('<a href="%s">Click here</a> to dismiss this message for one week.', '?dismiss=hasherror');
                yourls_add_notice($message);
            }
        }
    }
}
Пример #10
0
function gmo_domain_swap_add_menu()
{
    echo '<li>';
    echo 'Active domain: <select onchange="window.location.hostname = this.value;">';
    $domain_swap_values = json_decode(yourls_get_option('domain_swap_values'));
    foreach ($domain_swap_values->domains as $domain) {
        $selected = $_SERVER["SERVER_NAME"] == $domain ? 'selected' : '';
        echo '<option ' . $selected . ' value="' . $domain . '"/>//' . $domain . '/';
    }
    echo '</select>';
    echo '</li>';
}
Пример #11
0
/**
 * Sends the keyword and destination URL to Piwik
 *
 * @param bool $return    The value to return. Defaults to false with doesn't enable the filter
 * @param string $keyword    The requested keyword
 * @return bool
 */
function itfs_piwik_log_request($return, $keyword)
{
    // Get current configuration from database
    $piwik_config = yourls_get_option('piwik_config');
    // Let's check if the user wants to log bots
    if ($piwik_config[remove_bots]) {
        if (itfs_piwik_is_bot()) {
            return $return;
        }
    }
    try {
        // Need to use a file_exists check as require only produces a fatal compilation error
        if (!file_exists(dirname(__FILE__) . '/libs/Piwik/PiwikTracker.php')) {
            throw new Exception("Error can't load PiwikTracker.php");
        } else {
            // Piwik Tracking API init
            require_once dirname(__FILE__) . '/libs/Piwik/PiwikTracker.php';
            PiwikTracker::$URL = $piwik_config[piwik_url];
        }
    } catch (Exception $e) {
        error_log("ITFS_PIWIK: " . $e->getMessage(), 0);
        return $return;
    }
    // Use this to get the destination
    $destination = yourls_get_keyword_longurl($keyword);
    // Only log a request if we have a destination and the proper Piwik settings
    if ($destination == false) {
        error_log("ITFS_PIWIK: Missing parameters prevented me from logging the request with Piwik", 0);
        error_log("ITFS_PIWIK: Parameters we have: " . $keyword . ', ' . $destination, 0);
        return $return;
    }
    //Useful for hosts using one Piwik installation with multiple YOURLS installation
    $domain_landed = $_SERVER['HTTP_HOST'];
    $page_url = "http://" . $domain_landed . "/" . $keyword;
    try {
        $pt = new PiwikTracker($piwik_config[site_id]);
        // This will be the entry page in Piwik
        $pt->setUrl($page_url);
        // This will fail silently if the token is not valid or if the user doesn't have admin rights
        if (!empty($piwik_config[token])) {
            $pt->setTokenAuth($piwik_config[token]);
        }
        // This shows up in the visitor logs and identify the source of the data
        $pt->setCustomVariable(1, 'App', 'Piwik plugin for YOURLS', 'visit');
        // Some useful variables
        $pt->setCustomVariable(2, 'Domain landed', $domain_landed, 'page');
        $pt->setCustomVariable(3, 'Keyword', $keyword, 'page');
        // User defined custom variable
        if (!empty($piwik_config[customvar_name]) && !empty($piwik_config[customvar_value])) {
            $pt->setCustomVariable(4, $piwik_config[customvar_name], $piwik_config[customvar_value], $piwik_config[customvar_scope]);
        }
        // Track the visit in Piwik
        $title = yourls_get_keyword_title($keyword);
        @$pt->doTrackPageView($title);
        // The destination URL will show up as an outlink
        @$pt->doTrackAction($destination, 'link');
    } catch (Exception $e) {
        error_log("ITFS_PIWIK: Error when trying to log the request with Piwik. " . $e->getMessage(), 0);
        return $return;
    }
    if ($piwik_config[disable_stats]) {
        //error_log("ITFS_PIWIK: NOT logging locally", 0);
        return;
    } else {
        //error_log("ITFS_PIWIK: Logging locally", 0);
        return $return;
    }
}
Пример #12
0
/**
 * Return the date in localized format, based on timestamp.
 *
 * If the locale specifies the locale month and weekday, then the locale will
 * take over the format for the date. If it isn't, then the date format string
 * will be used instead.
 *
 * @since 1.6
 *
 * @param string   $dateformatstring Format to display the date.
 * @param bool|int $unixtimestamp    Optional. Unix timestamp.
 * @param bool     $gmt              Optional, default is false. Whether to convert to GMT for time.
 * @return string The date, translated if locale specifies it.
 */
function yourls_date_i18n($dateformatstring, $unixtimestamp = false, $gmt = false)
{
    global $yourls_locale_formats;
    if (!isset($yourls_locale_formats)) {
        $yourls_locale_formats = new YOURLS_Locale_Formats();
    }
    $i = $unixtimestamp;
    if (false === $i) {
        if (!$gmt) {
            $i = yourls_current_time('timestamp');
        } else {
            $i = time();
        }
        // we should not let date() interfere with our
        // specially computed timestamp
        $gmt = true;
    }
    // store original value for language with untypical grammars
    // see http://core.trac.wordpress.org/ticket/9396
    $req_format = $dateformatstring;
    $datefunc = $gmt ? 'gmdate' : 'date';
    if (!empty($yourls_locale_formats->month) && !empty($yourls_locale_formats->weekday)) {
        $datemonth = $yourls_locale_formats->get_month($datefunc('m', $i));
        $datemonth_abbrev = $yourls_locale_formats->get_month_abbrev($datemonth);
        $dateweekday = $yourls_locale_formats->get_weekday($datefunc('w', $i));
        $dateweekday_abbrev = $yourls_locale_formats->get_weekday_abbrev($dateweekday);
        $datemeridiem = $yourls_locale_formats->get_meridiem($datefunc('a', $i));
        $datemeridiem_capital = $yourls_locale_formats->get_meridiem($datefunc('A', $i));
        $dateformatstring = ' ' . $dateformatstring;
        $dateformatstring = preg_replace("/([^\\\\])D/", "\\1" . yourls_backslashit($dateweekday_abbrev), $dateformatstring);
        $dateformatstring = preg_replace("/([^\\\\])F/", "\\1" . yourls_backslashit($datemonth), $dateformatstring);
        $dateformatstring = preg_replace("/([^\\\\])l/", "\\1" . yourls_backslashit($dateweekday), $dateformatstring);
        $dateformatstring = preg_replace("/([^\\\\])M/", "\\1" . yourls_backslashit($datemonth_abbrev), $dateformatstring);
        $dateformatstring = preg_replace("/([^\\\\])a/", "\\1" . yourls_backslashit($datemeridiem), $dateformatstring);
        $dateformatstring = preg_replace("/([^\\\\])A/", "\\1" . yourls_backslashit($datemeridiem_capital), $dateformatstring);
        $dateformatstring = substr($dateformatstring, 1, strlen($dateformatstring) - 1);
    }
    $timezone_formats = array('P', 'I', 'O', 'T', 'Z', 'e');
    $timezone_formats_re = implode('|', $timezone_formats);
    if (preg_match("/{$timezone_formats_re}/", $dateformatstring)) {
        // TODO: implement a timezone option
        $timezone_string = yourls_get_option('timezone_string');
        if ($timezone_string) {
            $timezone_object = timezone_open($timezone_string);
            $date_object = date_create(null, $timezone_object);
            foreach ($timezone_formats as $timezone_format) {
                if (false !== strpos($dateformatstring, $timezone_format)) {
                    $formatted = date_format($date_object, $timezone_format);
                    $dateformatstring = ' ' . $dateformatstring;
                    $dateformatstring = preg_replace("/([^\\\\]){$timezone_format}/", "\\1" . yourls_backslashit($formatted), $dateformatstring);
                    $dateformatstring = substr($dateformatstring, 1, strlen($dateformatstring) - 1);
                }
            }
        }
    }
    $j = @$datefunc($dateformatstring, $i);
    // allow plugins to redo this entirely for languages with untypical grammars
    $j = yourls_apply_filter('date_i18n', $j, $req_format, $i, $gmt);
    return $j;
}
Пример #13
0
function yourls_check_maintenance_mode()
{
    // TODO: all cases that always display the sites (is_admin but not is_ajax?)
    if (1) {
        return;
    }
    // first case: /user/maintenance.php file
    if (file_exists(YOURLS_USERDIR . '/maintenance.php')) {
        include YOURLS_USERDIR . '/maintenance.php';
        die;
    }
    // second case: option in DB
    if (yourls_get_option('maintenance_mode') !== false) {
        require_once YOURLS_INC . '/functions-html.php';
        $title = 'Service temporarily unavailable';
        $message = 'Our service is currently undergoing scheduled maintenance.</p>
		<p>Things should not last very long, thank you for your patience and please excuse the inconvenience';
        yourls_die($message, $title, 503);
    }
}
Пример #14
0
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
require_once "recaptchalib.php";
// Register API keys at https://www.google.com/recaptcha/admin
$siteKey = yourls_get_option('abdulrauf_adminreCaptcha_pub_key');
$secret = yourls_get_option('abdulrauf_adminreCaptcha_priv_key');
// reCAPTCHA supported 40+ languages listed here: https://developers.google.com/recaptcha/docs/language
$lang = "en";
// The response from reCAPTCHA
$resp = null;
// The error code from reCAPTCHA, if any
$error = null;
$reCaptcha = new ReCaptcha($secret);
// Was there a reCAPTCHA response?
if ($_POST["g-recaptcha-response"]) {
    $resp = $reCaptcha->verifyResponse($_SERVER["REMOTE_ADDR"], $_POST["g-recaptcha-response"]);
}
Пример #15
0
function yourls_is_installed()
{
    static $is_installed = false;
    if ($is_installed === false) {
        $check_14 = $check_13 = false;
        global $ydb;
        if (defined('YOURLS_DB_TABLE_NEXTDEC')) {
            $check_13 = $ydb->get_var('SELECT `next_id` FROM ' . YOURLS_DB_TABLE_NEXTDEC);
        }
        $check_14 = yourls_get_option('version');
        $is_installed = $check_13 || $check_14;
    }
    return $is_installed;
}
Пример #16
0
/**
 * Determine if we want to check for a newer YOURLS version (and check if applicable)
 *
 * Currently checks are performed every 24h and only when someone is visiting an admin page.
 * In the future (1.8?) maybe check with cronjob emulation instead.
 *
 * @since 1.7
 * @return bool true if a check was needed and successfully performed, false otherwise
 */
function yourls_maybe_check_core_version()
{
    // Allow plugins to short-circuit the whole function
    $pre = yourls_apply_filter('shunt_maybe_check_core_version', null);
    if (null !== $pre) {
        return $pre;
    }
    if (defined('YOURLS_NO_VERSION_CHECK') && YOURLS_NO_VERSION_CHECK) {
        return false;
    }
    if (!yourls_is_admin()) {
        return false;
    }
    $checks = yourls_get_option('core_version_checks');
    /* We don't want to check if :
    	 - last_result is set (a previous check was performed)
    	 - and it was less than 24h ago (or less than 2h ago if it wasn't successful)
    	 - and version checked matched version running
    	 Otherwise, we want to check.
    	*/
    if (!empty($checks->last_result) and ($checks->failed_attempts == 0 && time() - $checks->last_attempt < 24 * 3600 or $checks->failed_attempts > 0 && time() - $checks->last_attempt < 2 * 3600) and $checks->version_checked == YOURLS_VERSION) {
        return false;
    }
    // We want to check if there's a new version
    $new_check = yourls_check_core_version();
    // Could not check for a new version, and we don't have ancient data
    if (false == $new_check && !isset($checks->last_result->latest)) {
        return false;
    }
    return true;
}
Пример #17
0
function spb_recaptcha_save_admin()
{
    $pubkey = $_POST['spb_recaptcha_public_key'];
    $privkey = $_POST['spb_recaptcha_private_key'];
    $solvemediaCKey = $_POST['spb_recaptcha_solvemediaCKey'];
    $solvemediaVKey = $_POST['spb_recaptcha_solvemediaVKey'];
    $solvemediaHKey = $_POST['spb_recaptcha_solvemediaHKey'];
    if (yourls_get_option('spb_recaptcha_pub_key') !== false) {
        yourls_update_option('spb_recaptcha_pub_key', $pubkey);
    } else {
        yourls_add_option('spb_recaptcha_pub_key', $pubkey);
    }
    if (yourls_get_option('spb_recaptcha_priv_key') !== false) {
        yourls_update_option('spb_recaptcha_priv_key', $privkey);
    } else {
        yourls_add_option('spb_recaptcha_priv_key', $privkey);
    }
    if (yourls_get_option('spb_recaptcha_solvemediaCKey') !== false) {
        yourls_update_option('spb_recaptcha_solvemediaCKey', $solvemediaCKey);
    } else {
        yourls_add_option('spb_recaptcha_solvemediaCKey', $solvemediaCKey);
    }
    if (yourls_get_option('spb_recaptcha_solvemediaVKey') !== false) {
        yourls_update_option('spb_recaptcha_solvemediaVKey', $solvemediaVKey);
    } else {
        yourls_add_option('spb_recaptcha_solvemediaVKey', $solvemediaVKey);
    }
    if (yourls_get_option('spb_recaptcha_solvemediaHKey') !== false) {
        yourls_update_option('spb_recaptcha_solvemediaHKey', $solvemediaHKey);
    } else {
        yourls_add_option('spb_recaptcha_solvemediaHKey', $solvemediaHKey);
    }
    echo "Saved";
}