use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Redis;
class OtpController extends Controller
{
public function index(Request $request)
{
$email = $request->email;
$ldap = app("App\Http\Controllers\LdapController")->find($email);
if ($ldap == 'Successfull') {
$otp = $this->generate();
$session = now()->timestamp;
Redis::rpush($session, $email, $otp);
Redis::expire($session, 300); // 5 minutes
$subject = 'One Time Passcode (OTP)';
$body = 'Your One Time Passcode (OTP) is: ' . $otp . '';
$mail = app("App\Http\Controllers\MailController")->sendmail($email, $subject, $body);
if ($mail == 'Successful') {
$node = response()->json(['status' => 'Successful', 'session' => $session]);
} else {
$node = response()->json(['status' => 'Failed', 'message' => 'Can not sendmail']);
}
} else {
$node = response()->json(['status' => 'Failed', 'message' => 'Not found user on active directory']);
}
return $node;
}
public function generate()
{
$otp = Str::random(6);
return $otp;
}
public function verified(Request $request)
{
$session = $request->session;
$otp = $request->otp;
if (Redis::lrange($session, 0, 0) != NULL) {
$session_otp = Redis::lrange($session, 1, 1);
if ($session_otp[0] == $otp) {
Redis::del($session);
$node = response()->json(['status' => 'Successful']);
} else {
$node = response()->json(['status' => 'Failed', 'message' => 'Invalid otp']);
}
} else {
$node = response()->json(['status' => 'Failed', 'message' => 'Not found session']);
}
return $node;
}
public function session(Request $request)
{
$session = $request->session;
if (Redis::lrange($session, 0, 0) != NULL) {
$session_email = Redis::lrange($session, 0, 0);
$session_otp = Redis::lrange($session, 1, 1);
$node = response()->json(['email' => $session_email[0], 'otp' => $session_otp[0]]);
} else {
$node = response()->json(['status' => 'Failed', 'message' => 'Not found session']);
}
return $node;
}
public function flush()
{
Redis::flushDB();
return response()->json(['status' => 'Successful']);
}
}