import React, { useContext, useState } from 'react'; import { Table, Space, Button, Typography, Alert, Input, Form } from 'antd'; import dynamic from 'next/dynamic'; import { ServerStatusContext } from '../../../../utils/server-status-context'; import { fetchData, UPDATE_STREAM_KEYS } from '../../../../utils/apis'; const { Paragraph } = Typography; const { Item } = Form; // Lazy loaded components const DeleteOutlined = dynamic(() => import('@ant-design/icons/DeleteOutlined'), { ssr: false, }); const EyeOutlined = dynamic(() => import('@ant-design/icons/EyeOutlined'), { ssr: false, }); const PlusOutlined = dynamic(() => import('@ant-design/icons/PlusOutlined'), { ssr: false, }); const saveKeys = async (keys, setError) => { try { await fetchData(UPDATE_STREAM_KEYS, { method: 'POST', auth: true, data: { value: keys }, }); } catch (error) { console.error(error); setError(error); } }; const generateRndKey = () => { let defaultKey = ''; let isValidStreamKey = false; const streamKeyRegex = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#$%^&*]).{8,192}$/; const s = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*'; while (!isValidStreamKey) { const temp = Array.apply(20, Array(30)) .map(() => s.charAt(Math.floor(Math.random() * s.length))) .join(''); if (streamKeyRegex.test(temp)) { isValidStreamKey = true; defaultKey = temp; } } return defaultKey; }; const AddKeyForm = ({ setShowAddKeyForm, setFieldInConfigState, streamKeys, setError }) => { const handleAddKey = (newkey: any) => { const updatedKeys = [...streamKeys, newkey]; setFieldInConfigState({ fieldName: 'streamKeys', value: updatedKeys, }); saveKeys(updatedKeys, setError); setShowAddKeyForm(false); }; // Default auto-generated key const defaultKey = generateRndKey(); return (
); }; const AddKeyButton = ({ setShowAddKeyForm }) => ( ); const StreamKeys = () => { const serverStatusData = useContext(ServerStatusContext); const { serverConfig, setFieldInConfigState } = serverStatusData || {}; const { streamKeys } = serverConfig; const [showAddKeyForm, setShowAddKeyForm] = useState(false); const [showKeyMap, setShowKeyMap] = useState({}); const [error, setError] = useState(null); const handleDeleteKey = keyToRemove => { const newKeys = streamKeys.filter(k => k !== keyToRemove); setFieldInConfigState({ fieldName: 'streamKeys', value: newKeys, }); saveKeys(newKeys, setError); }; const handleToggleShowKey = key => { setShowKeyMap({ ...showKeyMap, [key]: !showKeyMap[key], }); }; const columns = [ { title: 'Key', dataIndex: 'key', key: 'key', render: text => (