. * * @package LibreNMS * @link http://librenms.org * @copyright 2019 Tony Murray * @author Tony Murray */ namespace App\Http\Controllers; use App\Models\Dashboard; use App\Models\Device; use App\Models\UserPref; use Illuminate\Http\Request; use Illuminate\Validation\Rule; use LibreNMS\Authentication\LegacyAuth; use LibreNMS\Authentication\TwoFactor; use LibreNMS\Config; use Session; class UserPreferencesController extends Controller { private $valid_prefs = [ 'dashboard' => 'required|integer', 'add_schedule_note_to_device' => 'required|integer', 'locale' => 'required|in:en,ru', ]; public function __construct() { $this->middleware('deny-demo'); } /** * Display a listing of the resource. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function index(Request $request) { $user = $request->user(); $data = [ 'user' => $user, 'can_change_password' => LegacyAuth::get()->canUpdatePasswords($user->username), 'dashboards' => Dashboard::allAvailable($user)->with('user')->get(), 'default_dashboard' => UserPref::getPref($user, 'dashboard'), 'note_to_device' => UserPref::getPref($user, 'add_schedule_note_to_device'), 'locale' => UserPref::getPref($user, 'locale') ?: 'en', 'locales' => [ 'en' => 'English', 'ru' => 'русский', ], ]; if (Config::get('twofactor')) { $twofactor = UserPref::getPref($user, 'twofactor'); if ($twofactor) { $data['twofactor_uri'] = TwoFactor::generateUri($user->username, $twofactor['key'], $twofactor['counter'] !== false); } $data['twofactor'] = $twofactor; } if (!$user->hasGlobalRead()) { $data['devices'] = Device::hasAccess($user)->get(); } return view('user.preferences', $data); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $this->validate($request, [ 'pref' => ['required', Rule::in(array_keys($this->valid_prefs))], 'value' => $this->valid_prefs[$request->pref] ?? 'required|integer', ]); UserPref::setPref($request->user(), $request->pref, $request->value); if ($request->pref == 'locale') { Session::put('locale', $request->value); } return response()->json(['status' => 'success']); } }