. */ namespace App\Http\Controllers\Api; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; use App\Http\Controllers\Controller; use App\Rules\WithoutSpaces; use App\Helpers\Utils; use App\Libraries\OvhSMS; use App\PhoneChangeCode; use App\Alias; class AccountPhoneController extends Controller { public function requestUpdate(Request $request) { $request->validate([ 'phone' => [ 'required', 'unique:aliases,alias', 'unique:accounts,username', new WithoutSpaces, 'starts_with:+' ] ]); $account = $request->user(); $phoneChangeCode = $account->phoneChangeCode ?? new PhoneChangeCode; $phoneChangeCode->account_id = $account->id; $phoneChangeCode->phone = $request->get('phone'); $phoneChangeCode->code = Utils::generatePin(); $phoneChangeCode->save(); Log::channel('events')->info('API: Account phone change requested by SMS', ['id' => $account->identifier]); $ovhSMS = new OvhSMS; $ovhSMS->send($request->get('phone'), 'Your ' . config('app.name') . ' validation code is ' . $phoneChangeCode->code); } public function update(Request $request) { $request->validate([ 'code' => 'required|digits:4' ]); $account = $request->user(); $phoneChangeCode = $account->phoneChangeCode()->firstOrFail(); if ($phoneChangeCode->code == $request->get('code')) { $account->alias()->delete(); $alias = new Alias; $alias->alias = $phoneChangeCode->phone; $alias->domain = config('app.sip_domain'); $alias->account_id = $account->id; $alias->save(); Log::channel('events')->info('API: Account phone changed using SMS', ['id' => $account->identifier]); $phoneChangeCode->delete(); $account->refresh(); return $account; } $phoneChangeCode->delete(); abort(403); } }