76 lines
1.8 KiB
PHP
76 lines
1.8 KiB
PHP
<?php
|
|
/**
|
|
* Plugin Name: Dabestaniha Authenticate Bridge
|
|
* Description: Authenticate WordPress user via json web token from Mahakiha Application.
|
|
* Version: 1.0
|
|
* Author: Dabestaniha
|
|
*
|
|
* Example: https://wordpress.test/dabestaniha/login/?token=123&name=asd&email=test@wordpress.test
|
|
*/
|
|
|
|
require_once __DIR__.'/vendor/autoload.php';
|
|
|
|
use Dabestaniha\AuthenticateBridge\App\Http\Requests\DabestanihaAuthenticateRequest;
|
|
|
|
add_action('init', function () {
|
|
$request = DabestanihaAuthenticateRequest::make();
|
|
|
|
if (!$request->shouldContinue()) {
|
|
return;
|
|
}
|
|
|
|
$request->validate();
|
|
$token = $request->string('token');
|
|
|
|
$name = $request->string('name');
|
|
$email = $request->string('email');
|
|
|
|
$user_id = find_or_create_user($email, $name);
|
|
|
|
login_user($user_id);
|
|
wp_redirect(home_url('/dashboard'));
|
|
exit();
|
|
});
|
|
|
|
require_once 'settings-page.php';
|
|
|
|
function verify_laravel_token_and_get_user_id($token): bool|int
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
function find_or_create_user(string $email, string $name): int
|
|
{
|
|
$user = get_user_by('email', $email);
|
|
|
|
if ($user) {
|
|
return $user->ID;
|
|
}
|
|
$random_password = wp_generate_password(12, true);
|
|
$username = sanitize_user(strstr($email, '@', true));
|
|
|
|
if (username_exists($username)) {
|
|
$username .= '_'.wp_generate_password(4, false);
|
|
}
|
|
|
|
$user_id = wp_create_user($username, $random_password, $email);
|
|
|
|
if (is_wp_error($user_id)) {
|
|
wp_die(view('invalid-token'), 'Invalid Token', ['response' => 500]);
|
|
}
|
|
|
|
wp_update_user([
|
|
'ID' => $user_id,
|
|
'display_name' => $name,
|
|
]);
|
|
|
|
return $user_id;
|
|
}
|
|
|
|
function login_user(int $user_id): bool
|
|
{
|
|
wp_set_auth_cookie($user_id);
|
|
wp_set_current_user($user_id);
|
|
do_action('wp_login', get_userdata($user_id)->user_login, get_userdata($user_id));
|
|
return true;
|
|
} |