/** * Regenerates the users API key. * * @return \Illuminate\View\View */ public function regenerateApiKey(User $user) { segment_track('User Management', ['event' => 'regenrated_api_token']); $user->api_key = User::generateApiKey(); $user->save(); return Redirect::back(); }
/** * Returns the rendered Blade templates. * * @return \Illuminate\View\View */ public function showIndex() { $today = Date::now(); $startDate = Date::now(); segment_page('Status Page'); // Check if we have another starting date if (Binput::has('start_date')) { try { // If date provided is valid $oldDate = Date::createFromFormat('Y-m-d', Binput::get('start_date')); segment_track('Status Page', ['start_date' => $oldDate->format('Y-m-d')]); // If trying to get a future date fallback to today if ($today->gt($oldDate)) { $startDate = $oldDate; } } catch (Exception $e) { // Fallback to today } } $metrics = null; if ($displayMetrics = Setting::get('display_graphs')) { $metrics = Metric::where('display_chart', 1)->get(); } $daysToShow = Setting::get('app_incident_days') ?: 7; $incidentDays = range(0, $daysToShow - 1); $dateTimeZone = Setting::get('app_timezone'); $incidentVisiblity = Auth::check() ? 0 : 1; $allIncidents = Incident::notScheduled()->where('visible', '>=', $incidentVisiblity)->whereBetween('created_at', [$startDate->copy()->subDays($daysToShow)->format('Y-m-d') . ' 00:00:00', $startDate->format('Y-m-d') . ' 23:59:59'])->orderBy('created_at', 'desc')->get()->groupBy(function (Incident $incident) use($dateTimeZone) { return (new Date($incident->created_at))->setTimezone($dateTimeZone)->toDateString(); }); // Add in days that have no incidents foreach ($incidentDays as $i) { $date = (new Date($startDate))->setTimezone($dateTimeZone)->subDays($i); if (!isset($allIncidents[$date->toDateString()])) { $allIncidents[$date->toDateString()] = []; } } // Sort the array so it takes into account the added days $allIncidents = $allIncidents->sortBy(function ($value, $key) { return strtotime($key); }, SORT_REGULAR, true)->all(); // Scheduled maintenance code. $scheduledMaintenance = Incident::scheduled()->orderBy('scheduled_at')->get(); // Component & Component Group lists. $usedComponentGroups = Component::where('group_id', '>', 0)->groupBy('group_id')->lists('group_id'); $componentGroups = ComponentGroup::whereIn('id', $usedComponentGroups)->orderBy('order')->get(); $ungroupedComponents = Component::where('group_id', 0)->orderBy('order')->orderBy('created_at')->get(); $canPageBackward = Incident::notScheduled()->where('created_at', '<', $startDate->format('Y-m-d'))->count() != 0; return View::make('index', ['componentGroups' => $componentGroups, 'ungroupedComponents' => $ungroupedComponents, 'displayMetrics' => $displayMetrics, 'metrics' => $metrics, 'allIncidents' => $allIncidents, 'scheduledMaintenance' => $scheduledMaintenance, 'aboutApp' => Markdown::convertToHtml(Setting::get('app_about')), 'canPageForward' => (bool) $today->gt($startDate), 'canPageBackward' => $canPageBackward, 'previousDate' => $startDate->copy()->subDays($daysToShow)->toDateString(), 'nextDate' => $startDate->copy()->addDays($daysToShow)->toDateString(), 'pageTitle' => Setting::get('app_name') . ' Status']); }
/** * Updates a user. * * @param \CachetHQ\Cachet\Models\User $user * * @return \Illuminate\View\View */ public function postUpdateUser(User $user) { $items = Binput::all(); $passwordChange = array_get($items, 'password'); if (trim($passwordChange) === '') { unset($items['password']); } $user->update($items); if (!$user->isValid()) { segment_track('Dashboard', ['event' => 'Updated User', 'success' => false]); return Redirect::back()->withInput(Binput::except('password'))->with('title', sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.team.edit.failure')))->with('errors', $user->getErrors()); } segment_track('Dashboard', ['event' => 'Updated User', 'success' => true]); $successMsg = sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.team.edit.success')); return Redirect::back()->with('success', $successMsg); }
/** * Edit an metric. * * @param \CachetHQ\Cachet\Models\Metric $metric * * @return \Illuminate\Http\RedirectResponse */ public function editMetricAction(Metric $metric) { $metricData = Binput::get('metric', null, false); $metric->update($metricData); if (!$metric->isValid()) { segment_track('Dashboard', ['event' => 'Edited Metric', 'success' => false]); return Redirect::back()->withInput(Binput::all())->with('title', sprintf('<strong>%s</strong>', trans('dashboard.notifications.awesome')))->with('errors', $metric->getErrors()); } segment_track('Dashboard', ['event' => 'Edited Metric', 'success' => true]); $successMsg = sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.metrics.edit.success')); return Redirect::to('dashboard/metrics')->with('success', $successMsg); }
/** * Deletes a given schedule. * * @param \CachetHQ\Cachet\Models\Incident $schedule * * @return \Illuminate\Http\RedirectResponse */ public function deleteScheduleAction(Incident $schedule) { segment_track('Dashboard', ['event' => 'Deleted Schedule']); $schedule->delete(); return Redirect::back()->with('warning', sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.schedule.delete.failure'))); }
/** * Updates a component group. * * @param \CachetHQ\Cachet\Models\ComponentGroup $group * * @return \Illuminate\Http\RedirectResponse */ public function updateComponentGroupAction(ComponentGroup $group) { $groupData = Binput::get('group'); $group->update($groupData); if (!$group->isValid()) { segment_track('Dashboard', ['event' => 'Edit Component Group', 'success' => false]); return Redirect::back()->withInput(Binput::all())->with('title', sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.components.groups.edit.failure')))->with('errors', $group->getErrors()); } segment_track('Dashboard', ['event' => 'Edit Component Group', 'success' => true]); $successMsg = sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.groups.edit.success')); return Redirect::back()->with('success', $successMsg); }
/** * Handles the actual app setup, including user, settings and env. * * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response */ public function postStep3() { $postData = Binput::all(); $v = Validator::make($postData, ['env.cache_driver' => 'required|in:' . implode(',', array_keys($this->cacheDrivers)), 'env.session_driver' => 'required|in:' . implode(',', array_keys($this->cacheDrivers)), 'settings.app_name' => 'required', 'settings.app_domain' => 'required', 'settings.app_timezone' => 'required', 'settings.app_locale' => 'required', 'settings.show_support' => 'boolean', 'user.username' => ['required', 'regex:/\\A(?!.*[:;]-\\))[ -~]+\\z/'], 'user.email' => 'email|required', 'user.password' => 'required']); if ($v->passes()) { // Pull the user details out. $userDetails = array_pull($postData, 'user'); $user = User::create(['username' => $userDetails['username'], 'email' => $userDetails['email'], 'password' => $userDetails['password'], 'level' => 1]); Auth::login($user); $settings = array_pull($postData, 'settings'); foreach ($settings as $settingName => $settingValue) { Setting::create(['name' => $settingName, 'value' => $settingValue]); } $envData = array_pull($postData, 'env'); // Write the env to the .env file. foreach ($envData as $envKey => $envValue) { $this->writeEnv($envKey, $envValue); } Session::flash('setup.done', true); segment_track('Setup', ['event' => 'Step 3', 'success' => true, 'cache_driver' => $envData['cache_driver'], 'session_driver' => $envData['session_driver']]); if (Request::ajax()) { return Response::json(['status' => 1]); } return Redirect::to('dashboard'); } else { segment_track('Setup', ['event' => 'Step 3', 'success' => false]); // No good, let's try that again. if (Request::ajax()) { return Response::json(['errors' => $v->messages()], 400); } return Redirect::back()->withInput()->with('errors', $v->messages()); } }
/** * Logs the user out, deleting their session etc. * * @return \Illuminate\Http\RedirectResponse */ public function logoutAction() { Auth::logout(); segment_track('Logged Out'); return Redirect::to('/'); }
/** * Deletes a subscriber. * * @param \CachetHQ\Cachet\Models\Subscriber $subscriber * * @throws \Exception * * @return \Illuminate\Http\RedirectResponse */ public function deleteSubscriberAction(Subscriber $subscriber) { segment_track('Dashboard', ['event' => 'Deleted Subscriber']); $subscriber->delete(); return Redirect::back(); }
/** * Handle the unsubscribe. * * @param string $code * * @return \Illuminate\View\View */ public function getUnsubscribe($code = null) { if (is_null($code)) { throw new NotFoundHttpException(); } $subscriber = Subscriber::where('verify_code', '=', $code)->first(); if (!$subscriber || !$subscriber->verified()) { return Redirect::route('status-page'); } $subscriber->delete(); segment_track('Subscribers', ['event' => 'Customer Unsubscribed', 'success' => true]); $successMsg = sprintf('<strong>%s</strong> %s', trans('dashboard.notifications.awesome'), trans('cachet.subscriber.email.unsuscribed')); return Redirect::route('status-page')->with('success', $successMsg); }
/** * Edit an incident template. * * @param \CachetHQ\Cachet\Models\IncidentTemplate $template * * @return \Illuminate\Http\RedirectResponse */ public function editTemplateAction(IncidentTemplate $template) { segment_track('Dashboard', ['event' => 'Edited Incident Template']); $template->update(Binput::get('template')); return Redirect::back()->with('updatedTemplate', $template); }