mirror of
https://github.com/open-webui/open-webui
synced 2025-04-02 00:26:46 +00:00
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
Block a user