forked from open-webui/open-webui
		
	main #3
					 2 changed files with 83 additions and 1 deletions
				
			
		|  | @ -139,3 +139,60 @@ export const updateModelFilterConfig = async ( | ||||||
| 
 | 
 | ||||||
| 	return res; | 	return res; | ||||||
| }; | }; | ||||||
|  | 
 | ||||||
|  | export const getWebhookUrl = async (token: string) => { | ||||||
|  | 	let error = null; | ||||||
|  | 
 | ||||||
|  | 	const res = await fetch(`${WEBUI_BASE_URL}/api/webhook`, { | ||||||
|  | 		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.url; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | export const updateWebhookUrl = async (token: string, url: string) => { | ||||||
|  | 	let error = null; | ||||||
|  | 
 | ||||||
|  | 	const res = await fetch(`${WEBUI_BASE_URL}/api/webhook`, { | ||||||
|  | 		method: 'POST', | ||||||
|  | 		headers: { | ||||||
|  | 			'Content-Type': 'application/json', | ||||||
|  | 			Authorization: `Bearer ${token}` | ||||||
|  | 		}, | ||||||
|  | 		body: JSON.stringify({ | ||||||
|  | 			url: url | ||||||
|  | 		}) | ||||||
|  | 	}) | ||||||
|  | 		.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.url; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
|  | 	import { getWebhookUrl, updateWebhookUrl } from '$lib/apis'; | ||||||
| 	import { | 	import { | ||||||
| 		getDefaultUserRole, | 		getDefaultUserRole, | ||||||
| 		getJWTExpiresDuration, | 		getJWTExpiresDuration, | ||||||
|  | @ -16,6 +17,8 @@ | ||||||
| 	let defaultUserRole = 'pending'; | 	let defaultUserRole = 'pending'; | ||||||
| 	let JWTExpiresIn = ''; | 	let JWTExpiresIn = ''; | ||||||
| 
 | 
 | ||||||
|  | 	let webhookUrl = ''; | ||||||
|  | 
 | ||||||
| 	const toggleSignUpEnabled = async () => { | 	const toggleSignUpEnabled = async () => { | ||||||
| 		signUpEnabled = await toggleSignUpEnabledStatus(localStorage.token); | 		signUpEnabled = await toggleSignUpEnabledStatus(localStorage.token); | ||||||
| 	}; | 	}; | ||||||
|  | @ -28,18 +31,23 @@ | ||||||
| 		JWTExpiresIn = await updateJWTExpiresDuration(localStorage.token, duration); | 		JWTExpiresIn = await updateJWTExpiresDuration(localStorage.token, duration); | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  | 	const updateWebhookUrlHandler = async () => { | ||||||
|  | 		webhookUrl = await updateWebhookUrl(localStorage.token, webhookUrl); | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
| 	onMount(async () => { | 	onMount(async () => { | ||||||
| 		signUpEnabled = await getSignUpEnabledStatus(localStorage.token); | 		signUpEnabled = await getSignUpEnabledStatus(localStorage.token); | ||||||
| 		defaultUserRole = await getDefaultUserRole(localStorage.token); | 		defaultUserRole = await getDefaultUserRole(localStorage.token); | ||||||
| 		JWTExpiresIn = await getJWTExpiresDuration(localStorage.token); | 		JWTExpiresIn = await getJWTExpiresDuration(localStorage.token); | ||||||
|  | 		webhookUrl = await getWebhookUrl(localStorage.token); | ||||||
| 	}); | 	}); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <form | <form | ||||||
| 	class="flex flex-col h-full justify-between space-y-3 text-sm" | 	class="flex flex-col h-full justify-between space-y-3 text-sm" | ||||||
| 	on:submit|preventDefault={() => { | 	on:submit|preventDefault={() => { | ||||||
| 		// console.log('submit'); |  | ||||||
| 		updateJWTExpiresDurationHandler(JWTExpiresIn); | 		updateJWTExpiresDurationHandler(JWTExpiresIn); | ||||||
|  | 		updateWebhookUrlHandler(); | ||||||
| 		saveHandler(); | 		saveHandler(); | ||||||
| 	}} | 	}} | ||||||
| > | > | ||||||
|  | @ -108,6 +116,23 @@ | ||||||
| 
 | 
 | ||||||
| 			<hr class=" dark:border-gray-700 my-3" /> | 			<hr class=" dark:border-gray-700 my-3" /> | ||||||
| 
 | 
 | ||||||
|  | 			<div class=" w-full justify-between"> | ||||||
|  | 				<div class="flex w-full justify-between"> | ||||||
|  | 					<div class=" self-center text-xs font-medium">{$i18n.t('Webhook URL')}</div> | ||||||
|  | 				</div> | ||||||
|  | 
 | ||||||
|  | 				<div class="flex mt-2 space-x-2"> | ||||||
|  | 					<input | ||||||
|  | 						class="w-full rounded py-1.5 px-4 text-sm dark:text-gray-300 dark:bg-gray-800 outline-none border border-gray-100 dark:border-gray-600" | ||||||
|  | 						type="text" | ||||||
|  | 						placeholder={`https://example.com/webhook`} | ||||||
|  | 						bind:value={webhookUrl} | ||||||
|  | 					/> | ||||||
|  | 				</div> | ||||||
|  | 			</div> | ||||||
|  | 
 | ||||||
|  | 			<hr class=" dark:border-gray-700 my-3" /> | ||||||
|  | 
 | ||||||
| 			<div class=" w-full justify-between"> | 			<div class=" w-full justify-between"> | ||||||
| 				<div class="flex w-full justify-between"> | 				<div class="flex w-full justify-between"> | ||||||
| 					<div class=" self-center text-xs font-medium">{$i18n.t('JWT Expiration')}</div> | 					<div class=" self-center text-xs font-medium">{$i18n.t('JWT Expiration')}</div> | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue