BUNSTREAM_DEFAULT_BASE, 'api_key' => '', 'id_source' => 'user_id', 'signing_secret' => '', )); } public static function get($name) { $all = self::all(); return isset($all[$name]) ? $all[$name] : ''; } public static function api_base() { $base = untrailingslashit((string) self::get('api_base')); return $base !== '' ? $base : BUNSTREAM_DEFAULT_BASE; } /** @return array{name?:string,require_signed_student_id?:bool,allowed_domains?:array,player_embed_base?:string} */ public static function account() { $account = get_option(self::ACCOUNT_OPTION, array()); $account = is_array($account) ? $account : array(); // Refreshed once a day, so a rule changed on BunStream (signed student // ids turned on) reaches the plugin without anyone saving its // settings. A failed refresh keeps the last answer; the transient // stops a failing API from being asked on every page view. $stale = empty($account['checked_at']) || (time() - (int) $account['checked_at']) > DAY_IN_SECONDS; if ($stale && self::get('api_key') !== '' && !get_transient('bunstream_account_refreshing')) { set_transient('bunstream_account_refreshing', 1, HOUR_IN_SECONDS); $fresh = BunStream_API::refresh_account(true); if (is_array($fresh)) { $account = $fresh; } } return $account; } /** Where iframes point, e.g. https://play.example.com/embed/ */ public static function player_embed_base() { $account = self::account(); if (!empty($account['player_embed_base'])) { return trailingslashit($account['player_embed_base']); } return self::api_base() . '/embed/'; } /** The key shown masked: first characters only. */ public static function masked($value) { $value = (string) $value; return $value === '' ? '' : substr($value, 0, 8) . str_repeat('•', 8); } }