feat: add admin ui for toggling community sharing
This commit is contained in:
		
							parent
							
								
									ccff221921
								
							
						
					
					
						commit
						e06417f0aa
					
				|  | @ -417,6 +417,19 @@ async def update_webhook_url(form_data: UrlForm, user=Depends(get_admin_user)): | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @app.get("/api/community_sharing", response_model=bool) | ||||||
|  | async def get_community_sharing_status(request: Request, user=Depends(get_admin_user)): | ||||||
|  |     return webui_app.state.config.ENABLE_COMMUNITY_SHARING | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @app.get("/api/community_sharing/toggle", response_model=bool) | ||||||
|  | async def toggle_community_sharing(request: Request, user=Depends(get_admin_user)): | ||||||
|  |     webui_app.state.config.ENABLE_COMMUNITY_SHARING = ( | ||||||
|  |         not webui_app.state.config.ENABLE_COMMUNITY_SHARING | ||||||
|  |     ) | ||||||
|  |     return webui_app.state.config.ENABLE_COMMUNITY_SHARING | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| @app.get("/api/version") | @app.get("/api/version") | ||||||
| async def get_app_config(): | async def get_app_config(): | ||||||
|     return { |     return { | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| import { WEBUI_BASE_URL } from '$lib/constants'; | import { WEBUI_API_BASE_URL, WEBUI_BASE_URL } from '$lib/constants'; | ||||||
| 
 | 
 | ||||||
| export const getModels = async (token: string = '') => { | export const getModels = async (token: string = '') => { | ||||||
| 	let error = null; | 	let error = null; | ||||||
|  | @ -246,6 +246,60 @@ export const updateWebhookUrl = async (token: string, url: string) => { | ||||||
| 	return res.url; | 	return res.url; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | export const getCommunitySharingEnabledStatus = async (token: string) => { | ||||||
|  | 	let error = null; | ||||||
|  | 
 | ||||||
|  | 	const res = await fetch(`${WEBUI_BASE_URL}/api/community_sharing`, { | ||||||
|  | 		method: 'GET', | ||||||
|  | 		headers: { | ||||||
|  | 			'Content-Type': 'application/json', | ||||||
|  | 			Authorization: `Bearer ${token}` | ||||||
|  | 		} | ||||||
|  | 	}) | ||||||
|  | 		.then(async (res) => { | ||||||
|  | 			if (!res.ok) throw await res.json(); | ||||||
|  | 			return res.json(); | ||||||
|  | 		}) | ||||||
|  | 		.catch((err) => { | ||||||
|  | 			console.log(err); | ||||||
|  | 			error = err; | ||||||
|  | 			return null; | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 	if (error) { | ||||||
|  | 		throw error; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return res; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | export const toggleCommunitySharingEnabledStatus = async (token: string) => { | ||||||
|  | 	let error = null; | ||||||
|  | 
 | ||||||
|  | 	const res = await fetch(`${WEBUI_BASE_URL}/api/community_sharing/toggle`, { | ||||||
|  | 		method: 'GET', | ||||||
|  | 		headers: { | ||||||
|  | 			'Content-Type': 'application/json', | ||||||
|  | 			Authorization: `Bearer ${token}` | ||||||
|  | 		} | ||||||
|  | 	}) | ||||||
|  | 		.then(async (res) => { | ||||||
|  | 			if (!res.ok) throw await res.json(); | ||||||
|  | 			return res.json(); | ||||||
|  | 		}) | ||||||
|  | 		.catch((err) => { | ||||||
|  | 			console.log(err); | ||||||
|  | 			error = err.detail; | ||||||
|  | 			return null; | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 	if (error) { | ||||||
|  | 		throw error; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return res; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| export const getModelConfig = async (token: string): Promise<GlobalModelConfig> => { | export const getModelConfig = async (token: string): Promise<GlobalModelConfig> => { | ||||||
| 	let error = null; | 	let error = null; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,10 @@ | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| 	import { getWebhookUrl, updateWebhookUrl } from '$lib/apis'; | 	import { | ||||||
|  | 		getCommunitySharingEnabledStatus, | ||||||
|  | 		getWebhookUrl, | ||||||
|  | 		toggleCommunitySharingEnabledStatus, | ||||||
|  | 		updateWebhookUrl | ||||||
|  | 	} from '$lib/apis'; | ||||||
| 	import { | 	import { | ||||||
| 		getDefaultUserRole, | 		getDefaultUserRole, | ||||||
| 		getJWTExpiresDuration, | 		getJWTExpiresDuration, | ||||||
|  | @ -18,6 +23,7 @@ | ||||||
| 	let JWTExpiresIn = ''; | 	let JWTExpiresIn = ''; | ||||||
| 
 | 
 | ||||||
| 	let webhookUrl = ''; | 	let webhookUrl = ''; | ||||||
|  | 	let communitySharingEnabled = true; | ||||||
| 
 | 
 | ||||||
| 	const toggleSignUpEnabled = async () => { | 	const toggleSignUpEnabled = async () => { | ||||||
| 		signUpEnabled = await toggleSignUpEnabledStatus(localStorage.token); | 		signUpEnabled = await toggleSignUpEnabledStatus(localStorage.token); | ||||||
|  | @ -35,6 +41,10 @@ | ||||||
| 		webhookUrl = await updateWebhookUrl(localStorage.token, webhookUrl); | 		webhookUrl = await updateWebhookUrl(localStorage.token, webhookUrl); | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  | 	const toggleCommunitySharingEnabled = async () => { | ||||||
|  | 		communitySharingEnabled = await toggleCommunitySharingEnabledStatus(localStorage.token); | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
| 	onMount(async () => { | 	onMount(async () => { | ||||||
| 		await Promise.all([ | 		await Promise.all([ | ||||||
| 			(async () => { | 			(async () => { | ||||||
|  | @ -48,6 +58,9 @@ | ||||||
| 			})(), | 			})(), | ||||||
| 			(async () => { | 			(async () => { | ||||||
| 				webhookUrl = await getWebhookUrl(localStorage.token); | 				webhookUrl = await getWebhookUrl(localStorage.token); | ||||||
|  | 			})(), | ||||||
|  | 			(async () => { | ||||||
|  | 				communitySharingEnabled = await getCommunitySharingEnabledStatus(localStorage.token); | ||||||
| 			})() | 			})() | ||||||
| 		]); | 		]); | ||||||
| 	}); | 	}); | ||||||
|  | @ -124,6 +137,47 @@ | ||||||
| 				</div> | 				</div> | ||||||
| 			</div> | 			</div> | ||||||
| 
 | 
 | ||||||
|  | 			<div class="  flex w-full justify-between"> | ||||||
|  | 				<div class=" self-center text-xs font-medium">{$i18n.t('Enable Community Sharing')}</div> | ||||||
|  | 
 | ||||||
|  | 				<button | ||||||
|  | 					class="p-1 px-3 text-xs flex rounded transition" | ||||||
|  | 					on:click={() => { | ||||||
|  | 						toggleCommunitySharingEnabled(); | ||||||
|  | 					}} | ||||||
|  | 					type="button" | ||||||
|  | 				> | ||||||
|  | 					{#if communitySharingEnabled} | ||||||
|  | 						<svg | ||||||
|  | 							xmlns="http://www.w3.org/2000/svg" | ||||||
|  | 							viewBox="0 0 16 16" | ||||||
|  | 							fill="currentColor" | ||||||
|  | 							class="w-4 h-4" | ||||||
|  | 						> | ||||||
|  | 							<path | ||||||
|  | 								d="M11.5 1A3.5 3.5 0 0 0 8 4.5V7H2.5A1.5 1.5 0 0 0 1 8.5v5A1.5 1.5 0 0 0 2.5 15h7a1.5 1.5 0 0 0 1.5-1.5v-5A1.5 1.5 0 0 0 9.5 7V4.5a2 2 0 1 1 4 0v1.75a.75.75 0 0 0 1.5 0V4.5A3.5 3.5 0 0 0 11.5 1Z" | ||||||
|  | 							/> | ||||||
|  | 						</svg> | ||||||
|  | 						<span class="ml-2 self-center">{$i18n.t('Enabled')}</span> | ||||||
|  | 					{:else} | ||||||
|  | 						<svg | ||||||
|  | 							xmlns="http://www.w3.org/2000/svg" | ||||||
|  | 							viewBox="0 0 16 16" | ||||||
|  | 							fill="currentColor" | ||||||
|  | 							class="w-4 h-4" | ||||||
|  | 						> | ||||||
|  | 							<path | ||||||
|  | 								fill-rule="evenodd" | ||||||
|  | 								d="M8 1a3.5 3.5 0 0 0-3.5 3.5V7A1.5 1.5 0 0 0 3 8.5v5A1.5 1.5 0 0 0 4.5 15h7a1.5 1.5 0 0 0 1.5-1.5v-5A1.5 1.5 0 0 0 11.5 7V4.5A3.5 3.5 0 0 0 8 1Zm2 6V4.5a2 2 0 1 0-4 0V7h4Z" | ||||||
|  | 								clip-rule="evenodd" | ||||||
|  | 							/> | ||||||
|  | 						</svg> | ||||||
|  | 
 | ||||||
|  | 						<span class="ml-2 self-center">{$i18n.t('Disabled')}</span> | ||||||
|  | 					{/if} | ||||||
|  | 				</button> | ||||||
|  | 			</div> | ||||||
|  | 
 | ||||||
| 			<hr class=" dark:border-gray-700 my-3" /> | 			<hr class=" dark:border-gray-700 my-3" /> | ||||||
| 
 | 
 | ||||||
| 			<div class=" w-full justify-between"> | 			<div class=" w-full justify-between"> | ||||||
|  |  | ||||||
|  | @ -60,7 +60,10 @@ | ||||||
| 			await goto('/'); | 			await goto('/'); | ||||||
| 		} | 		} | ||||||
| 		loaded = true; | 		loaded = true; | ||||||
| 		if (($config?.feature_flags.auth_trusted_header ?? false) || $config?.feature_flags.auth === false) { | 		if ( | ||||||
|  | 			($config?.feature_flags.auth_trusted_header ?? false) || | ||||||
|  | 			$config?.feature_flags.auth === false | ||||||
|  | 		) { | ||||||
| 			await signInHandler(); | 			await signInHandler(); | ||||||
| 		} | 		} | ||||||
| 	}); | 	}); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue