Commit cbebbca7 authored by Steven's avatar Steven

chore: add idp definition

parent 4d62ed46
syntax = "proto3";
package memos.api.v2;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/protobuf/field_mask.proto";
option go_package = "gen/api/v2";
service IdentityProviderService {
rpc ListIdentityProviders(ListIdentityProvidersRequest) returns (ListIdentityProvidersResponse) {
option (google.api.http) = {get: "/api/v2/identityProviders"};
}
rpc GetIdentityProvider(GetIdentityProviderRequest) returns (GetIdentityProviderResponse) {
option (google.api.http) = {get: "/api/v2/{name=identityProviders/*}"};
option (google.api.method_signature) = "name";
}
rpc CreateIdentityProvider(CreateIdentityProviderRequest) returns (CreateIdentityProviderResponse) {
option (google.api.http) = {post: "/api/v2/identityProviders"};
}
// UpdateIdentityProvider updates an identity provider.
rpc UpdateIdentityProvider(UpdateIdentityProviderRequest) returns (UpdateIdentityProviderResponse) {
option (google.api.http) = {
patch: "/api/v2/{identity_provider.name=identityProviders/*}"
body: "identity_provider"
};
option (google.api.method_signature) = "identity_provider,update_mask";
}
// DeleteIdentityProvider deletes an identity provider.
rpc DeleteIdentityProvider(DeleteIdentityProviderRequest) returns (DeleteIdentityProviderResponse) {
option (google.api.http) = {delete: "/api/v2/{name=identityProviders/*}"};
option (google.api.method_signature) = "name";
}
}
message IdentityProvider {
// The name of the identityProvider.
// Format: identityProviders/{id}
string name = 1;
enum Type {
TYPE_UNSPECIFIED = 0;
OAUTH2 = 1;
}
Type type = 2;
string title = 3;
string identifier_filter = 4;
message Config {
message FieldMapping {
string identifier = 1;
string display_name = 2;
string email = 3;
}
message OAuth2 {
string client_id = 1;
string client_secret = 2;
string auth_url = 3;
string token_url = 4;
string user_info_url = 5;
repeated string scopes = 6;
FieldMapping field_mapping = 7;
}
oneof config {
OAuth2 oauth2 = 1;
}
}
Config config = 5;
}
message ListIdentityProvidersRequest {}
message ListIdentityProvidersResponse {
repeated IdentityProvider identity_providers = 1;
}
message GetIdentityProviderRequest {
// The name of the identityProvider to get.
// Format: identityProviders/{id}
string name = 1;
}
message GetIdentityProviderResponse {
// The identityProvider.
IdentityProvider identity_provider = 1;
}
message CreateIdentityProviderRequest {
// The identityProvider to create.
IdentityProvider identity_provider = 1;
}
message CreateIdentityProviderResponse {
// The created identityProvider.
IdentityProvider identity_provider = 1;
}
message UpdateIdentityProviderRequest {
// The identityProvider to update.
IdentityProvider identity_provider = 1;
// The update mask applies to the resource. Only the top level fields of
// IdentityProvider are supported.
google.protobuf.FieldMask update_mask = 2;
}
message UpdateIdentityProviderResponse {
// The updated identityProvider.
IdentityProvider identity_provider = 1;
}
message DeleteIdentityProviderRequest {
// The name of the identityProvider to delete.
// Format: identityProviders/{id}
string name = 1;
}
message DeleteIdentityProviderResponse {}
...@@ -31,11 +31,11 @@ service InboxService { ...@@ -31,11 +31,11 @@ service InboxService {
message Inbox { message Inbox {
// The name of the inbox. // The name of the inbox.
// Format: inboxes/{uid} // Format: inboxes/{id}
string name = 1; string name = 1;
// Format: users/{username} // Format: users/{id}
string sender = 2; string sender = 2;
// Format: users/{username} // Format: users/{id}
string receiver = 3; string receiver = 3;
enum Status { enum Status {
...@@ -58,7 +58,7 @@ message Inbox { ...@@ -58,7 +58,7 @@ message Inbox {
} }
message ListInboxesRequest { message ListInboxesRequest {
// Format: users/{username} // Format: users/{id}
string user = 1; string user = 1;
} }
...@@ -78,7 +78,7 @@ message UpdateInboxResponse { ...@@ -78,7 +78,7 @@ message UpdateInboxResponse {
message DeleteInboxRequest { message DeleteInboxRequest {
// The name of the inbox to delete. // The name of the inbox to delete.
// Format: inboxes/{uid} // Format: inboxes/{id}
string name = 1; string name = 1;
} }
......
...@@ -63,6 +63,26 @@ ...@@ -63,6 +63,26 @@
- [AuthService](#memos-api-v2-AuthService) - [AuthService](#memos-api-v2-AuthService)
- [api/v2/idp_service.proto](#api_v2_idp_service-proto)
- [CreateIdentityProviderRequest](#memos-api-v2-CreateIdentityProviderRequest)
- [CreateIdentityProviderResponse](#memos-api-v2-CreateIdentityProviderResponse)
- [DeleteIdentityProviderRequest](#memos-api-v2-DeleteIdentityProviderRequest)
- [DeleteIdentityProviderResponse](#memos-api-v2-DeleteIdentityProviderResponse)
- [GetIdentityProviderRequest](#memos-api-v2-GetIdentityProviderRequest)
- [GetIdentityProviderResponse](#memos-api-v2-GetIdentityProviderResponse)
- [IdentityProvider](#memos-api-v2-IdentityProvider)
- [IdentityProvider.Config](#memos-api-v2-IdentityProvider-Config)
- [IdentityProvider.Config.FieldMapping](#memos-api-v2-IdentityProvider-Config-FieldMapping)
- [IdentityProvider.Config.OAuth2](#memos-api-v2-IdentityProvider-Config-OAuth2)
- [ListIdentityProvidersRequest](#memos-api-v2-ListIdentityProvidersRequest)
- [ListIdentityProvidersResponse](#memos-api-v2-ListIdentityProvidersResponse)
- [UpdateIdentityProviderRequest](#memos-api-v2-UpdateIdentityProviderRequest)
- [UpdateIdentityProviderResponse](#memos-api-v2-UpdateIdentityProviderResponse)
- [IdentityProvider.Type](#memos-api-v2-IdentityProvider-Type)
- [IdentityProviderService](#memos-api-v2-IdentityProviderService)
- [api/v2/inbox_service.proto](#api_v2_inbox_service-proto) - [api/v2/inbox_service.proto](#api_v2_inbox_service-proto)
- [DeleteInboxRequest](#memos-api-v2-DeleteInboxRequest) - [DeleteInboxRequest](#memos-api-v2-DeleteInboxRequest)
- [DeleteInboxResponse](#memos-api-v2-DeleteInboxResponse) - [DeleteInboxResponse](#memos-api-v2-DeleteInboxResponse)
...@@ -977,6 +997,261 @@ Used internally for obfuscating the page token. ...@@ -977,6 +997,261 @@ Used internally for obfuscating the page token.
<a name="api_v2_idp_service-proto"></a>
<p align="right"><a href="#top">Top</a></p>
## api/v2/idp_service.proto
<a name="memos-api-v2-CreateIdentityProviderRequest"></a>
### CreateIdentityProviderRequest
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| identity_provider | [IdentityProvider](#memos-api-v2-IdentityProvider) | | The identityProvider to create. |
<a name="memos-api-v2-CreateIdentityProviderResponse"></a>
### CreateIdentityProviderResponse
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| identity_provider | [IdentityProvider](#memos-api-v2-IdentityProvider) | | The created identityProvider. |
<a name="memos-api-v2-DeleteIdentityProviderRequest"></a>
### DeleteIdentityProviderRequest
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| name | [string](#string) | | The name of the identityProvider to delete. Format: identityProviders/{id} |
<a name="memos-api-v2-DeleteIdentityProviderResponse"></a>
### DeleteIdentityProviderResponse
<a name="memos-api-v2-GetIdentityProviderRequest"></a>
### GetIdentityProviderRequest
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| name | [string](#string) | | The name of the identityProvider to get. Format: identityProviders/{id} |
<a name="memos-api-v2-GetIdentityProviderResponse"></a>
### GetIdentityProviderResponse
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| identity_provider | [IdentityProvider](#memos-api-v2-IdentityProvider) | | The identityProvider. |
<a name="memos-api-v2-IdentityProvider"></a>
### IdentityProvider
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| name | [string](#string) | | The name of the identityProvider. Format: identityProviders/{id} |
| type | [IdentityProvider.Type](#memos-api-v2-IdentityProvider-Type) | | |
| title | [string](#string) | | |
| identifier_filter | [string](#string) | | |
| config | [IdentityProvider.Config](#memos-api-v2-IdentityProvider-Config) | | |
<a name="memos-api-v2-IdentityProvider-Config"></a>
### IdentityProvider.Config
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| oauth2 | [IdentityProvider.Config.OAuth2](#memos-api-v2-IdentityProvider-Config-OAuth2) | | |
<a name="memos-api-v2-IdentityProvider-Config-FieldMapping"></a>
### IdentityProvider.Config.FieldMapping
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| identifier | [string](#string) | | |
| display_name | [string](#string) | | |
| email | [string](#string) | | |
<a name="memos-api-v2-IdentityProvider-Config-OAuth2"></a>
### IdentityProvider.Config.OAuth2
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| client_id | [string](#string) | | |
| client_secret | [string](#string) | | |
| auth_url | [string](#string) | | |
| token_url | [string](#string) | | |
| user_info_url | [string](#string) | | |
| scopes | [string](#string) | repeated | |
| field_mapping | [IdentityProvider.Config.FieldMapping](#memos-api-v2-IdentityProvider-Config-FieldMapping) | | |
<a name="memos-api-v2-ListIdentityProvidersRequest"></a>
### ListIdentityProvidersRequest
<a name="memos-api-v2-ListIdentityProvidersResponse"></a>
### ListIdentityProvidersResponse
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| identity_providers | [IdentityProvider](#memos-api-v2-IdentityProvider) | repeated | |
<a name="memos-api-v2-UpdateIdentityProviderRequest"></a>
### UpdateIdentityProviderRequest
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| identity_provider | [IdentityProvider](#memos-api-v2-IdentityProvider) | | The identityProvider to update. |
| update_mask | [google.protobuf.FieldMask](#google-protobuf-FieldMask) | | The update mask applies to the resource. Only the top level fields of IdentityProvider are supported. |
<a name="memos-api-v2-UpdateIdentityProviderResponse"></a>
### UpdateIdentityProviderResponse
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| identity_provider | [IdentityProvider](#memos-api-v2-IdentityProvider) | | The updated identityProvider. |
<a name="memos-api-v2-IdentityProvider-Type"></a>
### IdentityProvider.Type
| Name | Number | Description |
| ---- | ------ | ----------- |
| TYPE_UNSPECIFIED | 0 | |
| OAUTH2 | 1 | |
<a name="memos-api-v2-IdentityProviderService"></a>
### IdentityProviderService
| Method Name | Request Type | Response Type | Description |
| ----------- | ------------ | ------------- | ------------|
| ListIdentityProviders | [ListIdentityProvidersRequest](#memos-api-v2-ListIdentityProvidersRequest) | [ListIdentityProvidersResponse](#memos-api-v2-ListIdentityProvidersResponse) | |
| GetIdentityProvider | [GetIdentityProviderRequest](#memos-api-v2-GetIdentityProviderRequest) | [GetIdentityProviderResponse](#memos-api-v2-GetIdentityProviderResponse) | |
| CreateIdentityProvider | [CreateIdentityProviderRequest](#memos-api-v2-CreateIdentityProviderRequest) | [CreateIdentityProviderResponse](#memos-api-v2-CreateIdentityProviderResponse) | |
| UpdateIdentityProvider | [UpdateIdentityProviderRequest](#memos-api-v2-UpdateIdentityProviderRequest) | [UpdateIdentityProviderResponse](#memos-api-v2-UpdateIdentityProviderResponse) | UpdateIdentityProvider updates an identity provider. |
| DeleteIdentityProvider | [DeleteIdentityProviderRequest](#memos-api-v2-DeleteIdentityProviderRequest) | [DeleteIdentityProviderResponse](#memos-api-v2-DeleteIdentityProviderResponse) | DeleteIdentityProvider deletes an identity provider. |
<a name="api_v2_inbox_service-proto"></a> <a name="api_v2_inbox_service-proto"></a>
<p align="right"><a href="#top">Top</a></p> <p align="right"><a href="#top">Top</a></p>
...@@ -992,7 +1267,7 @@ Used internally for obfuscating the page token. ...@@ -992,7 +1267,7 @@ Used internally for obfuscating the page token.
| Field | Type | Label | Description | | Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- | | ----- | ---- | ----- | ----------- |
| name | [string](#string) | | The name of the inbox to delete. Format: inboxes/{uid} | | name | [string](#string) | | The name of the inbox to delete. Format: inboxes/{id} |
...@@ -1017,9 +1292,9 @@ Used internally for obfuscating the page token. ...@@ -1017,9 +1292,9 @@ Used internally for obfuscating the page token.
| Field | Type | Label | Description | | Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- | | ----- | ---- | ----- | ----------- |
| name | [string](#string) | | The name of the inbox. Format: inboxes/{uid} | | name | [string](#string) | | The name of the inbox. Format: inboxes/{id} |
| sender | [string](#string) | | Format: users/{username} | | sender | [string](#string) | | Format: users/{id} |
| receiver | [string](#string) | | Format: users/{username} | | receiver | [string](#string) | | Format: users/{id} |
| status | [Inbox.Status](#memos-api-v2-Inbox-Status) | | | | status | [Inbox.Status](#memos-api-v2-Inbox-Status) | | |
| create_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | | | create_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | | |
| type | [Inbox.Type](#memos-api-v2-Inbox-Type) | | | | type | [Inbox.Type](#memos-api-v2-Inbox-Type) | | |
...@@ -1038,7 +1313,7 @@ Used internally for obfuscating the page token. ...@@ -1038,7 +1313,7 @@ Used internally for obfuscating the page token.
| Field | Type | Label | Description | | Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- | | ----- | ---- | ----- | ----------- |
| user | [string](#string) | | Format: users/{username} | | user | [string](#string) | | Format: users/{id} |
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -127,11 +127,11 @@ type Inbox struct { ...@@ -127,11 +127,11 @@ type Inbox struct {
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
// The name of the inbox. // The name of the inbox.
// Format: inboxes/{uid} // Format: inboxes/{id}
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// Format: users/{username} // Format: users/{id}
Sender string `protobuf:"bytes,2,opt,name=sender,proto3" json:"sender,omitempty"` Sender string `protobuf:"bytes,2,opt,name=sender,proto3" json:"sender,omitempty"`
// Format: users/{username} // Format: users/{id}
Receiver string `protobuf:"bytes,3,opt,name=receiver,proto3" json:"receiver,omitempty"` Receiver string `protobuf:"bytes,3,opt,name=receiver,proto3" json:"receiver,omitempty"`
Status Inbox_Status `protobuf:"varint,4,opt,name=status,proto3,enum=memos.api.v2.Inbox_Status" json:"status,omitempty"` Status Inbox_Status `protobuf:"varint,4,opt,name=status,proto3,enum=memos.api.v2.Inbox_Status" json:"status,omitempty"`
CreateTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` CreateTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
...@@ -225,7 +225,7 @@ type ListInboxesRequest struct { ...@@ -225,7 +225,7 @@ type ListInboxesRequest struct {
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
// Format: users/{username} // Format: users/{id}
User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"`
} }
...@@ -423,7 +423,7 @@ type DeleteInboxRequest struct { ...@@ -423,7 +423,7 @@ type DeleteInboxRequest struct {
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
// The name of the inbox to delete. // The name of the inbox to delete.
// Format: inboxes/{uid} // Format: inboxes/{id}
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
} }
......
...@@ -11,6 +11,11 @@ ...@@ -11,6 +11,11 @@
- [store/common.proto](#store_common-proto) - [store/common.proto](#store_common-proto)
- [RowStatus](#memos-store-RowStatus) - [RowStatus](#memos-store-RowStatus)
- [store/idp.proto](#store_idp-proto)
- [IdentityProviderConfig](#memos-store-IdentityProviderConfig)
- [IdentityProviderConfig.FieldMapping](#memos-store-IdentityProviderConfig-FieldMapping)
- [IdentityProviderConfig.OAuth2](#memos-store-IdentityProviderConfig-OAuth2)
- [store/inbox.proto](#store_inbox-proto) - [store/inbox.proto](#store_inbox-proto)
- [InboxMessage](#memos-store-InboxMessage) - [InboxMessage](#memos-store-InboxMessage)
...@@ -133,6 +138,75 @@ ...@@ -133,6 +138,75 @@
<a name="store_idp-proto"></a>
<p align="right"><a href="#top">Top</a></p>
## store/idp.proto
<a name="memos-store-IdentityProviderConfig"></a>
### IdentityProviderConfig
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| oauth2 | [IdentityProviderConfig.OAuth2](#memos-store-IdentityProviderConfig-OAuth2) | | |
<a name="memos-store-IdentityProviderConfig-FieldMapping"></a>
### IdentityProviderConfig.FieldMapping
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| identifier | [string](#string) | | |
| display_name | [string](#string) | | |
| email | [string](#string) | | |
<a name="memos-store-IdentityProviderConfig-OAuth2"></a>
### IdentityProviderConfig.OAuth2
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| client_id | [string](#string) | | |
| client_secret | [string](#string) | | |
| auth_url | [string](#string) | | |
| token_url | [string](#string) | | |
| user_info_url | [string](#string) | | |
| scopes | [string](#string) | repeated | |
| field_mapping | [IdentityProviderConfig.FieldMapping](#memos-store-IdentityProviderConfig-FieldMapping) | | |
<a name="store_inbox-proto"></a> <a name="store_inbox-proto"></a>
<p align="right"><a href="#top">Top</a></p> <p align="right"><a href="#top">Top</a></p>
......
This diff is collapsed.
syntax = "proto3";
package memos.store;
option go_package = "gen/store";
message IdentityProviderConfig {
message FieldMapping {
string identifier = 1;
string display_name = 2;
string email = 3;
}
message OAuth2 {
string client_id = 1;
string client_secret = 2;
string auth_url = 3;
string token_url = 4;
string user_info_url = 5;
repeated string scopes = 6;
FieldMapping field_mapping = 7;
}
oneof config {
OAuth2 oauth2 = 1;
}
}
This diff is collapsed.
...@@ -105,9 +105,9 @@ func (s *APIV2Service) convertInboxFromStore(ctx context.Context, inbox *store.I ...@@ -105,9 +105,9 @@ func (s *APIV2Service) convertInboxFromStore(ctx context.Context, inbox *store.I
} }
return &apiv2pb.Inbox{ return &apiv2pb.Inbox{
Name: fmt.Sprintf("inboxes/%d", inbox.ID), Name: fmt.Sprintf("%s%d", InboxNamePrefix, inbox.ID),
Sender: fmt.Sprintf("users/%s", sender.Username), Sender: fmt.Sprintf("%s%d", UserNamePrefix, sender.ID),
Receiver: fmt.Sprintf("users/%s", receiver.Username), Receiver: fmt.Sprintf("%s%d", UserNamePrefix, receiver.ID),
Status: convertInboxStatusFromStore(inbox.Status), Status: convertInboxStatusFromStore(inbox.Status),
CreateTime: timestamppb.New(time.Unix(inbox.CreatedTs, 0)), CreateTime: timestamppb.New(time.Unix(inbox.CreatedTs, 0)),
Type: apiv2pb.Inbox_Type(inbox.Message.Type), Type: apiv2pb.Inbox_Type(inbox.Message.Type),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment