/**
  * Create user
  *
  * @param array $data
  * @return null|User
  */
 public function create(array $data)
 {
     $data['password'] = bcrypt($data['password']);
     $data['status'] = 1;
     $user = $this->userRepo->create($data);
     if ($user) {
         event(new UserWasCreated($user));
         return $user;
     }
     return null;
 }
 /**
  * Autneticat
  *
  * @param $provider
  * @return bool
  */
 public function authenticate($provider)
 {
     $socialUser = $this->social->with($provider)->stateless()->user();
     if (!$socialUser) {
         return false;
     }
     $identity = $this->oauth->findByProviderNameAndId($socialUser->id, $provider);
     if ($identity) {
         $this->oauth->update($identity, ['token' => $socialUser->token]);
         $this->auth->loginUsingId($identity->user_id, true);
         return true;
     }
     $user = $this->user->findByEmail($socialUser->email);
     if (!is_null($user)) {
         $this->oauth->create(['provider_id' => $socialUser->id, 'provider' => $provider, 'user_id' => $user->id, 'token' => $socialUser->token]);
         $this->user->update($user, ['status' => 1]);
         $this->auth->login($user, true);
         return true;
     }
     if (!setting('registration', true)) {
         return false;
     }
     // Just create the user
     $newUser = $this->user->create(['name' => $this->emailToName($socialUser->email), 'email' => $socialUser->email, 'password' => '', 'status' => 1, 'avatar' => $socialUser->avatar]);
     event(new UserCreatedThroughOAuth($newUser));
     $this->oauth->create(['provider_id' => $socialUser->id, 'provider' => $provider, 'user_id' => $newUser->id, 'token' => $socialUser->token]);
     $this->auth->login($newUser, true);
     return true;
 }
 /**
  * Save email settings
  *
  * @param Request $request
  * @param UserContract $userRepo
  * @return mixed
  */
 public function save(Request $request, UserContract $userRepo)
 {
     $this->validate($request, ['name' => 'required|min:3|max:15', 'email' => 'required|email|max:255', 'password' => 'required|min:6']);
     Artisan::call('migrate:refresh', ['--force' => true]);
     $user = $userRepo->create(['name' => $request->get('name'), 'email' => $request->get('email'), 'password' => bcrypt($request->get('password')), 'permission' => 'admin', 'status' => 1]);
     session(['install.done.admin' => true]);
     session(['install.admin.user' => $user->name]);
     return redirect()->route('finish');
 }