email thingsboard

This commit is contained in:
kshitige
2025-04-23 19:43:24 +05:30
parent d07dc2fd6a
commit 494d7b7ea5
2 changed files with 129 additions and 17 deletions

View File

@@ -404,6 +404,78 @@ class UsersController extends Controller
// public function activate(Request $request, $id)
// {
// Log::info('Full Request URL: ' . $request->fullUrl());
// try {
// $user = User::find($id);
// if (!$user) {
// Log::error("User not found for ID: {$id}");
// return response()->json([
// 'status' => false,
// 'message' => 'User not found.'
// ], 404);
// }
// $token = $request->query('token');
// if (!$token) {
// Log::error("Token missing for User ID: {$id}");
// return response()->json([
// 'status' => false,
// 'message' => 'Invalid activation link.'
// ], 401);
// }
// // Update password in Laravel
// $user->password = Hash::make('password');
// $user->save();
// Log::info("Password updated for User ID: {$id} in Laravel.");
// // Activate user in ThingsBoard
// $activateToken = $token;
// $password = 'password';
// try {
// $this->adminService->activateUser($user, $password, $activateToken);
// Log::info("User ID: {$id} activated successfully in ThingsBoard.");
// return response()->json([
// 'status' => true,
// 'message' => 'User activated and password updated successfully!',
// 'user_id' => $user->id
// ], 200);
// } catch (\Exception $e) {
// Log::error("ThingsBoard activation failed: " . $e->getMessage());
// // If token is invalid or user is already activated, skip activation
// if (str_contains($e->getMessage(), 'Unable to find user credentials')) {
// return response()->json([
// 'status' => true,
// 'message' => 'User is already activated. Password updated successfully.'
// ], 200);
// }
// return response()->json([
// 'status' => false,
// 'message' => 'Failed to activate user in ThingsBoard.',
// 'error' => $e->getMessage()
// ], 500);
// }
// } catch (\Exception $e) {
// Log::error("Error activating user ID: {$id}. Exception: " . $e->getMessage());
// return response()->json([
// 'status' => false,
// 'message' => 'An error occurred. Please try again later.',
// 'error' => $e->getMessage()
// ], 500);
// }
// }
public function activate(Request $request, $id)
{
Log::info('Full Request URL: ' . $request->fullUrl());
@@ -433,28 +505,31 @@ class UsersController extends Controller
$user->save();
Log::info("Password updated for User ID: {$id} in Laravel.");
// Activate user in ThingsBoard
$activateToken = $token;
$password = 'password';
// Dummy email for ThingsBoardg
// $dummyEmail = 'dummy+' . $user->id . '@example.com';
try {
$this->adminService->activateUser($user, $password, $activateToken);
$this->adminService->activateUser($user, 'password', $token);
Log::info("User ID: {$id} activated successfully in ThingsBoard.");
return response()->json([
'status' => true,
'message' => 'User activated and password updated successfully!',
'user_id' => $user->id
'user_id' => $user->id,
'real_email' => $user->email,
// 'tb_email' => $dummyEmail
], 200);
} catch (\Exception $e) {
Log::error("ThingsBoard activation failed: " . $e->getMessage());
// If token is invalid or user is already activated, skip activation
if (str_contains($e->getMessage(), 'Unable to find user credentials')) {
return response()->json([
'status' => true,
'message' => 'User is already activated. Password updated successfully.'
'message' => 'User is already activated. Password updated successfully.',
'user_id' => $user->id,
'real_email' => $user->email,
// 'tb_email' => $dummyEmail
], 200);
}
@@ -479,7 +554,6 @@ class UsersController extends Controller
// public function autoLogin(Request $request)
// {
// $request->validate([

View File

@@ -263,10 +263,15 @@ class AdminService
if (!isset($data['tenant_id'])) {
throw new \Exception('tenant_id is required');
}
static $counter = 1;
$email = "dummy{$counter}@example.com";
$counter++;
// Prepare the payload with required fields
$payload = [
'email' => $data['email'] ?? '',
'email' => $email,
'authority' => $data['authority'] ?? 'CUSTOMER_USER',
'firstName' => $data['first_name'] ?? '',
'lastName' => $data['last_name'] ?? '',
@@ -520,33 +525,66 @@ class AdminService
public function activateUser(User $user, string $password, string $activateToken)
{
try {
$dummyEmail = 'dummy+' . $user->id . '@example.com'; // unique dummy email
// $dummyEmail = 'dummy+' . $user->id . '@example.com';
$token = $this->getToken();
$payload = [
// Step 1: Search for existing user by real email
$searchResponse = Http::withHeaders([
'Authorization' => "Bearer $token",
'accept' => 'application/json'
])->get("{$this->baseUrl}/api/users?pageSize=1&page=0&textSearch={$user->email}");
if ($searchResponse->successful() && !empty($searchResponse['data'])) {
$tbUser = $searchResponse['data'][0];
$tbUserId = $tbUser['id']['id'];
// Step 2: Update user email to dummy email
Http::withHeaders([
'Authorization' => "Bearer $token",
'Content-Type' => 'application/json'
])->post("{$this->baseUrl}/api/user", [
'id' => ['id' => $tbUserId],
// 'email' => $dummyEmail,
'authority' => $tbUser['authority'],
'firstName' => $tbUser['firstName'] ?? '',
'lastName' => $tbUser['lastName'] ?? '',
'tenantId' => $tbUser['tenantId'],
'customerId' => $tbUser['customerId'],
'additionalInfo' => $tbUser['additionalInfo'] ?? null,
]);
// Log::info("ThingsBoard user email updated to dummy: {$dummyEmail}");
}
// Step 3: Activate account using dummy email
$activationPayload = [
'activateToken' => $activateToken,
'password' => $password,
'email' => $dummyEmail // send dummy email to ThingsBoard
// 'email' => $dummyEmail
];
$activationUrl = "{$this->baseUrl}/api/noauth/activate";
$response = Http::withHeaders([
'Content-Type' => 'application/json',
])->post($activationUrl, $payload);
])->post($activationUrl, $activationPayload);
if (!$response->successful()) {
Log::error("Failed to activate user in ThingsBoard. Error: " . $response->body());
Log::error("Activation failed. Response: " . $response->body());
throw new \Exception('Failed to activate user: ' . $response->body());
}
Log::info("User activated in ThingsBoard with dummy email: {$dummyEmail} for User ID: {$user->id}");
// Log::info("User activated in ThingsBoard with dummy email: {$dummyEmail}");
} catch (\Exception $e) {
Log::error("Error activating user in ThingsBoard for User ID: {$user->id}. Exception: " . $e->getMessage());
Log::error("Error during ThingsBoard activation. Exception: " . $e->getMessage());
throw $e;
}
}
public function getUserByEmailThingsBoard(string $email)
{
Log::info("Fetching ThingsBoard ID by email: $email");
@@ -611,4 +649,4 @@ class AdminService
throw new Exception('Failed to fetch users: ' . $response->body());
}
}
}
}