mirror of
https://github.com/usememos/memos.git
synced 2025-06-05 22:09:59 +02:00
fix: list idp
This commit is contained in:
@@ -78,6 +78,8 @@ func (s *APIV1Service) UpdateIdentityProvider(ctx context.Context, request *v1pb
|
|||||||
switch field {
|
switch field {
|
||||||
case "title":
|
case "title":
|
||||||
update.Name = &request.IdentityProvider.Title
|
update.Name = &request.IdentityProvider.Title
|
||||||
|
case "identifier_filter":
|
||||||
|
update.IdentifierFilter = &request.IdentityProvider.IdentifierFilter
|
||||||
case "config":
|
case "config":
|
||||||
update.Config = convertIdentityProviderConfigToStore(request.IdentityProvider.Type, request.IdentityProvider.Config)
|
update.Config = convertIdentityProviderConfigToStore(request.IdentityProvider.Type, request.IdentityProvider.Config)
|
||||||
}
|
}
|
||||||
|
@@ -1057,23 +1057,6 @@ func getMemoPropertyFromContent(content string) (*storepb.MemoPayload_Property,
|
|||||||
return property, nil
|
return property, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func ExtractTagsFromContent(content string) ([]string, error) {
|
|
||||||
nodes, err := parser.Parse(tokenizer.Tokenize(content))
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.Wrap(err, "failed to parse content")
|
|
||||||
}
|
|
||||||
tags := []string{}
|
|
||||||
TraverseASTNodes(nodes, func(node ast.Node) {
|
|
||||||
if tagNode, ok := node.(*ast.Tag); ok {
|
|
||||||
tag := tagNode.Content
|
|
||||||
if !slices.Contains(tags, tag) {
|
|
||||||
tags = append(tags, tag)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return tags, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func TraverseASTNodes(nodes []ast.Node, fn func(ast.Node)) {
|
func TraverseASTNodes(nodes []ast.Node, fn func(ast.Node)) {
|
||||||
for _, node := range nodes {
|
for _, node := range nodes {
|
||||||
fn(node)
|
fn(node)
|
||||||
|
@@ -62,6 +62,7 @@ func (s *Store) ListIdentityProviders(ctx context.Context, find *FindIdentityPro
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
identityProviders = append(identityProviders, identityProvider)
|
||||||
s.idpCache.Store(identityProvider.Id, identityProvider)
|
s.idpCache.Store(identityProvider.Id, identityProvider)
|
||||||
}
|
}
|
||||||
return identityProviders, nil
|
return identityProviders, nil
|
||||||
|
@@ -105,7 +105,7 @@ const CreateIdentityProviderDialog: React.FC<Props> = (props: Props) => {
|
|||||||
const identityProviderTypes = [...new Set(templateList.map((t) => t.type))];
|
const identityProviderTypes = [...new Set(templateList.map((t) => t.type))];
|
||||||
const { confirmCallback, destroy, identityProvider } = props;
|
const { confirmCallback, destroy, identityProvider } = props;
|
||||||
const [basicInfo, setBasicInfo] = useState({
|
const [basicInfo, setBasicInfo] = useState({
|
||||||
name: "",
|
title: "",
|
||||||
identifierFilter: "",
|
identifierFilter: "",
|
||||||
});
|
});
|
||||||
const [type, setType] = useState<IdentityProvider_Type>(IdentityProvider_Type.OAUTH2);
|
const [type, setType] = useState<IdentityProvider_Type>(IdentityProvider_Type.OAUTH2);
|
||||||
@@ -129,7 +129,7 @@ const CreateIdentityProviderDialog: React.FC<Props> = (props: Props) => {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (identityProvider) {
|
if (identityProvider) {
|
||||||
setBasicInfo({
|
setBasicInfo({
|
||||||
name: identityProvider.name,
|
title: identityProvider.title,
|
||||||
identifierFilter: identityProvider.identifierFilter,
|
identifierFilter: identityProvider.identifierFilter,
|
||||||
});
|
});
|
||||||
setType(identityProvider.type);
|
setType(identityProvider.type);
|
||||||
@@ -149,7 +149,7 @@ const CreateIdentityProviderDialog: React.FC<Props> = (props: Props) => {
|
|||||||
const template = templateList.find((t) => t.title === selectedTemplate);
|
const template = templateList.find((t) => t.title === selectedTemplate);
|
||||||
if (template) {
|
if (template) {
|
||||||
setBasicInfo({
|
setBasicInfo({
|
||||||
name: template.name,
|
title: template.title,
|
||||||
identifierFilter: template.identifierFilter,
|
identifierFilter: template.identifierFilter,
|
||||||
});
|
});
|
||||||
setType(template.type);
|
setType(template.type);
|
||||||
@@ -166,7 +166,7 @@ const CreateIdentityProviderDialog: React.FC<Props> = (props: Props) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const allowConfirmAction = () => {
|
const allowConfirmAction = () => {
|
||||||
if (basicInfo.name === "") {
|
if (basicInfo.title === "") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (type === "OAUTH2") {
|
if (type === "OAUTH2") {
|
||||||
@@ -205,11 +205,12 @@ const CreateIdentityProviderDialog: React.FC<Props> = (props: Props) => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
toast.success(t("setting.sso-section.sso-created", { name: basicInfo.name }));
|
toast.success(t("setting.sso-section.sso-created", { name: basicInfo.title }));
|
||||||
} else {
|
} else {
|
||||||
await identityProviderServiceClient.updateIdentityProvider({
|
await identityProviderServiceClient.updateIdentityProvider({
|
||||||
identityProvider: {
|
identityProvider: {
|
||||||
...basicInfo,
|
...basicInfo,
|
||||||
|
name: identityProvider!.name,
|
||||||
type: type,
|
type: type,
|
||||||
config: {
|
config: {
|
||||||
oauth2Config: {
|
oauth2Config: {
|
||||||
@@ -218,9 +219,9 @@ const CreateIdentityProviderDialog: React.FC<Props> = (props: Props) => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
updateMask: ["title", "identifierFilter", "config"],
|
updateMask: ["title", "identifier_filter", "config"],
|
||||||
});
|
});
|
||||||
toast.success(t("setting.sso-section.sso-updated", { name: basicInfo.name }));
|
toast.success(t("setting.sso-section.sso-updated", { name: basicInfo.title }));
|
||||||
}
|
}
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
@@ -280,11 +281,11 @@ const CreateIdentityProviderDialog: React.FC<Props> = (props: Props) => {
|
|||||||
<Input
|
<Input
|
||||||
className="mb-2"
|
className="mb-2"
|
||||||
placeholder={t("common.name")}
|
placeholder={t("common.name")}
|
||||||
value={basicInfo.name}
|
value={basicInfo.title}
|
||||||
onChange={(e) =>
|
onChange={(e) =>
|
||||||
setBasicInfo({
|
setBasicInfo({
|
||||||
...basicInfo,
|
...basicInfo,
|
||||||
name: e.target.value,
|
title: e.target.value,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
fullWidth
|
fullWidth
|
||||||
|
@@ -24,7 +24,7 @@ const SSOSection = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleDeleteIdentityProvider = async (identityProvider: IdentityProvider) => {
|
const handleDeleteIdentityProvider = async (identityProvider: IdentityProvider) => {
|
||||||
const content = t("setting.sso-section.confirm-delete", { name: identityProvider.name });
|
const content = t("setting.sso-section.confirm-delete", { name: identityProvider.title });
|
||||||
|
|
||||||
showCommonDialog({
|
showCommonDialog({
|
||||||
title: t("setting.sso-section.delete-sso"),
|
title: t("setting.sso-section.delete-sso"),
|
||||||
|
@@ -191,7 +191,7 @@ const SignIn = () => {
|
|||||||
size="md"
|
size="md"
|
||||||
onClick={() => handleSignInWithIdentityProvider(identityProvider)}
|
onClick={() => handleSignInWithIdentityProvider(identityProvider)}
|
||||||
>
|
>
|
||||||
{t("common.sign-in-with", { provider: identityProvider.name })}
|
{t("common.sign-in-with", { provider: identityProvider.title })}
|
||||||
</Button>
|
</Button>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
Reference in New Issue
Block a user