Example #1
0
 /**
  * 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();
 }
Example #2
0
 /**
  * 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']);
 }
Example #3
0
 /**
  * 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);
 }
Example #5
0
 /**
  * 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')));
 }
Example #6
0
 /**
  * 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);
 }
Example #7
0
 /**
  * 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());
     }
 }
Example #8
0
 /**
  * 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();
 }
Example #10
0
 /**
  * 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);
 }