Enhance Docker Compose configuration and improve camera manager error handling
- Added container names for better identification of services in docker-compose.yml. - Refactored CameraManager to include error handling during initialization of camera recorders and streamers, ensuring the system remains operational even if some components fail. - Updated frontend components to support new MQTT Debug Panel functionality, enhancing monitoring capabilities.
This commit is contained in:
@@ -1 +1 @@
|
||||
v2.54.11
|
||||
v2.62.10
|
||||
@@ -114,6 +114,124 @@ CREATE POLICY "User roles are updatable by authenticated users" ON public.user_r
|
||||
CREATE POLICY "User roles are deletable by authenticated users" ON public.user_roles
|
||||
FOR DELETE USING (auth.role() = 'authenticated');
|
||||
|
||||
-- =============================================
|
||||
-- 9. USER MANAGEMENT FUNCTIONS
|
||||
-- =============================================
|
||||
|
||||
-- Function to create a new user with roles
|
||||
CREATE OR REPLACE FUNCTION public.create_user_with_roles(
|
||||
user_email TEXT,
|
||||
role_names TEXT[],
|
||||
temp_password TEXT
|
||||
)
|
||||
RETURNS JSON AS $$
|
||||
DECLARE
|
||||
new_user_id UUID;
|
||||
encrypted_pwd TEXT;
|
||||
role_name TEXT;
|
||||
role_id_val UUID;
|
||||
assigned_by_id UUID;
|
||||
result JSON;
|
||||
user_roles_array TEXT[];
|
||||
BEGIN
|
||||
-- Generate new user ID
|
||||
new_user_id := uuid_generate_v4();
|
||||
|
||||
-- Encrypt the password
|
||||
encrypted_pwd := crypt(temp_password, gen_salt('bf'));
|
||||
|
||||
-- Get the current user ID for assigned_by, but only if they have a profile
|
||||
-- Otherwise, use the new user ID (which we'll create next)
|
||||
SELECT id INTO assigned_by_id
|
||||
FROM public.user_profiles
|
||||
WHERE id = auth.uid();
|
||||
|
||||
-- If no valid assigned_by user found, use the new user ID (self-assigned)
|
||||
IF assigned_by_id IS NULL THEN
|
||||
assigned_by_id := new_user_id;
|
||||
END IF;
|
||||
|
||||
-- Create user in auth.users
|
||||
INSERT INTO auth.users (
|
||||
instance_id,
|
||||
id,
|
||||
aud,
|
||||
role,
|
||||
email,
|
||||
encrypted_password,
|
||||
email_confirmed_at,
|
||||
created_at,
|
||||
updated_at,
|
||||
confirmation_token,
|
||||
email_change,
|
||||
email_change_token_new,
|
||||
recovery_token
|
||||
) VALUES (
|
||||
'00000000-0000-0000-0000-000000000000',
|
||||
new_user_id,
|
||||
'authenticated',
|
||||
'authenticated',
|
||||
user_email,
|
||||
encrypted_pwd,
|
||||
NOW(),
|
||||
NOW(),
|
||||
NOW(),
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
''
|
||||
);
|
||||
|
||||
-- Create user profile
|
||||
INSERT INTO public.user_profiles (id, email, status)
|
||||
VALUES (new_user_id, user_email, 'active');
|
||||
|
||||
-- Assign roles
|
||||
user_roles_array := ARRAY[]::TEXT[];
|
||||
FOREACH role_name IN ARRAY role_names
|
||||
LOOP
|
||||
-- Get role ID
|
||||
SELECT id INTO role_id_val
|
||||
FROM public.roles
|
||||
WHERE name = role_name;
|
||||
|
||||
-- If role exists, assign it
|
||||
IF role_id_val IS NOT NULL THEN
|
||||
INSERT INTO public.user_roles (user_id, role_id, assigned_by)
|
||||
VALUES (new_user_id, role_id_val, assigned_by_id)
|
||||
ON CONFLICT (user_id, role_id) DO NOTHING;
|
||||
|
||||
-- Add to roles array for return value
|
||||
user_roles_array := array_append(user_roles_array, role_name);
|
||||
END IF;
|
||||
END LOOP;
|
||||
|
||||
-- Return the result as JSON
|
||||
result := json_build_object(
|
||||
'user_id', new_user_id::TEXT,
|
||||
'email', user_email,
|
||||
'temp_password', temp_password,
|
||||
'roles', user_roles_array,
|
||||
'status', 'active'
|
||||
);
|
||||
|
||||
RETURN result;
|
||||
|
||||
EXCEPTION
|
||||
WHEN unique_violation THEN
|
||||
RAISE EXCEPTION 'User with email % already exists', user_email;
|
||||
WHEN OTHERS THEN
|
||||
RAISE EXCEPTION 'Error creating user: %', SQLERRM;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
||||
|
||||
-- Grant execute permission on the function
|
||||
GRANT EXECUTE ON FUNCTION public.create_user_with_roles(TEXT, TEXT[], TEXT) TO authenticated;
|
||||
|
||||
-- Comment for documentation
|
||||
COMMENT ON FUNCTION public.create_user_with_roles(TEXT, TEXT[], TEXT) IS
|
||||
'Creates a new user in auth.users, creates a profile in user_profiles, and assigns the specified roles. Returns user information including user_id, email, temp_password, roles, and status.';
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -507,6 +507,54 @@ AND r.name IN ('conductor', 'data recorder')
|
||||
|
||||
;
|
||||
|
||||
-- Create engr-ugaif user (Conductor, Analyst & Data Recorder)
|
||||
INSERT INTO auth.users (
|
||||
instance_id,
|
||||
id,
|
||||
aud,
|
||||
role,
|
||||
email,
|
||||
encrypted_password,
|
||||
email_confirmed_at,
|
||||
created_at,
|
||||
updated_at,
|
||||
confirmation_token,
|
||||
email_change,
|
||||
email_change_token_new,
|
||||
recovery_token
|
||||
) VALUES (
|
||||
'00000000-0000-0000-0000-000000000000',
|
||||
uuid_generate_v4(),
|
||||
'authenticated',
|
||||
'authenticated',
|
||||
'engr-ugaif@uga.edu',
|
||||
crypt('1048lab&2021', gen_salt('bf')),
|
||||
NOW(),
|
||||
NOW(),
|
||||
NOW(),
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
''
|
||||
);
|
||||
|
||||
INSERT INTO public.user_profiles (id, email, status)
|
||||
SELECT id, email, 'active'
|
||||
FROM auth.users
|
||||
WHERE email = 'engr-ugaif@uga.edu'
|
||||
;
|
||||
|
||||
INSERT INTO public.user_roles (user_id, role_id, assigned_by)
|
||||
SELECT
|
||||
up.id,
|
||||
r.id,
|
||||
(SELECT id FROM public.user_profiles WHERE email = 's.alireza.v@gmail.com')
|
||||
FROM public.user_profiles up
|
||||
CROSS JOIN public.roles r
|
||||
WHERE up.email = 'engr-ugaif@uga.edu'
|
||||
AND r.name IN ('conductor', 'analyst', 'data recorder')
|
||||
;
|
||||
|
||||
-- =============================================
|
||||
-- 4. CREATE MACHINE TYPES
|
||||
-- =============================================
|
||||
|
||||
Reference in New Issue
Block a user