change guest access
All checks were successful
Build & Push Docker Image / build (push) Successful in 1m8s

This commit is contained in:
2026-02-24 19:14:55 +01:00
parent 9001aea8cd
commit 49769d4b51
2 changed files with 30 additions and 54 deletions

View File

@@ -272,7 +272,7 @@ router.get('/:uid/public', async (req, res) => {
try { try {
const db = getDb(); const db = getDb();
const room = await db.get(` const room = await db.get(`
SELECT r.uid, r.name, r.guest_access, r.welcome_message, r.access_code, SELECT r.uid, r.name, r.welcome_message, r.access_code,
u.name as owner_name u.name as owner_name
FROM rooms r FROM rooms r
JOIN users u ON r.user_id = u.id JOIN users u ON r.user_id = u.id
@@ -283,10 +283,6 @@ router.get('/:uid/public', async (req, res) => {
return res.status(404).json({ error: 'Raum nicht gefunden' }); return res.status(404).json({ error: 'Raum nicht gefunden' });
} }
if (!room.guest_access) {
return res.status(403).json({ error: 'Gastzugang ist für diesen Raum nicht aktiviert' });
}
const running = await isMeetingRunning(room.uid); const running = await isMeetingRunning(room.uid);
res.json({ res.json({
@@ -321,10 +317,6 @@ router.post('/:uid/guest-join', async (req, res) => {
return res.status(404).json({ error: 'Raum nicht gefunden' }); return res.status(404).json({ error: 'Raum nicht gefunden' });
} }
if (!room.guest_access) {
return res.status(403).json({ error: 'Gastzugang ist für diesen Raum nicht aktiviert' });
}
// Check access code if set // Check access code if set
if (room.access_code && access_code !== room.access_code) { if (room.access_code && access_code !== room.access_code) {
return res.status(403).json({ error: 'Falscher Zugangscode' }); return res.status(403).json({ error: 'Falscher Zugangscode' });

View File

@@ -416,52 +416,36 @@ export default function RoomDetail() {
{/* Guest access section */} {/* Guest access section */}
<div className="pt-4 border-t border-th-border space-y-4"> <div className="pt-4 border-t border-th-border space-y-4">
<h3 className="text-sm font-semibold text-th-text">{t('room.guestAccessTitle')}</h3> <h3 className="text-sm font-semibold text-th-text">{t('room.guestAccessTitle')}</h3>
<label className="flex items-center gap-3 cursor-pointer">
<input
type="checkbox"
checked={!!editRoom.guest_access}
onChange={e => setEditRoom({ ...editRoom, guest_access: e.target.checked })}
className="w-4 h-4 rounded border-th-border text-th-accent focus:ring-th-ring"
/>
<div>
<span className="text-sm text-th-text">{t('room.guestAccess')}</span>
<p className="text-xs text-th-text-s">{t('room.guestAccessHint')}</p>
</div>
</label>
{editRoom.guest_access && ( <div>
<> <label className="block text-sm font-medium text-th-text mb-1.5">{t('room.moderatorCode')}</label>
<div> <input
<label className="block text-sm font-medium text-th-text mb-1.5">{t('room.moderatorCode')}</label> type="text"
<input value={editRoom.moderator_code || ''}
type="text" onChange={e => setEditRoom({ ...editRoom, moderator_code: e.target.value })}
value={editRoom.moderator_code || ''} className="input-field"
onChange={e => setEditRoom({ ...editRoom, moderator_code: e.target.value })} placeholder={t('room.moderatorCodeHint')}
className="input-field" />
placeholder={t('room.moderatorCodeHint')} <p className="text-xs text-th-text-s mt-1">{t('room.moderatorCodeDesc')}</p>
/> </div>
<p className="text-xs text-th-text-s mt-1">{t('room.moderatorCodeDesc')}</p> <div>
</div> <label className="block text-sm font-medium text-th-text mb-1.5">{t('room.guestLink')}</label>
<div> <div className="flex items-center gap-2">
<label className="block text-sm font-medium text-th-text mb-1.5">{t('room.guestLink')}</label> <code className="flex-1 bg-th-bg-s px-3 py-2 rounded-lg text-xs text-th-text font-mono truncate border border-th-border">
<div className="flex items-center gap-2"> {window.location.origin}/join/{room.uid}
<code className="flex-1 bg-th-bg-s px-3 py-2 rounded-lg text-xs text-th-text font-mono truncate border border-th-border"> </code>
{window.location.origin}/join/{room.uid} <button
</code> type="button"
<button onClick={() => {
type="button" navigator.clipboard.writeText(`${window.location.origin}/join/${room.uid}`);
onClick={() => { toast.success(t('room.linkCopied'));
navigator.clipboard.writeText(`${window.location.origin}/join/${room.uid}`); }}
toast.success(t('room.linkCopied')); className="btn-ghost text-xs py-2 px-3"
}} >
className="btn-ghost text-xs py-2 px-3" <Copy size={14} />
> </button>
<Copy size={14} /> </div>
</button> </div>
</div>
</div>
</>
)}
</div> </div>
<div className="pt-4 border-t border-th-border"> <div className="pt-4 border-t border-th-border">