. */ namespace App\Http\Controllers\Api\Admin; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Str; use Illuminate\Validation\Rule; use Carbon\Carbon; use App\Account; use App\Password; use App\Rules\WithoutSpaces; use App\Helpers\Utils; use App\Http\Controllers\Account\AuthenticateController as WebAuthenticateController; class AccountController extends Controller { public function index(Request $request) { return Account::without(['passwords', 'admin'])->paginate(20); } public function show(Request $request, $id) { return Account::without(['passwords', 'admin'])->findOrFail($id); } public function destroy(Request $request, $id) { $account = Account::findOrFail($id); $account->delete(); } public function activate(Request $request, $id) { $account = Account::findOrFail($id); $account->activated = true; $account->save(); return $account; } public function deactivate(Request $request, $id) { $account = Account::findOrFail($id); $account->activated = false; $account->save(); return $account; } public function store(Request $request) { $request->validate([ 'username' => [ 'required', Rule::unique('external.accounts', 'username')->where(function ($query) use ($request) { $query->where('domain', config('app.sip_domain')); }), 'filled', new WithoutSpaces ], 'algorithm' => 'required|in:SHA-256,MD5', 'password' => 'required|filled', 'domain' => 'min:3', 'activated' => 'boolean|nullable', ]); $algorithm = $request->has('password_sha256') ? 'SHA-256' : 'MD5'; $account = new Account; $account->username = $request->get('username'); $account->email = $request->get('email'); $account->activated = $request->has('activated') ? (bool)$request->get('activated') : false; $account->domain = $request->has('domain') ? $request->get('domain') : config('app.sip_domain'); $account->ip_address = $request->ip(); $account->creation_time = Carbon::now(); $account->user_agent = config('app.name'); if (!$request->has('activated') || !(bool)$request->get('activated')) { $account->confirmation_key = Str::random(WebAuthenticateController::$emailCodeSize); } $account->save(); $password = new Password; $password->account_id = $account->id; $password->password = Utils::bchash($account->username, $account->resolvedRealm, $request->get('password'), $request->get('algorithm')); $password->algorithm = $request->get('algorithm'); $password->save(); return response()->json($account); } }