feat: support mapping avatar url from oauth2

pull/4654/head
johnnyjoy 3 months ago
parent e41916408a
commit eb33a604b2

@ -4,4 +4,5 @@ type IdentityProviderUserInfo struct {
Identifier string
DisplayName string
Email string
AvatarURL string
}

@ -113,5 +113,10 @@ func (p *IdentityProvider) UserInfo(token string) (*idp.IdentityProviderUserInfo
userInfo.Email = v
}
}
if p.config.FieldMapping.AvatarUrl != "" {
if v, ok := claims[p.config.FieldMapping.AvatarUrl].(string); ok {
userInfo.AvatarURL = v
}
}
return userInfo, nil
}

@ -69,6 +69,7 @@ message FieldMapping {
string identifier = 1;
string display_name = 2;
string email = 3;
string avatar_url = 4;
}
message OAuth2Config {

@ -1,5 +1,4 @@
version: v2
clean: true
managed:
enabled: true
disable:

@ -219,6 +219,7 @@ type FieldMapping struct {
Identifier string `protobuf:"bytes,1,opt,name=identifier,proto3" json:"identifier,omitempty"`
DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
AvatarUrl string `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -274,6 +275,13 @@ func (x *FieldMapping) GetEmail() string {
return ""
}
func (x *FieldMapping) GetAvatarUrl() string {
if x != nil {
return x.AvatarUrl
}
return ""
}
type OAuth2Config struct {
state protoimpl.MessageState `protogen:"open.v1"`
ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"`
@ -653,13 +661,15 @@ const file_api_v1_idp_service_proto_rawDesc = "" +
"\x06OAUTH2\x10\x01\"e\n" +
"\x16IdentityProviderConfig\x12A\n" +
"\roauth2_config\x18\x01 \x01(\v2\x1a.memos.api.v1.OAuth2ConfigH\x00R\foauth2ConfigB\b\n" +
"\x06config\"g\n" +
"\x06config\"\x86\x01\n" +
"\fFieldMapping\x12\x1e\n" +
"\n" +
"identifier\x18\x01 \x01(\tR\n" +
"identifier\x12!\n" +
"\fdisplay_name\x18\x02 \x01(\tR\vdisplayName\x12\x14\n" +
"\x05email\x18\x03 \x01(\tR\x05email\"\x85\x02\n" +
"\x05email\x18\x03 \x01(\tR\x05email\x12\x1d\n" +
"\n" +
"avatar_url\x18\x04 \x01(\tR\tavatarUrl\"\x85\x02\n" +
"\fOAuth2Config\x12\x1b\n" +
"\tclient_id\x18\x01 \x01(\tR\bclientId\x12#\n" +
"\rclient_secret\x18\x02 \x01(\tR\fclientSecret\x12\x19\n" +

@ -305,9 +305,7 @@ paths:
$ref: '#/definitions/googlerpcStatus'
parameters:
- name: parent
description: |-
The parent is the owner of the memos.
If not specified or `users/-`, it will list all memos.
description: "The parent is the owner of the memos.\r\nIf not specified or `users/-`, it will list all memos."
in: query
required: false
type: string
@ -318,16 +316,12 @@ paths:
type: integer
format: int32
- name: pageToken
description: |-
A page token, received from a previous `ListMemos` call.
Provide this to retrieve the subsequent page.
description: "A page token, received from a previous `ListMemos` call.\r\nProvide this to retrieve the subsequent page."
in: query
required: false
type: string
- name: state
description: |-
The state of the memos to list.
Default to `NORMAL`. Set to `ARCHIVED` to list archived memos.
description: "The state of the memos to list.\r\nDefault to `NORMAL`. Set to `ARCHIVED` to list archived memos."
in: query
required: false
type: string
@ -337,16 +331,12 @@ paths:
- ARCHIVED
default: STATE_UNSPECIFIED
- name: sort
description: |-
What field to sort the results by.
Default to display_time.
description: "What field to sort the results by.\r\nDefault to display_time."
in: query
required: false
type: string
- name: direction
description: |-
The direction to sort the results by.
Default to DESC.
description: "The direction to sort the results by.\r\nDefault to DESC."
in: query
required: false
type: string
@ -356,16 +346,12 @@ paths:
- DESC
default: DIRECTION_UNSPECIFIED
- name: filter
description: |-
Filter is a CEL expression to filter memos.
Refer to `Shortcut.filter`.
description: "Filter is a CEL expression to filter memos.\r\nRefer to `Shortcut.filter`."
in: query
required: false
type: string
- name: oldFilter
description: |-
[Deprecated] Old filter contains some specific conditions to filter memos.
Format: "creator == 'users/{user}' && visibilities == ['PUBLIC', 'PROTECTED']"
description: "[Deprecated] Old filter contains some specific conditions to filter memos.\r\nFormat: \"creator == 'users/{user}' && visibilities == ['PUBLIC', 'PROTECTED']\""
in: query
required: false
type: string
@ -410,9 +396,7 @@ paths:
$ref: '#/definitions/googlerpcStatus'
parameters:
- name: id
description: |-
The id of the reaction.
Refer to the `Reaction.id`.
description: "The id of the reaction.\r\nRefer to the `Reaction.id`."
in: path
required: true
type: integer
@ -678,9 +662,7 @@ paths:
$ref: '#/definitions/googlerpcStatus'
parameters:
- name: name
description: |-
The resource name of the workspace setting.
Format: settings/{setting}
description: "The resource name of the workspace setting.\r\nFormat: settings/{setting}"
in: path
required: true
type: string
@ -702,9 +684,7 @@ paths:
$ref: '#/definitions/googlerpcStatus'
parameters:
- name: setting.name
description: |-
name is the name of the setting.
Format: settings/{setting}
description: "name is the name of the setting.\r\nFormat: settings/{setting}"
in: path
required: true
type: string
@ -826,17 +806,13 @@ paths:
$ref: '#/definitions/googlerpcStatus'
parameters:
- name: memo.name
description: |-
The name of the memo.
Format: memos/{memo}, memo is the user defined id or uuid.
description: "The name of the memo.\r\nFormat: memos/{memo}, memo is the user defined id or uuid."
in: path
required: true
type: string
pattern: memos/[^/]+
- name: memo
description: |-
The memo to update.
The `name` field is required.
description: "The memo to update.\r\nThe `name` field is required."
in: body
required: true
schema:
@ -846,9 +822,7 @@ paths:
$ref: '#/definitions/v1State'
creator:
type: string
title: |-
The name of the creator.
Format: users/{user}
title: "The name of the creator.\r\nFormat: users/{user}"
createTime:
type: string
format: date-time
@ -896,9 +870,7 @@ paths:
readOnly: true
parent:
type: string
title: |-
The name of the parent memo.
Format: memos/{id}
title: "The name of the parent memo.\r\nFormat: memos/{id}"
readOnly: true
snippet:
type: string
@ -907,9 +879,7 @@ paths:
location:
$ref: '#/definitions/apiv1Location'
description: The location of the memo.
title: |-
The memo to update.
The `name` field is required.
title: "The memo to update.\r\nThe `name` field is required."
required:
- memo
tags:
@ -1105,9 +1075,7 @@ paths:
$ref: '#/definitions/googlerpcStatus'
parameters:
- name: name
description: |-
The name of the activity.
Format: activities/{id}, id is the system generated auto-incremented id.
description: "The name of the activity.\r\nFormat: activities/{id}, id is the system generated auto-incremented id."
in: path
required: true
type: string
@ -1466,9 +1434,7 @@ paths:
$ref: '#/definitions/googlerpcStatus'
parameters:
- name: parent
description: |-
The parent is the owner of the memos.
If not specified or `users/-`, it will list all memos.
description: "The parent is the owner of the memos.\r\nIf not specified or `users/-`, it will list all memos."
in: path
required: true
type: string
@ -1480,16 +1446,12 @@ paths:
type: integer
format: int32
- name: pageToken
description: |-
A page token, received from a previous `ListMemos` call.
Provide this to retrieve the subsequent page.
description: "A page token, received from a previous `ListMemos` call.\r\nProvide this to retrieve the subsequent page."
in: query
required: false
type: string
- name: state
description: |-
The state of the memos to list.
Default to `NORMAL`. Set to `ARCHIVED` to list archived memos.
description: "The state of the memos to list.\r\nDefault to `NORMAL`. Set to `ARCHIVED` to list archived memos."
in: query
required: false
type: string
@ -1499,16 +1461,12 @@ paths:
- ARCHIVED
default: STATE_UNSPECIFIED
- name: sort
description: |-
What field to sort the results by.
Default to display_time.
description: "What field to sort the results by.\r\nDefault to display_time."
in: query
required: false
type: string
- name: direction
description: |-
The direction to sort the results by.
Default to DESC.
description: "The direction to sort the results by.\r\nDefault to DESC."
in: query
required: false
type: string
@ -1518,16 +1476,12 @@ paths:
- DESC
default: DIRECTION_UNSPECIFIED
- name: filter
description: |-
Filter is a CEL expression to filter memos.
Refer to `Shortcut.filter`.
description: "Filter is a CEL expression to filter memos.\r\nRefer to `Shortcut.filter`."
in: query
required: false
type: string
- name: oldFilter
description: |-
[Deprecated] Old filter contains some specific conditions to filter memos.
Format: "creator == 'users/{user}' && visibilities == ['PUBLIC', 'PROTECTED']"
description: "[Deprecated] Old filter contains some specific conditions to filter memos.\r\nFormat: \"creator == 'users/{user}' && visibilities == ['PUBLIC', 'PROTECTED']\""
in: query
required: false
type: string
@ -1665,9 +1619,7 @@ paths:
$ref: '#/definitions/googlerpcStatus'
parameters:
- name: parent
description: |-
The parent, who owns the tags.
Format: memos/{id}. Use "memos/-" to delete all tags.
description: "The parent, who owns the tags.\r\nFormat: memos/{id}. Use \"memos/-\" to delete all tags."
in: path
required: true
type: string
@ -1698,9 +1650,7 @@ paths:
$ref: '#/definitions/googlerpcStatus'
parameters:
- name: parent
description: |-
The parent, who owns the tags.
Format: memos/{id}. Use "memos/-" to rename all tags.
description: "The parent, who owns the tags.\r\nFormat: memos/{id}. Use \"memos/-\" to rename all tags."
in: path
required: true
type: string
@ -1727,9 +1677,7 @@ paths:
$ref: '#/definitions/googlerpcStatus'
parameters:
- name: resource.name
description: |-
The name of the resource.
Format: resources/{resource}, resource is the user defined if or uuid.
description: "The name of the resource.\r\nFormat: resources/{resource}, resource is the user defined if or uuid."
in: path
required: true
type: string
@ -1815,9 +1763,7 @@ paths:
$ref: '#/definitions/googlerpcStatus'
parameters:
- name: user.name
description: |-
The name of the user.
Format: users/{id}, id is the system generated auto-incremented id.
description: "The name of the user.\r\nFormat: users/{id}, id is the system generated auto-incremented id."
in: path
required: true
type: string
@ -2080,9 +2026,7 @@ definitions:
properties:
memo:
type: string
description: |-
The memo name of comment.
Refer to `Memo.name`.
description: "The memo name of comment.\r\nRefer to `Memo.name`."
relatedMemo:
type: string
description: The name of related memo.
@ -2101,6 +2045,8 @@ definitions:
type: string
email:
type: string
avatarUrl:
type: string
apiv1IdentityProvider:
type: object
properties:
@ -2144,17 +2090,13 @@ definitions:
properties:
name:
type: string
description: |-
The name of the memo.
Format: memos/{memo}, memo is the user defined id or uuid.
description: "The name of the memo.\r\nFormat: memos/{memo}, memo is the user defined id or uuid."
readOnly: true
state:
$ref: '#/definitions/v1State'
creator:
type: string
title: |-
The name of the creator.
Format: users/{user}
title: "The name of the creator.\r\nFormat: users/{user}"
createTime:
type: string
format: date-time
@ -2202,9 +2144,7 @@ definitions:
readOnly: true
parent:
type: string
title: |-
The name of the parent memo.
Format: memos/{id}
title: "The name of the parent memo.\r\nFormat: memos/{id}"
readOnly: true
snippet:
type: string
@ -2290,10 +2230,7 @@ definitions:
weekStartDayOffset:
type: integer
format: int32
description: |-
week_start_day_offset is the week start day offset from Sunday.
0: Sunday, 1: Monday, 2: Tuesday, 3: Wednesday, 4: Thursday, 5: Friday, 6: Saturday
Default is Sunday.
description: "week_start_day_offset is the week start day offset from Sunday.\r\n0: Sunday, 1: Monday, 2: Tuesday, 3: Wednesday, 4: Thursday, 5: Friday, 6: Saturday\r\nDefault is Sunday."
disallowChangeUsername:
type: boolean
description: disallow_change_username disallows changing username.
@ -2346,9 +2283,7 @@ definitions:
properties:
name:
type: string
title: |-
name is the name of the setting.
Format: settings/{setting}
title: "name is the name of the setting.\r\nFormat: settings/{setting}"
generalSetting:
$ref: '#/definitions/apiv1WorkspaceGeneralSetting'
storageSetting:
@ -2363,9 +2298,7 @@ definitions:
description: storage_type is the storage type.
filepathTemplate:
type: string
title: |-
The template of file path.
e.g. assets/{timestamp}_{filename}
title: "The template of file path.\r\ne.g. assets/{timestamp}_{filename}"
uploadSizeLimitMb:
type: string
format: int64
@ -2524,15 +2457,11 @@ definitions:
properties:
name:
type: string
title: |-
The name of the activity.
Format: activities/{id}
title: "The name of the activity.\r\nFormat: activities/{id}"
readOnly: true
creator:
type: string
title: |-
The name of the creator.
Format: users/{user}
title: "The name of the creator.\r\nFormat: users/{user}"
type:
type: string
description: The type of the activity.
@ -2794,9 +2723,7 @@ definitions:
$ref: '#/definitions/apiv1Memo'
nextPageToken:
type: string
description: |-
A token, which can be sent as `page_token` to retrieve the next page.
If this field is omitted, there are no subsequent pages.
description: "A token, which can be sent as `page_token` to retrieve the next page.\r\nIf this field is omitted, there are no subsequent pages."
v1ListNode:
type: object
properties:
@ -2885,9 +2812,7 @@ definitions:
properties:
name:
type: string
title: |-
The name of the memo.
Format: memos/{id}
title: "The name of the memo.\r\nFormat: memos/{id}"
uid:
type: string
snippet:
@ -3073,9 +2998,7 @@ definitions:
properties:
name:
type: string
description: |-
The name of the resource.
Format: resources/{resource}, resource is the user defined if or uuid.
description: "The name of the resource.\r\nFormat: resources/{resource}, resource is the user defined if or uuid."
readOnly: true
createTime:
type: string
@ -3209,9 +3132,7 @@ definitions:
properties:
name:
type: string
description: |-
The name of the user.
Format: users/{id}, id is the system generated auto-incremented id.
description: "The name of the user.\r\nFormat: users/{id}, id is the system generated auto-incremented id."
readOnly: true
role:
$ref: '#/definitions/UserRole'
@ -3261,9 +3182,7 @@ definitions:
items:
type: string
format: date-time
description: |-
The timestamps when the memos were displayed.
We should return raw data to the client, and let the client format the data with the user's timezone.
description: "The timestamps when the memos were displayed.\r\nWe should return raw data to the client, and let the client format the data with the user's timezone."
memoTypeStats:
$ref: '#/definitions/UserStatsMemoTypeStats'
description: The stats of memo types.
@ -3272,9 +3191,7 @@ definitions:
additionalProperties:
type: integer
format: int32
title: |-
The count of tags.
Format: "tag1": 1, "tag2": 2
title: "The count of tags.\r\nFormat: \"tag1\": 1, \"tag2\": 2"
pinnedMemos:
type: array
items:

@ -214,6 +214,7 @@ type FieldMapping struct {
Identifier string `protobuf:"bytes,1,opt,name=identifier,proto3" json:"identifier,omitempty"`
DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
AvatarUrl string `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -269,6 +270,13 @@ func (x *FieldMapping) GetEmail() string {
return ""
}
func (x *FieldMapping) GetAvatarUrl() string {
if x != nil {
return x.AvatarUrl
}
return ""
}
type OAuth2Config struct {
state protoimpl.MessageState `protogen:"open.v1"`
ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"`
@ -378,13 +386,15 @@ const file_store_idp_proto_rawDesc = "" +
"\x06OAUTH2\x10\x01\"d\n" +
"\x16IdentityProviderConfig\x12@\n" +
"\roauth2_config\x18\x01 \x01(\v2\x19.memos.store.OAuth2ConfigH\x00R\foauth2ConfigB\b\n" +
"\x06config\"g\n" +
"\x06config\"\x86\x01\n" +
"\fFieldMapping\x12\x1e\n" +
"\n" +
"identifier\x18\x01 \x01(\tR\n" +
"identifier\x12!\n" +
"\fdisplay_name\x18\x02 \x01(\tR\vdisplayName\x12\x14\n" +
"\x05email\x18\x03 \x01(\tR\x05email\"\x84\x02\n" +
"\x05email\x18\x03 \x01(\tR\x05email\x12\x1d\n" +
"\n" +
"avatar_url\x18\x04 \x01(\tR\tavatarUrl\"\x84\x02\n" +
"\fOAuth2Config\x12\x1b\n" +
"\tclient_id\x18\x01 \x01(\tR\bclientId\x12#\n" +
"\rclient_secret\x18\x02 \x01(\tR\fclientSecret\x12\x19\n" +

@ -27,6 +27,7 @@ message FieldMapping {
string identifier = 1;
string display_name = 2;
string email = 3;
string avatar_url = 4;
}
message OAuth2Config {

@ -129,9 +129,10 @@ func (s *APIV1Service) SignInWithSSO(ctx context.Context, request *v1pb.SignInWi
userCreate := &store.User{
Username: userInfo.Identifier,
// The new signup user should be normal user by default.
Role: store.RoleUser,
Nickname: userInfo.DisplayName,
Email: userInfo.Email,
Role: store.RoleUser,
Nickname: userInfo.DisplayName,
Email: userInfo.Email,
AvatarURL: userInfo.AvatarURL,
}
password, err := util.RandomString(20)
if err != nil {

@ -64,6 +64,7 @@ export interface FieldMapping {
identifier: string;
displayName: string;
email: string;
avatarUrl: string;
}
export interface OAuth2Config {
@ -255,7 +256,7 @@ export const IdentityProviderConfig: MessageFns<IdentityProviderConfig> = {
};
function createBaseFieldMapping(): FieldMapping {
return { identifier: "", displayName: "", email: "" };
return { identifier: "", displayName: "", email: "", avatarUrl: "" };
}
export const FieldMapping: MessageFns<FieldMapping> = {
@ -269,6 +270,9 @@ export const FieldMapping: MessageFns<FieldMapping> = {
if (message.email !== "") {
writer.uint32(26).string(message.email);
}
if (message.avatarUrl !== "") {
writer.uint32(34).string(message.avatarUrl);
}
return writer;
},
@ -303,6 +307,14 @@ export const FieldMapping: MessageFns<FieldMapping> = {
message.email = reader.string();
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.avatarUrl = reader.string();
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
@ -320,6 +332,7 @@ export const FieldMapping: MessageFns<FieldMapping> = {
message.identifier = object.identifier ?? "";
message.displayName = object.displayName ?? "";
message.email = object.email ?? "";
message.avatarUrl = object.avatarUrl ?? "";
return message;
},
};

@ -35,7 +35,7 @@ export enum Edition {
EDITION_2024 = "EDITION_2024",
/**
* EDITION_1_TEST_ONLY - Placeholder editions for testing feature resolution. These should not be
* used or relied on outside of tests.
* used or relyed on outside of tests.
*/
EDITION_1_TEST_ONLY = "EDITION_1_TEST_ONLY",
EDITION_2_TEST_ONLY = "EDITION_2_TEST_ONLY",
@ -177,19 +177,11 @@ export interface FileDescriptorProto {
* The supported values are "proto2", "proto3", and "editions".
*
* If `edition` is present, this value must be "editions".
* WARNING: This field should only be used by protobuf plugins or special
* cases like the proto compiler. Other uses are discouraged and
* developers should rely on the protoreflect APIs for their client language.
*/
syntax?:
| string
| undefined;
/**
* The edition of the proto file.
* WARNING: This field should only be used by protobuf plugins or special
* cases like the proto compiler. Other uses are discouraged and
* developers should rely on the protoreflect APIs for their client language.
*/
/** The edition of the proto file. */
edition?: Edition | undefined;
}
@ -836,12 +828,7 @@ export interface FileOptions {
rubyPackage?:
| string
| undefined;
/**
* Any features defined in the specific edition.
* WARNING: This field should only be used by protobuf plugins or special
* cases like the proto compiler. Other uses are discouraged and
* developers should rely on the protoreflect APIs for their client language.
*/
/** Any features defined in the specific edition. */
features?:
| FeatureSet
| undefined;
@ -979,12 +966,7 @@ export interface MessageOptions {
deprecatedLegacyJsonFieldConflicts?:
| boolean
| undefined;
/**
* Any features defined in the specific edition.
* WARNING: This field should only be used by protobuf plugins or special
* cases like the proto compiler. Other uses are discouraged and
* developers should rely on the protoreflect APIs for their client language.
*/
/** Any features defined in the specific edition. */
features?:
| FeatureSet
| undefined;
@ -994,13 +976,12 @@ export interface MessageOptions {
export interface FieldOptions {
/**
* NOTE: ctype is deprecated. Use `features.(pb.cpp).string_type` instead.
* The ctype option instructs the C++ code generator to use a different
* representation of the field than it normally would. See the specific
* options below. This option is only implemented to support use of
* [ctype=CORD] and [ctype=STRING] (the default) on non-repeated fields of
* type "bytes" in the open source release.
* TODO: make ctype actually deprecated.
* type "bytes" in the open source release -- sorry, we'll try to include
* other types in a future version!
*/
ctype?:
| FieldOptions_CType
@ -1089,12 +1070,7 @@ export interface FieldOptions {
retention?: FieldOptions_OptionRetention | undefined;
targets: FieldOptions_OptionTargetType[];
editionDefaults: FieldOptions_EditionDefault[];
/**
* Any features defined in the specific edition.
* WARNING: This field should only be used by protobuf plugins or special
* cases like the proto compiler. Other uses are discouraged and
* developers should rely on the protoreflect APIs for their client language.
*/
/** Any features defined in the specific edition. */
features?: FeatureSet | undefined;
featureSupport?:
| FieldOptions_FeatureSupport
@ -1193,7 +1169,11 @@ export function fieldOptions_JSTypeToNumber(object: FieldOptions_JSType): number
}
}
/** If set to RETENTION_SOURCE, the option will be omitted from the binary. */
/**
* If set to RETENTION_SOURCE, the option will be omitted from the binary.
* Note: as of January 2023, support for this is in progress and does not yet
* have an effect (b/264593489).
*/
export enum FieldOptions_OptionRetention {
RETENTION_UNKNOWN = "RETENTION_UNKNOWN",
RETENTION_RUNTIME = "RETENTION_RUNTIME",
@ -1236,7 +1216,8 @@ export function fieldOptions_OptionRetentionToNumber(object: FieldOptions_Option
/**
* This indicates the types of entities that the field may apply to when used
* as an option. If it is unset, then the field may be freely used as an
* option on any kind of entity.
* option on any kind of entity. Note: as of January 2023, support for this is
* in progress and does not yet have an effect (b/264593489).
*/
export enum FieldOptions_OptionTargetType {
TARGET_TYPE_UNKNOWN = "TARGET_TYPE_UNKNOWN",
@ -1360,12 +1341,7 @@ export interface FieldOptions_FeatureSupport {
}
export interface OneofOptions {
/**
* Any features defined in the specific edition.
* WARNING: This field should only be used by protobuf plugins or special
* cases like the proto compiler. Other uses are discouraged and
* developers should rely on the protoreflect APIs for their client language.
*/
/** Any features defined in the specific edition. */
features?:
| FeatureSet
| undefined;
@ -1403,12 +1379,7 @@ export interface EnumOptions {
deprecatedLegacyJsonFieldConflicts?:
| boolean
| undefined;
/**
* Any features defined in the specific edition.
* WARNING: This field should only be used by protobuf plugins or special
* cases like the proto compiler. Other uses are discouraged and
* developers should rely on the protoreflect APIs for their client language.
*/
/** Any features defined in the specific edition. */
features?:
| FeatureSet
| undefined;
@ -1426,12 +1397,7 @@ export interface EnumValueOptions {
deprecated?:
| boolean
| undefined;
/**
* Any features defined in the specific edition.
* WARNING: This field should only be used by protobuf plugins or special
* cases like the proto compiler. Other uses are discouraged and
* developers should rely on the protoreflect APIs for their client language.
*/
/** Any features defined in the specific edition. */
features?:
| FeatureSet
| undefined;
@ -1452,12 +1418,7 @@ export interface EnumValueOptions {
}
export interface ServiceOptions {
/**
* Any features defined in the specific edition.
* WARNING: This field should only be used by protobuf plugins or special
* cases like the proto compiler. Other uses are discouraged and
* developers should rely on the protoreflect APIs for their client language.
*/
/** Any features defined in the specific edition. */
features?:
| FeatureSet
| undefined;
@ -1485,12 +1446,7 @@ export interface MethodOptions {
idempotencyLevel?:
| MethodOptions_IdempotencyLevel
| undefined;
/**
* Any features defined in the specific edition.
* WARNING: This field should only be used by protobuf plugins or special
* cases like the proto compiler. Other uses are discouraged and
* developers should rely on the protoreflect APIs for their client language.
*/
/** Any features defined in the specific edition. */
features?:
| FeatureSet
| undefined;
@ -1593,7 +1549,6 @@ export interface FeatureSet {
utf8Validation?: FeatureSet_Utf8Validation | undefined;
messageEncoding?: FeatureSet_MessageEncoding | undefined;
jsonFormat?: FeatureSet_JsonFormat | undefined;
enforceNamingStyle?: FeatureSet_EnforceNamingStyle | undefined;
}
export enum FeatureSet_FieldPresence {
@ -1836,45 +1791,6 @@ export function featureSet_JsonFormatToNumber(object: FeatureSet_JsonFormat): nu
}
}
export enum FeatureSet_EnforceNamingStyle {
ENFORCE_NAMING_STYLE_UNKNOWN = "ENFORCE_NAMING_STYLE_UNKNOWN",
STYLE2024 = "STYLE2024",
STYLE_LEGACY = "STYLE_LEGACY",
UNRECOGNIZED = "UNRECOGNIZED",
}
export function featureSet_EnforceNamingStyleFromJSON(object: any): FeatureSet_EnforceNamingStyle {
switch (object) {
case 0:
case "ENFORCE_NAMING_STYLE_UNKNOWN":
return FeatureSet_EnforceNamingStyle.ENFORCE_NAMING_STYLE_UNKNOWN;
case 1:
case "STYLE2024":
return FeatureSet_EnforceNamingStyle.STYLE2024;
case 2:
case "STYLE_LEGACY":
return FeatureSet_EnforceNamingStyle.STYLE_LEGACY;
case -1:
case "UNRECOGNIZED":
default:
return FeatureSet_EnforceNamingStyle.UNRECOGNIZED;
}
}
export function featureSet_EnforceNamingStyleToNumber(object: FeatureSet_EnforceNamingStyle): number {
switch (object) {
case FeatureSet_EnforceNamingStyle.ENFORCE_NAMING_STYLE_UNKNOWN:
return 0;
case FeatureSet_EnforceNamingStyle.STYLE2024:
return 1;
case FeatureSet_EnforceNamingStyle.STYLE_LEGACY:
return 2;
case FeatureSet_EnforceNamingStyle.UNRECOGNIZED:
default:
return -1;
}
}
/**
* A compiled specification for the defaults of a set of features. These
* messages are generated from FeatureSet extensions and can be used to seed
@ -4998,7 +4914,6 @@ function createBaseFeatureSet(): FeatureSet {
utf8Validation: FeatureSet_Utf8Validation.UTF8_VALIDATION_UNKNOWN,
messageEncoding: FeatureSet_MessageEncoding.MESSAGE_ENCODING_UNKNOWN,
jsonFormat: FeatureSet_JsonFormat.JSON_FORMAT_UNKNOWN,
enforceNamingStyle: FeatureSet_EnforceNamingStyle.ENFORCE_NAMING_STYLE_UNKNOWN,
};
}
@ -5033,12 +4948,6 @@ export const FeatureSet: MessageFns<FeatureSet> = {
if (message.jsonFormat !== undefined && message.jsonFormat !== FeatureSet_JsonFormat.JSON_FORMAT_UNKNOWN) {
writer.uint32(48).int32(featureSet_JsonFormatToNumber(message.jsonFormat));
}
if (
message.enforceNamingStyle !== undefined &&
message.enforceNamingStyle !== FeatureSet_EnforceNamingStyle.ENFORCE_NAMING_STYLE_UNKNOWN
) {
writer.uint32(56).int32(featureSet_EnforceNamingStyleToNumber(message.enforceNamingStyle));
}
return writer;
},
@ -5097,14 +5006,6 @@ export const FeatureSet: MessageFns<FeatureSet> = {
message.jsonFormat = featureSet_JsonFormatFromJSON(reader.int32());
continue;
}
case 7: {
if (tag !== 56) {
break;
}
message.enforceNamingStyle = featureSet_EnforceNamingStyleFromJSON(reader.int32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) {
break;
@ -5126,8 +5027,6 @@ export const FeatureSet: MessageFns<FeatureSet> = {
message.utf8Validation = object.utf8Validation ?? FeatureSet_Utf8Validation.UTF8_VALIDATION_UNKNOWN;
message.messageEncoding = object.messageEncoding ?? FeatureSet_MessageEncoding.MESSAGE_ENCODING_UNKNOWN;
message.jsonFormat = object.jsonFormat ?? FeatureSet_JsonFormat.JSON_FORMAT_UNKNOWN;
message.enforceNamingStyle = object.enforceNamingStyle ??
FeatureSet_EnforceNamingStyle.ENFORCE_NAMING_STYLE_UNKNOWN;
return message;
},
};

Loading…
Cancel
Save