widget parole 17

This commit is contained in:
Alma 2025-04-13 01:01:06 +02:00
parent 5a49f3f099
commit 5f41d9ed8d

View File

@ -98,24 +98,29 @@ export async function GET(request: Request) {
id: currentUser._id
});
// Step 3: Create a user token for the current user using admin token
const createTokenResponse = await fetch(`${baseUrl}/api/v1/users.createToken`, {
// Step 3: Login as the user to get their token
const loginResponse = await fetch(`${baseUrl}/api/v1/login`, {
method: 'POST',
headers: adminHeaders,
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
userId: currentUser._id
user: currentUser.username,
password: process.env.ROCKET_CHAT_USER_PASSWORD // This should be the user's password or a shared password
})
});
if (!createTokenResponse.ok) {
console.error('Failed to create user token:', createTokenResponse.status);
if (!loginResponse.ok) {
console.error('Failed to login as user:', loginResponse.status);
const errorText = await loginResponse.text();
console.error('Login error details:', errorText);
return NextResponse.json({ messages: [] }, { status: 200 });
}
const tokenData = await createTokenResponse.json();
const loginData = await loginResponse.json();
const userHeaders = {
'X-Auth-Token': tokenData.data.authToken,
'X-User-Id': currentUser._id,
'X-Auth-Token': loginData.data.authToken,
'X-User-Id': loginData.data.userId,
'Content-Type': 'application/json'
};
@ -199,14 +204,36 @@ export async function GET(request: Request) {
});
if (messageData.success && messageData.messages?.length > 0) {
const message = messageData.messages[0];
messages.push({
...messageData.messages[0],
id: message._id,
text: message.msg,
timestamp: message.ts,
roomName: subscription.fname || subscription.name || 'Direct Message',
roomType: subscription.t,
unread: subscription.unread || 0,
userMentions: subscription.userMentions || 0,
alert: subscription.alert || false,
lastSeen: subscription.ls
lastSeen: subscription.ls,
sender: {
username: message.u.username,
name: message.u.name || message.u.username,
initials: (message.u.name || message.u.username || '')
.split(' ')
.map((n: string) => n[0])
.slice(0, 2)
.join('')
.toUpperCase(),
color: message.u.username === currentUser.username ? '#E3E3E3' : getAvatarColor(message.u.username)
},
isOwnMessage: message.u.username === currentUser.username,
room: {
id: subscription.rid,
type: subscription.t,
name: subscription.fname || subscription.name,
isChannel: subscription.t === 'c',
isDirect: subscription.t === 'd'
}
});
}
} catch (error) {
@ -216,12 +243,37 @@ export async function GET(request: Request) {
}
// Sort messages by timestamp (newest first) and limit to 7
messages.sort((a, b) => new Date(b.ts).getTime() - new Date(a.ts).getTime());
messages.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
const limitedMessages = messages.slice(0, 7);
return NextResponse.json({ messages: limitedMessages }, { status: 200 });
return NextResponse.json({
messages: limitedMessages,
total: messages.length,
hasMore: messages.length > 7
}, { status: 200 });
} catch (error) {
console.error('Error in messages endpoint:', error);
return NextResponse.json({ messages: [] }, { status: 200 });
return NextResponse.json({ messages: [], total: 0, hasMore: false }, { status: 200 });
}
}
// Helper function to generate consistent avatar colors
function getAvatarColor(username: string): string {
const colors = [
'#FF7452', // Coral
'#4CAF50', // Green
'#2196F3', // Blue
'#9C27B0', // Purple
'#FF9800', // Orange
'#00BCD4', // Cyan
'#795548', // Brown
'#607D8B' // Blue Grey
];
// Generate a consistent index based on username
const index = username
.split('')
.reduce((acc, char) => acc + char.charCodeAt(0), 0) % colors.length;
return colors[index];
}