2016-03-25 01:18:05 -07:00
|
|
|
|
<?php
|
2018-11-01 19:59:50 -07:00
|
|
|
|
|
2016-03-25 01:18:05 -07:00
|
|
|
|
namespace App\Models;
|
|
|
|
|
|
2021-06-10 13:17:44 -07:00
|
|
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
2016-03-25 01:18:05 -07:00
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
2016-12-26 15:19:04 -08:00
|
|
|
|
use Illuminate\Notifications\Notifiable;
|
2018-12-06 14:05:43 -08:00
|
|
|
|
use Illuminate\Support\Collection;
|
2019-03-13 20:12:03 -07:00
|
|
|
|
use Illuminate\Support\Facades\App;
|
|
|
|
|
use Illuminate\Support\Facades\Cache;
|
2022-08-29 11:26:47 -07:00
|
|
|
|
use App\Helpers\Helper;
|
2016-03-25 01:18:05 -07:00
|
|
|
|
use Watson\Validating\ValidatingTrait;
|
|
|
|
|
|
2022-08-29 11:26:47 -07:00
|
|
|
|
|
2018-11-01 19:59:50 -07:00
|
|
|
|
/**
|
|
|
|
|
* Settings model.
|
|
|
|
|
*/
|
2016-03-25 01:18:05 -07:00
|
|
|
|
class Setting extends Model
|
|
|
|
|
{
|
2021-06-10 13:17:44 -07:00
|
|
|
|
use HasFactory;
|
2018-11-01 19:59:50 -07:00
|
|
|
|
use Notifiable, ValidatingTrait;
|
|
|
|
|
|
|
|
|
|
/**
|
2023-01-09 16:16:09 -08:00
|
|
|
|
* The cache property so that multiple invocations of this will only load the Settings record from disk only once
|
|
|
|
|
* @var self
|
2018-11-01 19:59:50 -07:00
|
|
|
|
*/
|
2023-01-09 16:16:09 -08:00
|
|
|
|
public static ?self $_cache = null;
|
2018-11-01 19:59:50 -07:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The setup check cache key name.
|
|
|
|
|
*
|
|
|
|
|
* @var string
|
|
|
|
|
*/
|
2023-02-06 12:44:02 -08:00
|
|
|
|
public const SETUP_CHECK_KEY = 'snipeit_setup_check';
|
2018-11-01 19:59:50 -07:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Whether the model should inject it's identifier to the unique
|
|
|
|
|
* validation rules before attempting validation. If this property
|
|
|
|
|
* is not set in the model it will default to true.
|
|
|
|
|
*
|
|
|
|
|
* @var bool
|
|
|
|
|
*/
|
2016-03-25 01:18:05 -07:00
|
|
|
|
protected $injectUniqueIdentifier = true;
|
|
|
|
|
|
2018-11-01 19:59:50 -07:00
|
|
|
|
/**
|
|
|
|
|
* Model rules.
|
|
|
|
|
*
|
|
|
|
|
* @var array
|
|
|
|
|
*/
|
2016-03-25 01:18:05 -07:00
|
|
|
|
protected $rules = [
|
2018-11-01 19:59:50 -07:00
|
|
|
|
'brand' => 'required|min:1|numeric',
|
|
|
|
|
'qr_text' => 'max:31|nullable',
|
|
|
|
|
'alert_email' => 'email_array|nullable',
|
|
|
|
|
'admin_cc_email' => 'email|nullable',
|
|
|
|
|
'default_currency' => 'required',
|
|
|
|
|
'locale' => 'required',
|
2020-04-20 23:20:34 -07:00
|
|
|
|
'labels_per_page' => 'numeric',
|
2018-11-01 19:59:50 -07:00
|
|
|
|
'labels_width' => 'numeric',
|
|
|
|
|
'labels_height' => 'numeric',
|
|
|
|
|
'labels_pmargin_left' => 'numeric|nullable',
|
|
|
|
|
'labels_pmargin_right' => 'numeric|nullable',
|
|
|
|
|
'labels_pmargin_top' => 'numeric|nullable',
|
|
|
|
|
'labels_pmargin_bottom' => 'numeric|nullable',
|
|
|
|
|
'labels_display_bgutter' => 'numeric|nullable',
|
|
|
|
|
'labels_display_sgutter' => 'numeric|nullable',
|
|
|
|
|
'labels_fontsize' => 'numeric|min:5',
|
|
|
|
|
'labels_pagewidth' => 'numeric|nullable',
|
|
|
|
|
'labels_pageheight' => 'numeric|nullable',
|
|
|
|
|
'login_remote_user_enabled' => 'numeric|nullable',
|
|
|
|
|
'login_common_disabled' => 'numeric|nullable',
|
2018-03-14 12:48:07 -07:00
|
|
|
|
'login_remote_user_custom_logout_url' => 'string|nullable',
|
2019-09-03 11:07:26 -07:00
|
|
|
|
'login_remote_user_header_name' => 'string|nullable',
|
2018-11-01 19:59:50 -07:00
|
|
|
|
'thumbnail_max_h' => 'numeric|max:500|min:25',
|
2020-10-08 18:43:23 -07:00
|
|
|
|
'pwd_secure_min' => 'numeric|required|min:8',
|
2018-11-01 19:59:50 -07:00
|
|
|
|
'audit_warning_days' => 'numeric|nullable',
|
|
|
|
|
'audit_interval' => 'numeric|nullable',
|
|
|
|
|
'custom_forgot_pass_url' => 'url|nullable',
|
|
|
|
|
'privacy_policy_link' => 'nullable|url',
|
2023-05-10 00:34:31 -07:00
|
|
|
|
'google_redirect' => 'nullable|url',
|
2016-03-25 01:18:05 -07:00
|
|
|
|
];
|
|
|
|
|
|
2018-11-01 19:59:50 -07:00
|
|
|
|
protected $fillable = [
|
|
|
|
|
'site_name',
|
|
|
|
|
'email_domain',
|
|
|
|
|
'email_format',
|
|
|
|
|
'username_format',
|
2023-03-22 14:43:00 -07:00
|
|
|
|
'webhook_endpoint',
|
|
|
|
|
'webhook_channel',
|
|
|
|
|
'webhook_botname',
|
2023-05-10 00:34:31 -07:00
|
|
|
|
'google_login',
|
|
|
|
|
'google_client_id',
|
|
|
|
|
'google_client_secret',
|
|
|
|
|
'google_redirect',
|
2018-11-01 19:59:50 -07:00
|
|
|
|
];
|
2016-03-25 01:18:05 -07:00
|
|
|
|
|
2018-11-01 19:59:50 -07:00
|
|
|
|
/**
|
|
|
|
|
* Get the app settings.
|
|
|
|
|
* Cache is expired on Setting model saved in EventServiceProvider.
|
|
|
|
|
*
|
|
|
|
|
* @author Wes Hulette <jwhulette@gmail.com>
|
|
|
|
|
*
|
|
|
|
|
* @since 5.0.0
|
|
|
|
|
*
|
2018-11-02 12:23:41 -07:00
|
|
|
|
* @return \App\Models\Setting|null
|
2018-11-01 19:59:50 -07:00
|
|
|
|
*/
|
2021-06-10 13:15:52 -07:00
|
|
|
|
public static function getSettings(): ?self
|
2016-03-25 01:18:05 -07:00
|
|
|
|
{
|
2023-01-09 16:16:09 -08:00
|
|
|
|
if (!self::$_cache) {
|
2018-11-02 12:23:41 -07:00
|
|
|
|
// Need for setup as no tables exist
|
|
|
|
|
try {
|
2023-01-09 16:16:09 -08:00
|
|
|
|
self::$_cache = self::first();
|
2018-11-02 12:23:41 -07:00
|
|
|
|
} catch (\Throwable $th) {
|
|
|
|
|
return null;
|
2016-11-28 22:38:11 -08:00
|
|
|
|
}
|
2023-01-09 16:16:09 -08:00
|
|
|
|
}
|
|
|
|
|
return self::$_cache;
|
2021-06-10 13:15:52 -07:00
|
|
|
|
}
|
2016-11-28 22:38:11 -08:00
|
|
|
|
|
2018-11-01 19:59:50 -07:00
|
|
|
|
/**
|
|
|
|
|
* Check to see if setup process is complete.
|
|
|
|
|
* Cache is expired on Setting model saved in EventServiceProvider.
|
|
|
|
|
*
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public static function setupCompleted(): bool
|
2016-06-22 12:27:41 -07:00
|
|
|
|
{
|
2021-06-10 13:15:52 -07:00
|
|
|
|
try {
|
|
|
|
|
$usercount = User::withTrashed()->count();
|
|
|
|
|
$settingsCount = self::count();
|
|
|
|
|
|
|
|
|
|
return $usercount > 0 && $settingsCount > 0;
|
|
|
|
|
} catch (\Throwable $th) {
|
|
|
|
|
\Log::debug('User table and settings table DO NOT exist or DO NOT have records');
|
|
|
|
|
// Catch the error if the tables dont exit
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2016-05-14 16:09:00 -07:00
|
|
|
|
}
|
|
|
|
|
|
2018-11-01 19:59:50 -07:00
|
|
|
|
/**
|
|
|
|
|
* Get the current Laravel version.
|
|
|
|
|
*
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
public function lar_ver(): string
|
2016-03-25 01:18:05 -07:00
|
|
|
|
{
|
2018-11-01 19:59:50 -07:00
|
|
|
|
$app = App::getFacadeApplication();
|
2016-03-25 01:18:05 -07:00
|
|
|
|
return $app::VERSION;
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-01 19:59:50 -07:00
|
|
|
|
/**
|
|
|
|
|
* Get the default EULA text.
|
|
|
|
|
*
|
|
|
|
|
* @return string|null
|
|
|
|
|
*/
|
|
|
|
|
public static function getDefaultEula(): ?string
|
2016-03-25 01:18:05 -07:00
|
|
|
|
{
|
2018-11-01 19:59:50 -07:00
|
|
|
|
if (self::getSettings()->default_eula_text) {
|
2022-08-29 11:26:47 -07:00
|
|
|
|
return Helper::parseEscapedMarkedown(self::getSettings()->default_eula_text);
|
2016-03-25 01:18:05 -07:00
|
|
|
|
}
|
2018-11-01 19:59:50 -07:00
|
|
|
|
|
2018-01-20 08:46:19 -08:00
|
|
|
|
return null;
|
2016-03-25 01:18:05 -07:00
|
|
|
|
}
|
|
|
|
|
|
2018-11-01 19:59:50 -07:00
|
|
|
|
/**
|
|
|
|
|
* Check wether to show in model dropdowns.
|
|
|
|
|
*
|
|
|
|
|
* @param string $element
|
|
|
|
|
*
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function modellistCheckedValue($element): bool
|
|
|
|
|
{
|
|
|
|
|
$settings = self::getSettings();
|
2018-01-24 10:43:46 -08:00
|
|
|
|
// If the value is blank for some reason
|
2018-11-01 19:59:50 -07:00
|
|
|
|
if ($settings->modellist_displays == '') {
|
2018-01-24 10:43:46 -08:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2018-11-01 19:59:50 -07:00
|
|
|
|
|
|
|
|
|
$values = explode(',', $settings->modellist_displays);
|
2018-01-24 10:43:46 -08:00
|
|
|
|
|
|
|
|
|
foreach ($values as $value) {
|
|
|
|
|
if ($value == $element) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-01 19:59:50 -07:00
|
|
|
|
return false;
|
2018-01-24 10:43:46 -08:00
|
|
|
|
}
|
|
|
|
|
|
2017-11-15 14:27:21 -08:00
|
|
|
|
/**
|
|
|
|
|
* Escapes the custom CSS, and then un-escapes the greater-than symbol
|
|
|
|
|
* so it can work with direct descendant characters for bootstrap
|
2018-11-01 19:59:50 -07:00
|
|
|
|
* menu overrides like:.
|
2021-06-10 13:15:52 -07:00
|
|
|
|
*
|
2017-11-15 14:27:21 -08:00
|
|
|
|
* .skin-blue .sidebar-menu>li.active>a, .skin-blue .sidebar-menu>li:hover>a
|
2021-06-10 13:15:52 -07:00
|
|
|
|
*
|
2017-11-15 14:27:21 -08:00
|
|
|
|
* Important: Do not remove the e() escaping here, as we output raw in the blade.
|
|
|
|
|
*
|
|
|
|
|
* @return string escaped CSS
|
2018-11-01 19:59:50 -07:00
|
|
|
|
*
|
2017-11-15 14:27:21 -08:00
|
|
|
|
* @author A. Gianotto <snipe@snipe.net>
|
|
|
|
|
*/
|
2018-11-01 19:59:50 -07:00
|
|
|
|
public function show_custom_css(): string
|
2016-03-25 01:18:05 -07:00
|
|
|
|
{
|
2018-11-01 19:59:50 -07:00
|
|
|
|
$custom_css = self::getSettings()->custom_css;
|
2016-03-25 01:18:05 -07:00
|
|
|
|
$custom_css = e($custom_css);
|
|
|
|
|
// Needed for modifying the bootstrap nav :(
|
|
|
|
|
$custom_css = str_ireplace('script', 'SCRIPTS-NOT-ALLOWED-HERE', $custom_css);
|
|
|
|
|
$custom_css = str_replace('>', '>', $custom_css);
|
2019-03-01 15:25:42 -08:00
|
|
|
|
// Allow String output (needs quotes)
|
|
|
|
|
$custom_css = str_replace('"', '"', $custom_css);
|
2018-11-01 19:59:50 -07:00
|
|
|
|
|
2016-03-25 01:18:05 -07:00
|
|
|
|
return $custom_css;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2021-06-10 13:15:52 -07:00
|
|
|
|
* Converts bytes into human readable file size.
|
|
|
|
|
*
|
|
|
|
|
* @param string $bytes
|
2018-11-01 19:59:50 -07:00
|
|
|
|
*
|
2021-06-10 13:15:52 -07:00
|
|
|
|
* @return string human readable file size (2,87 Мб)
|
2018-11-01 19:59:50 -07:00
|
|
|
|
*
|
2021-06-10 13:15:52 -07:00
|
|
|
|
* @author Mogilev Arseny
|
|
|
|
|
*/
|
2018-11-01 19:59:50 -07:00
|
|
|
|
public static function fileSizeConvert($bytes): string
|
2016-03-25 01:18:05 -07:00
|
|
|
|
{
|
2022-05-19 10:47:12 -07:00
|
|
|
|
$result = 0;
|
2016-03-25 01:18:05 -07:00
|
|
|
|
$bytes = floatval($bytes);
|
2018-11-01 19:59:50 -07:00
|
|
|
|
$arBytes = [
|
|
|
|
|
0 => [
|
|
|
|
|
'UNIT' => 'TB',
|
|
|
|
|
'VALUE' => pow(1024, 4),
|
|
|
|
|
],
|
|
|
|
|
1 => [
|
|
|
|
|
'UNIT' => 'GB',
|
|
|
|
|
'VALUE' => pow(1024, 3),
|
|
|
|
|
],
|
|
|
|
|
2 => [
|
|
|
|
|
'UNIT' => 'MB',
|
|
|
|
|
'VALUE' => pow(1024, 2),
|
|
|
|
|
],
|
|
|
|
|
3 => [
|
|
|
|
|
'UNIT' => 'KB',
|
|
|
|
|
'VALUE' => 1024,
|
|
|
|
|
],
|
|
|
|
|
4 => [
|
|
|
|
|
'UNIT' => 'B',
|
|
|
|
|
'VALUE' => 1,
|
|
|
|
|
],
|
|
|
|
|
];
|
2016-03-25 01:18:05 -07:00
|
|
|
|
|
2021-06-10 13:15:52 -07:00
|
|
|
|
foreach ($arBytes as $arItem) {
|
2018-11-01 19:59:50 -07:00
|
|
|
|
if ($bytes >= $arItem['VALUE']) {
|
|
|
|
|
$result = $bytes / $arItem['VALUE'];
|
|
|
|
|
$result = round($result, 2).$arItem['UNIT'];
|
2021-06-10 13:15:52 -07:00
|
|
|
|
break;
|
2016-03-25 01:18:05 -07:00
|
|
|
|
}
|
2021-06-10 13:15:52 -07:00
|
|
|
|
}
|
2018-11-01 19:59:50 -07:00
|
|
|
|
|
2021-06-10 13:15:52 -07:00
|
|
|
|
return $result;
|
2016-03-25 01:18:05 -07:00
|
|
|
|
}
|
2016-12-26 15:19:04 -08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The url for slack notifications.
|
2018-11-01 19:59:50 -07:00
|
|
|
|
* Used by Notifiable trait.
|
|
|
|
|
*
|
|
|
|
|
* @return string
|
2016-12-26 15:19:04 -08:00
|
|
|
|
*/
|
2018-11-01 19:59:50 -07:00
|
|
|
|
public function routeNotificationForSlack(): string
|
2016-12-26 15:19:04 -08:00
|
|
|
|
{
|
|
|
|
|
// At this point the endpoint is the same for everything.
|
|
|
|
|
// In the future this may want to be adapted for individual notifications.
|
2023-03-22 14:43:00 -07:00
|
|
|
|
return self::getSettings()->webhook_endpoint;
|
2016-12-26 15:19:04 -08:00
|
|
|
|
}
|
2017-08-22 20:32:39 -07:00
|
|
|
|
|
2018-11-01 19:59:50 -07:00
|
|
|
|
/**
|
|
|
|
|
* Get the mail reply to address from configuration.
|
|
|
|
|
*
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
public function routeNotificationForMail(): string
|
2018-03-02 18:01:20 -08:00
|
|
|
|
{
|
|
|
|
|
// At this point the endpoint is the same for everything.
|
|
|
|
|
// In the future this may want to be adapted for individual notifications.
|
|
|
|
|
return config('mail.reply_to.address');
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-01 19:59:50 -07:00
|
|
|
|
/**
|
|
|
|
|
* Get the password complexity rule.
|
|
|
|
|
*
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
public static function passwordComplexityRulesSaving($action = 'update'): string
|
2017-08-22 20:32:39 -07:00
|
|
|
|
{
|
2017-08-22 21:15:35 -07:00
|
|
|
|
$security_rules = '';
|
2018-11-01 19:59:50 -07:00
|
|
|
|
$settings = self::getSettings();
|
2017-08-22 20:32:39 -07:00
|
|
|
|
|
2017-08-22 21:15:35 -07:00
|
|
|
|
// Check if they have uncommon password enforcement selected in settings
|
|
|
|
|
if ($settings->pwd_secure_uncommon == 1) {
|
|
|
|
|
$security_rules .= '|dumbpwd';
|
2017-08-22 20:32:39 -07:00
|
|
|
|
}
|
|
|
|
|
|
2017-08-22 21:15:35 -07:00
|
|
|
|
// Check for any secure password complexity rules that may have been selected
|
2018-11-01 19:59:50 -07:00
|
|
|
|
if ($settings->pwd_secure_complexity != '') {
|
|
|
|
|
$security_rules .= '|'.$settings->pwd_secure_complexity;
|
2017-08-22 20:32:39 -07:00
|
|
|
|
}
|
|
|
|
|
|
2017-08-22 21:15:35 -07:00
|
|
|
|
if ($action == 'update') {
|
|
|
|
|
return 'nullable|min:'.$settings->pwd_secure_min.$security_rules;
|
|
|
|
|
}
|
2017-08-22 20:32:39 -07:00
|
|
|
|
|
2017-08-22 21:15:35 -07:00
|
|
|
|
return 'required|min:'.$settings->pwd_secure_min.$security_rules;
|
2017-08-22 20:32:39 -07:00
|
|
|
|
}
|
|
|
|
|
|
2018-12-06 14:05:43 -08:00
|
|
|
|
/**
|
|
|
|
|
* Get the specific LDAP settings
|
2019-03-01 15:25:42 -08:00
|
|
|
|
*
|
2018-12-06 14:05:43 -08:00
|
|
|
|
* @author Wes Hulette <jwhulette@gmail.com>
|
2019-03-01 15:25:42 -08:00
|
|
|
|
*
|
2018-12-06 14:05:43 -08:00
|
|
|
|
* @since 5.0.0
|
|
|
|
|
*
|
|
|
|
|
* @return Collection
|
|
|
|
|
*/
|
|
|
|
|
public static function getLdapSettings(): Collection
|
|
|
|
|
{
|
|
|
|
|
$ldapSettings = self::select([
|
2019-03-01 15:25:42 -08:00
|
|
|
|
'ldap_enabled',
|
2018-12-06 14:05:43 -08:00
|
|
|
|
'ldap_server',
|
|
|
|
|
'ldap_uname',
|
|
|
|
|
'ldap_pword',
|
|
|
|
|
'ldap_basedn',
|
|
|
|
|
'ldap_filter',
|
|
|
|
|
'ldap_username_field',
|
|
|
|
|
'ldap_lname_field',
|
|
|
|
|
'ldap_fname_field',
|
|
|
|
|
'ldap_auth_filter_query',
|
|
|
|
|
'ldap_version',
|
|
|
|
|
'ldap_active_flag',
|
|
|
|
|
'ldap_emp_num',
|
|
|
|
|
'ldap_email',
|
|
|
|
|
'ldap_server_cert_ignore',
|
|
|
|
|
'ldap_port',
|
|
|
|
|
'ldap_tls',
|
|
|
|
|
'ldap_pw_sync',
|
|
|
|
|
'is_ad',
|
2020-02-04 12:47:49 -08:00
|
|
|
|
'ad_domain',
|
|
|
|
|
'ad_append_domain',
|
2021-08-17 14:43:36 -07:00
|
|
|
|
'ldap_client_tls_key',
|
2023-04-25 11:44:04 -07:00
|
|
|
|
'ldap_client_tls_cert',
|
|
|
|
|
'ldap_default_group',
|
|
|
|
|
'ldap_dept',
|
|
|
|
|
'ldap_emp_num',
|
|
|
|
|
'ldap_phone_field',
|
|
|
|
|
'ldap_jobtitle',
|
|
|
|
|
'ldap_manager',
|
|
|
|
|
'ldap_country',
|
|
|
|
|
'ldap_location',
|
2018-12-06 14:05:43 -08:00
|
|
|
|
])->first()->getAttributes();
|
|
|
|
|
|
|
|
|
|
return collect($ldapSettings);
|
|
|
|
|
}
|
2021-08-17 14:43:36 -07:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Return the filename for the client-side SSL cert
|
|
|
|
|
*
|
|
|
|
|
* @var string
|
|
|
|
|
*/
|
|
|
|
|
public static function get_client_side_cert_path()
|
|
|
|
|
{
|
|
|
|
|
return storage_path().'/ldap_client_tls.cert';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Return the filename for the client-side SSL key
|
|
|
|
|
*
|
|
|
|
|
* @var string
|
|
|
|
|
*/
|
|
|
|
|
public static function get_client_side_key_path()
|
|
|
|
|
{
|
|
|
|
|
return storage_path().'/ldap_client_tls.key';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function update_client_side_cert_files()
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* I'm not sure if it makes sense to have a cert but no key
|
|
|
|
|
* nor vice versa, but for now I'm just leaving it like this.
|
|
|
|
|
*
|
|
|
|
|
* Also, we could easily set this up with an event handler and
|
|
|
|
|
* self::saved() or something like that but there's literally only
|
|
|
|
|
* one place where we will do that, so I'll just explicitly call
|
|
|
|
|
* this method at that spot instead. It'll be easier to debug and understand.
|
|
|
|
|
*/
|
2021-08-30 12:29:16 -07:00
|
|
|
|
if ($this->ldap_client_tls_cert) {
|
2021-08-17 14:43:36 -07:00
|
|
|
|
file_put_contents(self::get_client_side_cert_path(), $this->ldap_client_tls_cert);
|
|
|
|
|
} else {
|
2021-08-30 12:29:16 -07:00
|
|
|
|
if (file_exists(self::get_client_side_cert_path())) {
|
|
|
|
|
unlink(self::get_client_side_cert_path());
|
|
|
|
|
}
|
2021-08-17 14:43:36 -07:00
|
|
|
|
}
|
|
|
|
|
|
2021-08-30 12:29:16 -07:00
|
|
|
|
if ($this->ldap_client_tls_key) {
|
2021-08-17 14:43:36 -07:00
|
|
|
|
file_put_contents(self::get_client_side_key_path(), $this->ldap_client_tls_key);
|
|
|
|
|
} else {
|
2021-08-30 12:29:16 -07:00
|
|
|
|
if (file_exists(self::get_client_side_key_path())) {
|
|
|
|
|
unlink(self::get_client_side_key_path());
|
|
|
|
|
}
|
2021-08-17 14:43:36 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2016-03-25 01:18:05 -07:00
|
|
|
|
}
|