refactor: identity provider service

pull/4772/head^2
Steven 1 month ago
parent 8d8e9b3b30
commit dac059a7f7

@ -4,6 +4,8 @@ package memos.api.v1;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
@ -14,18 +16,22 @@ service IdentityProviderService {
rpc ListIdentityProviders(ListIdentityProvidersRequest) returns (ListIdentityProvidersResponse) {
option (google.api.http) = {get: "/api/v1/identityProviders"};
}
// GetIdentityProvider gets an identity provider.
rpc GetIdentityProvider(GetIdentityProviderRequest) returns (IdentityProvider) {
option (google.api.http) = {get: "/api/v1/{name=identityProviders/*}"};
option (google.api.method_signature) = "name";
}
// CreateIdentityProvider creates an identity provider.
rpc CreateIdentityProvider(CreateIdentityProviderRequest) returns (IdentityProvider) {
option (google.api.http) = {
post: "/api/v1/identityProviders"
body: "identity_provider"
};
option (google.api.method_signature) = "identity_provider";
}
// UpdateIdentityProvider updates an identity provider.
rpc UpdateIdentityProvider(UpdateIdentityProviderRequest) returns (IdentityProvider) {
option (google.api.http) = {
@ -34,6 +40,7 @@ service IdentityProviderService {
};
option (google.api.method_signature) = "identity_provider,update_mask";
}
// DeleteIdentityProvider deletes an identity provider.
rpc DeleteIdentityProvider(DeleteIdentityProviderRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {delete: "/api/v1/{name=identityProviders/*}"};
@ -42,21 +49,37 @@ service IdentityProviderService {
}
message IdentityProvider {
// The name of the identityProvider.
// Format: identityProviders/{id}, id is the system generated auto-incremented id.
string name = 1;
option (google.api.resource) = {
type: "memos.api.v1/IdentityProvider"
pattern: "identityProviders/{idp}"
name_field: "name"
singular: "identityProvider"
plural: "identityProviders"
};
// The resource name of the identity provider.
// Format: identityProviders/{idp}
string name = 1 [(google.api.field_behavior) = IDENTIFIER];
// Output only. The system generated unique identifier.
string uid = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
// Required. The type of the identity provider.
Type type = 3 [(google.api.field_behavior) = REQUIRED];
// Required. The display title of the identity provider.
string title = 4 [(google.api.field_behavior) = REQUIRED];
// Optional. Filter applied to user identifiers.
string identifier_filter = 5 [(google.api.field_behavior) = OPTIONAL];
// Required. Configuration for the identity provider.
IdentityProviderConfig config = 6 [(google.api.field_behavior) = REQUIRED];
enum Type {
TYPE_UNSPECIFIED = 0;
OAUTH2 = 1;
}
Type type = 2;
string title = 3;
string identifier_filter = 4;
IdentityProviderConfig config = 5;
}
message IdentityProviderConfig {
@ -82,32 +105,54 @@ message OAuth2Config {
FieldMapping field_mapping = 7;
}
message ListIdentityProvidersRequest {}
message ListIdentityProvidersRequest {
// Optional. The maximum number of identity providers to return.
int32 page_size = 1 [(google.api.field_behavior) = OPTIONAL];
// Optional. A page token for pagination.
string page_token = 2 [(google.api.field_behavior) = OPTIONAL];
}
message ListIdentityProvidersResponse {
// The list of identity providers.
repeated IdentityProvider identity_providers = 1;
// A token for the next page of results.
string next_page_token = 2;
}
message GetIdentityProviderRequest {
// The name of the identityProvider to get.
string name = 1;
// Required. The resource name of the identity provider to get.
// Format: identityProviders/{idp}
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {type: "memos.api.v1/IdentityProvider"}
];
}
message CreateIdentityProviderRequest {
// The identityProvider to create.
IdentityProvider identity_provider = 1;
// Required. The identity provider to create.
IdentityProvider identity_provider = 1 [(google.api.field_behavior) = REQUIRED];
// Optional. The ID to use for the identity provider, which will become the final component of the resource name.
// If not provided, the system will generate one.
string identity_provider_id = 2 [(google.api.field_behavior) = OPTIONAL];
}
message UpdateIdentityProviderRequest {
// The identityProvider to update.
IdentityProvider identity_provider = 1;
// Required. The identity provider to update.
IdentityProvider identity_provider = 1 [(google.api.field_behavior) = REQUIRED];
// The update mask applies to the resource. Only the top level fields of
// Required. The update mask applies to the resource. Only the top level fields of
// IdentityProvider are supported.
google.protobuf.FieldMask update_mask = 2;
google.protobuf.FieldMask update_mask = 2 [(google.api.field_behavior) = REQUIRED];
}
message DeleteIdentityProviderRequest {
// The name of the identityProvider to delete.
string name = 1;
// Required. The resource name of the identity provider to delete.
// Format: identityProviders/{idp}
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {type: "memos.api.v1/IdentityProvider"}
];
}

@ -72,15 +72,21 @@ func (IdentityProvider_Type) EnumDescriptor() ([]byte, []int) {
type IdentityProvider struct {
state protoimpl.MessageState `protogen:"open.v1"`
// The name of the identityProvider.
// Format: identityProviders/{id}, id is the system generated auto-incremented id.
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Type IdentityProvider_Type `protobuf:"varint,2,opt,name=type,proto3,enum=memos.api.v1.IdentityProvider_Type" json:"type,omitempty"`
Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
IdentifierFilter string `protobuf:"bytes,4,opt,name=identifier_filter,json=identifierFilter,proto3" json:"identifier_filter,omitempty"`
Config *IdentityProviderConfig `protobuf:"bytes,5,opt,name=config,proto3" json:"config,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
// The resource name of the identity provider.
// Format: identityProviders/{idp}
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Output only. The system generated unique identifier.
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"`
// Required. The type of the identity provider.
Type IdentityProvider_Type `protobuf:"varint,3,opt,name=type,proto3,enum=memos.api.v1.IdentityProvider_Type" json:"type,omitempty"`
// Required. The display title of the identity provider.
Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"`
// Optional. Filter applied to user identifiers.
IdentifierFilter string `protobuf:"bytes,5,opt,name=identifier_filter,json=identifierFilter,proto3" json:"identifier_filter,omitempty"`
// Required. Configuration for the identity provider.
Config *IdentityProviderConfig `protobuf:"bytes,6,opt,name=config,proto3" json:"config,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *IdentityProvider) Reset() {
@ -120,6 +126,13 @@ func (x *IdentityProvider) GetName() string {
return ""
}
func (x *IdentityProvider) GetUid() string {
if x != nil {
return x.Uid
}
return ""
}
func (x *IdentityProvider) GetType() IdentityProvider_Type {
if x != nil {
return x.Type
@ -375,7 +388,11 @@ func (x *OAuth2Config) GetFieldMapping() *FieldMapping {
}
type ListIdentityProvidersRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
state protoimpl.MessageState `protogen:"open.v1"`
// Optional. The maximum number of identity providers to return.
PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
// Optional. A page token for pagination.
PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -410,11 +427,28 @@ func (*ListIdentityProvidersRequest) Descriptor() ([]byte, []int) {
return file_api_v1_idp_service_proto_rawDescGZIP(), []int{4}
}
func (x *ListIdentityProvidersRequest) GetPageSize() int32 {
if x != nil {
return x.PageSize
}
return 0
}
func (x *ListIdentityProvidersRequest) GetPageToken() string {
if x != nil {
return x.PageToken
}
return ""
}
type ListIdentityProvidersResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
IdentityProviders []*IdentityProvider `protobuf:"bytes,1,rep,name=identity_providers,json=identityProviders,proto3" json:"identity_providers,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
state protoimpl.MessageState `protogen:"open.v1"`
// The list of identity providers.
IdentityProviders []*IdentityProvider `protobuf:"bytes,1,rep,name=identity_providers,json=identityProviders,proto3" json:"identity_providers,omitempty"`
// A token for the next page of results.
NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ListIdentityProvidersResponse) Reset() {
@ -454,9 +488,17 @@ func (x *ListIdentityProvidersResponse) GetIdentityProviders() []*IdentityProvid
return nil
}
func (x *ListIdentityProvidersResponse) GetNextPageToken() string {
if x != nil {
return x.NextPageToken
}
return ""
}
type GetIdentityProviderRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
// The name of the identityProvider to get.
// Required. The resource name of the identity provider to get.
// Format: identityProviders/{idp}
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
@ -501,10 +543,13 @@ func (x *GetIdentityProviderRequest) GetName() string {
type CreateIdentityProviderRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
// The identityProvider to create.
// Required. The identity provider to create.
IdentityProvider *IdentityProvider `protobuf:"bytes,1,opt,name=identity_provider,json=identityProvider,proto3" json:"identity_provider,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
// Optional. The ID to use for the identity provider, which will become the final component of the resource name.
// If not provided, the system will generate one.
IdentityProviderId string `protobuf:"bytes,2,opt,name=identity_provider_id,json=identityProviderId,proto3" json:"identity_provider_id,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *CreateIdentityProviderRequest) Reset() {
@ -544,11 +589,18 @@ func (x *CreateIdentityProviderRequest) GetIdentityProvider() *IdentityProvider
return nil
}
func (x *CreateIdentityProviderRequest) GetIdentityProviderId() string {
if x != nil {
return x.IdentityProviderId
}
return ""
}
type UpdateIdentityProviderRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
// The identityProvider to update.
// Required. The identity provider to update.
IdentityProvider *IdentityProvider `protobuf:"bytes,1,opt,name=identity_provider,json=identityProvider,proto3" json:"identity_provider,omitempty"`
// The update mask applies to the resource. Only the top level fields of
// Required. The update mask applies to the resource. Only the top level fields of
// IdentityProvider are supported.
UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
unknownFields protoimpl.UnknownFields
@ -601,7 +653,8 @@ func (x *UpdateIdentityProviderRequest) GetUpdateMask() *fieldmaskpb.FieldMask {
type DeleteIdentityProviderRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
// The name of the identityProvider to delete.
// Required. The resource name of the identity provider to delete.
// Format: identityProviders/{idp}
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
@ -648,17 +701,19 @@ var File_api_v1_idp_service_proto protoreflect.FileDescriptor
const file_api_v1_idp_service_proto_rawDesc = "" +
"\n" +
"\x18api/v1/idp_service.proto\x12\fmemos.api.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\"\x8a\x02\n" +
"\x10IdentityProvider\x12\x12\n" +
"\x04name\x18\x01 \x01(\tR\x04name\x127\n" +
"\x04type\x18\x02 \x01(\x0e2#.memos.api.v1.IdentityProvider.TypeR\x04type\x12\x14\n" +
"\x05title\x18\x03 \x01(\tR\x05title\x12+\n" +
"\x11identifier_filter\x18\x04 \x01(\tR\x10identifierFilter\x12<\n" +
"\x06config\x18\x05 \x01(\v2$.memos.api.v1.IdentityProviderConfigR\x06config\"(\n" +
"\x18api/v1/idp_service.proto\x12\fmemos.api.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\"\xa2\x03\n" +
"\x10IdentityProvider\x12\x17\n" +
"\x04name\x18\x01 \x01(\tB\x03\xe0A\bR\x04name\x12\x15\n" +
"\x03uid\x18\x02 \x01(\tB\x03\xe0A\x03R\x03uid\x12<\n" +
"\x04type\x18\x03 \x01(\x0e2#.memos.api.v1.IdentityProvider.TypeB\x03\xe0A\x02R\x04type\x12\x19\n" +
"\x05title\x18\x04 \x01(\tB\x03\xe0A\x02R\x05title\x120\n" +
"\x11identifier_filter\x18\x05 \x01(\tB\x03\xe0A\x01R\x10identifierFilter\x12A\n" +
"\x06config\x18\x06 \x01(\v2$.memos.api.v1.IdentityProviderConfigB\x03\xe0A\x02R\x06config\"(\n" +
"\x04Type\x12\x14\n" +
"\x10TYPE_UNSPECIFIED\x10\x00\x12\n" +
"\n" +
"\x06OAUTH2\x10\x01\"e\n" +
"\x06OAUTH2\x10\x01:f\xeaAc\n" +
"\x1dmemos.api.v1/IdentityProvider\x12\x17identityProviders/{idp}\x1a\x04name*\x11identityProviders2\x10identityProvider\"e\n" +
"\x16IdentityProviderConfig\x12A\n" +
"\roauth2_config\x18\x01 \x01(\v2\x1a.memos.api.v1.OAuth2ConfigH\x00R\foauth2ConfigB\b\n" +
"\x06config\"\x86\x01\n" +
@ -677,24 +732,31 @@ const file_api_v1_idp_service_proto_rawDesc = "" +
"\ttoken_url\x18\x04 \x01(\tR\btokenUrl\x12\"\n" +
"\ruser_info_url\x18\x05 \x01(\tR\vuserInfoUrl\x12\x16\n" +
"\x06scopes\x18\x06 \x03(\tR\x06scopes\x12?\n" +
"\rfield_mapping\x18\a \x01(\v2\x1a.memos.api.v1.FieldMappingR\ffieldMapping\"\x1e\n" +
"\x1cListIdentityProvidersRequest\"n\n" +
"\rfield_mapping\x18\a \x01(\v2\x1a.memos.api.v1.FieldMappingR\ffieldMapping\"d\n" +
"\x1cListIdentityProvidersRequest\x12 \n" +
"\tpage_size\x18\x01 \x01(\x05B\x03\xe0A\x01R\bpageSize\x12\"\n" +
"\n" +
"page_token\x18\x02 \x01(\tB\x03\xe0A\x01R\tpageToken\"\x96\x01\n" +
"\x1dListIdentityProvidersResponse\x12M\n" +
"\x12identity_providers\x18\x01 \x03(\v2\x1e.memos.api.v1.IdentityProviderR\x11identityProviders\"0\n" +
"\x1aGetIdentityProviderRequest\x12\x12\n" +
"\x04name\x18\x01 \x01(\tR\x04name\"l\n" +
"\x1dCreateIdentityProviderRequest\x12K\n" +
"\x11identity_provider\x18\x01 \x01(\v2\x1e.memos.api.v1.IdentityProviderR\x10identityProvider\"\xa9\x01\n" +
"\x1dUpdateIdentityProviderRequest\x12K\n" +
"\x11identity_provider\x18\x01 \x01(\v2\x1e.memos.api.v1.IdentityProviderR\x10identityProvider\x12;\n" +
"\vupdate_mask\x18\x02 \x01(\v2\x1a.google.protobuf.FieldMaskR\n" +
"updateMask\"3\n" +
"\x1dDeleteIdentityProviderRequest\x12\x12\n" +
"\x04name\x18\x01 \x01(\tR\x04name2\xce\x06\n" +
"\x12identity_providers\x18\x01 \x03(\v2\x1e.memos.api.v1.IdentityProviderR\x11identityProviders\x12&\n" +
"\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"W\n" +
"\x1aGetIdentityProviderRequest\x129\n" +
"\x04name\x18\x01 \x01(\tB%\xe0A\x02\xfaA\x1f\n" +
"\x1dmemos.api.v1/IdentityProviderR\x04name\"\xa8\x01\n" +
"\x1dCreateIdentityProviderRequest\x12P\n" +
"\x11identity_provider\x18\x01 \x01(\v2\x1e.memos.api.v1.IdentityProviderB\x03\xe0A\x02R\x10identityProvider\x125\n" +
"\x14identity_provider_id\x18\x02 \x01(\tB\x03\xe0A\x01R\x12identityProviderId\"\xb3\x01\n" +
"\x1dUpdateIdentityProviderRequest\x12P\n" +
"\x11identity_provider\x18\x01 \x01(\v2\x1e.memos.api.v1.IdentityProviderB\x03\xe0A\x02R\x10identityProvider\x12@\n" +
"\vupdate_mask\x18\x02 \x01(\v2\x1a.google.protobuf.FieldMaskB\x03\xe0A\x02R\n" +
"updateMask\"Z\n" +
"\x1dDeleteIdentityProviderRequest\x129\n" +
"\x04name\x18\x01 \x01(\tB%\xe0A\x02\xfaA\x1f\n" +
"\x1dmemos.api.v1/IdentityProviderR\x04name2\xe2\x06\n" +
"\x17IdentityProviderService\x12\x93\x01\n" +
"\x15ListIdentityProviders\x12*.memos.api.v1.ListIdentityProvidersRequest\x1a+.memos.api.v1.ListIdentityProvidersResponse\"!\x82\xd3\xe4\x93\x02\x1b\x12\x19/api/v1/identityProviders\x12\x92\x01\n" +
"\x13GetIdentityProvider\x12(.memos.api.v1.GetIdentityProviderRequest\x1a\x1e.memos.api.v1.IdentityProvider\"1\xdaA\x04name\x82\xd3\xe4\x93\x02$\x12\"/api/v1/{name=identityProviders/*}\x12\x9b\x01\n" +
"\x16CreateIdentityProvider\x12+.memos.api.v1.CreateIdentityProviderRequest\x1a\x1e.memos.api.v1.IdentityProvider\"4\x82\xd3\xe4\x93\x02.:\x11identity_provider\"\x19/api/v1/identityProviders\x12\xd6\x01\n" +
"\x13GetIdentityProvider\x12(.memos.api.v1.GetIdentityProviderRequest\x1a\x1e.memos.api.v1.IdentityProvider\"1\xdaA\x04name\x82\xd3\xe4\x93\x02$\x12\"/api/v1/{name=identityProviders/*}\x12\xaf\x01\n" +
"\x16CreateIdentityProvider\x12+.memos.api.v1.CreateIdentityProviderRequest\x1a\x1e.memos.api.v1.IdentityProvider\"H\xdaA\x11identity_provider\x82\xd3\xe4\x93\x02.:\x11identity_provider\"\x19/api/v1/identityProviders\x12\xd6\x01\n" +
"\x16UpdateIdentityProvider\x12+.memos.api.v1.UpdateIdentityProviderRequest\x1a\x1e.memos.api.v1.IdentityProvider\"o\xdaA\x1didentity_provider,update_mask\x82\xd3\xe4\x93\x02I:\x11identity_provider24/api/v1/{identity_provider.name=identityProviders/*}\x12\x90\x01\n" +
"\x16DeleteIdentityProvider\x12+.memos.api.v1.DeleteIdentityProviderRequest\x1a\x16.google.protobuf.Empty\"1\xdaA\x04name\x82\xd3\xe4\x93\x02$*\"/api/v1/{name=identityProviders/*}B\xa7\x01\n" +
"\x10com.memos.api.v1B\x0fIdpServiceProtoP\x01Z0github.com/usememos/memos/proto/gen/api/v1;apiv1\xa2\x02\x03MAX\xaa\x02\fMemos.Api.V1\xca\x02\fMemos\\Api\\V1\xe2\x02\x18Memos\\Api\\V1\\GPBMetadata\xea\x02\x0eMemos::Api::V1b\x06proto3"

@ -35,12 +35,20 @@ var (
_ = metadata.Join
)
var filter_IdentityProviderService_ListIdentityProviders_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
func request_IdentityProviderService_ListIdentityProviders_0(ctx context.Context, marshaler runtime.Marshaler, client IdentityProviderServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq ListIdentityProvidersRequest
metadata runtime.ServerMetadata
)
io.Copy(io.Discard, req.Body)
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_IdentityProviderService_ListIdentityProviders_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ListIdentityProviders(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
@ -50,6 +58,12 @@ func local_request_IdentityProviderService_ListIdentityProviders_0(ctx context.C
protoReq ListIdentityProvidersRequest
metadata runtime.ServerMetadata
)
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_IdentityProviderService_ListIdentityProviders_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ListIdentityProviders(ctx, &protoReq)
return msg, metadata, err
}
@ -91,6 +105,8 @@ func local_request_IdentityProviderService_GetIdentityProvider_0(ctx context.Con
return msg, metadata, err
}
var filter_IdentityProviderService_CreateIdentityProvider_0 = &utilities.DoubleArray{Encoding: map[string]int{"identity_provider": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
func request_IdentityProviderService_CreateIdentityProvider_0(ctx context.Context, marshaler runtime.Marshaler, client IdentityProviderServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq CreateIdentityProviderRequest
@ -99,6 +115,12 @@ func request_IdentityProviderService_CreateIdentityProvider_0(ctx context.Contex
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.IdentityProvider); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_IdentityProviderService_CreateIdentityProvider_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.CreateIdentityProvider(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
@ -111,6 +133,12 @@ func local_request_IdentityProviderService_CreateIdentityProvider_0(ctx context.
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.IdentityProvider); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_IdentityProviderService_CreateIdentityProvider_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.CreateIdentityProvider(ctx, &protoReq)
return msg, metadata, err
}

@ -136,6 +136,18 @@ paths:
description: An unexpected error response.
schema:
$ref: '#/definitions/googlerpcStatus'
parameters:
- name: pageSize
description: Optional. The maximum number of identity providers to return.
in: query
required: false
type: integer
format: int32
- name: pageToken
description: Optional. A page token for pagination.
in: query
required: false
type: string
tags:
- IdentityProviderService
post:
@ -152,11 +164,20 @@ paths:
$ref: '#/definitions/googlerpcStatus'
parameters:
- name: identityProvider
description: The identityProvider to create.
description: Required. The identity provider to create.
in: body
required: true
schema:
$ref: '#/definitions/apiv1IdentityProvider'
required:
- identityProvider
- name: identityProviderId
description: |-
Optional. The ID to use for the identity provider, which will become the final component of the resource name.
If not provided, the system will generate one.
in: query
required: false
type: string
tags:
- IdentityProviderService
/api/v1/inboxes:
@ -722,28 +743,41 @@ paths:
parameters:
- name: identityProvider.name
description: |-
The name of the identityProvider.
Format: identityProviders/{id}, id is the system generated auto-incremented id.
The resource name of the identity provider.
Format: identityProviders/{idp}
in: path
required: true
type: string
pattern: identityProviders/[^/]+
- name: identityProvider
description: The identityProvider to update.
description: Required. The identity provider to update.
in: body
required: true
schema:
type: object
properties:
uid:
type: string
description: Output only. The system generated unique identifier.
readOnly: true
type:
$ref: '#/definitions/apiv1IdentityProviderType'
description: Required. The type of the identity provider.
title:
type: string
description: Required. The display title of the identity provider.
identifierFilter:
type: string
description: Optional. Filter applied to user identifiers.
config:
$ref: '#/definitions/apiv1IdentityProviderConfig'
title: The identityProvider to update.
description: Required. Configuration for the identity provider.
title: Required. The identity provider to update.
required:
- type
- title
- config
- identityProvider
tags:
- IdentityProviderService
/api/v1/{inbox.name}:
@ -965,7 +999,9 @@ paths:
$ref: '#/definitions/googlerpcStatus'
parameters:
- name: name_2
description: The name of the identityProvider to get.
description: |-
Required. The resource name of the identity provider to get.
Format: identityProviders/{idp}
in: path
required: true
type: string
@ -987,7 +1023,9 @@ paths:
$ref: '#/definitions/googlerpcStatus'
parameters:
- name: name_2
description: The name of the identityProvider to delete.
description: |-
Required. The resource name of the identity provider to delete.
Format: identityProviders/{idp}
in: path
required: true
type: string
@ -2394,17 +2432,29 @@ definitions:
properties:
name:
type: string
description: |-
The name of the identityProvider.
Format: identityProviders/{id}, id is the system generated auto-incremented id.
title: |-
The resource name of the identity provider.
Format: identityProviders/{idp}
uid:
type: string
description: Output only. The system generated unique identifier.
readOnly: true
type:
$ref: '#/definitions/apiv1IdentityProviderType'
description: Required. The type of the identity provider.
title:
type: string
description: Required. The display title of the identity provider.
identifierFilter:
type: string
description: Optional. Filter applied to user identifiers.
config:
$ref: '#/definitions/apiv1IdentityProviderConfig'
description: Required. Configuration for the identity provider.
required:
- type
- title
- config
apiv1IdentityProviderConfig:
type: object
properties:
@ -3036,6 +3086,10 @@ definitions:
items:
type: object
$ref: '#/definitions/apiv1IdentityProvider'
description: The list of identity providers.
nextPageToken:
type: string
description: A token for the next page of results.
v1ListInboxesResponse:
type: object
properties:

@ -106,6 +106,7 @@ func (s *APIV1Service) DeleteIdentityProvider(ctx context.Context, request *v1pb
func convertIdentityProviderFromStore(identityProvider *storepb.IdentityProvider) *v1pb.IdentityProvider {
temp := &v1pb.IdentityProvider{
Name: fmt.Sprintf("%s%d", IdentityProviderNamePrefix, identityProvider.Id),
Uid: fmt.Sprintf("%d", identityProvider.Id),
Title: identityProvider.Name,
IdentifierFilter: identityProvider.IdentifierFilter,
Type: v1pb.IdentityProvider_Type(v1pb.IdentityProvider_Type_value[identityProvider.Type.String()]),

@ -12,6 +12,7 @@ import { generateDialog } from "./Dialog";
const templateList: IdentityProvider[] = [
{
name: "",
uid: "",
title: "GitHub",
type: IdentityProvider_Type.OAUTH2,
identifierFilter: "",
@ -33,6 +34,7 @@ const templateList: IdentityProvider[] = [
},
{
name: "",
uid: "",
title: "GitLab",
type: IdentityProvider_Type.OAUTH2,
identifierFilter: "",
@ -54,6 +56,7 @@ const templateList: IdentityProvider[] = [
},
{
name: "",
uid: "",
title: "Google",
type: IdentityProvider_Type.OAUTH2,
identifierFilter: "",
@ -75,6 +78,7 @@ const templateList: IdentityProvider[] = [
},
{
name: "",
uid: "",
title: "Custom",
type: IdentityProvider_Type.OAUTH2,
identifierFilter: "",

@ -13,13 +13,19 @@ export const protobufPackage = "memos.api.v1";
export interface IdentityProvider {
/**
* The name of the identityProvider.
* Format: identityProviders/{id}, id is the system generated auto-incremented id.
* The resource name of the identity provider.
* Format: identityProviders/{idp}
*/
name: string;
/** Output only. The system generated unique identifier. */
uid: string;
/** Required. The type of the identity provider. */
type: IdentityProvider_Type;
/** Required. The display title of the identity provider. */
title: string;
/** Optional. Filter applied to user identifiers. */
identifierFilter: string;
/** Required. Configuration for the identity provider. */
config?: IdentityProviderConfig | undefined;
}
@ -78,41 +84,68 @@ export interface OAuth2Config {
}
export interface ListIdentityProvidersRequest {
/** Optional. The maximum number of identity providers to return. */
pageSize: number;
/** Optional. A page token for pagination. */
pageToken: string;
}
export interface ListIdentityProvidersResponse {
/** The list of identity providers. */
identityProviders: IdentityProvider[];
/** A token for the next page of results. */
nextPageToken: string;
}
export interface GetIdentityProviderRequest {
/** The name of the identityProvider to get. */
/**
* Required. The resource name of the identity provider to get.
* Format: identityProviders/{idp}
*/
name: string;
}
export interface CreateIdentityProviderRequest {
/** The identityProvider to create. */
identityProvider?: IdentityProvider | undefined;
/** Required. The identity provider to create. */
identityProvider?:
| IdentityProvider
| undefined;
/**
* Optional. The ID to use for the identity provider, which will become the final component of the resource name.
* If not provided, the system will generate one.
*/
identityProviderId: string;
}
export interface UpdateIdentityProviderRequest {
/** The identityProvider to update. */
/** Required. The identity provider to update. */
identityProvider?:
| IdentityProvider
| undefined;
/**
* The update mask applies to the resource. Only the top level fields of
* Required. The update mask applies to the resource. Only the top level fields of
* IdentityProvider are supported.
*/
updateMask?: string[] | undefined;
}
export interface DeleteIdentityProviderRequest {
/** The name of the identityProvider to delete. */
/**
* Required. The resource name of the identity provider to delete.
* Format: identityProviders/{idp}
*/
name: string;
}
function createBaseIdentityProvider(): IdentityProvider {
return { name: "", type: IdentityProvider_Type.TYPE_UNSPECIFIED, title: "", identifierFilter: "", config: undefined };
return {
name: "",
uid: "",
type: IdentityProvider_Type.TYPE_UNSPECIFIED,
title: "",
identifierFilter: "",
config: undefined,
};
}
export const IdentityProvider: MessageFns<IdentityProvider> = {
@ -120,17 +153,20 @@ export const IdentityProvider: MessageFns<IdentityProvider> = {
if (message.name !== "") {
writer.uint32(10).string(message.name);
}
if (message.uid !== "") {
writer.uint32(18).string(message.uid);
}
if (message.type !== IdentityProvider_Type.TYPE_UNSPECIFIED) {
writer.uint32(16).int32(identityProvider_TypeToNumber(message.type));
writer.uint32(24).int32(identityProvider_TypeToNumber(message.type));
}
if (message.title !== "") {
writer.uint32(26).string(message.title);
writer.uint32(34).string(message.title);
}
if (message.identifierFilter !== "") {
writer.uint32(34).string(message.identifierFilter);
writer.uint32(42).string(message.identifierFilter);
}
if (message.config !== undefined) {
IdentityProviderConfig.encode(message.config, writer.uint32(42).fork()).join();
IdentityProviderConfig.encode(message.config, writer.uint32(50).fork()).join();
}
return writer;
},
@ -151,19 +187,19 @@ export const IdentityProvider: MessageFns<IdentityProvider> = {
continue;
}
case 2: {
if (tag !== 16) {
if (tag !== 18) {
break;
}
message.type = identityProvider_TypeFromJSON(reader.int32());
message.uid = reader.string();
continue;
}
case 3: {
if (tag !== 26) {
if (tag !== 24) {
break;
}
message.title = reader.string();
message.type = identityProvider_TypeFromJSON(reader.int32());
continue;
}
case 4: {
@ -171,7 +207,7 @@ export const IdentityProvider: MessageFns<IdentityProvider> = {
break;
}
message.identifierFilter = reader.string();
message.title = reader.string();
continue;
}
case 5: {
@ -179,6 +215,14 @@ export const IdentityProvider: MessageFns<IdentityProvider> = {
break;
}
message.identifierFilter = reader.string();
continue;
}
case 6: {
if (tag !== 50) {
break;
}
message.config = IdentityProviderConfig.decode(reader, reader.uint32());
continue;
}
@ -197,6 +241,7 @@ export const IdentityProvider: MessageFns<IdentityProvider> = {
fromPartial(object: DeepPartial<IdentityProvider>): IdentityProvider {
const message = createBaseIdentityProvider();
message.name = object.name ?? "";
message.uid = object.uid ?? "";
message.type = object.type ?? IdentityProvider_Type.TYPE_UNSPECIFIED;
message.title = object.title ?? "";
message.identifierFilter = object.identifierFilter ?? "";
@ -466,11 +511,17 @@ export const OAuth2Config: MessageFns<OAuth2Config> = {
};
function createBaseListIdentityProvidersRequest(): ListIdentityProvidersRequest {
return {};
return { pageSize: 0, pageToken: "" };
}
export const ListIdentityProvidersRequest: MessageFns<ListIdentityProvidersRequest> = {
encode(_: ListIdentityProvidersRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
encode(message: ListIdentityProvidersRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
if (message.pageSize !== 0) {
writer.uint32(8).int32(message.pageSize);
}
if (message.pageToken !== "") {
writer.uint32(18).string(message.pageToken);
}
return writer;
},
@ -481,6 +532,22 @@ export const ListIdentityProvidersRequest: MessageFns<ListIdentityProvidersReque
while (reader.pos < end) {
const tag = reader.uint32();
switch (tag >>> 3) {
case 1: {
if (tag !== 8) {
break;
}
message.pageSize = reader.int32();
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.pageToken = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
@ -493,14 +560,16 @@ export const ListIdentityProvidersRequest: MessageFns<ListIdentityProvidersReque
create(base?: DeepPartial<ListIdentityProvidersRequest>): ListIdentityProvidersRequest {
return ListIdentityProvidersRequest.fromPartial(base ?? {});
},
fromPartial(_: DeepPartial<ListIdentityProvidersRequest>): ListIdentityProvidersRequest {
fromPartial(object: DeepPartial<ListIdentityProvidersRequest>): ListIdentityProvidersRequest {
const message = createBaseListIdentityProvidersRequest();
message.pageSize = object.pageSize ?? 0;
message.pageToken = object.pageToken ?? "";
return message;
},
};
function createBaseListIdentityProvidersResponse(): ListIdentityProvidersResponse {
return { identityProviders: [] };
return { identityProviders: [], nextPageToken: "" };
}
export const ListIdentityProvidersResponse: MessageFns<ListIdentityProvidersResponse> = {
@ -508,6 +577,9 @@ export const ListIdentityProvidersResponse: MessageFns<ListIdentityProvidersResp
for (const v of message.identityProviders) {
IdentityProvider.encode(v!, writer.uint32(10).fork()).join();
}
if (message.nextPageToken !== "") {
writer.uint32(18).string(message.nextPageToken);
}
return writer;
},
@ -526,6 +598,14 @@ export const ListIdentityProvidersResponse: MessageFns<ListIdentityProvidersResp
message.identityProviders.push(IdentityProvider.decode(reader, reader.uint32()));
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.nextPageToken = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
@ -541,6 +621,7 @@ export const ListIdentityProvidersResponse: MessageFns<ListIdentityProvidersResp
fromPartial(object: DeepPartial<ListIdentityProvidersResponse>): ListIdentityProvidersResponse {
const message = createBaseListIdentityProvidersResponse();
message.identityProviders = object.identityProviders?.map((e) => IdentityProvider.fromPartial(e)) || [];
message.nextPageToken = object.nextPageToken ?? "";
return message;
},
};
@ -592,7 +673,7 @@ export const GetIdentityProviderRequest: MessageFns<GetIdentityProviderRequest>
};
function createBaseCreateIdentityProviderRequest(): CreateIdentityProviderRequest {
return { identityProvider: undefined };
return { identityProvider: undefined, identityProviderId: "" };
}
export const CreateIdentityProviderRequest: MessageFns<CreateIdentityProviderRequest> = {
@ -600,6 +681,9 @@ export const CreateIdentityProviderRequest: MessageFns<CreateIdentityProviderReq
if (message.identityProvider !== undefined) {
IdentityProvider.encode(message.identityProvider, writer.uint32(10).fork()).join();
}
if (message.identityProviderId !== "") {
writer.uint32(18).string(message.identityProviderId);
}
return writer;
},
@ -618,6 +702,14 @@ export const CreateIdentityProviderRequest: MessageFns<CreateIdentityProviderReq
message.identityProvider = IdentityProvider.decode(reader, reader.uint32());
continue;
}
case 2: {
if (tag !== 18) {
break;
}
message.identityProviderId = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
@ -635,6 +727,7 @@ export const CreateIdentityProviderRequest: MessageFns<CreateIdentityProviderReq
message.identityProvider = (object.identityProvider !== undefined && object.identityProvider !== null)
? IdentityProvider.fromPartial(object.identityProvider)
: undefined;
message.identityProviderId = object.identityProviderId ?? "";
return message;
},
};
@ -857,6 +950,9 @@ export const IdentityProviderServiceDefinition = {
responseStream: false,
options: {
_unknownFields: {
8410: [
new Uint8Array([17, 105, 100, 101, 110, 116, 105, 116, 121, 95, 112, 114, 111, 118, 105, 100, 101, 114]),
],
578365826: [
new Uint8Array([
46,

Loading…
Cancel
Save