Skip to content

Commit

Permalink
feat: add ldap login support (#126)
Browse files Browse the repository at this point in the history
* feat: add ldap login support

* fix: code factor

---------

Co-authored-by: Andy Hsu <i@nn.ci>
  • Loading branch information
JeremieCHN and xhofe committed Dec 31, 2023
1 parent ca02608 commit a9d57ed
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 9 deletions.
3 changes: 2 additions & 1 deletion src/lang/en/manage.json
Expand Up @@ -20,7 +20,8 @@
"indexes": "Indexes",
"sso": "Single Sign-on",
"docs": "Documentation",
"offline_download": "Offline Download"
"offline_download": "Offline Download",
"ldap": "LDAP"
},
"title": "AList Manage",
"not_admin": "You are not admin user, please login with admin account.",
Expand Down
11 changes: 10 additions & 1 deletion src/lang/en/settings.json
Expand Up @@ -97,5 +97,14 @@
"version": "Version",
"video_autoplay": "Video autoplay",
"video_types": "Video types",
"webauthn_login_enabled": "Webauthn login enabled"
"webauthn_login_enabled": "Webauthn login enabled",
"ldap_login_enabled": "LDAP login enabled",
"ldap_server": "Server",
"ldap_manager_dn": "Manager DN",
"ldap_manager_password": "Manager Password",
"ldap_user_search_base": "User Search Base",
"ldap_user_search_filter": "User Search Filter",
"ldap_default_permission": "Default permission",
"ldap_default_dir": "Default Dir",
"ldap_login_tips": "Login tips"
}
36 changes: 30 additions & 6 deletions src/pages/login/index.tsx
Expand Up @@ -56,13 +56,23 @@ const Login = () => {
const [opt, setOpt] = createSignal("")
const [useauthn, setuseauthn] = createSignal(false)
const [remember, setRemember] = createStorageSignal("remember-pwd", "false")
const [useLdap, setUseLdap] = createSignal(false)
const [loading, data] = useFetch(
async (): Promise<Resp<{ token: string }>> =>
r.post("/auth/login/hash", {
username: username(),
password: hashPwd(password()),
otp_code: opt(),
}),
async (): Promise<Resp<{ token: string }>> => {
if (useLdap()) {
return r.post("/auth/login/ldap", {
username: username(),
password: password(),
otp_code: opt(),
})
} else {
return r.post("/auth/login/hash", {
username: username(),
password: hashPwd(password()),
otp_code: opt(),
})
}
},
)
const [, postauthnlogin] = useFetch(
(
Expand Down Expand Up @@ -149,6 +159,11 @@ const Login = () => {
}
}
const [needOpt, setNeedOpt] = createSignal(false)
const ldapLoginEnabled = getSettingBool("ldap_login_enabled")
const ldapLoginTips = getSetting("ldap_login_tips")
if (ldapLoginEnabled) {
setUseLdap(true)
}

return (
<Center zIndex="1" w="$full" h="100vh">
Expand Down Expand Up @@ -247,6 +262,15 @@ const Login = () => {
{t("login.login")}
</Button>
</HStack>
<Show when={ldapLoginEnabled}>
<Checkbox
w="$full"
checked={useLdap() === true}
onChange={() => setUseLdap(!useLdap())}
>
{ldapLoginTips}
</Checkbox>
</Show>
<Button
w="$full"
colorScheme="accent"
Expand Down
8 changes: 7 additions & 1 deletion src/pages/manage/sidemenu_items.tsx
Expand Up @@ -19,7 +19,7 @@ import { OcWorkflow2 } from "solid-icons/oc"
import { IoCopy, IoHome, IoMagnetOutline } from "solid-icons/io"
import { Component, lazy } from "solid-js"
import { Group, UserRole } from "~/types"
import { FaBrandsQuinscape, FaSolidBook, FaSolidDatabase } from "solid-icons/fa"
import { FaSolidBook, FaSolidDatabase } from "solid-icons/fa"

export type SideMenuItem = SideMenuItemProps & {
component?: Component
Expand Down Expand Up @@ -71,6 +71,12 @@ export const side_menu_items: SideMenuItem[] = [
to: "/@manage/settings/sso",
component: () => <CommonSettings group={Group.SSO} />,
},
{
title: "manage.sidemenu.ldap",
icon: FiLogIn,
to: "/@manage/settings/ldap",
component: () => <CommonSettings group={Group.LDAP} />,
},
{
title: "manage.sidemenu.other",
icon: BsMedium,
Expand Down
1 change: 1 addition & 0 deletions src/types/setting.ts
Expand Up @@ -9,6 +9,7 @@ export enum Group {
ARIA2,
INDEX,
SSO,
LDAP
}
export enum Flag {
PUBLIC,
Expand Down

0 comments on commit a9d57ed

Please sign in to comment.