diff --git a/.github/workflows/proto-verify.yaml b/.github/workflows/proto-verify.yaml new file mode 100644 index 0000000..49c454b --- /dev/null +++ b/.github/workflows/proto-verify.yaml @@ -0,0 +1,34 @@ +name: Proto generation check + +on: + pull_request: + paths: + - 'src/sap_cloud_sdk/core/auditlog_ng/proto/**' + - 'src/sap_cloud_sdk/core/auditlog_ng/buf.yaml' + - 'src/sap_cloud_sdk/core/auditlog_ng/buf.gen.yaml' + - 'src/sap_cloud_sdk/core/auditlog_ng/gen/**' + - 'src/buf/**' + - 'Makefile' + push: + branches: [main] + paths: + - 'src/sap_cloud_sdk/core/auditlog_ng/proto/**' + - 'Makefile' + +jobs: + verify-proto: + name: Verify generated proto code is up-to-date + runs-on: ubuntu-latest + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Install buf + uses: bufbuild/buf-setup-action@v1 + + - name: Regenerate proto code + run: make proto + + - name: Check for uncommitted changes + run: git diff --exit-code diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9c6f8c7 --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ +# Proto code generation for SAP Cloud SDK for Python +# Requires: buf CLI (https://buf.build/docs/installation) + +AUDITLOG_NG_DIR := src/sap_cloud_sdk/core/auditlog_ng +GEN_DIR := $(AUDITLOG_NG_DIR)/gen +BUF_DIR := src/buf + +.PHONY: proto + +proto: + cd $(AUDITLOG_NG_DIR) && buf dep update && buf generate --include-imports + find $(GEN_DIR) -type d -exec touch {}/__init__.py \; + rm -rf $(BUF_DIR) + mv $(GEN_DIR)/buf $(BUF_DIR) + rm -rf $(GEN_DIR)/buf diff --git a/pyproject.toml b/pyproject.toml index 808bbe7..a9cdfdb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,6 +20,11 @@ dependencies = [ "opentelemetry-processor-baggage~=0.61b0", "traceloop-sdk~=0.52.0", "PyJWT~=2.10.1", + "protobuf>=4.25.0", + "protovalidate>=0.13.0", + "grpcio>=1.60.0", + "opentelemetry-api>=1.28.0", + "opentelemetry-sdk>=1.28.0", ] [build-system] @@ -27,7 +32,7 @@ requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] -packages = ["src/sap_cloud_sdk"] +packages = ["src/sap_cloud_sdk", "src/buf"] [dependency-groups] dev = [ @@ -50,6 +55,8 @@ source = ["src"] omit = [ "*/tests/*", "*/test_*", + "*/sap_cloud_sdk/core/auditlog_ng/gen/*", + "*/buf/*" ] skip_empty = true @@ -64,7 +71,9 @@ exclude = [ "build", "dist", "venv", - "tests/" + "tests/", + "src/sap_cloud_sdk/core/auditlog_ng/gen", + "src/buf" ] # Same as Black. @@ -86,5 +95,14 @@ indent-style = "space" skip-magic-trailing-comma = false line-ending = "auto" +[tool.ty] + [tool.ty.environment] python-version = "3.11" + +[tool.ty.src] +include = ["src", "tests"] +exclude = [ + "src/sap_cloud_sdk/core/auditlog_ng/gen", + "src/buf", +] diff --git a/src/buf/__init__.py b/src/buf/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/buf/validate/__init__.py b/src/buf/validate/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/buf/validate/validate_pb2.py b/src/buf/validate/validate_pb2.py new file mode 100644 index 0000000..3a2a360 --- /dev/null +++ b/src/buf/validate/validate_pb2.py @@ -0,0 +1,465 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: buf/validate/validate.proto +# Protobuf Python Version: 6.33.5 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 33, + 5, + '', + 'buf/validate/validate.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 +from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 +from google.protobuf import field_mask_pb2 as google_dot_protobuf_dot_field__mask__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x62uf/validate/validate.proto\x12\x0c\x62uf.validate\x1a google/protobuf/descriptor.proto\x1a\x1egoogle/protobuf/duration.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"P\n\x04Rule\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\x12\x1e\n\nexpression\x18\x03 \x01(\tR\nexpression\"\xa1\x01\n\x0cMessageRules\x12%\n\x0e\x63\x65l_expression\x18\x05 \x03(\tR\rcelExpression\x12$\n\x03\x63\x65l\x18\x03 \x03(\x0b\x32\x12.buf.validate.RuleR\x03\x63\x65l\x12\x34\n\x05oneof\x18\x04 \x03(\x0b\x32\x1e.buf.validate.MessageOneofRuleR\x05oneofJ\x04\x08\x01\x10\x02R\x08\x64isabled\"F\n\x10MessageOneofRule\x12\x16\n\x06\x66ields\x18\x01 \x03(\tR\x06\x66ields\x12\x1a\n\x08required\x18\x02 \x01(\x08R\x08required\"(\n\nOneofRules\x12\x1a\n\x08required\x18\x01 \x01(\x08R\x08required\"\xe3\n\n\nFieldRules\x12%\n\x0e\x63\x65l_expression\x18\x1d \x03(\tR\rcelExpression\x12$\n\x03\x63\x65l\x18\x17 \x03(\x0b\x32\x12.buf.validate.RuleR\x03\x63\x65l\x12\x1a\n\x08required\x18\x19 \x01(\x08R\x08required\x12,\n\x06ignore\x18\x1b \x01(\x0e\x32\x14.buf.validate.IgnoreR\x06ignore\x12\x30\n\x05\x66loat\x18\x01 \x01(\x0b\x32\x18.buf.validate.FloatRulesH\x00R\x05\x66loat\x12\x33\n\x06\x64ouble\x18\x02 \x01(\x0b\x32\x19.buf.validate.DoubleRulesH\x00R\x06\x64ouble\x12\x30\n\x05int32\x18\x03 \x01(\x0b\x32\x18.buf.validate.Int32RulesH\x00R\x05int32\x12\x30\n\x05int64\x18\x04 \x01(\x0b\x32\x18.buf.validate.Int64RulesH\x00R\x05int64\x12\x33\n\x06uint32\x18\x05 \x01(\x0b\x32\x19.buf.validate.UInt32RulesH\x00R\x06uint32\x12\x33\n\x06uint64\x18\x06 \x01(\x0b\x32\x19.buf.validate.UInt64RulesH\x00R\x06uint64\x12\x33\n\x06sint32\x18\x07 \x01(\x0b\x32\x19.buf.validate.SInt32RulesH\x00R\x06sint32\x12\x33\n\x06sint64\x18\x08 \x01(\x0b\x32\x19.buf.validate.SInt64RulesH\x00R\x06sint64\x12\x36\n\x07\x66ixed32\x18\t \x01(\x0b\x32\x1a.buf.validate.Fixed32RulesH\x00R\x07\x66ixed32\x12\x36\n\x07\x66ixed64\x18\n \x01(\x0b\x32\x1a.buf.validate.Fixed64RulesH\x00R\x07\x66ixed64\x12\x39\n\x08sfixed32\x18\x0b \x01(\x0b\x32\x1b.buf.validate.SFixed32RulesH\x00R\x08sfixed32\x12\x39\n\x08sfixed64\x18\x0c \x01(\x0b\x32\x1b.buf.validate.SFixed64RulesH\x00R\x08sfixed64\x12-\n\x04\x62ool\x18\r \x01(\x0b\x32\x17.buf.validate.BoolRulesH\x00R\x04\x62ool\x12\x33\n\x06string\x18\x0e \x01(\x0b\x32\x19.buf.validate.StringRulesH\x00R\x06string\x12\x30\n\x05\x62ytes\x18\x0f \x01(\x0b\x32\x18.buf.validate.BytesRulesH\x00R\x05\x62ytes\x12-\n\x04\x65num\x18\x10 \x01(\x0b\x32\x17.buf.validate.EnumRulesH\x00R\x04\x65num\x12\x39\n\x08repeated\x18\x12 \x01(\x0b\x32\x1b.buf.validate.RepeatedRulesH\x00R\x08repeated\x12*\n\x03map\x18\x13 \x01(\x0b\x32\x16.buf.validate.MapRulesH\x00R\x03map\x12*\n\x03\x61ny\x18\x14 \x01(\x0b\x32\x16.buf.validate.AnyRulesH\x00R\x03\x61ny\x12\x39\n\x08\x64uration\x18\x15 \x01(\x0b\x32\x1b.buf.validate.DurationRulesH\x00R\x08\x64uration\x12=\n\nfield_mask\x18\x1c \x01(\x0b\x32\x1c.buf.validate.FieldMaskRulesH\x00R\tfieldMask\x12<\n\ttimestamp\x18\x16 \x01(\x0b\x32\x1c.buf.validate.TimestampRulesH\x00R\ttimestampB\x06\n\x04typeJ\x04\x08\x18\x10\x19J\x04\x08\x1a\x10\x1bR\x07skippedR\x0cignore_empty\"Z\n\x0fPredefinedRules\x12$\n\x03\x63\x65l\x18\x01 \x03(\x0b\x32\x12.buf.validate.RuleR\x03\x63\x65lJ\x04\x08\x18\x10\x19J\x04\x08\x1a\x10\x1bR\x07skippedR\x0cignore_empty\"\x90\x18\n\nFloatRules\x12\x8a\x01\n\x05\x63onst\x18\x01 \x01(\x02\x42t\xc2Hq\no\n\x0b\x66loat.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\xa3\x01\n\x02lt\x18\x02 \x01(\x02\x42\x90\x01\xc2H\x8c\x01\n\x89\x01\n\x08\x66loat.lt\x1a}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xb4\x01\n\x03lte\x18\x03 \x01(\x02\x42\x9f\x01\xc2H\x9b\x01\n\x98\x01\n\tfloat.lte\x1a\x8a\x01!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xf3\x07\n\x02gt\x18\x04 \x01(\x02\x42\xe0\x07\xc2H\xdc\x07\n\x8d\x01\n\x08\x66loat.gt\x1a\x80\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xc3\x01\n\x0b\x66loat.gt_lt\x1a\xb3\x01has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xcd\x01\n\x15\x66loat.gt_lt_exclusive\x1a\xb3\x01has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xd3\x01\n\x0c\x66loat.gt_lte\x1a\xc2\x01has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xdd\x01\n\x16\x66loat.gt_lte_exclusive\x1a\xc2\x01has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xbf\x08\n\x03gte\x18\x05 \x01(\x02\x42\xaa\x08\xc2H\xa6\x08\n\x9b\x01\n\tfloat.gte\x1a\x8d\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xd2\x01\n\x0c\x66loat.gte_lt\x1a\xc1\x01has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xdc\x01\n\x16\x66loat.gte_lt_exclusive\x1a\xc1\x01has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xe2\x01\n\rfloat.gte_lte\x1a\xd0\x01has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xec\x01\n\x17\x66loat.gte_lte_exclusive\x1a\xd0\x01has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x83\x01\n\x02in\x18\x06 \x03(\x02\x42s\xc2Hp\nn\n\x08\x66loat.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x02\x42\x66\xc2Hc\na\n\x0c\x66loat.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12}\n\x06\x66inite\x18\x08 \x01(\x08\x42\x65\xc2Hb\n`\n\x0c\x66loat.finite\x1aPrules.finite ? (this.isNan() || this.isInf() ? \'value must be finite\' : \'\') : \'\'R\x06\x66inite\x12\x34\n\x07\x65xample\x18\t \x03(\x02\x42\x1a\xc2H\x17\n\x15\n\rfloat.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xa2\x18\n\x0b\x44oubleRules\x12\x8b\x01\n\x05\x63onst\x18\x01 \x01(\x01\x42u\xc2Hr\np\n\x0c\x64ouble.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\xa4\x01\n\x02lt\x18\x02 \x01(\x01\x42\x91\x01\xc2H\x8d\x01\n\x8a\x01\n\tdouble.lt\x1a}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xb5\x01\n\x03lte\x18\x03 \x01(\x01\x42\xa0\x01\xc2H\x9c\x01\n\x99\x01\n\ndouble.lte\x1a\x8a\x01!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xf8\x07\n\x02gt\x18\x04 \x01(\x01\x42\xe5\x07\xc2H\xe1\x07\n\x8e\x01\n\tdouble.gt\x1a\x80\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xc4\x01\n\x0c\x64ouble.gt_lt\x1a\xb3\x01has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xce\x01\n\x16\x64ouble.gt_lt_exclusive\x1a\xb3\x01has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xd4\x01\n\rdouble.gt_lte\x1a\xc2\x01has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xde\x01\n\x17\x64ouble.gt_lte_exclusive\x1a\xc2\x01has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xc4\x08\n\x03gte\x18\x05 \x01(\x01\x42\xaf\x08\xc2H\xab\x08\n\x9c\x01\n\ndouble.gte\x1a\x8d\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xd3\x01\n\rdouble.gte_lt\x1a\xc1\x01has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xdd\x01\n\x17\x64ouble.gte_lt_exclusive\x1a\xc1\x01has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xe3\x01\n\x0e\x64ouble.gte_lte\x1a\xd0\x01has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xed\x01\n\x18\x64ouble.gte_lte_exclusive\x1a\xd0\x01has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x84\x01\n\x02in\x18\x06 \x03(\x01\x42t\xc2Hq\no\n\tdouble.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x01\x42g\xc2Hd\nb\n\rdouble.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12~\n\x06\x66inite\x18\x08 \x01(\x08\x42\x66\xc2Hc\na\n\rdouble.finite\x1aPrules.finite ? (this.isNan() || this.isInf() ? \'value must be finite\' : \'\') : \'\'R\x06\x66inite\x12\x35\n\x07\x65xample\x18\t \x03(\x01\x42\x1b\xc2H\x18\n\x16\n\x0e\x64ouble.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xba\x15\n\nInt32Rules\x12\x8a\x01\n\x05\x63onst\x18\x01 \x01(\x05\x42t\xc2Hq\no\n\x0bint32.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8e\x01\n\x02lt\x18\x02 \x01(\x05\x42|\xc2Hy\nw\n\x08int32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa1\x01\n\x03lte\x18\x03 \x01(\x05\x42\x8c\x01\xc2H\x88\x01\n\x85\x01\n\tint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x9b\x07\n\x02gt\x18\x04 \x01(\x05\x42\x88\x07\xc2H\x84\x07\nz\n\x08int32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb3\x01\n\x0bint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbb\x01\n\x15int32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc3\x01\n\x0cint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcb\x01\n\x16int32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xe8\x07\n\x03gte\x18\x05 \x01(\x05\x42\xd3\x07\xc2H\xcf\x07\n\x88\x01\n\tint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc2\x01\n\x0cint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xca\x01\n\x16int32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd2\x01\n\rint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xda\x01\n\x17int32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x83\x01\n\x02in\x18\x06 \x03(\x05\x42s\xc2Hp\nn\n\x08int32.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x05\x42\x66\xc2Hc\na\n\x0cint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x34\n\x07\x65xample\x18\x08 \x03(\x05\x42\x1a\xc2H\x17\n\x15\n\rint32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xba\x15\n\nInt64Rules\x12\x8a\x01\n\x05\x63onst\x18\x01 \x01(\x03\x42t\xc2Hq\no\n\x0bint64.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8e\x01\n\x02lt\x18\x02 \x01(\x03\x42|\xc2Hy\nw\n\x08int64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa1\x01\n\x03lte\x18\x03 \x01(\x03\x42\x8c\x01\xc2H\x88\x01\n\x85\x01\n\tint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x9b\x07\n\x02gt\x18\x04 \x01(\x03\x42\x88\x07\xc2H\x84\x07\nz\n\x08int64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb3\x01\n\x0bint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbb\x01\n\x15int64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc3\x01\n\x0cint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcb\x01\n\x16int64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xe8\x07\n\x03gte\x18\x05 \x01(\x03\x42\xd3\x07\xc2H\xcf\x07\n\x88\x01\n\tint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc2\x01\n\x0cint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xca\x01\n\x16int64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd2\x01\n\rint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xda\x01\n\x17int64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x83\x01\n\x02in\x18\x06 \x03(\x03\x42s\xc2Hp\nn\n\x08int64.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x03\x42\x66\xc2Hc\na\n\x0cint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x34\n\x07\x65xample\x18\t \x03(\x03\x42\x1a\xc2H\x17\n\x15\n\rint64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xcb\x15\n\x0bUInt32Rules\x12\x8b\x01\n\x05\x63onst\x18\x01 \x01(\rBu\xc2Hr\np\n\x0cuint32.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8f\x01\n\x02lt\x18\x02 \x01(\rB}\xc2Hz\nx\n\tuint32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\rB\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nuint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\rB\x8d\x07\xc2H\x89\x07\n{\n\tuint32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0cuint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16uint32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\ruint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17uint32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\rB\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nuint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\ruint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17uint32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0euint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18uint32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x84\x01\n\x02in\x18\x06 \x03(\rBt\xc2Hq\no\n\tuint32.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\rBg\xc2Hd\nb\n\ruint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\rB\x1b\xc2H\x18\n\x16\n\x0euint32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xcb\x15\n\x0bUInt64Rules\x12\x8b\x01\n\x05\x63onst\x18\x01 \x01(\x04\x42u\xc2Hr\np\n\x0cuint64.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x04\x42}\xc2Hz\nx\n\tuint64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x04\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nuint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x04\x42\x8d\x07\xc2H\x89\x07\n{\n\tuint64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0cuint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16uint64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\ruint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17uint64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x04\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nuint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\ruint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17uint64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0euint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18uint64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x84\x01\n\x02in\x18\x06 \x03(\x04\x42t\xc2Hq\no\n\tuint64.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x04\x42g\xc2Hd\nb\n\ruint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\x04\x42\x1b\xc2H\x18\n\x16\n\x0euint64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xcb\x15\n\x0bSInt32Rules\x12\x8b\x01\n\x05\x63onst\x18\x01 \x01(\x11\x42u\xc2Hr\np\n\x0csint32.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x11\x42}\xc2Hz\nx\n\tsint32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x11\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nsint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x11\x42\x8d\x07\xc2H\x89\x07\n{\n\tsint32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0csint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16sint32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\rsint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17sint32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x11\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nsint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\rsint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17sint32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0esint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18sint32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x84\x01\n\x02in\x18\x06 \x03(\x11\x42t\xc2Hq\no\n\tsint32.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x11\x42g\xc2Hd\nb\n\rsint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\x11\x42\x1b\xc2H\x18\n\x16\n\x0esint32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xcb\x15\n\x0bSInt64Rules\x12\x8b\x01\n\x05\x63onst\x18\x01 \x01(\x12\x42u\xc2Hr\np\n\x0csint64.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x12\x42}\xc2Hz\nx\n\tsint64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x12\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nsint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x12\x42\x8d\x07\xc2H\x89\x07\n{\n\tsint64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0csint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16sint64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\rsint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17sint64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x12\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nsint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\rsint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17sint64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0esint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18sint64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x84\x01\n\x02in\x18\x06 \x03(\x12\x42t\xc2Hq\no\n\tsint64.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x12\x42g\xc2Hd\nb\n\rsint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x35\n\x07\x65xample\x18\x08 \x03(\x12\x42\x1b\xc2H\x18\n\x16\n\x0esint64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xdc\x15\n\x0c\x46ixed32Rules\x12\x8c\x01\n\x05\x63onst\x18\x01 \x01(\x07\x42v\xc2Hs\nq\n\rfixed32.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x90\x01\n\x02lt\x18\x02 \x01(\x07\x42~\xc2H{\ny\n\nfixed32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa3\x01\n\x03lte\x18\x03 \x01(\x07\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x0b\x66ixed32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa5\x07\n\x02gt\x18\x04 \x01(\x07\x42\x92\x07\xc2H\x8e\x07\n|\n\nfixed32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb5\x01\n\rfixed32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbd\x01\n\x17\x66ixed32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc5\x01\n\x0e\x66ixed32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcd\x01\n\x18\x66ixed32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf2\x07\n\x03gte\x18\x05 \x01(\x07\x42\xdd\x07\xc2H\xd9\x07\n\x8a\x01\n\x0b\x66ixed32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc4\x01\n\x0e\x66ixed32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcc\x01\n\x18\x66ixed32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd4\x01\n\x0f\x66ixed32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdc\x01\n\x19\x66ixed32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x85\x01\n\x02in\x18\x06 \x03(\x07\x42u\xc2Hr\np\n\nfixed32.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x7f\n\x06not_in\x18\x07 \x03(\x07\x42h\xc2He\nc\n\x0e\x66ixed32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x36\n\x07\x65xample\x18\x08 \x03(\x07\x42\x1c\xc2H\x19\n\x17\n\x0f\x66ixed32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xdc\x15\n\x0c\x46ixed64Rules\x12\x8c\x01\n\x05\x63onst\x18\x01 \x01(\x06\x42v\xc2Hs\nq\n\rfixed64.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x90\x01\n\x02lt\x18\x02 \x01(\x06\x42~\xc2H{\ny\n\nfixed64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa3\x01\n\x03lte\x18\x03 \x01(\x06\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x0b\x66ixed64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa5\x07\n\x02gt\x18\x04 \x01(\x06\x42\x92\x07\xc2H\x8e\x07\n|\n\nfixed64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb5\x01\n\rfixed64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbd\x01\n\x17\x66ixed64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc5\x01\n\x0e\x66ixed64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcd\x01\n\x18\x66ixed64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf2\x07\n\x03gte\x18\x05 \x01(\x06\x42\xdd\x07\xc2H\xd9\x07\n\x8a\x01\n\x0b\x66ixed64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc4\x01\n\x0e\x66ixed64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcc\x01\n\x18\x66ixed64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd4\x01\n\x0f\x66ixed64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdc\x01\n\x19\x66ixed64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x85\x01\n\x02in\x18\x06 \x03(\x06\x42u\xc2Hr\np\n\nfixed64.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x7f\n\x06not_in\x18\x07 \x03(\x06\x42h\xc2He\nc\n\x0e\x66ixed64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x36\n\x07\x65xample\x18\x08 \x03(\x06\x42\x1c\xc2H\x19\n\x17\n\x0f\x66ixed64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xee\x15\n\rSFixed32Rules\x12\x8d\x01\n\x05\x63onst\x18\x01 \x01(\x0f\x42w\xc2Ht\nr\n\x0esfixed32.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x91\x01\n\x02lt\x18\x02 \x01(\x0f\x42\x7f\xc2H|\nz\n\x0bsfixed32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa4\x01\n\x03lte\x18\x03 \x01(\x0f\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0csfixed32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xaa\x07\n\x02gt\x18\x04 \x01(\x0f\x42\x97\x07\xc2H\x93\x07\n}\n\x0bsfixed32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0esfixed32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18sfixed32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0fsfixed32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19sfixed32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf7\x07\n\x03gte\x18\x05 \x01(\x0f\x42\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0csfixed32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0fsfixed32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19sfixed32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10sfixed32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1asfixed32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x86\x01\n\x02in\x18\x06 \x03(\x0f\x42v\xc2Hs\nq\n\x0bsfixed32.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x80\x01\n\x06not_in\x18\x07 \x03(\x0f\x42i\xc2Hf\nd\n\x0fsfixed32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x37\n\x07\x65xample\x18\x08 \x03(\x0f\x42\x1d\xc2H\x1a\n\x18\n\x10sfixed32.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xee\x15\n\rSFixed64Rules\x12\x8d\x01\n\x05\x63onst\x18\x01 \x01(\x10\x42w\xc2Ht\nr\n\x0esfixed64.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x91\x01\n\x02lt\x18\x02 \x01(\x10\x42\x7f\xc2H|\nz\n\x0bsfixed64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa4\x01\n\x03lte\x18\x03 \x01(\x10\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0csfixed64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xaa\x07\n\x02gt\x18\x04 \x01(\x10\x42\x97\x07\xc2H\x93\x07\n}\n\x0bsfixed64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0esfixed64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18sfixed64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0fsfixed64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19sfixed64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf7\x07\n\x03gte\x18\x05 \x01(\x10\x42\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0csfixed64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0fsfixed64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19sfixed64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10sfixed64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1asfixed64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x86\x01\n\x02in\x18\x06 \x03(\x10\x42v\xc2Hs\nq\n\x0bsfixed64.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x80\x01\n\x06not_in\x18\x07 \x03(\x10\x42i\xc2Hf\nd\n\x0fsfixed64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x37\n\x07\x65xample\x18\x08 \x03(\x10\x42\x1d\xc2H\x1a\n\x18\n\x10sfixed64.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\xd7\x01\n\tBoolRules\x12\x89\x01\n\x05\x63onst\x18\x01 \x01(\x08\x42s\xc2Hp\nn\n\nbool.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x33\n\x07\x65xample\x18\x02 \x03(\x08\x42\x19\xc2H\x16\n\x14\n\x0c\x62ool.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\xcf;\n\x0bStringRules\x12\x8d\x01\n\x05\x63onst\x18\x01 \x01(\tBw\xc2Ht\nr\n\x0cstring.const\x1a\x62this != getField(rules, \'const\') ? \'value must equal `%s`\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\x83\x01\n\x03len\x18\x13 \x01(\x04\x42q\xc2Hn\nl\n\nstring.len\x1a^uint(this.size()) != rules.len ? \'value length must be %s characters\'.format([rules.len]) : \'\'R\x03len\x12\xa1\x01\n\x07min_len\x18\x02 \x01(\x04\x42\x87\x01\xc2H\x83\x01\n\x80\x01\n\x0estring.min_len\x1anuint(this.size()) < rules.min_len ? \'value length must be at least %s characters\'.format([rules.min_len]) : \'\'R\x06minLen\x12\x9f\x01\n\x07max_len\x18\x03 \x01(\x04\x42\x85\x01\xc2H\x81\x01\n\x7f\n\x0estring.max_len\x1amuint(this.size()) > rules.max_len ? \'value length must be at most %s characters\'.format([rules.max_len]) : \'\'R\x06maxLen\x12\xa5\x01\n\tlen_bytes\x18\x14 \x01(\x04\x42\x87\x01\xc2H\x83\x01\n\x80\x01\n\x10string.len_bytes\x1aluint(bytes(this).size()) != rules.len_bytes ? \'value length must be %s bytes\'.format([rules.len_bytes]) : \'\'R\x08lenBytes\x12\xad\x01\n\tmin_bytes\x18\x04 \x01(\x04\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x10string.min_bytes\x1atuint(bytes(this).size()) < rules.min_bytes ? \'value length must be at least %s bytes\'.format([rules.min_bytes]) : \'\'R\x08minBytes\x12\xac\x01\n\tmax_bytes\x18\x05 \x01(\x04\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x10string.max_bytes\x1asuint(bytes(this).size()) > rules.max_bytes ? \'value length must be at most %s bytes\'.format([rules.max_bytes]) : \'\'R\x08maxBytes\x12\x96\x01\n\x07pattern\x18\x06 \x01(\tB|\xc2Hy\nw\n\x0estring.pattern\x1a\x65!this.matches(rules.pattern) ? \'value does not match regex pattern `%s`\'.format([rules.pattern]) : \'\'R\x07pattern\x12\x8c\x01\n\x06prefix\x18\x07 \x01(\tBt\xc2Hq\no\n\rstring.prefix\x1a^!this.startsWith(rules.prefix) ? \'value does not have prefix `%s`\'.format([rules.prefix]) : \'\'R\x06prefix\x12\x8a\x01\n\x06suffix\x18\x08 \x01(\tBr\xc2Ho\nm\n\rstring.suffix\x1a\\!this.endsWith(rules.suffix) ? \'value does not have suffix `%s`\'.format([rules.suffix]) : \'\'R\x06suffix\x12\x9a\x01\n\x08\x63ontains\x18\t \x01(\tB~\xc2H{\ny\n\x0fstring.contains\x1a\x66!this.contains(rules.contains) ? \'value does not contain substring `%s`\'.format([rules.contains]) : \'\'R\x08\x63ontains\x12\xa5\x01\n\x0cnot_contains\x18\x17 \x01(\tB\x81\x01\xc2H~\n|\n\x13string.not_contains\x1a\x65this.contains(rules.not_contains) ? \'value contains substring `%s`\'.format([rules.not_contains]) : \'\'R\x0bnotContains\x12\x84\x01\n\x02in\x18\n \x03(\tBt\xc2Hq\no\n\tstring.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12~\n\x06not_in\x18\x0b \x03(\tBg\xc2Hd\nb\n\rstring.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\xe6\x01\n\x05\x65mail\x18\x0c \x01(\x08\x42\xcd\x01\xc2H\xc9\x01\na\n\x0cstring.email\x12#value must be a valid email address\x1a,!rules.email || this == \'\' || this.isEmail()\nd\n\x12string.email_empty\x12\x32value is empty, which is not a valid email address\x1a\x1a!rules.email || this != \'\'H\x00R\x05\x65mail\x12\xf1\x01\n\x08hostname\x18\r \x01(\x08\x42\xd2\x01\xc2H\xce\x01\ne\n\x0fstring.hostname\x12\x1evalue must be a valid hostname\x1a\x32!rules.hostname || this == \'\' || this.isHostname()\ne\n\x15string.hostname_empty\x12-value is empty, which is not a valid hostname\x1a\x1d!rules.hostname || this != \'\'H\x00R\x08hostname\x12\xcb\x01\n\x02ip\x18\x0e \x01(\x08\x42\xb8\x01\xc2H\xb4\x01\nU\n\tstring.ip\x12 value must be a valid IP address\x1a&!rules.ip || this == \'\' || this.isIp()\n[\n\x0fstring.ip_empty\x12/value is empty, which is not a valid IP address\x1a\x17!rules.ip || this != \'\'H\x00R\x02ip\x12\xdc\x01\n\x04ipv4\x18\x0f \x01(\x08\x42\xc5\x01\xc2H\xc1\x01\n\\\n\x0bstring.ipv4\x12\"value must be a valid IPv4 address\x1a)!rules.ipv4 || this == \'\' || this.isIp(4)\na\n\x11string.ipv4_empty\x12\x31value is empty, which is not a valid IPv4 address\x1a\x19!rules.ipv4 || this != \'\'H\x00R\x04ipv4\x12\xdc\x01\n\x04ipv6\x18\x10 \x01(\x08\x42\xc5\x01\xc2H\xc1\x01\n\\\n\x0bstring.ipv6\x12\"value must be a valid IPv6 address\x1a)!rules.ipv6 || this == \'\' || this.isIp(6)\na\n\x11string.ipv6_empty\x12\x31value is empty, which is not a valid IPv6 address\x1a\x19!rules.ipv6 || this != \'\'H\x00R\x04ipv6\x12\xc4\x01\n\x03uri\x18\x11 \x01(\x08\x42\xaf\x01\xc2H\xab\x01\nQ\n\nstring.uri\x12\x19value must be a valid URI\x1a(!rules.uri || this == \'\' || this.isUri()\nV\n\x10string.uri_empty\x12(value is empty, which is not a valid URI\x1a\x18!rules.uri || this != \'\'H\x00R\x03uri\x12x\n\x07uri_ref\x18\x12 \x01(\x08\x42]\xc2HZ\nX\n\x0estring.uri_ref\x12#value must be a valid URI Reference\x1a!!rules.uri_ref || this.isUriRef()H\x00R\x06uriRef\x12\x99\x02\n\x07\x61\x64\x64ress\x18\x15 \x01(\x08\x42\xfc\x01\xc2H\xf8\x01\n\x81\x01\n\x0estring.address\x12-value must be a valid hostname, or ip address\x1a@!rules.address || this == \'\' || this.isHostname() || this.isIp()\nr\n\x14string.address_empty\x12!rules.ipv4_with_prefixlen || this == \'\' || this.isIpPrefix(4)\n\x92\x01\n string.ipv4_with_prefixlen_empty\x12\x44value is empty, which is not a valid IPv4 address with prefix length\x1a(!rules.ipv4_with_prefixlen || this != \'\'H\x00R\x11ipv4WithPrefixlen\x12\xe2\x02\n\x13ipv6_with_prefixlen\x18\x1c \x01(\x08\x42\xaf\x02\xc2H\xab\x02\n\x93\x01\n\x1astring.ipv6_with_prefixlen\x12\x35value must be a valid IPv6 address with prefix length\x1a>!rules.ipv6_with_prefixlen || this == \'\' || this.isIpPrefix(6)\n\x92\x01\n string.ipv6_with_prefixlen_empty\x12\x44value is empty, which is not a valid IPv6 address with prefix length\x1a(!rules.ipv6_with_prefixlen || this != \'\'H\x00R\x11ipv6WithPrefixlen\x12\xfc\x01\n\tip_prefix\x18\x1d \x01(\x08\x42\xdc\x01\xc2H\xd8\x01\nl\n\x10string.ip_prefix\x12\x1fvalue must be a valid IP prefix\x1a\x37!rules.ip_prefix || this == \'\' || this.isIpPrefix(true)\nh\n\x16string.ip_prefix_empty\x12.value is empty, which is not a valid IP prefix\x1a\x1e!rules.ip_prefix || this != \'\'H\x00R\x08ipPrefix\x12\x8f\x02\n\x0bipv4_prefix\x18\x1e \x01(\x08\x42\xeb\x01\xc2H\xe7\x01\nu\n\x12string.ipv4_prefix\x12!value must be a valid IPv4 prefix\x1a!rules.host_and_port || this == \'\' || this.isHostAndPort(true)\ny\n\x1astring.host_and_port_empty\x12\x37value is empty, which is not a valid host and port pair\x1a\"!rules.host_and_port || this != \'\'H\x00R\x0bhostAndPort\x12\xfb\x01\n\x04ulid\x18# \x01(\x08\x42\xe4\x01\xc2H\xe0\x01\n\x82\x01\n\x0bstring.ulid\x12\x1avalue must be a valid ULID\x1aW!rules.ulid || this == \'\' || this.matches(\'^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$\')\nY\n\x11string.ulid_empty\x12)value is empty, which is not a valid ULID\x1a\x19!rules.ulid || this != \'\'H\x00R\x04ulid\x12\xb8\x05\n\x10well_known_regex\x18\x18 \x01(\x0e\x32\x18.buf.validate.KnownRegexB\xf1\x04\xc2H\xed\x04\n\xf0\x01\n#string.well_known_regex.header_name\x12&value must be a valid HTTP header name\x1a\xa0\x01rules.well_known_regex != 1 || this == \'\' || this.matches(!has(rules.strict) || rules.strict ?\'^:?[0-9a-zA-Z!#$%&\\\'*+-.^_|~\\x60]+$\' :\'^[^\\u0000\\u000A\\u000D]+$\')\n\x8d\x01\n)string.well_known_regex.header_name_empty\x12\x35value is empty, which is not a valid HTTP header name\x1a)rules.well_known_regex != 1 || this != \'\'\n\xe7\x01\n$string.well_known_regex.header_value\x12\'value must be a valid HTTP header value\x1a\x95\x01rules.well_known_regex != 2 || this.matches(!has(rules.strict) || rules.strict ?\'^[^\\u0000-\\u0008\\u000A-\\u001F\\u007F]*$\' :\'^[^\\u0000\\u000A\\u000D]*$\')H\x00R\x0ewellKnownRegex\x12\x16\n\x06strict\x18\x19 \x01(\x08R\x06strict\x12\x35\n\x07\x65xample\x18\" \x03(\tB\x1b\xc2H\x18\n\x16\n\x0estring.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0c\n\nwell_known\"\xac\x13\n\nBytesRules\x12\x87\x01\n\x05\x63onst\x18\x01 \x01(\x0c\x42q\xc2Hn\nl\n\x0b\x62ytes.const\x1a]this != getField(rules, \'const\') ? \'value must be %x\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12}\n\x03len\x18\r \x01(\x04\x42k\xc2Hh\nf\n\tbytes.len\x1aYuint(this.size()) != rules.len ? \'value length must be %s bytes\'.format([rules.len]) : \'\'R\x03len\x12\x98\x01\n\x07min_len\x18\x02 \x01(\x04\x42\x7f\xc2H|\nz\n\rbytes.min_len\x1aiuint(this.size()) < rules.min_len ? \'value length must be at least %s bytes\'.format([rules.min_len]) : \'\'R\x06minLen\x12\x90\x01\n\x07max_len\x18\x03 \x01(\x04\x42w\xc2Ht\nr\n\rbytes.max_len\x1a\x61uint(this.size()) > rules.max_len ? \'value must be at most %s bytes\'.format([rules.max_len]) : \'\'R\x06maxLen\x12\x99\x01\n\x07pattern\x18\x04 \x01(\tB\x7f\xc2H|\nz\n\rbytes.pattern\x1ai!string(this).matches(rules.pattern) ? \'value must match regex pattern `%s`\'.format([rules.pattern]) : \'\'R\x07pattern\x12\x89\x01\n\x06prefix\x18\x05 \x01(\x0c\x42q\xc2Hn\nl\n\x0c\x62ytes.prefix\x1a\\!this.startsWith(rules.prefix) ? \'value does not have prefix %x\'.format([rules.prefix]) : \'\'R\x06prefix\x12\x87\x01\n\x06suffix\x18\x06 \x01(\x0c\x42o\xc2Hl\nj\n\x0c\x62ytes.suffix\x1aZ!this.endsWith(rules.suffix) ? \'value does not have suffix %x\'.format([rules.suffix]) : \'\'R\x06suffix\x12\x8d\x01\n\x08\x63ontains\x18\x07 \x01(\x0c\x42q\xc2Hn\nl\n\x0e\x62ytes.contains\x1aZ!this.contains(rules.contains) ? \'value does not contain %x\'.format([rules.contains]) : \'\'R\x08\x63ontains\x12\xab\x01\n\x02in\x18\x08 \x03(\x0c\x42\x9a\x01\xc2H\x96\x01\n\x93\x01\n\x08\x62ytes.in\x1a\x86\x01getField(rules, \'in\').size() > 0 && !(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12}\n\x06not_in\x18\t \x03(\x0c\x42\x66\xc2Hc\na\n\x0c\x62ytes.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\xef\x01\n\x02ip\x18\n \x01(\x08\x42\xdc\x01\xc2H\xd8\x01\nt\n\x08\x62ytes.ip\x12 value must be a valid IP address\x1a\x46!rules.ip || this.size() == 0 || this.size() == 4 || this.size() == 16\n`\n\x0e\x62ytes.ip_empty\x12/value is empty, which is not a valid IP address\x1a\x1d!rules.ip || this.size() != 0H\x00R\x02ip\x12\xea\x01\n\x04ipv4\x18\x0b \x01(\x08\x42\xd3\x01\xc2H\xcf\x01\ne\n\nbytes.ipv4\x12\"value must be a valid IPv4 address\x1a\x33!rules.ipv4 || this.size() == 0 || this.size() == 4\nf\n\x10\x62ytes.ipv4_empty\x12\x31value is empty, which is not a valid IPv4 address\x1a\x1f!rules.ipv4 || this.size() != 0H\x00R\x04ipv4\x12\xeb\x01\n\x04ipv6\x18\x0c \x01(\x08\x42\xd4\x01\xc2H\xd0\x01\nf\n\nbytes.ipv6\x12\"value must be a valid IPv6 address\x1a\x34!rules.ipv6 || this.size() == 0 || this.size() == 16\nf\n\x10\x62ytes.ipv6_empty\x12\x31value is empty, which is not a valid IPv6 address\x1a\x1f!rules.ipv6 || this.size() != 0H\x00R\x04ipv6\x12\xdb\x01\n\x04uuid\x18\x0f \x01(\x08\x42\xc4\x01\xc2H\xc0\x01\n^\n\nbytes.uuid\x12\x1avalue must be a valid UUID\x1a\x34!rules.uuid || this.size() == 0 || this.size() == 16\n^\n\x10\x62ytes.uuid_empty\x12)value is empty, which is not a valid UUID\x1a\x1f!rules.uuid || this.size() != 0H\x00R\x04uuid\x12\x34\n\x07\x65xample\x18\x0e \x03(\x0c\x42\x1a\xc2H\x17\n\x15\n\rbytes.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0c\n\nwell_known\"\xfd\x03\n\tEnumRules\x12\x89\x01\n\x05\x63onst\x18\x01 \x01(\x05\x42s\xc2Hp\nn\n\nenum.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12!\n\x0c\x64\x65\x66ined_only\x18\x02 \x01(\x08R\x0b\x64\x65\x66inedOnly\x12\x82\x01\n\x02in\x18\x03 \x03(\x05\x42r\xc2Ho\nm\n\x07\x65num.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12|\n\x06not_in\x18\x04 \x03(\x05\x42\x65\xc2Hb\n`\n\x0b\x65num.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12\x33\n\x07\x65xample\x18\x05 \x03(\x05\x42\x19\xc2H\x16\n\x14\n\x0c\x65num.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\x9e\x04\n\rRepeatedRules\x12\xa8\x01\n\tmin_items\x18\x01 \x01(\x04\x42\x8a\x01\xc2H\x86\x01\n\x83\x01\n\x12repeated.min_items\x1amuint(this.size()) < rules.min_items ? \'value must contain at least %d item(s)\'.format([rules.min_items]) : \'\'R\x08minItems\x12\xac\x01\n\tmax_items\x18\x02 \x01(\x04\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x12repeated.max_items\x1aquint(this.size()) > rules.max_items ? \'value must contain no more than %s item(s)\'.format([rules.max_items]) : \'\'R\x08maxItems\x12x\n\x06unique\x18\x03 \x01(\x08\x42`\xc2H]\n[\n\x0frepeated.unique\x12(repeated value must contain unique items\x1a\x1e!rules.unique || this.unique()R\x06unique\x12.\n\x05items\x18\x04 \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x05items*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\xac\x03\n\x08MapRules\x12\x99\x01\n\tmin_pairs\x18\x01 \x01(\x04\x42|\xc2Hy\nw\n\rmap.min_pairs\x1a\x66uint(this.size()) < rules.min_pairs ? \'map must be at least %d entries\'.format([rules.min_pairs]) : \'\'R\x08minPairs\x12\x98\x01\n\tmax_pairs\x18\x02 \x01(\x04\x42{\xc2Hx\nv\n\rmap.max_pairs\x1a\x65uint(this.size()) > rules.max_pairs ? \'map must be at most %d entries\'.format([rules.max_pairs]) : \'\'R\x08maxPairs\x12,\n\x04keys\x18\x04 \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x04keys\x12\x30\n\x06values\x18\x05 \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x06values*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"1\n\x08\x41nyRules\x12\x0e\n\x02in\x18\x02 \x03(\tR\x02in\x12\x15\n\x06not_in\x18\x03 \x03(\tR\x05notIn\"\xc6\x17\n\rDurationRules\x12\xa8\x01\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationBw\xc2Ht\nr\n\x0e\x64uration.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\xac\x01\n\x02lt\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB\x7f\xc2H|\nz\n\x0b\x64uration.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xbf\x01\n\x03lte\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationB\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0c\x64uration.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xc5\x07\n\x02gt\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationB\x97\x07\xc2H\x93\x07\n}\n\x0b\x64uration.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0e\x64uration.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18\x64uration.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0f\x64uration.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19\x64uration.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\x92\x08\n\x03gte\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationB\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0c\x64uration.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0f\x64uration.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19\x64uration.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10\x64uration.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1a\x64uration.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\xa1\x01\n\x02in\x18\x07 \x03(\x0b\x32\x19.google.protobuf.DurationBv\xc2Hs\nq\n\x0b\x64uration.in\x1a\x62!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\x9b\x01\n\x06not_in\x18\x08 \x03(\x0b\x32\x19.google.protobuf.DurationBi\xc2Hf\nd\n\x0f\x64uration.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12R\n\x07\x65xample\x18\t \x03(\x0b\x32\x19.google.protobuf.DurationB\x1d\xc2H\x1a\n\x18\n\x10\x64uration.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"\x98\x06\n\x0e\x46ieldMaskRules\x12\xc6\x01\n\x05\x63onst\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x93\x01\xc2H\x8f\x01\n\x8c\x01\n\x10\x66ield_mask.const\x1axthis.paths != getField(rules, \'const\').paths ? \'value must equal paths %s\'.format([getField(rules, \'const\').paths]) : \'\'R\x05\x63onst\x12\xdd\x01\n\x02in\x18\x02 \x03(\tB\xcc\x01\xc2H\xc8\x01\n\xc5\x01\n\rfield_mask.in\x1a\xb3\x01!this.paths.all(p, p in getField(rules, \'in\') || getField(rules, \'in\').exists(f, p.startsWith(f+\'.\'))) ? \'value must only contain paths in %s\'.format([getField(rules, \'in\')]) : \'\'R\x02in\x12\xfa\x01\n\x06not_in\x18\x03 \x03(\tB\xe2\x01\xc2H\xde\x01\n\xdb\x01\n\x11\x66ield_mask.not_in\x1a\xc5\x01!this.paths.all(p, !(p in getField(rules, \'not_in\') || getField(rules, \'not_in\').exists(f, p.startsWith(f+\'.\')))) ? \'value must not contain any paths in %s\'.format([getField(rules, \'not_in\')]) : \'\'R\x05notIn\x12U\n\x07\x65xample\x18\x04 \x03(\x0b\x32\x1a.google.protobuf.FieldMaskB\x1f\xc2H\x1c\n\x1a\n\x12\x66ield_mask.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\xca\x18\n\x0eTimestampRules\x12\xaa\x01\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampBx\xc2Hu\ns\n\x0ftimestamp.const\x1a`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'R\x05\x63onst\x12\xaf\x01\n\x02lt\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x80\x01\xc2H}\n{\n\x0ctimestamp.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xc1\x01\n\x03lte\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x90\x01\xc2H\x8c\x01\n\x89\x01\n\rtimestamp.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12s\n\x06lt_now\x18\x07 \x01(\x08\x42Z\xc2HW\nU\n\x10timestamp.lt_now\x1a\x41(rules.lt_now && this > now) ? \'value must be less than now\' : \'\'H\x00R\x05ltNow\x12\xcb\x07\n\x02gt\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x9c\x07\xc2H\x98\x07\n~\n\x0ctimestamp.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb7\x01\n\x0ftimestamp.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbf\x01\n\x19timestamp.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc7\x01\n\x10timestamp.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcf\x01\n\x1atimestamp.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\x98\x08\n\x03gte\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xe7\x07\xc2H\xe3\x07\n\x8c\x01\n\rtimestamp.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc6\x01\n\x10timestamp.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xce\x01\n\x1atimestamp.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd6\x01\n\x11timestamp.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xde\x01\n\x1btimestamp.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12v\n\x06gt_now\x18\x08 \x01(\x08\x42]\xc2HZ\nX\n\x10timestamp.gt_now\x1a\x44(rules.gt_now && this < now) ? \'value must be greater than now\' : \'\'H\x01R\x05gtNow\x12\xc0\x01\n\x06within\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationB\x8c\x01\xc2H\x88\x01\n\x85\x01\n\x10timestamp.within\x1aqthis < now-rules.within || this > now+rules.within ? \'value must be within %s of now\'.format([rules.within]) : \'\'R\x06within\x12T\n\x07\x65xample\x18\n \x03(\x0b\x32\x1a.google.protobuf.TimestampB\x1e\xc2H\x1b\n\x19\n\x11timestamp.example\x1a\x04trueR\x07\x65xample*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_than\"E\n\nViolations\x12\x37\n\nviolations\x18\x01 \x03(\x0b\x32\x17.buf.validate.ViolationR\nviolations\"\xc5\x01\n\tViolation\x12-\n\x05\x66ield\x18\x05 \x01(\x0b\x32\x17.buf.validate.FieldPathR\x05\x66ield\x12+\n\x04rule\x18\x06 \x01(\x0b\x32\x17.buf.validate.FieldPathR\x04rule\x12\x17\n\x07rule_id\x18\x02 \x01(\tR\x06ruleId\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\x12\x17\n\x07\x66or_key\x18\x04 \x01(\x08R\x06\x66orKeyJ\x04\x08\x01\x10\x02R\nfield_path\"G\n\tFieldPath\x12:\n\x08\x65lements\x18\x01 \x03(\x0b\x32\x1e.buf.validate.FieldPathElementR\x08\x65lements\"\xcc\x03\n\x10\x46ieldPathElement\x12!\n\x0c\x66ield_number\x18\x01 \x01(\x05R\x0b\x66ieldNumber\x12\x1d\n\nfield_name\x18\x02 \x01(\tR\tfieldName\x12I\n\nfield_type\x18\x03 \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.TypeR\tfieldType\x12\x45\n\x08key_type\x18\x04 \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.TypeR\x07keyType\x12I\n\nvalue_type\x18\x05 \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.TypeR\tvalueType\x12\x16\n\x05index\x18\x06 \x01(\x04H\x00R\x05index\x12\x1b\n\x08\x62ool_key\x18\x07 \x01(\x08H\x00R\x07\x62oolKey\x12\x19\n\x07int_key\x18\x08 \x01(\x03H\x00R\x06intKey\x12\x1b\n\x08uint_key\x18\t \x01(\x04H\x00R\x07uintKey\x12\x1f\n\nstring_key\x18\n \x01(\tH\x00R\tstringKeyB\x0b\n\tsubscript*\xa1\x01\n\x06Ignore\x12\x16\n\x12IGNORE_UNSPECIFIED\x10\x00\x12\x18\n\x14IGNORE_IF_ZERO_VALUE\x10\x01\x12\x11\n\rIGNORE_ALWAYS\x10\x03\"\x04\x08\x02\x10\x02*\x0cIGNORE_EMPTY*\x0eIGNORE_DEFAULT*\x17IGNORE_IF_DEFAULT_VALUE*\x15IGNORE_IF_UNPOPULATED*n\n\nKnownRegex\x12\x1b\n\x17KNOWN_REGEX_UNSPECIFIED\x10\x00\x12 \n\x1cKNOWN_REGEX_HTTP_HEADER_NAME\x10\x01\x12!\n\x1dKNOWN_REGEX_HTTP_HEADER_VALUE\x10\x02:V\n\x07message\x12\x1f.google.protobuf.MessageOptions\x18\x87\t \x01(\x0b\x32\x1a.buf.validate.MessageRulesR\x07message:N\n\x05oneof\x12\x1d.google.protobuf.OneofOptions\x18\x87\t \x01(\x0b\x32\x18.buf.validate.OneofRulesR\x05oneof:N\n\x05\x66ield\x12\x1d.google.protobuf.FieldOptions\x18\x87\t \x01(\x0b\x32\x18.buf.validate.FieldRulesR\x05\x66ield:]\n\npredefined\x12\x1d.google.protobuf.FieldOptions\x18\x88\t \x01(\x0b\x32\x1d.buf.validate.PredefinedRulesR\npredefinedBn\n\x12\x62uild.buf.validateB\rValidateProtoP\x01ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.validate_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\022build.buf.validateB\rValidateProtoP\001ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate' + _globals['_FLOATRULES'].fields_by_name['const']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['const']._serialized_options = b'\302Hq\no\n\013float.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_FLOATRULES'].fields_by_name['lt']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['lt']._serialized_options = b'\302H\214\001\n\211\001\n\010float.lt\032}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_FLOATRULES'].fields_by_name['lte']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['lte']._serialized_options = b'\302H\233\001\n\230\001\n\tfloat.lte\032\212\001!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_FLOATRULES'].fields_by_name['gt']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['gt']._serialized_options = b'\302H\334\007\n\215\001\n\010float.gt\032\200\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\303\001\n\013float.gt_lt\032\263\001has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\315\001\n\025float.gt_lt_exclusive\032\263\001has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\323\001\n\014float.gt_lte\032\302\001has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\335\001\n\026float.gt_lte_exclusive\032\302\001has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_FLOATRULES'].fields_by_name['gte']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['gte']._serialized_options = b'\302H\246\010\n\233\001\n\tfloat.gte\032\215\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\322\001\n\014float.gte_lt\032\301\001has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\334\001\n\026float.gte_lt_exclusive\032\301\001has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\342\001\n\rfloat.gte_lte\032\320\001has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\354\001\n\027float.gte_lte_exclusive\032\320\001has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_FLOATRULES'].fields_by_name['in']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['in']._serialized_options = b'\302Hp\nn\n\010float.in\032b!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_FLOATRULES'].fields_by_name['not_in']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014float.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_FLOATRULES'].fields_by_name['finite']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['finite']._serialized_options = b'\302Hb\n`\n\014float.finite\032Prules.finite ? (this.isNan() || this.isInf() ? \'value must be finite\' : \'\') : \'\'' + _globals['_FLOATRULES'].fields_by_name['example']._loaded_options = None + _globals['_FLOATRULES'].fields_by_name['example']._serialized_options = b'\302H\027\n\025\n\rfloat.example\032\004true' + _globals['_DOUBLERULES'].fields_by_name['const']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['const']._serialized_options = b'\302Hr\np\n\014double.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_DOUBLERULES'].fields_by_name['lt']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['lt']._serialized_options = b'\302H\215\001\n\212\001\n\tdouble.lt\032}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_DOUBLERULES'].fields_by_name['lte']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['lte']._serialized_options = b'\302H\234\001\n\231\001\n\ndouble.lte\032\212\001!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_DOUBLERULES'].fields_by_name['gt']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['gt']._serialized_options = b'\302H\341\007\n\216\001\n\tdouble.gt\032\200\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\304\001\n\014double.gt_lt\032\263\001has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\316\001\n\026double.gt_lt_exclusive\032\263\001has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\324\001\n\rdouble.gt_lte\032\302\001has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\336\001\n\027double.gt_lte_exclusive\032\302\001has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_DOUBLERULES'].fields_by_name['gte']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['gte']._serialized_options = b'\302H\253\010\n\234\001\n\ndouble.gte\032\215\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\323\001\n\rdouble.gte_lt\032\301\001has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\335\001\n\027double.gte_lt_exclusive\032\301\001has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\343\001\n\016double.gte_lte\032\320\001has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\355\001\n\030double.gte_lte_exclusive\032\320\001has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_DOUBLERULES'].fields_by_name['in']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['in']._serialized_options = b'\302Hq\no\n\tdouble.in\032b!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_DOUBLERULES'].fields_by_name['not_in']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rdouble.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_DOUBLERULES'].fields_by_name['finite']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['finite']._serialized_options = b'\302Hc\na\n\rdouble.finite\032Prules.finite ? (this.isNan() || this.isInf() ? \'value must be finite\' : \'\') : \'\'' + _globals['_DOUBLERULES'].fields_by_name['example']._loaded_options = None + _globals['_DOUBLERULES'].fields_by_name['example']._serialized_options = b'\302H\030\n\026\n\016double.example\032\004true' + _globals['_INT32RULES'].fields_by_name['const']._loaded_options = None + _globals['_INT32RULES'].fields_by_name['const']._serialized_options = b'\302Hq\no\n\013int32.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_INT32RULES'].fields_by_name['lt']._loaded_options = None + _globals['_INT32RULES'].fields_by_name['lt']._serialized_options = b'\302Hy\nw\n\010int32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_INT32RULES'].fields_by_name['lte']._loaded_options = None + _globals['_INT32RULES'].fields_by_name['lte']._serialized_options = b'\302H\210\001\n\205\001\n\tint32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_INT32RULES'].fields_by_name['gt']._loaded_options = None + _globals['_INT32RULES'].fields_by_name['gt']._serialized_options = b'\302H\204\007\nz\n\010int32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\263\001\n\013int32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\273\001\n\025int32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\303\001\n\014int32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\313\001\n\026int32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_INT32RULES'].fields_by_name['gte']._loaded_options = None + _globals['_INT32RULES'].fields_by_name['gte']._serialized_options = b'\302H\317\007\n\210\001\n\tint32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\302\001\n\014int32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\312\001\n\026int32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\322\001\n\rint32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\332\001\n\027int32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_INT32RULES'].fields_by_name['in']._loaded_options = None + _globals['_INT32RULES'].fields_by_name['in']._serialized_options = b'\302Hp\nn\n\010int32.in\032b!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_INT32RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_INT32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014int32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_INT32RULES'].fields_by_name['example']._loaded_options = None + _globals['_INT32RULES'].fields_by_name['example']._serialized_options = b'\302H\027\n\025\n\rint32.example\032\004true' + _globals['_INT64RULES'].fields_by_name['const']._loaded_options = None + _globals['_INT64RULES'].fields_by_name['const']._serialized_options = b'\302Hq\no\n\013int64.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_INT64RULES'].fields_by_name['lt']._loaded_options = None + _globals['_INT64RULES'].fields_by_name['lt']._serialized_options = b'\302Hy\nw\n\010int64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_INT64RULES'].fields_by_name['lte']._loaded_options = None + _globals['_INT64RULES'].fields_by_name['lte']._serialized_options = b'\302H\210\001\n\205\001\n\tint64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_INT64RULES'].fields_by_name['gt']._loaded_options = None + _globals['_INT64RULES'].fields_by_name['gt']._serialized_options = b'\302H\204\007\nz\n\010int64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\263\001\n\013int64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\273\001\n\025int64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\303\001\n\014int64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\313\001\n\026int64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_INT64RULES'].fields_by_name['gte']._loaded_options = None + _globals['_INT64RULES'].fields_by_name['gte']._serialized_options = b'\302H\317\007\n\210\001\n\tint64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\302\001\n\014int64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\312\001\n\026int64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\322\001\n\rint64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\332\001\n\027int64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_INT64RULES'].fields_by_name['in']._loaded_options = None + _globals['_INT64RULES'].fields_by_name['in']._serialized_options = b'\302Hp\nn\n\010int64.in\032b!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_INT64RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_INT64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014int64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_INT64RULES'].fields_by_name['example']._loaded_options = None + _globals['_INT64RULES'].fields_by_name['example']._serialized_options = b'\302H\027\n\025\n\rint64.example\032\004true' + _globals['_UINT32RULES'].fields_by_name['const']._loaded_options = None + _globals['_UINT32RULES'].fields_by_name['const']._serialized_options = b'\302Hr\np\n\014uint32.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_UINT32RULES'].fields_by_name['lt']._loaded_options = None + _globals['_UINT32RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tuint32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_UINT32RULES'].fields_by_name['lte']._loaded_options = None + _globals['_UINT32RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nuint32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_UINT32RULES'].fields_by_name['gt']._loaded_options = None + _globals['_UINT32RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tuint32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014uint32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026uint32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\ruint32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027uint32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_UINT32RULES'].fields_by_name['gte']._loaded_options = None + _globals['_UINT32RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nuint32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\ruint32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027uint32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016uint32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030uint32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_UINT32RULES'].fields_by_name['in']._loaded_options = None + _globals['_UINT32RULES'].fields_by_name['in']._serialized_options = b'\302Hq\no\n\tuint32.in\032b!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_UINT32RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_UINT32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\ruint32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_UINT32RULES'].fields_by_name['example']._loaded_options = None + _globals['_UINT32RULES'].fields_by_name['example']._serialized_options = b'\302H\030\n\026\n\016uint32.example\032\004true' + _globals['_UINT64RULES'].fields_by_name['const']._loaded_options = None + _globals['_UINT64RULES'].fields_by_name['const']._serialized_options = b'\302Hr\np\n\014uint64.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_UINT64RULES'].fields_by_name['lt']._loaded_options = None + _globals['_UINT64RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tuint64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_UINT64RULES'].fields_by_name['lte']._loaded_options = None + _globals['_UINT64RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nuint64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_UINT64RULES'].fields_by_name['gt']._loaded_options = None + _globals['_UINT64RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tuint64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014uint64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026uint64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\ruint64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027uint64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_UINT64RULES'].fields_by_name['gte']._loaded_options = None + _globals['_UINT64RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nuint64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\ruint64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027uint64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016uint64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030uint64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_UINT64RULES'].fields_by_name['in']._loaded_options = None + _globals['_UINT64RULES'].fields_by_name['in']._serialized_options = b'\302Hq\no\n\tuint64.in\032b!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_UINT64RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_UINT64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\ruint64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_UINT64RULES'].fields_by_name['example']._loaded_options = None + _globals['_UINT64RULES'].fields_by_name['example']._serialized_options = b'\302H\030\n\026\n\016uint64.example\032\004true' + _globals['_SINT32RULES'].fields_by_name['const']._loaded_options = None + _globals['_SINT32RULES'].fields_by_name['const']._serialized_options = b'\302Hr\np\n\014sint32.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_SINT32RULES'].fields_by_name['lt']._loaded_options = None + _globals['_SINT32RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tsint32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_SINT32RULES'].fields_by_name['lte']._loaded_options = None + _globals['_SINT32RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nsint32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_SINT32RULES'].fields_by_name['gt']._loaded_options = None + _globals['_SINT32RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tsint32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014sint32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026sint32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\rsint32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027sint32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_SINT32RULES'].fields_by_name['gte']._loaded_options = None + _globals['_SINT32RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nsint32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\rsint32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027sint32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016sint32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030sint32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_SINT32RULES'].fields_by_name['in']._loaded_options = None + _globals['_SINT32RULES'].fields_by_name['in']._serialized_options = b'\302Hq\no\n\tsint32.in\032b!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_SINT32RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_SINT32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rsint32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_SINT32RULES'].fields_by_name['example']._loaded_options = None + _globals['_SINT32RULES'].fields_by_name['example']._serialized_options = b'\302H\030\n\026\n\016sint32.example\032\004true' + _globals['_SINT64RULES'].fields_by_name['const']._loaded_options = None + _globals['_SINT64RULES'].fields_by_name['const']._serialized_options = b'\302Hr\np\n\014sint64.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_SINT64RULES'].fields_by_name['lt']._loaded_options = None + _globals['_SINT64RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tsint64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_SINT64RULES'].fields_by_name['lte']._loaded_options = None + _globals['_SINT64RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nsint64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_SINT64RULES'].fields_by_name['gt']._loaded_options = None + _globals['_SINT64RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tsint64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014sint64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026sint64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\rsint64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027sint64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_SINT64RULES'].fields_by_name['gte']._loaded_options = None + _globals['_SINT64RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nsint64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\rsint64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027sint64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016sint64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030sint64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_SINT64RULES'].fields_by_name['in']._loaded_options = None + _globals['_SINT64RULES'].fields_by_name['in']._serialized_options = b'\302Hq\no\n\tsint64.in\032b!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_SINT64RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_SINT64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rsint64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_SINT64RULES'].fields_by_name['example']._loaded_options = None + _globals['_SINT64RULES'].fields_by_name['example']._serialized_options = b'\302H\030\n\026\n\016sint64.example\032\004true' + _globals['_FIXED32RULES'].fields_by_name['const']._loaded_options = None + _globals['_FIXED32RULES'].fields_by_name['const']._serialized_options = b'\302Hs\nq\n\rfixed32.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_FIXED32RULES'].fields_by_name['lt']._loaded_options = None + _globals['_FIXED32RULES'].fields_by_name['lt']._serialized_options = b'\302H{\ny\n\nfixed32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_FIXED32RULES'].fields_by_name['lte']._loaded_options = None + _globals['_FIXED32RULES'].fields_by_name['lte']._serialized_options = b'\302H\212\001\n\207\001\n\013fixed32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_FIXED32RULES'].fields_by_name['gt']._loaded_options = None + _globals['_FIXED32RULES'].fields_by_name['gt']._serialized_options = b'\302H\216\007\n|\n\nfixed32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\265\001\n\rfixed32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\275\001\n\027fixed32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\305\001\n\016fixed32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\315\001\n\030fixed32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_FIXED32RULES'].fields_by_name['gte']._loaded_options = None + _globals['_FIXED32RULES'].fields_by_name['gte']._serialized_options = b'\302H\331\007\n\212\001\n\013fixed32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\304\001\n\016fixed32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\314\001\n\030fixed32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\324\001\n\017fixed32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\334\001\n\031fixed32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_FIXED32RULES'].fields_by_name['in']._loaded_options = None + _globals['_FIXED32RULES'].fields_by_name['in']._serialized_options = b'\302Hr\np\n\nfixed32.in\032b!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_FIXED32RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_FIXED32RULES'].fields_by_name['not_in']._serialized_options = b'\302He\nc\n\016fixed32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_FIXED32RULES'].fields_by_name['example']._loaded_options = None + _globals['_FIXED32RULES'].fields_by_name['example']._serialized_options = b'\302H\031\n\027\n\017fixed32.example\032\004true' + _globals['_FIXED64RULES'].fields_by_name['const']._loaded_options = None + _globals['_FIXED64RULES'].fields_by_name['const']._serialized_options = b'\302Hs\nq\n\rfixed64.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_FIXED64RULES'].fields_by_name['lt']._loaded_options = None + _globals['_FIXED64RULES'].fields_by_name['lt']._serialized_options = b'\302H{\ny\n\nfixed64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_FIXED64RULES'].fields_by_name['lte']._loaded_options = None + _globals['_FIXED64RULES'].fields_by_name['lte']._serialized_options = b'\302H\212\001\n\207\001\n\013fixed64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_FIXED64RULES'].fields_by_name['gt']._loaded_options = None + _globals['_FIXED64RULES'].fields_by_name['gt']._serialized_options = b'\302H\216\007\n|\n\nfixed64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\265\001\n\rfixed64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\275\001\n\027fixed64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\305\001\n\016fixed64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\315\001\n\030fixed64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_FIXED64RULES'].fields_by_name['gte']._loaded_options = None + _globals['_FIXED64RULES'].fields_by_name['gte']._serialized_options = b'\302H\331\007\n\212\001\n\013fixed64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\304\001\n\016fixed64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\314\001\n\030fixed64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\324\001\n\017fixed64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\334\001\n\031fixed64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_FIXED64RULES'].fields_by_name['in']._loaded_options = None + _globals['_FIXED64RULES'].fields_by_name['in']._serialized_options = b'\302Hr\np\n\nfixed64.in\032b!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_FIXED64RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_FIXED64RULES'].fields_by_name['not_in']._serialized_options = b'\302He\nc\n\016fixed64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_FIXED64RULES'].fields_by_name['example']._loaded_options = None + _globals['_FIXED64RULES'].fields_by_name['example']._serialized_options = b'\302H\031\n\027\n\017fixed64.example\032\004true' + _globals['_SFIXED32RULES'].fields_by_name['const']._loaded_options = None + _globals['_SFIXED32RULES'].fields_by_name['const']._serialized_options = b'\302Ht\nr\n\016sfixed32.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_SFIXED32RULES'].fields_by_name['lt']._loaded_options = None + _globals['_SFIXED32RULES'].fields_by_name['lt']._serialized_options = b'\302H|\nz\n\013sfixed32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_SFIXED32RULES'].fields_by_name['lte']._loaded_options = None + _globals['_SFIXED32RULES'].fields_by_name['lte']._serialized_options = b'\302H\213\001\n\210\001\n\014sfixed32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_SFIXED32RULES'].fields_by_name['gt']._loaded_options = None + _globals['_SFIXED32RULES'].fields_by_name['gt']._serialized_options = b'\302H\223\007\n}\n\013sfixed32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\266\001\n\016sfixed32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\030sfixed32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\306\001\n\017sfixed32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\316\001\n\031sfixed32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_SFIXED32RULES'].fields_by_name['gte']._loaded_options = None + _globals['_SFIXED32RULES'].fields_by_name['gte']._serialized_options = b'\302H\336\007\n\213\001\n\014sfixed32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\305\001\n\017sfixed32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\031sfixed32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\325\001\n\020sfixed32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\335\001\n\032sfixed32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_SFIXED32RULES'].fields_by_name['in']._loaded_options = None + _globals['_SFIXED32RULES'].fields_by_name['in']._serialized_options = b'\302Hs\nq\n\013sfixed32.in\032b!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_SFIXED32RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_SFIXED32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hf\nd\n\017sfixed32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_SFIXED32RULES'].fields_by_name['example']._loaded_options = None + _globals['_SFIXED32RULES'].fields_by_name['example']._serialized_options = b'\302H\032\n\030\n\020sfixed32.example\032\004true' + _globals['_SFIXED64RULES'].fields_by_name['const']._loaded_options = None + _globals['_SFIXED64RULES'].fields_by_name['const']._serialized_options = b'\302Ht\nr\n\016sfixed64.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_SFIXED64RULES'].fields_by_name['lt']._loaded_options = None + _globals['_SFIXED64RULES'].fields_by_name['lt']._serialized_options = b'\302H|\nz\n\013sfixed64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_SFIXED64RULES'].fields_by_name['lte']._loaded_options = None + _globals['_SFIXED64RULES'].fields_by_name['lte']._serialized_options = b'\302H\213\001\n\210\001\n\014sfixed64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_SFIXED64RULES'].fields_by_name['gt']._loaded_options = None + _globals['_SFIXED64RULES'].fields_by_name['gt']._serialized_options = b'\302H\223\007\n}\n\013sfixed64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\266\001\n\016sfixed64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\030sfixed64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\306\001\n\017sfixed64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\316\001\n\031sfixed64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_SFIXED64RULES'].fields_by_name['gte']._loaded_options = None + _globals['_SFIXED64RULES'].fields_by_name['gte']._serialized_options = b'\302H\336\007\n\213\001\n\014sfixed64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\305\001\n\017sfixed64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\031sfixed64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\325\001\n\020sfixed64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\335\001\n\032sfixed64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_SFIXED64RULES'].fields_by_name['in']._loaded_options = None + _globals['_SFIXED64RULES'].fields_by_name['in']._serialized_options = b'\302Hs\nq\n\013sfixed64.in\032b!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_SFIXED64RULES'].fields_by_name['not_in']._loaded_options = None + _globals['_SFIXED64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hf\nd\n\017sfixed64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_SFIXED64RULES'].fields_by_name['example']._loaded_options = None + _globals['_SFIXED64RULES'].fields_by_name['example']._serialized_options = b'\302H\032\n\030\n\020sfixed64.example\032\004true' + _globals['_BOOLRULES'].fields_by_name['const']._loaded_options = None + _globals['_BOOLRULES'].fields_by_name['const']._serialized_options = b'\302Hp\nn\n\nbool.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_BOOLRULES'].fields_by_name['example']._loaded_options = None + _globals['_BOOLRULES'].fields_by_name['example']._serialized_options = b'\302H\026\n\024\n\014bool.example\032\004true' + _globals['_STRINGRULES'].fields_by_name['const']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['const']._serialized_options = b'\302Ht\nr\n\014string.const\032bthis != getField(rules, \'const\') ? \'value must equal `%s`\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['len']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['len']._serialized_options = b'\302Hn\nl\n\nstring.len\032^uint(this.size()) != rules.len ? \'value length must be %s characters\'.format([rules.len]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['min_len']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['min_len']._serialized_options = b'\302H\203\001\n\200\001\n\016string.min_len\032nuint(this.size()) < rules.min_len ? \'value length must be at least %s characters\'.format([rules.min_len]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['max_len']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['max_len']._serialized_options = b'\302H\201\001\n\177\n\016string.max_len\032muint(this.size()) > rules.max_len ? \'value length must be at most %s characters\'.format([rules.max_len]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['len_bytes']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['len_bytes']._serialized_options = b'\302H\203\001\n\200\001\n\020string.len_bytes\032luint(bytes(this).size()) != rules.len_bytes ? \'value length must be %s bytes\'.format([rules.len_bytes]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['min_bytes']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['min_bytes']._serialized_options = b'\302H\213\001\n\210\001\n\020string.min_bytes\032tuint(bytes(this).size()) < rules.min_bytes ? \'value length must be at least %s bytes\'.format([rules.min_bytes]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['max_bytes']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['max_bytes']._serialized_options = b'\302H\212\001\n\207\001\n\020string.max_bytes\032suint(bytes(this).size()) > rules.max_bytes ? \'value length must be at most %s bytes\'.format([rules.max_bytes]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['pattern']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['pattern']._serialized_options = b'\302Hy\nw\n\016string.pattern\032e!this.matches(rules.pattern) ? \'value does not match regex pattern `%s`\'.format([rules.pattern]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['prefix']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['prefix']._serialized_options = b'\302Hq\no\n\rstring.prefix\032^!this.startsWith(rules.prefix) ? \'value does not have prefix `%s`\'.format([rules.prefix]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['suffix']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['suffix']._serialized_options = b'\302Ho\nm\n\rstring.suffix\032\\!this.endsWith(rules.suffix) ? \'value does not have suffix `%s`\'.format([rules.suffix]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['contains']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['contains']._serialized_options = b'\302H{\ny\n\017string.contains\032f!this.contains(rules.contains) ? \'value does not contain substring `%s`\'.format([rules.contains]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['not_contains']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['not_contains']._serialized_options = b'\302H~\n|\n\023string.not_contains\032ethis.contains(rules.not_contains) ? \'value contains substring `%s`\'.format([rules.not_contains]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['in']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['in']._serialized_options = b'\302Hq\no\n\tstring.in\032b!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['not_in']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rstring.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_STRINGRULES'].fields_by_name['email']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['email']._serialized_options = b'\302H\311\001\na\n\014string.email\022#value must be a valid email address\032,!rules.email || this == \'\' || this.isEmail()\nd\n\022string.email_empty\0222value is empty, which is not a valid email address\032\032!rules.email || this != \'\'' + _globals['_STRINGRULES'].fields_by_name['hostname']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['hostname']._serialized_options = b'\302H\316\001\ne\n\017string.hostname\022\036value must be a valid hostname\0322!rules.hostname || this == \'\' || this.isHostname()\ne\n\025string.hostname_empty\022-value is empty, which is not a valid hostname\032\035!rules.hostname || this != \'\'' + _globals['_STRINGRULES'].fields_by_name['ip']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['ip']._serialized_options = b'\302H\264\001\nU\n\tstring.ip\022 value must be a valid IP address\032&!rules.ip || this == \'\' || this.isIp()\n[\n\017string.ip_empty\022/value is empty, which is not a valid IP address\032\027!rules.ip || this != \'\'' + _globals['_STRINGRULES'].fields_by_name['ipv4']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['ipv4']._serialized_options = b'\302H\301\001\n\\\n\013string.ipv4\022\"value must be a valid IPv4 address\032)!rules.ipv4 || this == \'\' || this.isIp(4)\na\n\021string.ipv4_empty\0221value is empty, which is not a valid IPv4 address\032\031!rules.ipv4 || this != \'\'' + _globals['_STRINGRULES'].fields_by_name['ipv6']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['ipv6']._serialized_options = b'\302H\301\001\n\\\n\013string.ipv6\022\"value must be a valid IPv6 address\032)!rules.ipv6 || this == \'\' || this.isIp(6)\na\n\021string.ipv6_empty\0221value is empty, which is not a valid IPv6 address\032\031!rules.ipv6 || this != \'\'' + _globals['_STRINGRULES'].fields_by_name['uri']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['uri']._serialized_options = b'\302H\253\001\nQ\n\nstring.uri\022\031value must be a valid URI\032(!rules.uri || this == \'\' || this.isUri()\nV\n\020string.uri_empty\022(value is empty, which is not a valid URI\032\030!rules.uri || this != \'\'' + _globals['_STRINGRULES'].fields_by_name['uri_ref']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['uri_ref']._serialized_options = b'\302HZ\nX\n\016string.uri_ref\022#value must be a valid URI Reference\032!!rules.uri_ref || this.isUriRef()' + _globals['_STRINGRULES'].fields_by_name['address']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['address']._serialized_options = b'\302H\370\001\n\201\001\n\016string.address\022-value must be a valid hostname, or ip address\032@!rules.address || this == \'\' || this.isHostname() || this.isIp()\nr\n\024string.address_empty\022!rules.ipv4_with_prefixlen || this == \'\' || this.isIpPrefix(4)\n\222\001\n string.ipv4_with_prefixlen_empty\022Dvalue is empty, which is not a valid IPv4 address with prefix length\032(!rules.ipv4_with_prefixlen || this != \'\'' + _globals['_STRINGRULES'].fields_by_name['ipv6_with_prefixlen']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['ipv6_with_prefixlen']._serialized_options = b'\302H\253\002\n\223\001\n\032string.ipv6_with_prefixlen\0225value must be a valid IPv6 address with prefix length\032>!rules.ipv6_with_prefixlen || this == \'\' || this.isIpPrefix(6)\n\222\001\n string.ipv6_with_prefixlen_empty\022Dvalue is empty, which is not a valid IPv6 address with prefix length\032(!rules.ipv6_with_prefixlen || this != \'\'' + _globals['_STRINGRULES'].fields_by_name['ip_prefix']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['ip_prefix']._serialized_options = b'\302H\330\001\nl\n\020string.ip_prefix\022\037value must be a valid IP prefix\0327!rules.ip_prefix || this == \'\' || this.isIpPrefix(true)\nh\n\026string.ip_prefix_empty\022.value is empty, which is not a valid IP prefix\032\036!rules.ip_prefix || this != \'\'' + _globals['_STRINGRULES'].fields_by_name['ipv4_prefix']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['ipv4_prefix']._serialized_options = b'\302H\347\001\nu\n\022string.ipv4_prefix\022!value must be a valid IPv4 prefix\032!rules.host_and_port || this == \'\' || this.isHostAndPort(true)\ny\n\032string.host_and_port_empty\0227value is empty, which is not a valid host and port pair\032\"!rules.host_and_port || this != \'\'' + _globals['_STRINGRULES'].fields_by_name['ulid']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['ulid']._serialized_options = b'\302H\340\001\n\202\001\n\013string.ulid\022\032value must be a valid ULID\032W!rules.ulid || this == \'\' || this.matches(\'^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$\')\nY\n\021string.ulid_empty\022)value is empty, which is not a valid ULID\032\031!rules.ulid || this != \'\'' + _globals['_STRINGRULES'].fields_by_name['well_known_regex']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['well_known_regex']._serialized_options = b'\302H\355\004\n\360\001\n#string.well_known_regex.header_name\022&value must be a valid HTTP header name\032\240\001rules.well_known_regex != 1 || this == \'\' || this.matches(!has(rules.strict) || rules.strict ?\'^:?[0-9a-zA-Z!#$%&\\\'*+-.^_|~\\x60]+$\' :\'^[^\\u0000\\u000A\\u000D]+$\')\n\215\001\n)string.well_known_regex.header_name_empty\0225value is empty, which is not a valid HTTP header name\032)rules.well_known_regex != 1 || this != \'\'\n\347\001\n$string.well_known_regex.header_value\022\'value must be a valid HTTP header value\032\225\001rules.well_known_regex != 2 || this.matches(!has(rules.strict) || rules.strict ?\'^[^\\u0000-\\u0008\\u000A-\\u001F\\u007F]*$\' :\'^[^\\u0000\\u000A\\u000D]*$\')' + _globals['_STRINGRULES'].fields_by_name['example']._loaded_options = None + _globals['_STRINGRULES'].fields_by_name['example']._serialized_options = b'\302H\030\n\026\n\016string.example\032\004true' + _globals['_BYTESRULES'].fields_by_name['const']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['const']._serialized_options = b'\302Hn\nl\n\013bytes.const\032]this != getField(rules, \'const\') ? \'value must be %x\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['len']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['len']._serialized_options = b'\302Hh\nf\n\tbytes.len\032Yuint(this.size()) != rules.len ? \'value length must be %s bytes\'.format([rules.len]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['min_len']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['min_len']._serialized_options = b'\302H|\nz\n\rbytes.min_len\032iuint(this.size()) < rules.min_len ? \'value length must be at least %s bytes\'.format([rules.min_len]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['max_len']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['max_len']._serialized_options = b'\302Ht\nr\n\rbytes.max_len\032auint(this.size()) > rules.max_len ? \'value must be at most %s bytes\'.format([rules.max_len]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['pattern']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['pattern']._serialized_options = b'\302H|\nz\n\rbytes.pattern\032i!string(this).matches(rules.pattern) ? \'value must match regex pattern `%s`\'.format([rules.pattern]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['prefix']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['prefix']._serialized_options = b'\302Hn\nl\n\014bytes.prefix\032\\!this.startsWith(rules.prefix) ? \'value does not have prefix %x\'.format([rules.prefix]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['suffix']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['suffix']._serialized_options = b'\302Hl\nj\n\014bytes.suffix\032Z!this.endsWith(rules.suffix) ? \'value does not have suffix %x\'.format([rules.suffix]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['contains']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['contains']._serialized_options = b'\302Hn\nl\n\016bytes.contains\032Z!this.contains(rules.contains) ? \'value does not contain %x\'.format([rules.contains]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['in']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['in']._serialized_options = b'\302H\226\001\n\223\001\n\010bytes.in\032\206\001getField(rules, \'in\').size() > 0 && !(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['not_in']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014bytes.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_BYTESRULES'].fields_by_name['ip']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['ip']._serialized_options = b'\302H\330\001\nt\n\010bytes.ip\022 value must be a valid IP address\032F!rules.ip || this.size() == 0 || this.size() == 4 || this.size() == 16\n`\n\016bytes.ip_empty\022/value is empty, which is not a valid IP address\032\035!rules.ip || this.size() != 0' + _globals['_BYTESRULES'].fields_by_name['ipv4']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['ipv4']._serialized_options = b'\302H\317\001\ne\n\nbytes.ipv4\022\"value must be a valid IPv4 address\0323!rules.ipv4 || this.size() == 0 || this.size() == 4\nf\n\020bytes.ipv4_empty\0221value is empty, which is not a valid IPv4 address\032\037!rules.ipv4 || this.size() != 0' + _globals['_BYTESRULES'].fields_by_name['ipv6']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['ipv6']._serialized_options = b'\302H\320\001\nf\n\nbytes.ipv6\022\"value must be a valid IPv6 address\0324!rules.ipv6 || this.size() == 0 || this.size() == 16\nf\n\020bytes.ipv6_empty\0221value is empty, which is not a valid IPv6 address\032\037!rules.ipv6 || this.size() != 0' + _globals['_BYTESRULES'].fields_by_name['uuid']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['uuid']._serialized_options = b'\302H\300\001\n^\n\nbytes.uuid\022\032value must be a valid UUID\0324!rules.uuid || this.size() == 0 || this.size() == 16\n^\n\020bytes.uuid_empty\022)value is empty, which is not a valid UUID\032\037!rules.uuid || this.size() != 0' + _globals['_BYTESRULES'].fields_by_name['example']._loaded_options = None + _globals['_BYTESRULES'].fields_by_name['example']._serialized_options = b'\302H\027\n\025\n\rbytes.example\032\004true' + _globals['_ENUMRULES'].fields_by_name['const']._loaded_options = None + _globals['_ENUMRULES'].fields_by_name['const']._serialized_options = b'\302Hp\nn\n\nenum.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_ENUMRULES'].fields_by_name['in']._loaded_options = None + _globals['_ENUMRULES'].fields_by_name['in']._serialized_options = b'\302Ho\nm\n\007enum.in\032b!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_ENUMRULES'].fields_by_name['not_in']._loaded_options = None + _globals['_ENUMRULES'].fields_by_name['not_in']._serialized_options = b'\302Hb\n`\n\013enum.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_ENUMRULES'].fields_by_name['example']._loaded_options = None + _globals['_ENUMRULES'].fields_by_name['example']._serialized_options = b'\302H\026\n\024\n\014enum.example\032\004true' + _globals['_REPEATEDRULES'].fields_by_name['min_items']._loaded_options = None + _globals['_REPEATEDRULES'].fields_by_name['min_items']._serialized_options = b'\302H\206\001\n\203\001\n\022repeated.min_items\032muint(this.size()) < rules.min_items ? \'value must contain at least %d item(s)\'.format([rules.min_items]) : \'\'' + _globals['_REPEATEDRULES'].fields_by_name['max_items']._loaded_options = None + _globals['_REPEATEDRULES'].fields_by_name['max_items']._serialized_options = b'\302H\212\001\n\207\001\n\022repeated.max_items\032quint(this.size()) > rules.max_items ? \'value must contain no more than %s item(s)\'.format([rules.max_items]) : \'\'' + _globals['_REPEATEDRULES'].fields_by_name['unique']._loaded_options = None + _globals['_REPEATEDRULES'].fields_by_name['unique']._serialized_options = b'\302H]\n[\n\017repeated.unique\022(repeated value must contain unique items\032\036!rules.unique || this.unique()' + _globals['_MAPRULES'].fields_by_name['min_pairs']._loaded_options = None + _globals['_MAPRULES'].fields_by_name['min_pairs']._serialized_options = b'\302Hy\nw\n\rmap.min_pairs\032fuint(this.size()) < rules.min_pairs ? \'map must be at least %d entries\'.format([rules.min_pairs]) : \'\'' + _globals['_MAPRULES'].fields_by_name['max_pairs']._loaded_options = None + _globals['_MAPRULES'].fields_by_name['max_pairs']._serialized_options = b'\302Hx\nv\n\rmap.max_pairs\032euint(this.size()) > rules.max_pairs ? \'map must be at most %d entries\'.format([rules.max_pairs]) : \'\'' + _globals['_DURATIONRULES'].fields_by_name['const']._loaded_options = None + _globals['_DURATIONRULES'].fields_by_name['const']._serialized_options = b'\302Ht\nr\n\016duration.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_DURATIONRULES'].fields_by_name['lt']._loaded_options = None + _globals['_DURATIONRULES'].fields_by_name['lt']._serialized_options = b'\302H|\nz\n\013duration.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_DURATIONRULES'].fields_by_name['lte']._loaded_options = None + _globals['_DURATIONRULES'].fields_by_name['lte']._serialized_options = b'\302H\213\001\n\210\001\n\014duration.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_DURATIONRULES'].fields_by_name['gt']._loaded_options = None + _globals['_DURATIONRULES'].fields_by_name['gt']._serialized_options = b'\302H\223\007\n}\n\013duration.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\266\001\n\016duration.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\030duration.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\306\001\n\017duration.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\316\001\n\031duration.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_DURATIONRULES'].fields_by_name['gte']._loaded_options = None + _globals['_DURATIONRULES'].fields_by_name['gte']._serialized_options = b'\302H\336\007\n\213\001\n\014duration.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\305\001\n\017duration.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\031duration.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\325\001\n\020duration.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\335\001\n\032duration.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_DURATIONRULES'].fields_by_name['in']._loaded_options = None + _globals['_DURATIONRULES'].fields_by_name['in']._serialized_options = b'\302Hs\nq\n\013duration.in\032b!(this in getField(rules, \'in\')) ? \'value must be in list %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_DURATIONRULES'].fields_by_name['not_in']._loaded_options = None + _globals['_DURATIONRULES'].fields_by_name['not_in']._serialized_options = b'\302Hf\nd\n\017duration.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'' + _globals['_DURATIONRULES'].fields_by_name['example']._loaded_options = None + _globals['_DURATIONRULES'].fields_by_name['example']._serialized_options = b'\302H\032\n\030\n\020duration.example\032\004true' + _globals['_FIELDMASKRULES'].fields_by_name['const']._loaded_options = None + _globals['_FIELDMASKRULES'].fields_by_name['const']._serialized_options = b'\302H\217\001\n\214\001\n\020field_mask.const\032xthis.paths != getField(rules, \'const\').paths ? \'value must equal paths %s\'.format([getField(rules, \'const\').paths]) : \'\'' + _globals['_FIELDMASKRULES'].fields_by_name['in']._loaded_options = None + _globals['_FIELDMASKRULES'].fields_by_name['in']._serialized_options = b'\302H\310\001\n\305\001\n\rfield_mask.in\032\263\001!this.paths.all(p, p in getField(rules, \'in\') || getField(rules, \'in\').exists(f, p.startsWith(f+\'.\'))) ? \'value must only contain paths in %s\'.format([getField(rules, \'in\')]) : \'\'' + _globals['_FIELDMASKRULES'].fields_by_name['not_in']._loaded_options = None + _globals['_FIELDMASKRULES'].fields_by_name['not_in']._serialized_options = b'\302H\336\001\n\333\001\n\021field_mask.not_in\032\305\001!this.paths.all(p, !(p in getField(rules, \'not_in\') || getField(rules, \'not_in\').exists(f, p.startsWith(f+\'.\')))) ? \'value must not contain any paths in %s\'.format([getField(rules, \'not_in\')]) : \'\'' + _globals['_FIELDMASKRULES'].fields_by_name['example']._loaded_options = None + _globals['_FIELDMASKRULES'].fields_by_name['example']._serialized_options = b'\302H\034\n\032\n\022field_mask.example\032\004true' + _globals['_TIMESTAMPRULES'].fields_by_name['const']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['const']._serialized_options = b'\302Hu\ns\n\017timestamp.const\032`this != getField(rules, \'const\') ? \'value must equal %s\'.format([getField(rules, \'const\')]) : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['lt']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['lt']._serialized_options = b'\302H}\n{\n\014timestamp.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['lte']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['lte']._serialized_options = b'\302H\214\001\n\211\001\n\rtimestamp.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['lt_now']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['lt_now']._serialized_options = b'\302HW\nU\n\020timestamp.lt_now\032A(rules.lt_now && this > now) ? \'value must be less than now\' : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['gt']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['gt']._serialized_options = b'\302H\230\007\n~\n\014timestamp.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\267\001\n\017timestamp.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\277\001\n\031timestamp.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\307\001\n\020timestamp.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\317\001\n\032timestamp.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['gte']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['gte']._serialized_options = b'\302H\343\007\n\214\001\n\rtimestamp.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\306\001\n\020timestamp.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\316\001\n\032timestamp.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\326\001\n\021timestamp.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\336\001\n\033timestamp.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['gt_now']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['gt_now']._serialized_options = b'\302HZ\nX\n\020timestamp.gt_now\032D(rules.gt_now && this < now) ? \'value must be greater than now\' : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['within']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['within']._serialized_options = b'\302H\210\001\n\205\001\n\020timestamp.within\032qthis < now-rules.within || this > now+rules.within ? \'value must be within %s of now\'.format([rules.within]) : \'\'' + _globals['_TIMESTAMPRULES'].fields_by_name['example']._loaded_options = None + _globals['_TIMESTAMPRULES'].fields_by_name['example']._serialized_options = b'\302H\033\n\031\n\021timestamp.example\032\004true' + _globals['_IGNORE']._serialized_start=55581 + _globals['_IGNORE']._serialized_end=55742 + _globals['_KNOWNREGEX']._serialized_start=55744 + _globals['_KNOWNREGEX']._serialized_end=55854 + _globals['_RULE']._serialized_start=178 + _globals['_RULE']._serialized_end=258 + _globals['_MESSAGERULES']._serialized_start=261 + _globals['_MESSAGERULES']._serialized_end=422 + _globals['_MESSAGEONEOFRULE']._serialized_start=424 + _globals['_MESSAGEONEOFRULE']._serialized_end=494 + _globals['_ONEOFRULES']._serialized_start=496 + _globals['_ONEOFRULES']._serialized_end=536 + _globals['_FIELDRULES']._serialized_start=539 + _globals['_FIELDRULES']._serialized_end=1918 + _globals['_PREDEFINEDRULES']._serialized_start=1920 + _globals['_PREDEFINEDRULES']._serialized_end=2010 + _globals['_FLOATRULES']._serialized_start=2013 + _globals['_FLOATRULES']._serialized_end=5101 + _globals['_DOUBLERULES']._serialized_start=5104 + _globals['_DOUBLERULES']._serialized_end=8210 + _globals['_INT32RULES']._serialized_start=8213 + _globals['_INT32RULES']._serialized_end=10959 + _globals['_INT64RULES']._serialized_start=10962 + _globals['_INT64RULES']._serialized_end=13708 + _globals['_UINT32RULES']._serialized_start=13711 + _globals['_UINT32RULES']._serialized_end=16474 + _globals['_UINT64RULES']._serialized_start=16477 + _globals['_UINT64RULES']._serialized_end=19240 + _globals['_SINT32RULES']._serialized_start=19243 + _globals['_SINT32RULES']._serialized_end=22006 + _globals['_SINT64RULES']._serialized_start=22009 + _globals['_SINT64RULES']._serialized_end=24772 + _globals['_FIXED32RULES']._serialized_start=24775 + _globals['_FIXED32RULES']._serialized_end=27555 + _globals['_FIXED64RULES']._serialized_start=27558 + _globals['_FIXED64RULES']._serialized_end=30338 + _globals['_SFIXED32RULES']._serialized_start=30341 + _globals['_SFIXED32RULES']._serialized_end=33139 + _globals['_SFIXED64RULES']._serialized_start=33142 + _globals['_SFIXED64RULES']._serialized_end=35940 + _globals['_BOOLRULES']._serialized_start=35943 + _globals['_BOOLRULES']._serialized_end=36158 + _globals['_STRINGRULES']._serialized_start=36161 + _globals['_STRINGRULES']._serialized_end=43792 + _globals['_BYTESRULES']._serialized_start=43795 + _globals['_BYTESRULES']._serialized_end=46271 + _globals['_ENUMRULES']._serialized_start=46274 + _globals['_ENUMRULES']._serialized_end=46783 + _globals['_REPEATEDRULES']._serialized_start=46786 + _globals['_REPEATEDRULES']._serialized_end=47328 + _globals['_MAPRULES']._serialized_start=47331 + _globals['_MAPRULES']._serialized_end=47759 + _globals['_ANYRULES']._serialized_start=47761 + _globals['_ANYRULES']._serialized_end=47810 + _globals['_DURATIONRULES']._serialized_start=47813 + _globals['_DURATIONRULES']._serialized_end=50827 + _globals['_FIELDMASKRULES']._serialized_start=50830 + _globals['_FIELDMASKRULES']._serialized_end=51622 + _globals['_TIMESTAMPRULES']._serialized_start=51625 + _globals['_TIMESTAMPRULES']._serialized_end=54771 + _globals['_VIOLATIONS']._serialized_start=54773 + _globals['_VIOLATIONS']._serialized_end=54842 + _globals['_VIOLATION']._serialized_start=54845 + _globals['_VIOLATION']._serialized_end=55042 + _globals['_FIELDPATH']._serialized_start=55044 + _globals['_FIELDPATH']._serialized_end=55115 + _globals['_FIELDPATHELEMENT']._serialized_start=55118 + _globals['_FIELDPATHELEMENT']._serialized_end=55578 +# @@protoc_insertion_point(module_scope) diff --git a/src/buf/validate/validate_pb2.pyi b/src/buf/validate/validate_pb2.pyi new file mode 100644 index 0000000..6b2091f --- /dev/null +++ b/src/buf/validate/validate_pb2.pyi @@ -0,0 +1,650 @@ +import datetime + +from google.protobuf import descriptor_pb2 as _descriptor_pb2 +from google.protobuf import duration_pb2 as _duration_pb2 +from google.protobuf import field_mask_pb2 as _field_mask_pb2 +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf.internal import python_message as _python_message +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class Ignore(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + IGNORE_UNSPECIFIED: _ClassVar[Ignore] + IGNORE_IF_ZERO_VALUE: _ClassVar[Ignore] + IGNORE_ALWAYS: _ClassVar[Ignore] + +class KnownRegex(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + KNOWN_REGEX_UNSPECIFIED: _ClassVar[KnownRegex] + KNOWN_REGEX_HTTP_HEADER_NAME: _ClassVar[KnownRegex] + KNOWN_REGEX_HTTP_HEADER_VALUE: _ClassVar[KnownRegex] +IGNORE_UNSPECIFIED: Ignore +IGNORE_IF_ZERO_VALUE: Ignore +IGNORE_ALWAYS: Ignore +KNOWN_REGEX_UNSPECIFIED: KnownRegex +KNOWN_REGEX_HTTP_HEADER_NAME: KnownRegex +KNOWN_REGEX_HTTP_HEADER_VALUE: KnownRegex +MESSAGE_FIELD_NUMBER: _ClassVar[int] +message: _descriptor.FieldDescriptor +ONEOF_FIELD_NUMBER: _ClassVar[int] +oneof: _descriptor.FieldDescriptor +FIELD_FIELD_NUMBER: _ClassVar[int] +field: _descriptor.FieldDescriptor +PREDEFINED_FIELD_NUMBER: _ClassVar[int] +predefined: _descriptor.FieldDescriptor + +class Rule(_message.Message): + __slots__ = ("id", "message", "expression") + ID_FIELD_NUMBER: _ClassVar[int] + MESSAGE_FIELD_NUMBER: _ClassVar[int] + EXPRESSION_FIELD_NUMBER: _ClassVar[int] + id: str + message: str + expression: str + def __init__(self, id: _Optional[str] = ..., message: _Optional[str] = ..., expression: _Optional[str] = ...) -> None: ... + +class MessageRules(_message.Message): + __slots__ = ("cel_expression", "cel", "oneof") + CEL_EXPRESSION_FIELD_NUMBER: _ClassVar[int] + CEL_FIELD_NUMBER: _ClassVar[int] + ONEOF_FIELD_NUMBER: _ClassVar[int] + cel_expression: _containers.RepeatedScalarFieldContainer[str] + cel: _containers.RepeatedCompositeFieldContainer[Rule] + oneof: _containers.RepeatedCompositeFieldContainer[MessageOneofRule] + def __init__(self, cel_expression: _Optional[_Iterable[str]] = ..., cel: _Optional[_Iterable[_Union[Rule, _Mapping]]] = ..., oneof: _Optional[_Iterable[_Union[MessageOneofRule, _Mapping]]] = ...) -> None: ... + +class MessageOneofRule(_message.Message): + __slots__ = ("fields", "required") + FIELDS_FIELD_NUMBER: _ClassVar[int] + REQUIRED_FIELD_NUMBER: _ClassVar[int] + fields: _containers.RepeatedScalarFieldContainer[str] + required: bool + def __init__(self, fields: _Optional[_Iterable[str]] = ..., required: _Optional[bool] = ...) -> None: ... + +class OneofRules(_message.Message): + __slots__ = ("required",) + REQUIRED_FIELD_NUMBER: _ClassVar[int] + required: bool + def __init__(self, required: _Optional[bool] = ...) -> None: ... + +class FieldRules(_message.Message): + __slots__ = ("cel_expression", "cel", "required", "ignore", "float", "double", "int32", "int64", "uint32", "uint64", "sint32", "sint64", "fixed32", "fixed64", "sfixed32", "sfixed64", "bool", "string", "bytes", "enum", "repeated", "map", "any", "duration", "field_mask", "timestamp") + CEL_EXPRESSION_FIELD_NUMBER: _ClassVar[int] + CEL_FIELD_NUMBER: _ClassVar[int] + REQUIRED_FIELD_NUMBER: _ClassVar[int] + IGNORE_FIELD_NUMBER: _ClassVar[int] + FLOAT_FIELD_NUMBER: _ClassVar[int] + DOUBLE_FIELD_NUMBER: _ClassVar[int] + INT32_FIELD_NUMBER: _ClassVar[int] + INT64_FIELD_NUMBER: _ClassVar[int] + UINT32_FIELD_NUMBER: _ClassVar[int] + UINT64_FIELD_NUMBER: _ClassVar[int] + SINT32_FIELD_NUMBER: _ClassVar[int] + SINT64_FIELD_NUMBER: _ClassVar[int] + FIXED32_FIELD_NUMBER: _ClassVar[int] + FIXED64_FIELD_NUMBER: _ClassVar[int] + SFIXED32_FIELD_NUMBER: _ClassVar[int] + SFIXED64_FIELD_NUMBER: _ClassVar[int] + BOOL_FIELD_NUMBER: _ClassVar[int] + STRING_FIELD_NUMBER: _ClassVar[int] + BYTES_FIELD_NUMBER: _ClassVar[int] + ENUM_FIELD_NUMBER: _ClassVar[int] + REPEATED_FIELD_NUMBER: _ClassVar[int] + MAP_FIELD_NUMBER: _ClassVar[int] + ANY_FIELD_NUMBER: _ClassVar[int] + DURATION_FIELD_NUMBER: _ClassVar[int] + FIELD_MASK_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + cel_expression: _containers.RepeatedScalarFieldContainer[str] + cel: _containers.RepeatedCompositeFieldContainer[Rule] + required: bool + ignore: Ignore + float: FloatRules + double: DoubleRules + int32: Int32Rules + int64: Int64Rules + uint32: UInt32Rules + uint64: UInt64Rules + sint32: SInt32Rules + sint64: SInt64Rules + fixed32: Fixed32Rules + fixed64: Fixed64Rules + sfixed32: SFixed32Rules + sfixed64: SFixed64Rules + bool: BoolRules + string: StringRules + bytes: BytesRules + enum: EnumRules + repeated: RepeatedRules + map: MapRules + any: AnyRules + duration: DurationRules + field_mask: FieldMaskRules + timestamp: TimestampRules + def __init__(self, cel_expression: _Optional[_Iterable[str]] = ..., cel: _Optional[_Iterable[_Union[Rule, _Mapping]]] = ..., required: _Optional[bool] = ..., ignore: _Optional[_Union[Ignore, str]] = ..., float: _Optional[_Union[FloatRules, _Mapping]] = ..., double: _Optional[_Union[DoubleRules, _Mapping]] = ..., int32: _Optional[_Union[Int32Rules, _Mapping]] = ..., int64: _Optional[_Union[Int64Rules, _Mapping]] = ..., uint32: _Optional[_Union[UInt32Rules, _Mapping]] = ..., uint64: _Optional[_Union[UInt64Rules, _Mapping]] = ..., sint32: _Optional[_Union[SInt32Rules, _Mapping]] = ..., sint64: _Optional[_Union[SInt64Rules, _Mapping]] = ..., fixed32: _Optional[_Union[Fixed32Rules, _Mapping]] = ..., fixed64: _Optional[_Union[Fixed64Rules, _Mapping]] = ..., sfixed32: _Optional[_Union[SFixed32Rules, _Mapping]] = ..., sfixed64: _Optional[_Union[SFixed64Rules, _Mapping]] = ..., bool: _Optional[_Union[BoolRules, _Mapping]] = ..., string: _Optional[_Union[StringRules, _Mapping]] = ..., bytes: _Optional[_Union[BytesRules, _Mapping]] = ..., enum: _Optional[_Union[EnumRules, _Mapping]] = ..., repeated: _Optional[_Union[RepeatedRules, _Mapping]] = ..., map: _Optional[_Union[MapRules, _Mapping]] = ..., any: _Optional[_Union[AnyRules, _Mapping]] = ..., duration: _Optional[_Union[DurationRules, _Mapping]] = ..., field_mask: _Optional[_Union[FieldMaskRules, _Mapping]] = ..., timestamp: _Optional[_Union[TimestampRules, _Mapping]] = ...) -> None: ... + +class PredefinedRules(_message.Message): + __slots__ = ("cel",) + CEL_FIELD_NUMBER: _ClassVar[int] + cel: _containers.RepeatedCompositeFieldContainer[Rule] + def __init__(self, cel: _Optional[_Iterable[_Union[Rule, _Mapping]]] = ...) -> None: ... + +class FloatRules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "finite", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + FINITE_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: float + lt: float + lte: float + gt: float + gte: float + not_in: _containers.RepeatedScalarFieldContainer[float] + finite: bool + example: _containers.RepeatedScalarFieldContainer[float] + def __init__(self, const: _Optional[float] = ..., lt: _Optional[float] = ..., lte: _Optional[float] = ..., gt: _Optional[float] = ..., gte: _Optional[float] = ..., not_in: _Optional[_Iterable[float]] = ..., finite: _Optional[bool] = ..., example: _Optional[_Iterable[float]] = ..., **kwargs) -> None: ... + +class DoubleRules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "finite", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + FINITE_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: float + lt: float + lte: float + gt: float + gte: float + not_in: _containers.RepeatedScalarFieldContainer[float] + finite: bool + example: _containers.RepeatedScalarFieldContainer[float] + def __init__(self, const: _Optional[float] = ..., lt: _Optional[float] = ..., lte: _Optional[float] = ..., gt: _Optional[float] = ..., gte: _Optional[float] = ..., not_in: _Optional[_Iterable[float]] = ..., finite: _Optional[bool] = ..., example: _Optional[_Iterable[float]] = ..., **kwargs) -> None: ... + +class Int32Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + example: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., example: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class Int64Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + example: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., example: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class UInt32Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + example: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., example: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class UInt64Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + example: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., example: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class SInt32Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + example: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., example: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class SInt64Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + example: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., example: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class Fixed32Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + example: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., example: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class Fixed64Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + example: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., example: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class SFixed32Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + example: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., example: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class SFixed64Rules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: int + lt: int + lte: int + gt: int + gte: int + not_in: _containers.RepeatedScalarFieldContainer[int] + example: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., example: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class BoolRules(_message.Message): + __slots__ = ("const", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: bool + example: _containers.RepeatedScalarFieldContainer[bool] + def __init__(self, const: _Optional[bool] = ..., example: _Optional[_Iterable[bool]] = ...) -> None: ... + +class StringRules(_message.Message): + __slots__ = ("const", "len", "min_len", "max_len", "len_bytes", "min_bytes", "max_bytes", "pattern", "prefix", "suffix", "contains", "not_contains", "not_in", "email", "hostname", "ip", "ipv4", "ipv6", "uri", "uri_ref", "address", "uuid", "tuuid", "ip_with_prefixlen", "ipv4_with_prefixlen", "ipv6_with_prefixlen", "ip_prefix", "ipv4_prefix", "ipv6_prefix", "host_and_port", "ulid", "well_known_regex", "strict", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LEN_FIELD_NUMBER: _ClassVar[int] + MIN_LEN_FIELD_NUMBER: _ClassVar[int] + MAX_LEN_FIELD_NUMBER: _ClassVar[int] + LEN_BYTES_FIELD_NUMBER: _ClassVar[int] + MIN_BYTES_FIELD_NUMBER: _ClassVar[int] + MAX_BYTES_FIELD_NUMBER: _ClassVar[int] + PATTERN_FIELD_NUMBER: _ClassVar[int] + PREFIX_FIELD_NUMBER: _ClassVar[int] + SUFFIX_FIELD_NUMBER: _ClassVar[int] + CONTAINS_FIELD_NUMBER: _ClassVar[int] + NOT_CONTAINS_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EMAIL_FIELD_NUMBER: _ClassVar[int] + HOSTNAME_FIELD_NUMBER: _ClassVar[int] + IP_FIELD_NUMBER: _ClassVar[int] + IPV4_FIELD_NUMBER: _ClassVar[int] + IPV6_FIELD_NUMBER: _ClassVar[int] + URI_FIELD_NUMBER: _ClassVar[int] + URI_REF_FIELD_NUMBER: _ClassVar[int] + ADDRESS_FIELD_NUMBER: _ClassVar[int] + UUID_FIELD_NUMBER: _ClassVar[int] + TUUID_FIELD_NUMBER: _ClassVar[int] + IP_WITH_PREFIXLEN_FIELD_NUMBER: _ClassVar[int] + IPV4_WITH_PREFIXLEN_FIELD_NUMBER: _ClassVar[int] + IPV6_WITH_PREFIXLEN_FIELD_NUMBER: _ClassVar[int] + IP_PREFIX_FIELD_NUMBER: _ClassVar[int] + IPV4_PREFIX_FIELD_NUMBER: _ClassVar[int] + IPV6_PREFIX_FIELD_NUMBER: _ClassVar[int] + HOST_AND_PORT_FIELD_NUMBER: _ClassVar[int] + ULID_FIELD_NUMBER: _ClassVar[int] + WELL_KNOWN_REGEX_FIELD_NUMBER: _ClassVar[int] + STRICT_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: str + len: int + min_len: int + max_len: int + len_bytes: int + min_bytes: int + max_bytes: int + pattern: str + prefix: str + suffix: str + contains: str + not_contains: str + not_in: _containers.RepeatedScalarFieldContainer[str] + email: bool + hostname: bool + ip: bool + ipv4: bool + ipv6: bool + uri: bool + uri_ref: bool + address: bool + uuid: bool + tuuid: bool + ip_with_prefixlen: bool + ipv4_with_prefixlen: bool + ipv6_with_prefixlen: bool + ip_prefix: bool + ipv4_prefix: bool + ipv6_prefix: bool + host_and_port: bool + ulid: bool + well_known_regex: KnownRegex + strict: bool + example: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, const: _Optional[str] = ..., len: _Optional[int] = ..., min_len: _Optional[int] = ..., max_len: _Optional[int] = ..., len_bytes: _Optional[int] = ..., min_bytes: _Optional[int] = ..., max_bytes: _Optional[int] = ..., pattern: _Optional[str] = ..., prefix: _Optional[str] = ..., suffix: _Optional[str] = ..., contains: _Optional[str] = ..., not_contains: _Optional[str] = ..., not_in: _Optional[_Iterable[str]] = ..., email: _Optional[bool] = ..., hostname: _Optional[bool] = ..., ip: _Optional[bool] = ..., ipv4: _Optional[bool] = ..., ipv6: _Optional[bool] = ..., uri: _Optional[bool] = ..., uri_ref: _Optional[bool] = ..., address: _Optional[bool] = ..., uuid: _Optional[bool] = ..., tuuid: _Optional[bool] = ..., ip_with_prefixlen: _Optional[bool] = ..., ipv4_with_prefixlen: _Optional[bool] = ..., ipv6_with_prefixlen: _Optional[bool] = ..., ip_prefix: _Optional[bool] = ..., ipv4_prefix: _Optional[bool] = ..., ipv6_prefix: _Optional[bool] = ..., host_and_port: _Optional[bool] = ..., ulid: _Optional[bool] = ..., well_known_regex: _Optional[_Union[KnownRegex, str]] = ..., strict: _Optional[bool] = ..., example: _Optional[_Iterable[str]] = ..., **kwargs) -> None: ... + +class BytesRules(_message.Message): + __slots__ = ("const", "len", "min_len", "max_len", "pattern", "prefix", "suffix", "contains", "not_in", "ip", "ipv4", "ipv6", "uuid", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LEN_FIELD_NUMBER: _ClassVar[int] + MIN_LEN_FIELD_NUMBER: _ClassVar[int] + MAX_LEN_FIELD_NUMBER: _ClassVar[int] + PATTERN_FIELD_NUMBER: _ClassVar[int] + PREFIX_FIELD_NUMBER: _ClassVar[int] + SUFFIX_FIELD_NUMBER: _ClassVar[int] + CONTAINS_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + IP_FIELD_NUMBER: _ClassVar[int] + IPV4_FIELD_NUMBER: _ClassVar[int] + IPV6_FIELD_NUMBER: _ClassVar[int] + UUID_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: bytes + len: int + min_len: int + max_len: int + pattern: str + prefix: bytes + suffix: bytes + contains: bytes + not_in: _containers.RepeatedScalarFieldContainer[bytes] + ip: bool + ipv4: bool + ipv6: bool + uuid: bool + example: _containers.RepeatedScalarFieldContainer[bytes] + def __init__(self, const: _Optional[bytes] = ..., len: _Optional[int] = ..., min_len: _Optional[int] = ..., max_len: _Optional[int] = ..., pattern: _Optional[str] = ..., prefix: _Optional[bytes] = ..., suffix: _Optional[bytes] = ..., contains: _Optional[bytes] = ..., not_in: _Optional[_Iterable[bytes]] = ..., ip: _Optional[bool] = ..., ipv4: _Optional[bool] = ..., ipv6: _Optional[bool] = ..., uuid: _Optional[bool] = ..., example: _Optional[_Iterable[bytes]] = ..., **kwargs) -> None: ... + +class EnumRules(_message.Message): + __slots__ = ("const", "defined_only", "not_in", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + DEFINED_ONLY_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: int + defined_only: bool + not_in: _containers.RepeatedScalarFieldContainer[int] + example: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, const: _Optional[int] = ..., defined_only: _Optional[bool] = ..., not_in: _Optional[_Iterable[int]] = ..., example: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ... + +class RepeatedRules(_message.Message): + __slots__ = ("min_items", "max_items", "unique", "items") + Extensions: _python_message._ExtensionDict + MIN_ITEMS_FIELD_NUMBER: _ClassVar[int] + MAX_ITEMS_FIELD_NUMBER: _ClassVar[int] + UNIQUE_FIELD_NUMBER: _ClassVar[int] + ITEMS_FIELD_NUMBER: _ClassVar[int] + min_items: int + max_items: int + unique: bool + items: FieldRules + def __init__(self, min_items: _Optional[int] = ..., max_items: _Optional[int] = ..., unique: _Optional[bool] = ..., items: _Optional[_Union[FieldRules, _Mapping]] = ...) -> None: ... + +class MapRules(_message.Message): + __slots__ = ("min_pairs", "max_pairs", "keys", "values") + Extensions: _python_message._ExtensionDict + MIN_PAIRS_FIELD_NUMBER: _ClassVar[int] + MAX_PAIRS_FIELD_NUMBER: _ClassVar[int] + KEYS_FIELD_NUMBER: _ClassVar[int] + VALUES_FIELD_NUMBER: _ClassVar[int] + min_pairs: int + max_pairs: int + keys: FieldRules + values: FieldRules + def __init__(self, min_pairs: _Optional[int] = ..., max_pairs: _Optional[int] = ..., keys: _Optional[_Union[FieldRules, _Mapping]] = ..., values: _Optional[_Union[FieldRules, _Mapping]] = ...) -> None: ... + +class AnyRules(_message.Message): + __slots__ = ("not_in",) + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + not_in: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, not_in: _Optional[_Iterable[str]] = ..., **kwargs) -> None: ... + +class DurationRules(_message.Message): + __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: _duration_pb2.Duration + lt: _duration_pb2.Duration + lte: _duration_pb2.Duration + gt: _duration_pb2.Duration + gte: _duration_pb2.Duration + not_in: _containers.RepeatedCompositeFieldContainer[_duration_pb2.Duration] + example: _containers.RepeatedCompositeFieldContainer[_duration_pb2.Duration] + def __init__(self, const: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., lt: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., lte: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., gt: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., gte: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., not_in: _Optional[_Iterable[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]]] = ..., example: _Optional[_Iterable[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]]] = ..., **kwargs) -> None: ... + +class FieldMaskRules(_message.Message): + __slots__ = ("const", "not_in", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + IN_FIELD_NUMBER: _ClassVar[int] + NOT_IN_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: _field_mask_pb2.FieldMask + not_in: _containers.RepeatedScalarFieldContainer[str] + example: _containers.RepeatedCompositeFieldContainer[_field_mask_pb2.FieldMask] + def __init__(self, const: _Optional[_Union[_field_mask_pb2.FieldMask, _Mapping]] = ..., not_in: _Optional[_Iterable[str]] = ..., example: _Optional[_Iterable[_Union[_field_mask_pb2.FieldMask, _Mapping]]] = ..., **kwargs) -> None: ... + +class TimestampRules(_message.Message): + __slots__ = ("const", "lt", "lte", "lt_now", "gt", "gte", "gt_now", "within", "example") + Extensions: _python_message._ExtensionDict + CONST_FIELD_NUMBER: _ClassVar[int] + LT_FIELD_NUMBER: _ClassVar[int] + LTE_FIELD_NUMBER: _ClassVar[int] + LT_NOW_FIELD_NUMBER: _ClassVar[int] + GT_FIELD_NUMBER: _ClassVar[int] + GTE_FIELD_NUMBER: _ClassVar[int] + GT_NOW_FIELD_NUMBER: _ClassVar[int] + WITHIN_FIELD_NUMBER: _ClassVar[int] + EXAMPLE_FIELD_NUMBER: _ClassVar[int] + const: _timestamp_pb2.Timestamp + lt: _timestamp_pb2.Timestamp + lte: _timestamp_pb2.Timestamp + lt_now: bool + gt: _timestamp_pb2.Timestamp + gte: _timestamp_pb2.Timestamp + gt_now: bool + within: _duration_pb2.Duration + example: _containers.RepeatedCompositeFieldContainer[_timestamp_pb2.Timestamp] + def __init__(self, const: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., lt: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., lte: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., lt_now: _Optional[bool] = ..., gt: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., gte: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., gt_now: _Optional[bool] = ..., within: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., example: _Optional[_Iterable[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]]] = ...) -> None: ... + +class Violations(_message.Message): + __slots__ = ("violations",) + VIOLATIONS_FIELD_NUMBER: _ClassVar[int] + violations: _containers.RepeatedCompositeFieldContainer[Violation] + def __init__(self, violations: _Optional[_Iterable[_Union[Violation, _Mapping]]] = ...) -> None: ... + +class Violation(_message.Message): + __slots__ = ("field", "rule", "rule_id", "message", "for_key") + FIELD_FIELD_NUMBER: _ClassVar[int] + RULE_FIELD_NUMBER: _ClassVar[int] + RULE_ID_FIELD_NUMBER: _ClassVar[int] + MESSAGE_FIELD_NUMBER: _ClassVar[int] + FOR_KEY_FIELD_NUMBER: _ClassVar[int] + field: FieldPath + rule: FieldPath + rule_id: str + message: str + for_key: bool + def __init__(self, field: _Optional[_Union[FieldPath, _Mapping]] = ..., rule: _Optional[_Union[FieldPath, _Mapping]] = ..., rule_id: _Optional[str] = ..., message: _Optional[str] = ..., for_key: _Optional[bool] = ...) -> None: ... + +class FieldPath(_message.Message): + __slots__ = ("elements",) + ELEMENTS_FIELD_NUMBER: _ClassVar[int] + elements: _containers.RepeatedCompositeFieldContainer[FieldPathElement] + def __init__(self, elements: _Optional[_Iterable[_Union[FieldPathElement, _Mapping]]] = ...) -> None: ... + +class FieldPathElement(_message.Message): + __slots__ = ("field_number", "field_name", "field_type", "key_type", "value_type", "index", "bool_key", "int_key", "uint_key", "string_key") + FIELD_NUMBER_FIELD_NUMBER: _ClassVar[int] + FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + FIELD_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + VALUE_TYPE_FIELD_NUMBER: _ClassVar[int] + INDEX_FIELD_NUMBER: _ClassVar[int] + BOOL_KEY_FIELD_NUMBER: _ClassVar[int] + INT_KEY_FIELD_NUMBER: _ClassVar[int] + UINT_KEY_FIELD_NUMBER: _ClassVar[int] + STRING_KEY_FIELD_NUMBER: _ClassVar[int] + field_number: int + field_name: str + field_type: _descriptor_pb2.FieldDescriptorProto.Type + key_type: _descriptor_pb2.FieldDescriptorProto.Type + value_type: _descriptor_pb2.FieldDescriptorProto.Type + index: int + bool_key: bool + int_key: int + uint_key: int + string_key: str + def __init__(self, field_number: _Optional[int] = ..., field_name: _Optional[str] = ..., field_type: _Optional[_Union[_descriptor_pb2.FieldDescriptorProto.Type, str]] = ..., key_type: _Optional[_Union[_descriptor_pb2.FieldDescriptorProto.Type, str]] = ..., value_type: _Optional[_Union[_descriptor_pb2.FieldDescriptorProto.Type, str]] = ..., index: _Optional[int] = ..., bool_key: _Optional[bool] = ..., int_key: _Optional[int] = ..., uint_key: _Optional[int] = ..., string_key: _Optional[str] = ...) -> None: ... diff --git a/src/sap_cloud_sdk/core/auditlog_ng/__init__.py b/src/sap_cloud_sdk/core/auditlog_ng/__init__.py new file mode 100644 index 0000000..0fdfe7b --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/__init__.py @@ -0,0 +1,127 @@ +"""SAP Cloud SDK for Python - Audit Log NG (OTLP/gRPC) module + +Sends audit log events as OpenTelemetry LogRecords over gRPC. +Supports mTLS (client certificates) and insecure (no-auth) modes. + +The create_client() function accepts an AuditLogNGConfig and returns a +ready-to-use AuditClient. + +Usage: + from sap_cloud_sdk.core.auditlog_ng import create_client, AuditLogNGConfig + + config = AuditLogNGConfig( + endpoint="audit.example.com:443", + deployment_id="my-deployment", + namespace="namespace-123", + cert_file="client.pem", + key_file="client.key", + ) + client = create_client(config=config) + + # Send an audit event (protobuf message) + event_id = client.send(event, "DataAccess") + client.close() +""" + +from typing import Optional + +from sap_cloud_sdk.core.auditlog_ng.client import AuditClient +from sap_cloud_sdk.core.auditlog_ng.config import ( + AuditLogNGConfig, + SCHEMA_URL, +) +from sap_cloud_sdk.core.auditlog_ng.exceptions import ( + AuditLogNGError, + ClientCreationError, + ValidationError, +) + +from sap_cloud_sdk.core.telemetry import Module, Operation, record_metrics + + +@record_metrics(Module.AUDITLOG_NG, Operation.AUDITLOG_CREATE_CLIENT) +def create_client( + *, + config: Optional[AuditLogNGConfig] = None, + endpoint: Optional[str] = None, + deployment_id: Optional[str] = None, + namespace: Optional[str] = None, + cert_file: Optional[str] = None, + key_file: Optional[str] = None, + ca_file: Optional[str] = None, + insecure: bool = False, + service_name: str = "audit-client", + batch: bool = False, + compression: bool = True, + schema_url: str = SCHEMA_URL, + _telemetry_source: Optional[Module] = None, +) -> AuditClient: + """Create an AuditClient for sending audit events over OTLP/gRPC. + + Either pass a pre-built ``config`` **or** the individual keyword arguments. + When ``config`` is provided the remaining keyword arguments are ignored. + + Args: + _telemetry_source: Internal parameter for telemetry. Not for external use. + config: Optional explicit configuration. If provided, all other + keyword arguments are ignored. + endpoint: OTLP gRPC endpoint (``host:port``). + deployment_id: Deployment identifier. + namespace: Namespace identifier. + cert_file: Path to client certificate (PEM) for mTLS. + key_file: Path to client private key (PEM) for mTLS. + ca_file: Path to CA certificate (PEM) for server verification. + insecure: Use insecure connection (no TLS). + service_name: OpenTelemetry ``service.name`` resource attribute. + batch: Use batch processing (better throughput, slight delay). + compression: Enable gzip compression. + schema_url: OpenTelemetry schema URL for the logger. + + Returns: + AuditClient: Configured client ready for audit operations. + + Raises: + ClientCreationError: If client creation fails. + ValueError: If required parameters are missing. + """ + try: + if config is None: + if not endpoint or not deployment_id or not namespace: + raise ValueError( + "endpoint, deployment_id, and namespace are required " + "when config is not provided" + ) + config = AuditLogNGConfig( + endpoint=endpoint, + deployment_id=deployment_id, + namespace=namespace, + cert_file=cert_file, + key_file=key_file, + ca_file=ca_file, + insecure=insecure, + service_name=service_name, + batch=batch, + compression=compression, + schema_url=schema_url, + ) + + return AuditClient(config, _telemetry_source=_telemetry_source) + + except (ValueError, ValidationError) as e: + raise e + except Exception as e: + raise ClientCreationError(f"Failed to create audit log NG client: {e}") from e + + +__all__ = [ + # Factory function + "create_client", + # Client + "AuditClient", + # Configuration + "AuditLogNGConfig", + # Exceptions + "AuditLogNGError", + "ClientCreationError", + "ValidationError", +] diff --git a/src/sap_cloud_sdk/core/auditlog_ng/buf.gen.yaml b/src/sap_cloud_sdk/core/auditlog_ng/buf.gen.yaml new file mode 100644 index 0000000..a7458ef --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/buf.gen.yaml @@ -0,0 +1,9 @@ +version: v2 +clean: true +plugins: + - remote: buf.build/protocolbuffers/python:v33.5 + out: gen + include_imports: true + - remote: buf.build/protocolbuffers/pyi:v33.5 + out: gen + include_imports: true diff --git a/src/sap_cloud_sdk/core/auditlog_ng/buf.yaml b/src/sap_cloud_sdk/core/auditlog_ng/buf.yaml new file mode 100644 index 0000000..87c1dfe --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/buf.yaml @@ -0,0 +1,5 @@ +version: v2 +modules: + - path: proto +deps: + - buf.build/bufbuild/protovalidate diff --git a/src/sap_cloud_sdk/core/auditlog_ng/client.py b/src/sap_cloud_sdk/core/auditlog_ng/client.py new file mode 100644 index 0000000..1f2f6aa --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/client.py @@ -0,0 +1,249 @@ +"""Audit Log OTLP Client. + +Sends audit log events as OpenTelemetry LogRecords over gRPC. +Supports mTLS (client certificates) and insecure (no-auth) modes. +""" + +import json +import uuid +from typing import Optional + +import protovalidate +from protovalidate import ValidationError as ProtoValidationError + +import grpc +from google.protobuf.message import Message +from google.protobuf.json_format import MessageToDict +from opentelemetry.sdk._logs import LoggerProvider +from opentelemetry.sdk._logs.export import ( + SimpleLogRecordProcessor, + BatchLogRecordProcessor, +) +from opentelemetry.sdk.resources import Resource +from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter +from opentelemetry._logs.severity import SeverityNumber + +from sap_cloud_sdk.core.auditlog_ng.config import ( + AuditLogNGConfig, + _validate_source_arg, +) +from sap_cloud_sdk.core.auditlog_ng.exceptions import ValidationError +from sap_cloud_sdk.core.telemetry import Module + + +class AuditClient: + """OTLP-based audit log client. + + Wraps protobuf audit events in OpenTelemetry LogRecords and sends + them over gRPC to an OTLP-compatible endpoint. + + Note: + Do not instantiate this class directly. Use the + :func:`~sap_cloud_sdk.core.auditlog_ng.create_client` factory function + instead, which handles proper configuration. + + Example:: + + from sap_cloud_sdk.core.auditlog_ng import create_client + + client = create_client(config=AuditLogNGConfig( + endpoint="audit.example.com:443", + deployment_id="my-deployment", + namespace="namespace-123", + cert_file="client.pem", + key_file="client.key", + )) + + event_id = client.send(event, "DataAccess") + client.close() + """ + + def __init__( + self, config: AuditLogNGConfig, _telemetry_source: Optional[Module] = None + ) -> None: + """Initialize the audit client from a config object. + + Args: + config: Fully-validated :class:`AuditLogNGConfig`. + """ + self._config = config + self._telemetry_source = _telemetry_source + self._closed = False + + # Build gRPC credentials + credentials = self._build_credentials(config) + + # Create OTLP exporter + self._exporter = OTLPLogExporter( + endpoint=config.endpoint, + insecure=config.insecure, + credentials=credentials, + compression=( + grpc.Compression.Gzip + if config.compression + else grpc.Compression.NoCompression + ), + ) + + # Create logger provider + self._provider = LoggerProvider( + resource=Resource.create( + { + "service.name": config.service_name, + "sap.ucl.deployment_id": config.deployment_id, + "sap.ucl.system_namespace": config.namespace, + } + ) + ) + + # Add processor + processor = ( + BatchLogRecordProcessor(self._exporter) + if config.batch + else SimpleLogRecordProcessor(self._exporter) + ) + self._provider.add_log_record_processor(processor) + + self._logger = self._provider.get_logger( + "auditlog", + schema_url=config.schema_url, + ) + + # ------------------------------------------------------------------ + # Public API + # ------------------------------------------------------------------ + + def send( + self, + event: Message, + event_type: Optional[str] = None, + format: str = "protobuf-binary", + ) -> str: + """Send an audit log event. + + Args: + event: Protobuf message (audit event). + event_type: Event type name (defaults to message type name). + format: Serialization format (``"protobuf-binary"`` or ``"json"``). + + Returns: + Generated event ID (UUID). + + Raises: + RuntimeError: If the client has already been closed. + ValueError: If *format* is not a supported value. + ValidationError: If the protobuf event fails validation. + + Note: + A successful return does not guarantee delivery. + The OTLP exporter operates asynchronously. Always use flush() before shutdown to maximize delivery probability. + """ + if self._closed: + raise RuntimeError("Client is closed") + + if format not in {"protobuf-binary", "json"}: + raise ValueError("format must be 'protobuf-binary' or 'json'") + + try: + protovalidate.validate(event) + except ProtoValidationError as e: + raise ValidationError(f"Audit event validation failed: {e}") from e + + common = getattr(event, "common", None) + tenant_id = getattr(common, "tenant_id", None) + if not isinstance(tenant_id, str): + raise ValueError("Event must contain common.tenant_id as a string") + _validate_source_arg(tenant_id, "tenant_id") + + event_id = str(uuid.uuid4()) + + if event_type is None: + descriptor = getattr(event, "DESCRIPTOR", None) + descriptor_name = getattr(descriptor, "name", None) + if not isinstance(descriptor_name, str) or not descriptor_name: + raise ValueError( + "Could not determine event type from message descriptor" + ) + event_type = descriptor_name + + event_type = f"sap.als.AuditEvent.{event_type}.v2" + + if format == "json": + mime_type = "application/json" + event_dict = MessageToDict(event, preserving_proto_field_name=False) + body = json.dumps(event_dict) + else: + mime_type = "application/protobuf" + body = event.SerializeToString() + + # Emit log record + self._logger.emit( + severity_number=SeverityNumber.INFO, + event_name=event_type, + body=body, + attributes={ + "cloudevents.event_id": event_id, + "sap.tenancy.tenant_id": tenant_id, + "sap.auditlogging.mime_type": mime_type, + }, + ) + + return event_id + + def send_json(self, event: Message, event_type: Optional[str] = None) -> str: + """Send event in JSON format.""" + return self.send(event, event_type, format="json") + + def flush(self) -> None: + """Flush pending events (for batch mode).""" + if not self._closed: + self._provider.force_flush() + + def close(self) -> None: + """Shutdown the client and flush pending events.""" + if not self._closed: + self._provider.shutdown() + self._closed = True + + # ------------------------------------------------------------------ + # Context manager + # ------------------------------------------------------------------ + + def __enter__(self) -> "AuditClient": + return self + + def __exit__(self, exc_type, exc_val, exc_tb) -> bool: + self.close() + return False + + # ------------------------------------------------------------------ + # Internal helpers + # ------------------------------------------------------------------ + + @staticmethod + def _build_credentials( + config: AuditLogNGConfig, + ) -> Optional[grpc.ChannelCredentials]: + """Build gRPC channel credentials from config.""" + if config.insecure: + return None + + root_certs = None + private_key = None + cert_chain = None + + if config.ca_file: + with open(config.ca_file, "rb") as f: + root_certs = f.read() + + if config.cert_file and config.key_file: + with open(config.key_file, "rb") as f: + private_key = f.read() + with open(config.cert_file, "rb") as f: + cert_chain = f.read() + + return grpc.ssl_channel_credentials( + root_certificates=root_certs, + private_key=private_key, + certificate_chain=cert_chain, + ) diff --git a/src/sap_cloud_sdk/core/auditlog_ng/config.py b/src/sap_cloud_sdk/core/auditlog_ng/config.py new file mode 100644 index 0000000..d89c851 --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/config.py @@ -0,0 +1,71 @@ +"""Configuration and validation for SAP Audit Log NG (OTLP/gRPC) Service. + +This module handles configuration dataclasses and input validation +for the OTLP-based audit log client. +""" + +import re +from dataclasses import dataclass +from typing import Optional + +SCHEMA_URL = "https://github.tools.sap/wg-observability/telemetry-semantic-conventions/blob/audit_event_catalog_v2.1.2/payload-specifications/audit-logging/sap/auditlog/auditevent/v2/auditevent.proto" + +_SOURCE_ARG_PATTERN = re.compile(r"[a-zA-Z0-9._/~-]+") + + +def _validate_source_arg(value: str, name: str) -> None: + """Validate that *value* only contains characters in ``[a-zA-Z0-9._-/~]``. + + Args: + value: The string to validate. + name: Human-readable parameter name (used in the error message). + + Raises: + ValueError: If the value contains invalid characters. + """ + if not _SOURCE_ARG_PATTERN.fullmatch(value): + raise ValueError( + f"{name} must only contain characters from [a-zA-Z0-9._-/~]. " + f"Invalid value: {value}" + ) + + +@dataclass +class AuditLogNGConfig: + """Audit Log NG client configuration. + + Groups every knob accepted by :class:`AuditClient` so that callers can + build a configuration object independently of the client instantiation. + + Args: + endpoint: OTLP gRPC endpoint (``host:port``). + deployment_id: Deployment identifier (validated against allowed character set). + namespace: Namespace identifier (validated against allowed character set). + cert_file: Path to client certificate (PEM) for mTLS. + key_file: Path to client private key (PEM) for mTLS. + ca_file: Path to CA certificate (PEM) for server verification. + insecure: Use insecure connection (no TLS) — for local testing. + service_name: OpenTelemetry ``service.name`` resource attribute. + batch: Use batch processing (better throughput, slight delay). + compression: Enable gzip compression. + schema_url: OpenTelemetry schema URL for the logger. + """ + + endpoint: str + deployment_id: str + namespace: str + cert_file: Optional[str] = None + key_file: Optional[str] = None + ca_file: Optional[str] = None + insecure: bool = False + service_name: str = "audit-client" + batch: bool = False + compression: bool = True + schema_url: str = SCHEMA_URL + + def __post_init__(self) -> None: + """Validate required fields.""" + if not self.endpoint: + raise ValueError("endpoint is required") + _validate_source_arg(self.deployment_id, "deployment_id") + _validate_source_arg(self.namespace, "namespace") diff --git a/src/sap_cloud_sdk/core/auditlog_ng/exceptions.py b/src/sap_cloud_sdk/core/auditlog_ng/exceptions.py new file mode 100644 index 0000000..4bb534d --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/exceptions.py @@ -0,0 +1,19 @@ +"""Custom exceptions for SAP Audit Log NG (OTLP/gRPC) Service.""" + + +class AuditLogNGError(Exception): + """Base exception for audit log NG operations.""" + + pass + + +class ClientCreationError(AuditLogNGError): + """Raised when audit log NG client creation fails.""" + + pass + + +class ValidationError(AuditLogNGError): + """Raised when audit event validation fails.""" + + pass diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/__init__.py b/src/sap_cloud_sdk/core/auditlog_ng/gen/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/protoc/__init__.py b/src/sap_cloud_sdk/core/auditlog_ng/gen/protoc/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/protoc/gen/__init__.py b/src/sap_cloud_sdk/core/auditlog_ng/gen/protoc/gen/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/protoc/gen/jsonschema/__init__.py b/src/sap_cloud_sdk/core/auditlog_ng/gen/protoc/gen/jsonschema/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/protoc/gen/jsonschema/v1/__init__.py b/src/sap_cloud_sdk/core/auditlog_ng/gen/protoc/gen/jsonschema/v1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/protoc/gen/jsonschema/v1/options_pb2.py b/src/sap_cloud_sdk/core/auditlog_ng/gen/protoc/gen/jsonschema/v1/options_pb2.py new file mode 100644 index 0000000..6b94e2b --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/gen/protoc/gen/jsonschema/v1/options_pb2.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: protoc/gen/jsonschema/v1/options.proto +# Protobuf Python Version: 6.33.5 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 33, + 5, + '', + 'protoc/gen/jsonschema/v1/options.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&protoc/gen/jsonschema/v1/options.proto\x12\x18protoc.gen.jsonschema.v1\x1a google/protobuf/descriptor.proto\"\x9a\x01\n\x0c\x46ieldOptions\x12\x16\n\x06ignore\x18\x01 \x01(\x08R\x06ignore\x12\x1a\n\x08required\x18\x02 \x01(\x08R\x08required\x12\x1d\n\nmin_length\x18\x03 \x01(\x05R\tminLength\x12\x1d\n\nmax_length\x18\x04 \x01(\x05R\tmaxLength\x12\x18\n\x07pattern\x18\x05 \x01(\tR\x07pattern:k\n\rfield_options\x12\x1d.google.protobuf.FieldOptions\x18\xe5\x08 \x01(\x0b\x32&.protoc.gen.jsonschema.v1.FieldOptionsR\x0c\x66ieldOptionsB*Z(github.com/chrusty/protoc-gen-jsonschemab\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'protoc.gen.jsonschema.v1.options_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'Z(github.com/chrusty/protoc-gen-jsonschema' + _globals['_FIELDOPTIONS']._serialized_start=103 + _globals['_FIELDOPTIONS']._serialized_end=257 +# @@protoc_insertion_point(module_scope) diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/protoc/gen/jsonschema/v1/options_pb2.pyi b/src/sap_cloud_sdk/core/auditlog_ng/gen/protoc/gen/jsonschema/v1/options_pb2.pyi new file mode 100644 index 0000000..8613731 --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/gen/protoc/gen/jsonschema/v1/options_pb2.pyi @@ -0,0 +1,22 @@ +from google.protobuf import descriptor_pb2 as _descriptor_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Optional as _Optional + +DESCRIPTOR: _descriptor.FileDescriptor +FIELD_OPTIONS_FIELD_NUMBER: _ClassVar[int] +field_options: _descriptor.FieldDescriptor + +class FieldOptions(_message.Message): + __slots__ = ("ignore", "required", "min_length", "max_length", "pattern") + IGNORE_FIELD_NUMBER: _ClassVar[int] + REQUIRED_FIELD_NUMBER: _ClassVar[int] + MIN_LENGTH_FIELD_NUMBER: _ClassVar[int] + MAX_LENGTH_FIELD_NUMBER: _ClassVar[int] + PATTERN_FIELD_NUMBER: _ClassVar[int] + ignore: bool + required: bool + min_length: int + max_length: int + pattern: str + def __init__(self, ignore: _Optional[bool] = ..., required: _Optional[bool] = ..., min_length: _Optional[int] = ..., max_length: _Optional[int] = ..., pattern: _Optional[str] = ...) -> None: ... diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/__init__.py b/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/__init__.py b/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/__init__.py b/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v1/__init__.py b/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v1/auditevent_pb2.py b/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v1/auditevent_pb2.py new file mode 100644 index 0000000..aa07901 --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v1/auditevent_pb2.py @@ -0,0 +1,641 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: sap/auditlog/auditevent/v1/auditevent.proto +# Protobuf Python Version: 6.33.5 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 33, + 5, + '', + 'sap/auditlog/auditevent/v1/auditevent.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from protoc.gen.jsonschema.v1 import options_pb2 as protoc_dot_gen_dot_jsonschema_dot_v1_dot_options__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n+sap/auditlog/auditevent/v1/auditevent.proto\x12\x1asap.auditlog.auditevent.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a&protoc/gen/jsonschema/v1/options.proto\"\xb8\x0e\n\x08Metadata\x12\x15\n\x02ts\x18\x01 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x02ts\x12\x1b\n\tsource_ip\x18\x02 \x03(\tR\x08sourceIp\x12\x30\n\x14user_impersonated_id\x18\x03 \x01(\tR\x12userImpersonatedId\x12*\n\x11user_initiator_id\x18\x04 \x01(\tR\x0fuserInitiatorId\x12\x15\n\x06\x61pp_id\x18\x05 \x01(\tR\x05\x61ppId\x12\x1b\n\ttenant_id\x18\x06 \x01(\tR\x08tenantId\x12\x35\n\x17user_session_context_id\x18\x07 \x01(\tR\x14userSessionContextId\x12U\n\x0b\x61pp_context\x18\x08 \x03(\x0b\x32\x34.sap.auditlog.auditevent.v1.Metadata.AppContextEntryR\nappContext\x12[\n\x0einfrastructure\x18\t \x01(\x0b\x32\x33.sap.auditlog.auditevent.v1.Metadata.InfrastructureR\x0einfrastructure\x12I\n\x08platform\x18\n \x01(\x0b\x32-.sap.auditlog.auditevent.v1.Metadata.PlatformR\x08platform\x1a=\n\x0f\x41ppContextEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1a\xc6\x05\n\x0eInfrastructure\x12R\n\x03k8s\x18\x01 \x01(\x0b\x32>.sap.auditlog.auditevent.v1.Metadata.Infrastructure.KubernetesH\x00R\x03k8s\x12R\n\x02\x63\x66\x18\x02 \x01(\x0b\x32@.sap.auditlog.auditevent.v1.Metadata.Infrastructure.CloudFoundryH\x00R\x02\x63\x66\x12Q\n\x05other\x18\x03 \x01(\x0b\x32\x39.sap.auditlog.auditevent.v1.Metadata.Infrastructure.OtherH\x00R\x05other\x12I\n\x03\x61pp\x18\x04 \x01(\x0b\x32\x37.sap.auditlog.auditevent.v1.Metadata.Infrastructure.AppR\x03\x61pp\x1a\x81\x01\n\nKubernetes\x12\x33\n\x15infrastructure_region\x18\x01 \x01(\tR\x14infrastructureRegion\x12\x18\n\x07\x63luster\x18\x02 \x01(\tR\x07\x63luster\x12\x12\n\x04node\x18\x03 \x01(\tR\x04node\x12\x10\n\x03pod\x18\x04 \x01(\tR\x03pod\x1au\n\x0c\x43loudFoundry\x12\x1c\n\tbtpregion\x18\x01 \x01(\tR\tbtpregion\x12\x15\n\x06org_id\x18\x02 \x01(\tR\x05orgId\x12\x19\n\x08space_id\x18\x03 \x01(\tR\x07spaceId\x12\x15\n\x06\x61pp_id\x18\x04 \x01(\tR\x05\x61ppId\x1a*\n\x05Other\x12!\n\x0cruntime_type\x18\x01 \x01(\tR\x0bruntimeType\x1a\x35\n\x03\x41pp\x12\x14\n\x05image\x18\x01 \x01(\tR\x05image\x12\x18\n\x07version\x18\x02 \x01(\tR\x07versionB\x10\n\x07runtime\x12\x05\xbaH\x02\x08\x01\x1a\xa7\x04\n\x08Platform\x12\x45\n\x03\x62tp\x18\x01 \x01(\x0b\x32\x31.sap.auditlog.auditevent.v1.Metadata.Platform.BTPH\x00R\x03\x62tp\x12j\n\x10unified_services\x18\x02 \x01(\x0b\x32=.sap.auditlog.auditevent.v1.Metadata.Platform.UnifiedServicesH\x00R\x0funifiedServices\x12K\n\x05other\x18\x03 \x01(\x0b\x32\x33.sap.auditlog.auditevent.v1.Metadata.Platform.OtherH\x00R\x05other\x1aW\n\x03\x42TP\x12*\n\x11global_account_id\x18\x01 \x01(\tR\x0fglobalAccountId\x12$\n\x0esub_account_id\x18\x02 \x01(\tR\x0csubAccountId\x1a\x80\x01\n\x0fUnifiedServices\x12\x1d\n\naccount_id\x18\x01 \x01(\tR\taccountId\x12\x1f\n\x0b\x66older_path\x18\x02 \x01(\tR\nfolderPath\x12-\n\x12resourcegroup_path\x18\x03 \x01(\tR\x11resourcegroupPath\x1a,\n\x05Other\x12#\n\rplatform_name\x18\x01 \x01(\tR\x0cplatformNameB\x11\n\x08platform\x12\x05\xbaH\x02\x08\x01\"9\n\rAuditlogClear\x12(\n\x10number_of_events\x18\x01 \x01(\x05R\x0enumberOfEvents\"\x11\n\x0f\x41uditlogDisable\"\x10\n\x0e\x41uditlogEnable\"\xa8\x01\n\x18\x41uthnPrivilegeToGroupAdd\x12\"\n\x05group\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x05group\x12*\n\tprivilege\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tprivilege\x12\x1f\n\x0bobject_type\x18\x03 \x01(\tR\nobjectType\x12\x1b\n\tobject_id\x18\x04 \x01(\tR\x08objectId\"\xab\x01\n\x1b\x41uthnPrivilegeToGroupDelete\x12\"\n\x05group\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x05group\x12*\n\tprivilege\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tprivilege\x12\x1f\n\x0bobject_type\x18\x03 \x01(\tR\nobjectType\x12\x1b\n\tobject_id\x18\x04 \x01(\tR\x08objectId\"\xa5\x01\n\x17\x41uthnPrivilegeToRoleAdd\x12*\n\tprivilege\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tprivilege\x12 \n\x04role\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x04role\x12\x1f\n\x0bobject_type\x18\x03 \x01(\tR\nobjectType\x12\x1b\n\tobject_id\x18\x04 \x01(\tR\x08objectId\"\xa8\x01\n\x1a\x41uthnPrivilegeToRoleDelete\x12*\n\tprivilege\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tprivilege\x12 \n\x04role\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x04role\x12\x1f\n\x0bobject_type\x18\x03 \x01(\tR\nobjectType\x12\x1b\n\tobject_id\x18\x04 \x01(\tR\x08objectId\"\xa5\x01\n\x17\x41uthnPrivilegeToUserAdd\x12*\n\tprivilege\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tprivilege\x12 \n\x04user\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x04user\x12\x1f\n\x0bobject_type\x18\x03 \x01(\tR\nobjectType\x12\x1b\n\tobject_id\x18\x04 \x01(\tR\x08objectId\"\xa8\x01\n\x1a\x41uthnPrivilegeToUserDelete\x12*\n\tprivilege\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tprivilege\x12 \n\x04user\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x04user\x12\x1f\n\x0bobject_type\x18\x03 \x01(\tR\nobjectType\x12\x1b\n\tobject_id\x18\x04 \x01(\tR\x08objectId\"[\n\x13\x41uthnRoleToGroupAdd\x12\"\n\x05group\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x05group\x12 \n\x04role\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x04role\"^\n\x16\x41uthnRoleToGroupDelete\x12\"\n\x05group\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x05group\x12 \n\x04role\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x04role\"X\n\x12\x41uthnRoleToUserAdd\x12 \n\x04role\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x04role\x12 \n\x04user\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x04user\"[\n\x15\x41uthnRoleToUserDelete\x12 \n\x04role\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x04role\x12 \n\x04user\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x04user\"[\n\x13\x41uthnUserToGroupAdd\x12\"\n\x05group\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x05group\x12 \n\x04user\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x04user\"^\n\x16\x41uthnUserToGroupDelete\x12\"\n\x05group\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x05group\x12 \n\x04user\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x04user\"\xc1\x01\n\x10\x43onfigurationAdd\x12\x33\n\x05value\x18\x01 \x01(\x0b\x32\x16.google.protobuf.ValueB\x05\xaa\x46\x02\x10\x01R\x05value\x12\x31\n\rproperty_name\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0cpropertyName\x12(\n\x0bobject_type\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x18\x14R\nobjectType\x12\x1b\n\tobject_id\x18\x05 \x01(\tR\x08objectId\"\x87\x02\n\x13\x43onfigurationChange\x12:\n\tnew_value\x18\x01 \x01(\x0b\x32\x16.google.protobuf.ValueB\x05\xaa\x46\x02\x10\x01R\x08newValue\x12:\n\told_value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueB\x05\xaa\x46\x02\x10\x01R\x08oldValue\x12\x31\n\rproperty_name\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0cpropertyName\x12(\n\x0bobject_type\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x18\x14R\nobjectType\x12\x1b\n\tobject_id\x18\x05 \x01(\tR\x08objectId\"\xc4\x01\n\x13\x43onfigurationDelete\x12\x33\n\x05value\x18\x01 \x01(\x0b\x32\x16.google.protobuf.ValueB\x05\xaa\x46\x02\x10\x01R\x05value\x12\x31\n\rproperty_name\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0cpropertyName\x12(\n\x0bobject_type\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x18\x14R\nobjectType\x12\x1b\n\tobject_id\x18\x05 \x01(\tR\x08objectId\"\xa1\x01\n\x10\x43redentialCreate\x12\x31\n\rcredential_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0c\x63redentialId\x12Z\n\x0f\x63redential_type\x18\x02 \x01(\x0e\x32*.sap.auditlog.auditevent.v1.CredentialTypeB\x05\xaa\x46\x02\x10\x01R\x0e\x63redentialType\"\xa1\x01\n\x10\x43redentialDelete\x12\x31\n\rcredential_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0c\x63redentialId\x12Z\n\x0f\x63redential_type\x18\x02 \x01(\x0e\x32*.sap.auditlog.auditevent.v1.CredentialTypeB\x05\xaa\x46\x02\x10\x01R\x0e\x63redentialType\"\xea\x01\n\x14\x43redentialExpiration\x12\x31\n\rcredential_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0c\x63redentialId\x12Z\n\x0f\x63redential_type\x18\x02 \x01(\x0e\x32*.sap.auditlog.auditevent.v1.CredentialTypeB\x05\xaa\x46\x02\x10\x01R\x0e\x63redentialType\x12\x43\n\x0f\x65xpiration_date\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0e\x65xpirationDate\"\xea\x01\n\x14\x43redentialRevokation\x12\x31\n\rcredential_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0c\x63redentialId\x12Z\n\x0f\x63redential_type\x18\x02 \x01(\x0e\x32*.sap.auditlog.auditevent.v1.CredentialTypeB\x05\xaa\x46\x02\x10\x01R\x0e\x63redentialType\x12\x43\n\x0frevokation_date\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0erevokationDate\"\xe5\x01\n\x0f\x44\x61taModelChange\x12\'\n\x08model_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x07modelId\x12:\n\tnew_value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueB\x05\xaa\x46\x02\x10\x01R\x08newValue\x12:\n\told_value\x18\x03 \x01(\x0b\x32\x16.google.protobuf.ValueB\x05\xaa\x46\x02\x10\x01R\x08oldValue\x12\x31\n\rproperty_name\x18\x04 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0cpropertyName\":\n\x0f\x44\x61taModelCreate\x12\'\n\x08model_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x07modelId\":\n\x0f\x44\x61taModelDelete\x12\'\n\x08model_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x07modelId\"\xf4\x02\n\nDataAccess\x12/\n\x0c\x63hannel_type\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0b\x63hannelType\x12+\n\nchannel_id\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tchannelId\x12-\n\x0bobject_type\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\nobjectType\x12)\n\tobject_id\x18\x04 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x08objectId\x12*\n\tattribute\x18\x05 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tattribute\x12,\n\x05value\x18\x06 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\x12+\n\x0f\x61ttachment_type\x18\x07 \x01(\tB\x02\x18\x01R\x0e\x61ttachmentType\x12\'\n\rattachment_id\x18\x08 \x01(\tB\x02\x18\x01R\x0c\x61ttachmentId\"\xc0\x01\n\nDataCreate\x12-\n\x0bobject_type\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\nobjectType\x12)\n\tobject_id\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x08objectId\x12*\n\tattribute\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tattribute\x12,\n\x05value\x18\x04 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\"\xc0\x01\n\nDataDelete\x12-\n\x0bobject_type\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\nobjectType\x12)\n\tobject_id\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x08objectId\x12*\n\tattribute\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tattribute\x12,\n\x05value\x18\x04 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\"\x82\x02\n\x10\x44\x61taModification\x12-\n\x0bobject_type\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\nobjectType\x12)\n\tobject_id\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x08objectId\x12*\n\tattribute\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tattribute\x12\x33\n\tnew_value\x18\x04 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08newValue\x12\x33\n\told_value\x18\x05 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08oldValue\"\xa7\x02\n\nDataExport\x12[\n\x0c\x63hannel_type\x18\x01 \x01(\x0e\x32\x31.sap.auditlog.auditevent.v1.DataExportChannelTypeB\x05\xaa\x46\x02\x10\x01R\x0b\x63hannelType\x12+\n\nchannel_id\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tchannelId\x12-\n\x0bobject_type\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\nobjectType\x12)\n\tobject_id\x18\x04 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x08objectId\x12\x35\n\x0f\x64\x65stination_uri\x18\x05 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0e\x64\x65stinationUri\"\xe7\x03\n\rDppDataAccess\x12/\n\x0c\x63hannel_type\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0b\x63hannelType\x12+\n\nchannel_id\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tchannelId\x12\x38\n\x11\x64\x61ta_subject_type\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0f\x64\x61taSubjectType\x12\x34\n\x0f\x64\x61ta_subject_id\x18\x04 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\rdataSubjectId\x12-\n\x0bobject_type\x18\x05 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\nobjectType\x12)\n\tobject_id\x18\x06 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x08objectId\x12*\n\tattribute\x18\x07 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tattribute\x12,\n\x05value\x18\x08 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\x12+\n\x0f\x61ttachment_type\x18\t \x01(\tB\x02\x18\x01R\x0e\x61ttachmentType\x12\'\n\rattachment_id\x18\n \x01(\tB\x02\x18\x01R\x0c\x61ttachmentId\"\xb3\x02\n\rDppDataCreate\x12\x38\n\x11\x64\x61ta_subject_type\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0f\x64\x61taSubjectType\x12\x34\n\x0f\x64\x61ta_subject_id\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\rdataSubjectId\x12-\n\x0bobject_type\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\nobjectType\x12)\n\tobject_id\x18\x04 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x08objectId\x12*\n\tattribute\x18\x05 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tattribute\x12,\n\x05value\x18\x06 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\"\xb3\x02\n\rDppDataDelete\x12\x38\n\x11\x64\x61ta_subject_type\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0f\x64\x61taSubjectType\x12\x34\n\x0f\x64\x61ta_subject_id\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\rdataSubjectId\x12-\n\x0bobject_type\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\nobjectType\x12)\n\tobject_id\x18\x04 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x08objectId\x12*\n\tattribute\x18\x05 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tattribute\x12,\n\x05value\x18\x06 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\"\xf5\x02\n\x13\x44ppDataModification\x12\x38\n\x11\x64\x61ta_subject_type\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0f\x64\x61taSubjectType\x12\x34\n\x0f\x64\x61ta_subject_id\x18\x02 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\rdataSubjectId\x12-\n\x0bobject_type\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\nobjectType\x12)\n\tobject_id\x18\x04 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x08objectId\x12*\n\tattribute\x18\x05 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tattribute\x12\x33\n\tnew_value\x18\x06 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08newValue\x12\x33\n\told_value\x18\x07 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08oldValue\"\xdb\x01\n\tJobChange\x12#\n\x06job_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x05jobId\x12:\n\tnew_value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueB\x05\xaa\x46\x02\x10\x01R\x08newValue\x12:\n\told_value\x18\x03 \x01(\x0b\x32\x16.google.protobuf.ValueB\x05\xaa\x46\x02\x10\x01R\x08oldValue\x12\x31\n\rproperty_name\x18\x04 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0cpropertyName\"0\n\tJobCreate\x12#\n\x06job_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x05jobId\"0\n\tJobDelete\x12#\n\x06job_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x05jobId\"\xe1\x01\n\x0fJobStatusChange\x12#\n\x06job_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x05jobId\x12:\n\tnew_value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueB\x05\xaa\x46\x02\x10\x01R\x08newValue\x12:\n\told_value\x18\x03 \x01(\x0b\x32\x16.google.protobuf.ValueB\x05\xaa\x46\x02\x10\x01R\x08oldValue\x12\x31\n\rproperty_name\x18\x04 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0cpropertyName\"\xe6\x01\n\x18MaliciousRequestDetected\x12*\n\tparameter\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\tparameter\x12%\n\x0e\x65xpected_value\x18\x02 \x01(\tR\rexpectedValue\x12%\n\x0ereceived_value\x18\x03 \x01(\tR\rreceivedValue\x12P\n\x08\x62\x65havior\x18\x04 \x01(\x0e\x32-.sap.auditlog.auditevent.v1.MaliciousBehaviorB\x05\xaa\x46\x02\x10\x01R\x08\x62\x65havior\"7\n\x0ePasswordChange\x12%\n\x07user_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x06userId\";\n\x12PasswordExpiration\x12%\n\x07user_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x06userId\"6\n\rPasswordReset\x12%\n\x07user_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x06userId\"\xea\x01\n\x12TenantModification\x12:\n\tnew_value\x18\x01 \x01(\x0b\x32\x16.google.protobuf.ValueB\x05\xaa\x46\x02\x10\x01R\x08newValue\x12:\n\told_value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueB\x05\xaa\x46\x02\x10\x01R\x08oldValue\x12\x31\n\rproperty_name\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0cpropertyName\x12)\n\ttenant_id\x18\x04 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x08tenantId\">\n\x11TenantOffboarding\x12)\n\ttenant_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x08tenantId\"=\n\x10TenantOnboarding\x12)\n\ttenant_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x08tenantId\"\x18\n\x16UnauthenticatedRequest\"\x15\n\x13UnauthorizedRequest\"5\n\x0cUserActivate\x12%\n\x07user_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x06userId\"2\n\tUserBlock\x12%\n\x07user_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x06userId\"3\n\nUserCreate\x12%\n\x07user_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x06userId\"\xe8\x01\n\x14UserDataModification\x12:\n\tnew_value\x18\x01 \x01(\x0b\x32\x16.google.protobuf.ValueB\x05\xaa\x46\x02\x10\x01R\x08newValue\x12:\n\told_value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueB\x05\xaa\x46\x02\x10\x01R\x08oldValue\x12\x31\n\rproperty_name\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0cpropertyName\x12%\n\x07user_id\x18\x04 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x06userId\"3\n\nUserDelete\x12%\n\x07user_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x06userId\"\xe7\x02\n\x16UserImpersonationStart\x12\x38\n\x11user_initiator_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0fuserInitiatorId\x12T\n\x13user_initiator_type\x18\x02 \x01(\x0e\x32$.sap.auditlog.auditevent.v1.UserTypeR\x11userInitiatorType\x12>\n\x14user_impersonated_id\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x12userImpersonatedId\x12Z\n\x16user_impersonated_type\x18\x04 \x01(\x0e\x32$.sap.auditlog.auditevent.v1.UserTypeR\x14userImpersonatedType\x12!\n\x07\x63ontext\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07\x63ontext\"\xe8\x02\n\x17UserImpersonationFinish\x12\x38\n\x11user_initiator_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x0fuserInitiatorId\x12T\n\x13user_initiator_type\x18\x02 \x01(\x0e\x32$.sap.auditlog.auditevent.v1.UserTypeR\x11userInitiatorType\x12>\n\x14user_impersonated_id\x18\x03 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x12userImpersonatedId\x12Z\n\x16user_impersonated_type\x18\x04 \x01(\x0e\x32$.sap.auditlog.auditevent.v1.UserTypeR\x14userImpersonatedType\x12!\n\x07\x63ontext\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07\x63ontext\"1\n\x08UserLock\x12%\n\x07user_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x06userId\"3\n\nUserUnlock\x12%\n\x07user_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x06userId\"3\n\nUserVerify\x12%\n\x07user_id\x18\x01 \x01(\tB\x0c\xaa\x46\x02\x10\x01\xbaH\x04r\x02\x10\x01R\x06userId\"\xb3\x01\n\x10UserLoginFailure\x12W\n\x0e\x66\x61ilure_reason\x18\x01 \x01(\x0e\x32).sap.auditlog.auditevent.v1.FailureReasonB\x05\xaa\x46\x02\x10\x01R\rfailureReason\x12\x46\n\x06method\x18\x02 \x01(\x0e\x32\'.sap.auditlog.auditevent.v1.LoginMethodB\x05\xaa\x46\x02\x10\x01R\x06method\"\x86\x02\n\x10UserLoginSuccess\x12\x19\n\x08is_admin\x18\x01 \x01(\x08R\x07isAdmin\x12\x46\n\x06method\x18\x02 \x01(\x0e\x32\'.sap.auditlog.auditevent.v1.LoginMethodB\x05\xaa\x46\x02\x10\x01R\x06method\x12\x45\n\x08mfa_type\x18\x03 \x01(\x0e\x32#.sap.auditlog.auditevent.v1.MfaTypeB\x05\xaa\x46\x02\x10\x01R\x07mfaType\x12H\n\tuser_type\x18\x04 \x01(\x0e\x32$.sap.auditlog.auditevent.v1.UserTypeB\x05\xaa\x46\x02\x10\x01R\x08userType\"\\\n\nUserLogoff\x12N\n\x0blogoff_type\x18\x01 \x01(\x0e\x32&.sap.auditlog.auditevent.v1.LogoffTypeB\x05\xaa\x46\x02\x10\x01R\nlogoffType\"G\n\x0eZzzCustomEvent\x12\x35\n\x06\x63ustom\x18\x01 \x01(\x0b\x32\x16.google.protobuf.ValueB\x05\xaa\x46\x02\x10\x01R\x06\x63ustom\"Q\n\rCMKOnboarding\x12\"\n\tsystem_id\x18\x01 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x08systemId\x12\x1c\n\x06\x63mk_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\"R\n\x0e\x43MKOffboarding\x12\"\n\tsystem_id\x18\x01 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x08systemId\x12\x1c\n\x06\x63mk_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\"y\n\tCMKSwitch\x12\"\n\tsystem_id\x18\x01 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x08systemId\x12#\n\ncmk_id_old\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x08\x63mkIdOld\x12#\n\ncmk_id_new\x18\x03 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x08\x63mkIdNew\"\xa6\x01\n\x15\x43MKTenantModification\x12\"\n\tsystem_id\x18\x01 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x08systemId\x12\x1c\n\x06\x63mk_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\x12K\n\ncmk_action\x18\x03 \x01(\x0e\x32%.sap.auditlog.auditevent.v1.CMKActionB\x05\xaa\x46\x02\x10\x01R\tcmkAction\"T\n\tCMKCreate\x12\x1c\n\x06\x63mk_id\x18\x01 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\x12)\n\rkms_system_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x0bkmsSystemId\"T\n\tCMKDelete\x12\x1c\n\x06\x63mk_id\x18\x01 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\x12)\n\rkms_system_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x0bkmsSystemId\"U\n\nCMKRestore\x12\x1c\n\x06\x63mk_id\x18\x01 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\x12)\n\rkms_system_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x0bkmsSystemId\"U\n\nCMKDisable\x12\x1c\n\x06\x63mk_id\x18\x01 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\x12)\n\rkms_system_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x0bkmsSystemId\"T\n\tCMKEnable\x12\x1c\n\x06\x63mk_id\x18\x01 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\x12)\n\rkms_system_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x0bkmsSystemId\")\n\tCMKRotate\x12\x1c\n\x06\x63mk_id\x18\x01 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\"\xb2\x01\n\tKeyCreate\x12\x45\n\x08key_type\x18\x01 \x01(\x0e\x32#.sap.auditlog.auditevent.v1.KeyTypeB\x05\xaa\x46\x02\x10\x01R\x07keyType\x12\x1c\n\x06key_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05keyId\x12\"\n\tsystem_id\x18\x03 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x08systemId\x12\x1c\n\x06\x63mk_id\x18\x04 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\"\xb2\x01\n\tKeyDelete\x12\x45\n\x08key_type\x18\x01 \x01(\x0e\x32#.sap.auditlog.auditevent.v1.KeyTypeB\x05\xaa\x46\x02\x10\x01R\x07keyType\x12\x1c\n\x06key_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05keyId\x12\"\n\tsystem_id\x18\x03 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x08systemId\x12\x1c\n\x06\x63mk_id\x18\x04 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\"\xb3\x01\n\nKeyRestore\x12\x45\n\x08key_type\x18\x01 \x01(\x0e\x32#.sap.auditlog.auditevent.v1.KeyTypeB\x05\xaa\x46\x02\x10\x01R\x07keyType\x12\x1c\n\x06key_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05keyId\x12\"\n\tsystem_id\x18\x03 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x08systemId\x12\x1c\n\x06\x63mk_id\x18\x04 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\"\xb1\x01\n\x08KeyPurge\x12\x45\n\x08key_type\x18\x01 \x01(\x0e\x32#.sap.auditlog.auditevent.v1.KeyTypeB\x05\xaa\x46\x02\x10\x01R\x07keyType\x12\x1c\n\x06key_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05keyId\x12\"\n\tsystem_id\x18\x03 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x08systemId\x12\x1c\n\x06\x63mk_id\x18\x04 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\"\xb2\x01\n\tKeyRotate\x12\x45\n\x08key_type\x18\x01 \x01(\x0e\x32#.sap.auditlog.auditevent.v1.KeyTypeB\x05\xaa\x46\x02\x10\x01R\x07keyType\x12\x1c\n\x06key_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05keyId\x12\"\n\tsystem_id\x18\x03 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x08systemId\x12\x1c\n\x06\x63mk_id\x18\x04 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\"\xb2\x01\n\tKeyEnable\x12\x45\n\x08key_type\x18\x01 \x01(\x0e\x32#.sap.auditlog.auditevent.v1.KeyTypeB\x05\xaa\x46\x02\x10\x01R\x07keyType\x12\x1c\n\x06key_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05keyId\x12\"\n\tsystem_id\x18\x03 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x08systemId\x12\x1c\n\x06\x63mk_id\x18\x04 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\"\xb3\x01\n\nKeyDisable\x12\x45\n\x08key_type\x18\x01 \x01(\x0e\x32#.sap.auditlog.auditevent.v1.KeyTypeB\x05\xaa\x46\x02\x10\x01R\x07keyType\x12\x1c\n\x06key_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05keyId\x12\"\n\tsystem_id\x18\x03 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x08systemId\x12\x1c\n\x06\x63mk_id\x18\x04 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\"Y\n\x0e\x43MKUnavailable\x12\x1c\n\x06\x63mk_id\x18\x01 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\x12)\n\rkms_system_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x0bkmsSystemId\"W\n\x0c\x43MKAvailable\x12\x1c\n\x06\x63mk_id\x18\x01 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\x12)\n\rkms_system_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x0bkmsSystemId\"x\n\tCMKDetach\x12\x1c\n\x06\x63mk_id\x18\x01 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x05\x63mkId\x12)\n\rkms_system_id\x18\x02 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x0bkmsSystemId\x12\"\n\tsystem_id\x18\x03 \x01(\tB\x05\xaa\x46\x02\x10\x01R\x08systemId*\x8c\x01\n\x0e\x43redentialType\x12\x1f\n\x1b\x43REDENTIAL_TYPE_UNSPECIFIED\x10\x00\x12$\n CREDENTIAL_TYPE_X509_CERTIFICATE\x10\x01\x12\x17\n\x13\x43REDENTIAL_TYPE_KEY\x10\x02\x12\x1a\n\x16\x43REDENTIAL_TYPE_SECRET\x10\x03*\xad\x05\n\rFailureReason\x12\x1e\n\x1a\x46\x41ILURE_REASON_UNSPECIFIED\x10\x00\x12\x1b\n\x17\x46\x41ILURE_REASON_PASSWORD\x10\x01\x12\x1d\n\x19\x46\x41ILURE_REASON_MFA_FAILED\x10\x02\x12!\n\x1d\x46\x41ILURE_REASON_USER_NOT_FOUND\x10\x03\x12\x1e\n\x1a\x46\x41ILURE_REASON_USER_LOCKED\x10\x04\x12\x1f\n\x1b\x46\x41ILURE_REASON_USER_BLOCKED\x10\x05\x12\"\n\x1e\x46\x41ILURE_REASON_USER_UNVERIFIED\x10\x06\x12\x1f\n\x1b\x46\x41ILURE_REASON_USER_EXPIRED\x10\x07\x12\x1f\n\x1b\x46\x41ILURE_REASON_USER_INVALID\x10\x08\x12&\n\"FAILURE_REASON_INSECURE_CONNECTION\x10\t\x12(\n$FAILURE_REASON_LOGIN_METHOD_DISABLED\x10\n\x12 \n\x1c\x46\x41ILURE_REASON_TOKEN_EXPIRED\x10\x0b\x12 \n\x1c\x46\x41ILURE_REASON_TOKEN_REVOKED\x10\x0c\x12 \n\x1c\x46\x41ILURE_REASON_TOKEN_INVALID\x10\r\x12\"\n\x1e\x46\x41ILURE_REASON_SESSION_EXPIRED\x10\x0e\x12\"\n\x1e\x46\x41ILURE_REASON_SESSION_REVOKED\x10\x0f\x12&\n\"FAILURE_REASON_CERTIFICATE_EXPIRED\x10\x10\x12&\n\"FAILURE_REASON_CERTIFICATE_REVOKED\x10\x11\x12&\n\"FAILURE_REASON_CERTIFICATE_INVALID\x10\x12*\x96\x04\n\x0bLoginMethod\x12\x1c\n\x18LOGIN_METHOD_UNSPECIFIED\x10\x00\x12 \n\x1cLOGIN_METHOD_OPEN_ID_CONNECT\x10\x01\x12\x15\n\x11LOGIN_METHOD_SAML\x10\x02\x12\x16\n\x12LOGIN_METHOD_SAML2\x10\x03\x12\x19\n\x15LOGIN_METHOD_EXTERNAL\x10\x04\x12\x17\n\x13LOGIN_METHOD_SPNEGO\x10\x05\x12\x19\n\x15LOGIN_METHOD_PASSWORD\x10\x06\x12\x1b\n\x17LOGIN_METHOD_RFC_TICKET\x10\x07\x12\x14\n\x10LOGIN_METHOD_SNC\x10\x08\x12\x1d\n\x19LOGIN_METHOD_LOGON_TICKET\x10\t\x12\x1c\n\x18LOGIN_METHOD_USER_SWITCH\x10\n\x12!\n\x1dLOGIN_METHOD_X509_CERTIFICATE\x10\x0b\x12\x1c\n\x18LOGIN_METHOD_APC_SESSION\x10\x0c\x12\x19\n\x15LOGIN_METHOD_INTERNAL\x10\r\x12\x17\n\x13LOGIN_METHOD_OAUTH2\x10\x0e\x12\"\n\x1eLOGIN_METHOD_REENTRANCE_TICKET\x10\x0f\x12\x1d\n\x19LOGIN_METHOD_HTTP_SESSION\x10\x10\x12!\n\x1dLOGIN_METHOD_ASSERTION_TICKET\x10\x11*Z\n\nLogoffType\x12\x1b\n\x17LOGOFF_TYPE_UNSPECIFIED\x10\x00\x12\x17\n\x13LOGOFF_TYPE_REGULAR\x10\x01\x12\x16\n\x12LOGOFF_TYPE_FORCED\x10\x02*\xe8\x01\n\x11MaliciousBehavior\x12\"\n\x1eMALICIOUS_BEHAVIOR_UNSPECIFIED\x10\x00\x12%\n!MALICIOUS_BEHAVIOR_PARAMETER_SEEN\x10\x01\x12*\n&MALICIOUS_BEHAVIOR_PARAMETER_NOT_FOUND\x10\x02\x12+\n\'MALICIOUS_BEHAVIOR_PARAMETER_VALUE_SEEN\x10\x03\x12/\n+MALICIOUS_BEHAVIOR_PARAMETER_VALUE_MODIFIED\x10\x04*s\n\x07MfaType\x12\x18\n\x14MFA_TYPE_UNSPECIFIED\x10\x00\x12\x11\n\rMFA_TYPE_NONE\x10\x01\x12\x10\n\x0cMFA_TYPE_RSA\x10\x02\x12\x11\n\rMFA_TYPE_TOTP\x10\x03\x12\x16\n\x12MFA_TYPE_WEB_AUTHN\x10\x04*`\n\x08UserType\x12\x19\n\x15USER_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\x17USER_TYPE_BUSINESS_USER\x10\x01\x12\x1c\n\x18USER_TYPE_TECHNICAL_USER\x10\x02*\xb7\x01\n\x15\x44\x61taExportChannelType\x12(\n$DATA_EXPORT_CHANNEL_TYPE_UNSPECIFIED\x10\x00\x12%\n!DATA_EXPORT_CHANNEL_TYPE_DOWNLOAD\x10\x01\x12\'\n#DATA_EXPORT_CHANNEL_TYPE_API_ACCESS\x10\x02\x12$\n DATA_EXPORT_CHANNEL_TYPE_PRINTER\x10\x03*\xb0\x01\n\x11\x45ventCategoryCode\x12\'\n#EVENT_CATEGORY_CODE_SEC_UNSPECIFIED\x10\x00\x12\x1b\n\x17\x45VENT_CATEGORY_CODE_IAM\x10\x01\x12\x1b\n\x17\x45VENT_CATEGORY_CODE_CFG\x10\x02\x12\x1b\n\x17\x45VENT_CATEGORY_CODE_DPP\x10\x03\x12\x1b\n\x17\x45VENT_CATEGORY_CODE_RAL\x10\x04*\xdc\x01\n\tCMKAction\x12\x1a\n\x16\x43MK_ACTION_UNSPECIFIED\x10\x00\x12\x16\n\x12\x43MK_ACTION_ONBOARD\x10\x01\x12\x14\n\x10\x43MK_ACTION_BLOCK\x10\x02\x12\x17\n\x13\x43MK_ACTION_SHUTDOWN\x10\x03\x12\x1b\n\x17\x43MK_ACTION_CSEKFALLBACK\x10\x04\x12\x16\n\x12\x43MK_ACTION_RESTORE\x10\x05\x12\x1a\n\x16\x43MK_ACTION_KMS_ONBOARD\x10\x06\x12\x1b\n\x17\x43MK_ACTION_KMS_OFFBOARD\x10\x07*s\n\x07KeyType\x12\x18\n\x14KEY_TYPE_UNSPECIFIED\x10\x00\x12\x13\n\x0fKEY_TYPE_SYSTEM\x10\x01\x12\x14\n\x10KEY_TYPE_SERVICE\x10\x02\x12\x11\n\rKEY_TYPE_DATA\x10\x03\x12\x10\n\x0cKEY_TYPE_KEK\x10\x04\x42\x1dZ\x1bsap.com/auditlog/auditeventb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sap.auditlog.auditevent.v1.auditevent_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'Z\033sap.com/auditlog/auditevent' + _globals['_METADATA_APPCONTEXTENTRY']._loaded_options = None + _globals['_METADATA_APPCONTEXTENTRY']._serialized_options = b'8\001' + _globals['_METADATA_INFRASTRUCTURE'].oneofs_by_name['runtime']._loaded_options = None + _globals['_METADATA_INFRASTRUCTURE'].oneofs_by_name['runtime']._serialized_options = b'\272H\002\010\001' + _globals['_METADATA_PLATFORM'].oneofs_by_name['platform']._loaded_options = None + _globals['_METADATA_PLATFORM'].oneofs_by_name['platform']._serialized_options = b'\272H\002\010\001' + _globals['_METADATA'].fields_by_name['ts']._loaded_options = None + _globals['_METADATA'].fields_by_name['ts']._serialized_options = b'\252F\002\020\001' + _globals['_AUTHNPRIVILEGETOGROUPADD'].fields_by_name['group']._loaded_options = None + _globals['_AUTHNPRIVILEGETOGROUPADD'].fields_by_name['group']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOGROUPADD'].fields_by_name['privilege']._loaded_options = None + _globals['_AUTHNPRIVILEGETOGROUPADD'].fields_by_name['privilege']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOGROUPDELETE'].fields_by_name['group']._loaded_options = None + _globals['_AUTHNPRIVILEGETOGROUPDELETE'].fields_by_name['group']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOGROUPDELETE'].fields_by_name['privilege']._loaded_options = None + _globals['_AUTHNPRIVILEGETOGROUPDELETE'].fields_by_name['privilege']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOROLEADD'].fields_by_name['privilege']._loaded_options = None + _globals['_AUTHNPRIVILEGETOROLEADD'].fields_by_name['privilege']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOROLEADD'].fields_by_name['role']._loaded_options = None + _globals['_AUTHNPRIVILEGETOROLEADD'].fields_by_name['role']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOROLEDELETE'].fields_by_name['privilege']._loaded_options = None + _globals['_AUTHNPRIVILEGETOROLEDELETE'].fields_by_name['privilege']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOROLEDELETE'].fields_by_name['role']._loaded_options = None + _globals['_AUTHNPRIVILEGETOROLEDELETE'].fields_by_name['role']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOUSERADD'].fields_by_name['privilege']._loaded_options = None + _globals['_AUTHNPRIVILEGETOUSERADD'].fields_by_name['privilege']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOUSERADD'].fields_by_name['user']._loaded_options = None + _globals['_AUTHNPRIVILEGETOUSERADD'].fields_by_name['user']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOUSERDELETE'].fields_by_name['privilege']._loaded_options = None + _globals['_AUTHNPRIVILEGETOUSERDELETE'].fields_by_name['privilege']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOUSERDELETE'].fields_by_name['user']._loaded_options = None + _globals['_AUTHNPRIVILEGETOUSERDELETE'].fields_by_name['user']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNROLETOGROUPADD'].fields_by_name['group']._loaded_options = None + _globals['_AUTHNROLETOGROUPADD'].fields_by_name['group']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNROLETOGROUPADD'].fields_by_name['role']._loaded_options = None + _globals['_AUTHNROLETOGROUPADD'].fields_by_name['role']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNROLETOGROUPDELETE'].fields_by_name['group']._loaded_options = None + _globals['_AUTHNROLETOGROUPDELETE'].fields_by_name['group']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNROLETOGROUPDELETE'].fields_by_name['role']._loaded_options = None + _globals['_AUTHNROLETOGROUPDELETE'].fields_by_name['role']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNROLETOUSERADD'].fields_by_name['role']._loaded_options = None + _globals['_AUTHNROLETOUSERADD'].fields_by_name['role']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNROLETOUSERADD'].fields_by_name['user']._loaded_options = None + _globals['_AUTHNROLETOUSERADD'].fields_by_name['user']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNROLETOUSERDELETE'].fields_by_name['role']._loaded_options = None + _globals['_AUTHNROLETOUSERDELETE'].fields_by_name['role']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNROLETOUSERDELETE'].fields_by_name['user']._loaded_options = None + _globals['_AUTHNROLETOUSERDELETE'].fields_by_name['user']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNUSERTOGROUPADD'].fields_by_name['group']._loaded_options = None + _globals['_AUTHNUSERTOGROUPADD'].fields_by_name['group']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNUSERTOGROUPADD'].fields_by_name['user']._loaded_options = None + _globals['_AUTHNUSERTOGROUPADD'].fields_by_name['user']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNUSERTOGROUPDELETE'].fields_by_name['group']._loaded_options = None + _globals['_AUTHNUSERTOGROUPDELETE'].fields_by_name['group']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_AUTHNUSERTOGROUPDELETE'].fields_by_name['user']._loaded_options = None + _globals['_AUTHNUSERTOGROUPDELETE'].fields_by_name['user']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_CONFIGURATIONADD'].fields_by_name['value']._loaded_options = None + _globals['_CONFIGURATIONADD'].fields_by_name['value']._serialized_options = b'\252F\002\020\001' + _globals['_CONFIGURATIONADD'].fields_by_name['property_name']._loaded_options = None + _globals['_CONFIGURATIONADD'].fields_by_name['property_name']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_CONFIGURATIONADD'].fields_by_name['object_type']._loaded_options = None + _globals['_CONFIGURATIONADD'].fields_by_name['object_type']._serialized_options = b'\272H\004r\002\030\024' + _globals['_CONFIGURATIONCHANGE'].fields_by_name['new_value']._loaded_options = None + _globals['_CONFIGURATIONCHANGE'].fields_by_name['new_value']._serialized_options = b'\252F\002\020\001' + _globals['_CONFIGURATIONCHANGE'].fields_by_name['old_value']._loaded_options = None + _globals['_CONFIGURATIONCHANGE'].fields_by_name['old_value']._serialized_options = b'\252F\002\020\001' + _globals['_CONFIGURATIONCHANGE'].fields_by_name['property_name']._loaded_options = None + _globals['_CONFIGURATIONCHANGE'].fields_by_name['property_name']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_CONFIGURATIONCHANGE'].fields_by_name['object_type']._loaded_options = None + _globals['_CONFIGURATIONCHANGE'].fields_by_name['object_type']._serialized_options = b'\272H\004r\002\030\024' + _globals['_CONFIGURATIONDELETE'].fields_by_name['value']._loaded_options = None + _globals['_CONFIGURATIONDELETE'].fields_by_name['value']._serialized_options = b'\252F\002\020\001' + _globals['_CONFIGURATIONDELETE'].fields_by_name['property_name']._loaded_options = None + _globals['_CONFIGURATIONDELETE'].fields_by_name['property_name']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_CONFIGURATIONDELETE'].fields_by_name['object_type']._loaded_options = None + _globals['_CONFIGURATIONDELETE'].fields_by_name['object_type']._serialized_options = b'\272H\004r\002\030\024' + _globals['_CREDENTIALCREATE'].fields_by_name['credential_id']._loaded_options = None + _globals['_CREDENTIALCREATE'].fields_by_name['credential_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_CREDENTIALCREATE'].fields_by_name['credential_type']._loaded_options = None + _globals['_CREDENTIALCREATE'].fields_by_name['credential_type']._serialized_options = b'\252F\002\020\001' + _globals['_CREDENTIALDELETE'].fields_by_name['credential_id']._loaded_options = None + _globals['_CREDENTIALDELETE'].fields_by_name['credential_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_CREDENTIALDELETE'].fields_by_name['credential_type']._loaded_options = None + _globals['_CREDENTIALDELETE'].fields_by_name['credential_type']._serialized_options = b'\252F\002\020\001' + _globals['_CREDENTIALEXPIRATION'].fields_by_name['credential_id']._loaded_options = None + _globals['_CREDENTIALEXPIRATION'].fields_by_name['credential_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_CREDENTIALEXPIRATION'].fields_by_name['credential_type']._loaded_options = None + _globals['_CREDENTIALEXPIRATION'].fields_by_name['credential_type']._serialized_options = b'\252F\002\020\001' + _globals['_CREDENTIALREVOKATION'].fields_by_name['credential_id']._loaded_options = None + _globals['_CREDENTIALREVOKATION'].fields_by_name['credential_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_CREDENTIALREVOKATION'].fields_by_name['credential_type']._loaded_options = None + _globals['_CREDENTIALREVOKATION'].fields_by_name['credential_type']._serialized_options = b'\252F\002\020\001' + _globals['_DATAMODELCHANGE'].fields_by_name['model_id']._loaded_options = None + _globals['_DATAMODELCHANGE'].fields_by_name['model_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAMODELCHANGE'].fields_by_name['new_value']._loaded_options = None + _globals['_DATAMODELCHANGE'].fields_by_name['new_value']._serialized_options = b'\252F\002\020\001' + _globals['_DATAMODELCHANGE'].fields_by_name['old_value']._loaded_options = None + _globals['_DATAMODELCHANGE'].fields_by_name['old_value']._serialized_options = b'\252F\002\020\001' + _globals['_DATAMODELCHANGE'].fields_by_name['property_name']._loaded_options = None + _globals['_DATAMODELCHANGE'].fields_by_name['property_name']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAMODELCREATE'].fields_by_name['model_id']._loaded_options = None + _globals['_DATAMODELCREATE'].fields_by_name['model_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAMODELDELETE'].fields_by_name['model_id']._loaded_options = None + _globals['_DATAMODELDELETE'].fields_by_name['model_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAACCESS'].fields_by_name['channel_type']._loaded_options = None + _globals['_DATAACCESS'].fields_by_name['channel_type']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAACCESS'].fields_by_name['channel_id']._loaded_options = None + _globals['_DATAACCESS'].fields_by_name['channel_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAACCESS'].fields_by_name['object_type']._loaded_options = None + _globals['_DATAACCESS'].fields_by_name['object_type']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAACCESS'].fields_by_name['object_id']._loaded_options = None + _globals['_DATAACCESS'].fields_by_name['object_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAACCESS'].fields_by_name['attribute']._loaded_options = None + _globals['_DATAACCESS'].fields_by_name['attribute']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAACCESS'].fields_by_name['attachment_type']._loaded_options = None + _globals['_DATAACCESS'].fields_by_name['attachment_type']._serialized_options = b'\030\001' + _globals['_DATAACCESS'].fields_by_name['attachment_id']._loaded_options = None + _globals['_DATAACCESS'].fields_by_name['attachment_id']._serialized_options = b'\030\001' + _globals['_DATACREATE'].fields_by_name['object_type']._loaded_options = None + _globals['_DATACREATE'].fields_by_name['object_type']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATACREATE'].fields_by_name['object_id']._loaded_options = None + _globals['_DATACREATE'].fields_by_name['object_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATACREATE'].fields_by_name['attribute']._loaded_options = None + _globals['_DATACREATE'].fields_by_name['attribute']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATADELETE'].fields_by_name['object_type']._loaded_options = None + _globals['_DATADELETE'].fields_by_name['object_type']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATADELETE'].fields_by_name['object_id']._loaded_options = None + _globals['_DATADELETE'].fields_by_name['object_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATADELETE'].fields_by_name['attribute']._loaded_options = None + _globals['_DATADELETE'].fields_by_name['attribute']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAMODIFICATION'].fields_by_name['object_type']._loaded_options = None + _globals['_DATAMODIFICATION'].fields_by_name['object_type']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAMODIFICATION'].fields_by_name['object_id']._loaded_options = None + _globals['_DATAMODIFICATION'].fields_by_name['object_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAMODIFICATION'].fields_by_name['attribute']._loaded_options = None + _globals['_DATAMODIFICATION'].fields_by_name['attribute']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAEXPORT'].fields_by_name['channel_type']._loaded_options = None + _globals['_DATAEXPORT'].fields_by_name['channel_type']._serialized_options = b'\252F\002\020\001' + _globals['_DATAEXPORT'].fields_by_name['channel_id']._loaded_options = None + _globals['_DATAEXPORT'].fields_by_name['channel_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAEXPORT'].fields_by_name['object_type']._loaded_options = None + _globals['_DATAEXPORT'].fields_by_name['object_type']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAEXPORT'].fields_by_name['object_id']._loaded_options = None + _globals['_DATAEXPORT'].fields_by_name['object_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DATAEXPORT'].fields_by_name['destination_uri']._loaded_options = None + _globals['_DATAEXPORT'].fields_by_name['destination_uri']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['channel_type']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['channel_type']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['channel_id']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['channel_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['data_subject_type']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['data_subject_type']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['data_subject_id']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['data_subject_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['object_type']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['object_type']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['object_id']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['object_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['attribute']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['attribute']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['attachment_type']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['attachment_type']._serialized_options = b'\030\001' + _globals['_DPPDATAACCESS'].fields_by_name['attachment_id']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['attachment_id']._serialized_options = b'\030\001' + _globals['_DPPDATACREATE'].fields_by_name['data_subject_type']._loaded_options = None + _globals['_DPPDATACREATE'].fields_by_name['data_subject_type']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATACREATE'].fields_by_name['data_subject_id']._loaded_options = None + _globals['_DPPDATACREATE'].fields_by_name['data_subject_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATACREATE'].fields_by_name['object_type']._loaded_options = None + _globals['_DPPDATACREATE'].fields_by_name['object_type']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATACREATE'].fields_by_name['object_id']._loaded_options = None + _globals['_DPPDATACREATE'].fields_by_name['object_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATACREATE'].fields_by_name['attribute']._loaded_options = None + _globals['_DPPDATACREATE'].fields_by_name['attribute']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATADELETE'].fields_by_name['data_subject_type']._loaded_options = None + _globals['_DPPDATADELETE'].fields_by_name['data_subject_type']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATADELETE'].fields_by_name['data_subject_id']._loaded_options = None + _globals['_DPPDATADELETE'].fields_by_name['data_subject_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATADELETE'].fields_by_name['object_type']._loaded_options = None + _globals['_DPPDATADELETE'].fields_by_name['object_type']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATADELETE'].fields_by_name['object_id']._loaded_options = None + _globals['_DPPDATADELETE'].fields_by_name['object_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATADELETE'].fields_by_name['attribute']._loaded_options = None + _globals['_DPPDATADELETE'].fields_by_name['attribute']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATAMODIFICATION'].fields_by_name['data_subject_type']._loaded_options = None + _globals['_DPPDATAMODIFICATION'].fields_by_name['data_subject_type']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATAMODIFICATION'].fields_by_name['data_subject_id']._loaded_options = None + _globals['_DPPDATAMODIFICATION'].fields_by_name['data_subject_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATAMODIFICATION'].fields_by_name['object_type']._loaded_options = None + _globals['_DPPDATAMODIFICATION'].fields_by_name['object_type']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATAMODIFICATION'].fields_by_name['object_id']._loaded_options = None + _globals['_DPPDATAMODIFICATION'].fields_by_name['object_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_DPPDATAMODIFICATION'].fields_by_name['attribute']._loaded_options = None + _globals['_DPPDATAMODIFICATION'].fields_by_name['attribute']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_JOBCHANGE'].fields_by_name['job_id']._loaded_options = None + _globals['_JOBCHANGE'].fields_by_name['job_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_JOBCHANGE'].fields_by_name['new_value']._loaded_options = None + _globals['_JOBCHANGE'].fields_by_name['new_value']._serialized_options = b'\252F\002\020\001' + _globals['_JOBCHANGE'].fields_by_name['old_value']._loaded_options = None + _globals['_JOBCHANGE'].fields_by_name['old_value']._serialized_options = b'\252F\002\020\001' + _globals['_JOBCHANGE'].fields_by_name['property_name']._loaded_options = None + _globals['_JOBCHANGE'].fields_by_name['property_name']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_JOBCREATE'].fields_by_name['job_id']._loaded_options = None + _globals['_JOBCREATE'].fields_by_name['job_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_JOBDELETE'].fields_by_name['job_id']._loaded_options = None + _globals['_JOBDELETE'].fields_by_name['job_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_JOBSTATUSCHANGE'].fields_by_name['job_id']._loaded_options = None + _globals['_JOBSTATUSCHANGE'].fields_by_name['job_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_JOBSTATUSCHANGE'].fields_by_name['new_value']._loaded_options = None + _globals['_JOBSTATUSCHANGE'].fields_by_name['new_value']._serialized_options = b'\252F\002\020\001' + _globals['_JOBSTATUSCHANGE'].fields_by_name['old_value']._loaded_options = None + _globals['_JOBSTATUSCHANGE'].fields_by_name['old_value']._serialized_options = b'\252F\002\020\001' + _globals['_JOBSTATUSCHANGE'].fields_by_name['property_name']._loaded_options = None + _globals['_JOBSTATUSCHANGE'].fields_by_name['property_name']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_MALICIOUSREQUESTDETECTED'].fields_by_name['parameter']._loaded_options = None + _globals['_MALICIOUSREQUESTDETECTED'].fields_by_name['parameter']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_MALICIOUSREQUESTDETECTED'].fields_by_name['behavior']._loaded_options = None + _globals['_MALICIOUSREQUESTDETECTED'].fields_by_name['behavior']._serialized_options = b'\252F\002\020\001' + _globals['_PASSWORDCHANGE'].fields_by_name['user_id']._loaded_options = None + _globals['_PASSWORDCHANGE'].fields_by_name['user_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_PASSWORDEXPIRATION'].fields_by_name['user_id']._loaded_options = None + _globals['_PASSWORDEXPIRATION'].fields_by_name['user_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_PASSWORDRESET'].fields_by_name['user_id']._loaded_options = None + _globals['_PASSWORDRESET'].fields_by_name['user_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_TENANTMODIFICATION'].fields_by_name['new_value']._loaded_options = None + _globals['_TENANTMODIFICATION'].fields_by_name['new_value']._serialized_options = b'\252F\002\020\001' + _globals['_TENANTMODIFICATION'].fields_by_name['old_value']._loaded_options = None + _globals['_TENANTMODIFICATION'].fields_by_name['old_value']._serialized_options = b'\252F\002\020\001' + _globals['_TENANTMODIFICATION'].fields_by_name['property_name']._loaded_options = None + _globals['_TENANTMODIFICATION'].fields_by_name['property_name']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_TENANTMODIFICATION'].fields_by_name['tenant_id']._loaded_options = None + _globals['_TENANTMODIFICATION'].fields_by_name['tenant_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_TENANTOFFBOARDING'].fields_by_name['tenant_id']._loaded_options = None + _globals['_TENANTOFFBOARDING'].fields_by_name['tenant_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_TENANTONBOARDING'].fields_by_name['tenant_id']._loaded_options = None + _globals['_TENANTONBOARDING'].fields_by_name['tenant_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_USERACTIVATE'].fields_by_name['user_id']._loaded_options = None + _globals['_USERACTIVATE'].fields_by_name['user_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_USERBLOCK'].fields_by_name['user_id']._loaded_options = None + _globals['_USERBLOCK'].fields_by_name['user_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_USERCREATE'].fields_by_name['user_id']._loaded_options = None + _globals['_USERCREATE'].fields_by_name['user_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_USERDATAMODIFICATION'].fields_by_name['new_value']._loaded_options = None + _globals['_USERDATAMODIFICATION'].fields_by_name['new_value']._serialized_options = b'\252F\002\020\001' + _globals['_USERDATAMODIFICATION'].fields_by_name['old_value']._loaded_options = None + _globals['_USERDATAMODIFICATION'].fields_by_name['old_value']._serialized_options = b'\252F\002\020\001' + _globals['_USERDATAMODIFICATION'].fields_by_name['property_name']._loaded_options = None + _globals['_USERDATAMODIFICATION'].fields_by_name['property_name']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_USERDATAMODIFICATION'].fields_by_name['user_id']._loaded_options = None + _globals['_USERDATAMODIFICATION'].fields_by_name['user_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_USERDELETE'].fields_by_name['user_id']._loaded_options = None + _globals['_USERDELETE'].fields_by_name['user_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_USERIMPERSONATIONSTART'].fields_by_name['user_initiator_id']._loaded_options = None + _globals['_USERIMPERSONATIONSTART'].fields_by_name['user_initiator_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_USERIMPERSONATIONSTART'].fields_by_name['user_impersonated_id']._loaded_options = None + _globals['_USERIMPERSONATIONSTART'].fields_by_name['user_impersonated_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_USERIMPERSONATIONSTART'].fields_by_name['context']._loaded_options = None + _globals['_USERIMPERSONATIONSTART'].fields_by_name['context']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERIMPERSONATIONFINISH'].fields_by_name['user_initiator_id']._loaded_options = None + _globals['_USERIMPERSONATIONFINISH'].fields_by_name['user_initiator_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_USERIMPERSONATIONFINISH'].fields_by_name['user_impersonated_id']._loaded_options = None + _globals['_USERIMPERSONATIONFINISH'].fields_by_name['user_impersonated_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_USERIMPERSONATIONFINISH'].fields_by_name['context']._loaded_options = None + _globals['_USERIMPERSONATIONFINISH'].fields_by_name['context']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERLOCK'].fields_by_name['user_id']._loaded_options = None + _globals['_USERLOCK'].fields_by_name['user_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_USERUNLOCK'].fields_by_name['user_id']._loaded_options = None + _globals['_USERUNLOCK'].fields_by_name['user_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_USERVERIFY'].fields_by_name['user_id']._loaded_options = None + _globals['_USERVERIFY'].fields_by_name['user_id']._serialized_options = b'\252F\002\020\001\272H\004r\002\020\001' + _globals['_USERLOGINFAILURE'].fields_by_name['failure_reason']._loaded_options = None + _globals['_USERLOGINFAILURE'].fields_by_name['failure_reason']._serialized_options = b'\252F\002\020\001' + _globals['_USERLOGINFAILURE'].fields_by_name['method']._loaded_options = None + _globals['_USERLOGINFAILURE'].fields_by_name['method']._serialized_options = b'\252F\002\020\001' + _globals['_USERLOGINSUCCESS'].fields_by_name['method']._loaded_options = None + _globals['_USERLOGINSUCCESS'].fields_by_name['method']._serialized_options = b'\252F\002\020\001' + _globals['_USERLOGINSUCCESS'].fields_by_name['mfa_type']._loaded_options = None + _globals['_USERLOGINSUCCESS'].fields_by_name['mfa_type']._serialized_options = b'\252F\002\020\001' + _globals['_USERLOGINSUCCESS'].fields_by_name['user_type']._loaded_options = None + _globals['_USERLOGINSUCCESS'].fields_by_name['user_type']._serialized_options = b'\252F\002\020\001' + _globals['_USERLOGOFF'].fields_by_name['logoff_type']._loaded_options = None + _globals['_USERLOGOFF'].fields_by_name['logoff_type']._serialized_options = b'\252F\002\020\001' + _globals['_ZZZCUSTOMEVENT'].fields_by_name['custom']._loaded_options = None + _globals['_ZZZCUSTOMEVENT'].fields_by_name['custom']._serialized_options = b'\252F\002\020\001' + _globals['_CMKONBOARDING'].fields_by_name['system_id']._loaded_options = None + _globals['_CMKONBOARDING'].fields_by_name['system_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKONBOARDING'].fields_by_name['cmk_id']._loaded_options = None + _globals['_CMKONBOARDING'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKOFFBOARDING'].fields_by_name['system_id']._loaded_options = None + _globals['_CMKOFFBOARDING'].fields_by_name['system_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKOFFBOARDING'].fields_by_name['cmk_id']._loaded_options = None + _globals['_CMKOFFBOARDING'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKSWITCH'].fields_by_name['system_id']._loaded_options = None + _globals['_CMKSWITCH'].fields_by_name['system_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKSWITCH'].fields_by_name['cmk_id_old']._loaded_options = None + _globals['_CMKSWITCH'].fields_by_name['cmk_id_old']._serialized_options = b'\252F\002\020\001' + _globals['_CMKSWITCH'].fields_by_name['cmk_id_new']._loaded_options = None + _globals['_CMKSWITCH'].fields_by_name['cmk_id_new']._serialized_options = b'\252F\002\020\001' + _globals['_CMKTENANTMODIFICATION'].fields_by_name['system_id']._loaded_options = None + _globals['_CMKTENANTMODIFICATION'].fields_by_name['system_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKTENANTMODIFICATION'].fields_by_name['cmk_id']._loaded_options = None + _globals['_CMKTENANTMODIFICATION'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKTENANTMODIFICATION'].fields_by_name['cmk_action']._loaded_options = None + _globals['_CMKTENANTMODIFICATION'].fields_by_name['cmk_action']._serialized_options = b'\252F\002\020\001' + _globals['_CMKCREATE'].fields_by_name['cmk_id']._loaded_options = None + _globals['_CMKCREATE'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKCREATE'].fields_by_name['kms_system_id']._loaded_options = None + _globals['_CMKCREATE'].fields_by_name['kms_system_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKDELETE'].fields_by_name['cmk_id']._loaded_options = None + _globals['_CMKDELETE'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKDELETE'].fields_by_name['kms_system_id']._loaded_options = None + _globals['_CMKDELETE'].fields_by_name['kms_system_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKRESTORE'].fields_by_name['cmk_id']._loaded_options = None + _globals['_CMKRESTORE'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKRESTORE'].fields_by_name['kms_system_id']._loaded_options = None + _globals['_CMKRESTORE'].fields_by_name['kms_system_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKDISABLE'].fields_by_name['cmk_id']._loaded_options = None + _globals['_CMKDISABLE'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKDISABLE'].fields_by_name['kms_system_id']._loaded_options = None + _globals['_CMKDISABLE'].fields_by_name['kms_system_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKENABLE'].fields_by_name['cmk_id']._loaded_options = None + _globals['_CMKENABLE'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKENABLE'].fields_by_name['kms_system_id']._loaded_options = None + _globals['_CMKENABLE'].fields_by_name['kms_system_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKROTATE'].fields_by_name['cmk_id']._loaded_options = None + _globals['_CMKROTATE'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYCREATE'].fields_by_name['key_type']._loaded_options = None + _globals['_KEYCREATE'].fields_by_name['key_type']._serialized_options = b'\252F\002\020\001' + _globals['_KEYCREATE'].fields_by_name['key_id']._loaded_options = None + _globals['_KEYCREATE'].fields_by_name['key_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYCREATE'].fields_by_name['system_id']._loaded_options = None + _globals['_KEYCREATE'].fields_by_name['system_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYCREATE'].fields_by_name['cmk_id']._loaded_options = None + _globals['_KEYCREATE'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYDELETE'].fields_by_name['key_type']._loaded_options = None + _globals['_KEYDELETE'].fields_by_name['key_type']._serialized_options = b'\252F\002\020\001' + _globals['_KEYDELETE'].fields_by_name['key_id']._loaded_options = None + _globals['_KEYDELETE'].fields_by_name['key_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYDELETE'].fields_by_name['system_id']._loaded_options = None + _globals['_KEYDELETE'].fields_by_name['system_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYDELETE'].fields_by_name['cmk_id']._loaded_options = None + _globals['_KEYDELETE'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYRESTORE'].fields_by_name['key_type']._loaded_options = None + _globals['_KEYRESTORE'].fields_by_name['key_type']._serialized_options = b'\252F\002\020\001' + _globals['_KEYRESTORE'].fields_by_name['key_id']._loaded_options = None + _globals['_KEYRESTORE'].fields_by_name['key_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYRESTORE'].fields_by_name['system_id']._loaded_options = None + _globals['_KEYRESTORE'].fields_by_name['system_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYRESTORE'].fields_by_name['cmk_id']._loaded_options = None + _globals['_KEYRESTORE'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYPURGE'].fields_by_name['key_type']._loaded_options = None + _globals['_KEYPURGE'].fields_by_name['key_type']._serialized_options = b'\252F\002\020\001' + _globals['_KEYPURGE'].fields_by_name['key_id']._loaded_options = None + _globals['_KEYPURGE'].fields_by_name['key_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYPURGE'].fields_by_name['system_id']._loaded_options = None + _globals['_KEYPURGE'].fields_by_name['system_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYPURGE'].fields_by_name['cmk_id']._loaded_options = None + _globals['_KEYPURGE'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYROTATE'].fields_by_name['key_type']._loaded_options = None + _globals['_KEYROTATE'].fields_by_name['key_type']._serialized_options = b'\252F\002\020\001' + _globals['_KEYROTATE'].fields_by_name['key_id']._loaded_options = None + _globals['_KEYROTATE'].fields_by_name['key_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYROTATE'].fields_by_name['system_id']._loaded_options = None + _globals['_KEYROTATE'].fields_by_name['system_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYROTATE'].fields_by_name['cmk_id']._loaded_options = None + _globals['_KEYROTATE'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYENABLE'].fields_by_name['key_type']._loaded_options = None + _globals['_KEYENABLE'].fields_by_name['key_type']._serialized_options = b'\252F\002\020\001' + _globals['_KEYENABLE'].fields_by_name['key_id']._loaded_options = None + _globals['_KEYENABLE'].fields_by_name['key_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYENABLE'].fields_by_name['system_id']._loaded_options = None + _globals['_KEYENABLE'].fields_by_name['system_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYENABLE'].fields_by_name['cmk_id']._loaded_options = None + _globals['_KEYENABLE'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYDISABLE'].fields_by_name['key_type']._loaded_options = None + _globals['_KEYDISABLE'].fields_by_name['key_type']._serialized_options = b'\252F\002\020\001' + _globals['_KEYDISABLE'].fields_by_name['key_id']._loaded_options = None + _globals['_KEYDISABLE'].fields_by_name['key_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYDISABLE'].fields_by_name['system_id']._loaded_options = None + _globals['_KEYDISABLE'].fields_by_name['system_id']._serialized_options = b'\252F\002\020\001' + _globals['_KEYDISABLE'].fields_by_name['cmk_id']._loaded_options = None + _globals['_KEYDISABLE'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKUNAVAILABLE'].fields_by_name['cmk_id']._loaded_options = None + _globals['_CMKUNAVAILABLE'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKUNAVAILABLE'].fields_by_name['kms_system_id']._loaded_options = None + _globals['_CMKUNAVAILABLE'].fields_by_name['kms_system_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKAVAILABLE'].fields_by_name['cmk_id']._loaded_options = None + _globals['_CMKAVAILABLE'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKAVAILABLE'].fields_by_name['kms_system_id']._loaded_options = None + _globals['_CMKAVAILABLE'].fields_by_name['kms_system_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKDETACH'].fields_by_name['cmk_id']._loaded_options = None + _globals['_CMKDETACH'].fields_by_name['cmk_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKDETACH'].fields_by_name['kms_system_id']._loaded_options = None + _globals['_CMKDETACH'].fields_by_name['kms_system_id']._serialized_options = b'\252F\002\020\001' + _globals['_CMKDETACH'].fields_by_name['system_id']._loaded_options = None + _globals['_CMKDETACH'].fields_by_name['system_id']._serialized_options = b'\252F\002\020\001' + _globals['_CREDENTIALTYPE']._serialized_start=14182 + _globals['_CREDENTIALTYPE']._serialized_end=14322 + _globals['_FAILUREREASON']._serialized_start=14325 + _globals['_FAILUREREASON']._serialized_end=15010 + _globals['_LOGINMETHOD']._serialized_start=15013 + _globals['_LOGINMETHOD']._serialized_end=15547 + _globals['_LOGOFFTYPE']._serialized_start=15549 + _globals['_LOGOFFTYPE']._serialized_end=15639 + _globals['_MALICIOUSBEHAVIOR']._serialized_start=15642 + _globals['_MALICIOUSBEHAVIOR']._serialized_end=15874 + _globals['_MFATYPE']._serialized_start=15876 + _globals['_MFATYPE']._serialized_end=15991 + _globals['_USERTYPE']._serialized_start=15993 + _globals['_USERTYPE']._serialized_end=16089 + _globals['_DATAEXPORTCHANNELTYPE']._serialized_start=16092 + _globals['_DATAEXPORTCHANNELTYPE']._serialized_end=16275 + _globals['_EVENTCATEGORYCODE']._serialized_start=16278 + _globals['_EVENTCATEGORYCODE']._serialized_end=16454 + _globals['_CMKACTION']._serialized_start=16457 + _globals['_CMKACTION']._serialized_end=16677 + _globals['_KEYTYPE']._serialized_start=16679 + _globals['_KEYTYPE']._serialized_end=16794 + _globals['_METADATA']._serialized_start=208 + _globals['_METADATA']._serialized_end=2056 + _globals['_METADATA_APPCONTEXTENTRY']._serialized_start=728 + _globals['_METADATA_APPCONTEXTENTRY']._serialized_end=789 + _globals['_METADATA_INFRASTRUCTURE']._serialized_start=792 + _globals['_METADATA_INFRASTRUCTURE']._serialized_end=1502 + _globals['_METADATA_INFRASTRUCTURE_KUBERNETES']._serialized_start=1137 + _globals['_METADATA_INFRASTRUCTURE_KUBERNETES']._serialized_end=1266 + _globals['_METADATA_INFRASTRUCTURE_CLOUDFOUNDRY']._serialized_start=1268 + _globals['_METADATA_INFRASTRUCTURE_CLOUDFOUNDRY']._serialized_end=1385 + _globals['_METADATA_INFRASTRUCTURE_OTHER']._serialized_start=1387 + _globals['_METADATA_INFRASTRUCTURE_OTHER']._serialized_end=1429 + _globals['_METADATA_INFRASTRUCTURE_APP']._serialized_start=1431 + _globals['_METADATA_INFRASTRUCTURE_APP']._serialized_end=1484 + _globals['_METADATA_PLATFORM']._serialized_start=1505 + _globals['_METADATA_PLATFORM']._serialized_end=2056 + _globals['_METADATA_PLATFORM_BTP']._serialized_start=1773 + _globals['_METADATA_PLATFORM_BTP']._serialized_end=1860 + _globals['_METADATA_PLATFORM_UNIFIEDSERVICES']._serialized_start=1863 + _globals['_METADATA_PLATFORM_UNIFIEDSERVICES']._serialized_end=1991 + _globals['_METADATA_PLATFORM_OTHER']._serialized_start=1993 + _globals['_METADATA_PLATFORM_OTHER']._serialized_end=2037 + _globals['_AUDITLOGCLEAR']._serialized_start=2058 + _globals['_AUDITLOGCLEAR']._serialized_end=2115 + _globals['_AUDITLOGDISABLE']._serialized_start=2117 + _globals['_AUDITLOGDISABLE']._serialized_end=2134 + _globals['_AUDITLOGENABLE']._serialized_start=2136 + _globals['_AUDITLOGENABLE']._serialized_end=2152 + _globals['_AUTHNPRIVILEGETOGROUPADD']._serialized_start=2155 + _globals['_AUTHNPRIVILEGETOGROUPADD']._serialized_end=2323 + _globals['_AUTHNPRIVILEGETOGROUPDELETE']._serialized_start=2326 + _globals['_AUTHNPRIVILEGETOGROUPDELETE']._serialized_end=2497 + _globals['_AUTHNPRIVILEGETOROLEADD']._serialized_start=2500 + _globals['_AUTHNPRIVILEGETOROLEADD']._serialized_end=2665 + _globals['_AUTHNPRIVILEGETOROLEDELETE']._serialized_start=2668 + _globals['_AUTHNPRIVILEGETOROLEDELETE']._serialized_end=2836 + _globals['_AUTHNPRIVILEGETOUSERADD']._serialized_start=2839 + _globals['_AUTHNPRIVILEGETOUSERADD']._serialized_end=3004 + _globals['_AUTHNPRIVILEGETOUSERDELETE']._serialized_start=3007 + _globals['_AUTHNPRIVILEGETOUSERDELETE']._serialized_end=3175 + _globals['_AUTHNROLETOGROUPADD']._serialized_start=3177 + _globals['_AUTHNROLETOGROUPADD']._serialized_end=3268 + _globals['_AUTHNROLETOGROUPDELETE']._serialized_start=3270 + _globals['_AUTHNROLETOGROUPDELETE']._serialized_end=3364 + _globals['_AUTHNROLETOUSERADD']._serialized_start=3366 + _globals['_AUTHNROLETOUSERADD']._serialized_end=3454 + _globals['_AUTHNROLETOUSERDELETE']._serialized_start=3456 + _globals['_AUTHNROLETOUSERDELETE']._serialized_end=3547 + _globals['_AUTHNUSERTOGROUPADD']._serialized_start=3549 + _globals['_AUTHNUSERTOGROUPADD']._serialized_end=3640 + _globals['_AUTHNUSERTOGROUPDELETE']._serialized_start=3642 + _globals['_AUTHNUSERTOGROUPDELETE']._serialized_end=3736 + _globals['_CONFIGURATIONADD']._serialized_start=3739 + _globals['_CONFIGURATIONADD']._serialized_end=3932 + _globals['_CONFIGURATIONCHANGE']._serialized_start=3935 + _globals['_CONFIGURATIONCHANGE']._serialized_end=4198 + _globals['_CONFIGURATIONDELETE']._serialized_start=4201 + _globals['_CONFIGURATIONDELETE']._serialized_end=4397 + _globals['_CREDENTIALCREATE']._serialized_start=4400 + _globals['_CREDENTIALCREATE']._serialized_end=4561 + _globals['_CREDENTIALDELETE']._serialized_start=4564 + _globals['_CREDENTIALDELETE']._serialized_end=4725 + _globals['_CREDENTIALEXPIRATION']._serialized_start=4728 + _globals['_CREDENTIALEXPIRATION']._serialized_end=4962 + _globals['_CREDENTIALREVOKATION']._serialized_start=4965 + _globals['_CREDENTIALREVOKATION']._serialized_end=5199 + _globals['_DATAMODELCHANGE']._serialized_start=5202 + _globals['_DATAMODELCHANGE']._serialized_end=5431 + _globals['_DATAMODELCREATE']._serialized_start=5433 + _globals['_DATAMODELCREATE']._serialized_end=5491 + _globals['_DATAMODELDELETE']._serialized_start=5493 + _globals['_DATAMODELDELETE']._serialized_end=5551 + _globals['_DATAACCESS']._serialized_start=5554 + _globals['_DATAACCESS']._serialized_end=5926 + _globals['_DATACREATE']._serialized_start=5929 + _globals['_DATACREATE']._serialized_end=6121 + _globals['_DATADELETE']._serialized_start=6124 + _globals['_DATADELETE']._serialized_end=6316 + _globals['_DATAMODIFICATION']._serialized_start=6319 + _globals['_DATAMODIFICATION']._serialized_end=6577 + _globals['_DATAEXPORT']._serialized_start=6580 + _globals['_DATAEXPORT']._serialized_end=6875 + _globals['_DPPDATAACCESS']._serialized_start=6878 + _globals['_DPPDATAACCESS']._serialized_end=7365 + _globals['_DPPDATACREATE']._serialized_start=7368 + _globals['_DPPDATACREATE']._serialized_end=7675 + _globals['_DPPDATADELETE']._serialized_start=7678 + _globals['_DPPDATADELETE']._serialized_end=7985 + _globals['_DPPDATAMODIFICATION']._serialized_start=7988 + _globals['_DPPDATAMODIFICATION']._serialized_end=8361 + _globals['_JOBCHANGE']._serialized_start=8364 + _globals['_JOBCHANGE']._serialized_end=8583 + _globals['_JOBCREATE']._serialized_start=8585 + _globals['_JOBCREATE']._serialized_end=8633 + _globals['_JOBDELETE']._serialized_start=8635 + _globals['_JOBDELETE']._serialized_end=8683 + _globals['_JOBSTATUSCHANGE']._serialized_start=8686 + _globals['_JOBSTATUSCHANGE']._serialized_end=8911 + _globals['_MALICIOUSREQUESTDETECTED']._serialized_start=8914 + _globals['_MALICIOUSREQUESTDETECTED']._serialized_end=9144 + _globals['_PASSWORDCHANGE']._serialized_start=9146 + _globals['_PASSWORDCHANGE']._serialized_end=9201 + _globals['_PASSWORDEXPIRATION']._serialized_start=9203 + _globals['_PASSWORDEXPIRATION']._serialized_end=9262 + _globals['_PASSWORDRESET']._serialized_start=9264 + _globals['_PASSWORDRESET']._serialized_end=9318 + _globals['_TENANTMODIFICATION']._serialized_start=9321 + _globals['_TENANTMODIFICATION']._serialized_end=9555 + _globals['_TENANTOFFBOARDING']._serialized_start=9557 + _globals['_TENANTOFFBOARDING']._serialized_end=9619 + _globals['_TENANTONBOARDING']._serialized_start=9621 + _globals['_TENANTONBOARDING']._serialized_end=9682 + _globals['_UNAUTHENTICATEDREQUEST']._serialized_start=9684 + _globals['_UNAUTHENTICATEDREQUEST']._serialized_end=9708 + _globals['_UNAUTHORIZEDREQUEST']._serialized_start=9710 + _globals['_UNAUTHORIZEDREQUEST']._serialized_end=9731 + _globals['_USERACTIVATE']._serialized_start=9733 + _globals['_USERACTIVATE']._serialized_end=9786 + _globals['_USERBLOCK']._serialized_start=9788 + _globals['_USERBLOCK']._serialized_end=9838 + _globals['_USERCREATE']._serialized_start=9840 + _globals['_USERCREATE']._serialized_end=9891 + _globals['_USERDATAMODIFICATION']._serialized_start=9894 + _globals['_USERDATAMODIFICATION']._serialized_end=10126 + _globals['_USERDELETE']._serialized_start=10128 + _globals['_USERDELETE']._serialized_end=10179 + _globals['_USERIMPERSONATIONSTART']._serialized_start=10182 + _globals['_USERIMPERSONATIONSTART']._serialized_end=10541 + _globals['_USERIMPERSONATIONFINISH']._serialized_start=10544 + _globals['_USERIMPERSONATIONFINISH']._serialized_end=10904 + _globals['_USERLOCK']._serialized_start=10906 + _globals['_USERLOCK']._serialized_end=10955 + _globals['_USERUNLOCK']._serialized_start=10957 + _globals['_USERUNLOCK']._serialized_end=11008 + _globals['_USERVERIFY']._serialized_start=11010 + _globals['_USERVERIFY']._serialized_end=11061 + _globals['_USERLOGINFAILURE']._serialized_start=11064 + _globals['_USERLOGINFAILURE']._serialized_end=11243 + _globals['_USERLOGINSUCCESS']._serialized_start=11246 + _globals['_USERLOGINSUCCESS']._serialized_end=11508 + _globals['_USERLOGOFF']._serialized_start=11510 + _globals['_USERLOGOFF']._serialized_end=11602 + _globals['_ZZZCUSTOMEVENT']._serialized_start=11604 + _globals['_ZZZCUSTOMEVENT']._serialized_end=11675 + _globals['_CMKONBOARDING']._serialized_start=11677 + _globals['_CMKONBOARDING']._serialized_end=11758 + _globals['_CMKOFFBOARDING']._serialized_start=11760 + _globals['_CMKOFFBOARDING']._serialized_end=11842 + _globals['_CMKSWITCH']._serialized_start=11844 + _globals['_CMKSWITCH']._serialized_end=11965 + _globals['_CMKTENANTMODIFICATION']._serialized_start=11968 + _globals['_CMKTENANTMODIFICATION']._serialized_end=12134 + _globals['_CMKCREATE']._serialized_start=12136 + _globals['_CMKCREATE']._serialized_end=12220 + _globals['_CMKDELETE']._serialized_start=12222 + _globals['_CMKDELETE']._serialized_end=12306 + _globals['_CMKRESTORE']._serialized_start=12308 + _globals['_CMKRESTORE']._serialized_end=12393 + _globals['_CMKDISABLE']._serialized_start=12395 + _globals['_CMKDISABLE']._serialized_end=12480 + _globals['_CMKENABLE']._serialized_start=12482 + _globals['_CMKENABLE']._serialized_end=12566 + _globals['_CMKROTATE']._serialized_start=12568 + _globals['_CMKROTATE']._serialized_end=12609 + _globals['_KEYCREATE']._serialized_start=12612 + _globals['_KEYCREATE']._serialized_end=12790 + _globals['_KEYDELETE']._serialized_start=12793 + _globals['_KEYDELETE']._serialized_end=12971 + _globals['_KEYRESTORE']._serialized_start=12974 + _globals['_KEYRESTORE']._serialized_end=13153 + _globals['_KEYPURGE']._serialized_start=13156 + _globals['_KEYPURGE']._serialized_end=13333 + _globals['_KEYROTATE']._serialized_start=13336 + _globals['_KEYROTATE']._serialized_end=13514 + _globals['_KEYENABLE']._serialized_start=13517 + _globals['_KEYENABLE']._serialized_end=13695 + _globals['_KEYDISABLE']._serialized_start=13698 + _globals['_KEYDISABLE']._serialized_end=13877 + _globals['_CMKUNAVAILABLE']._serialized_start=13879 + _globals['_CMKUNAVAILABLE']._serialized_end=13968 + _globals['_CMKAVAILABLE']._serialized_start=13970 + _globals['_CMKAVAILABLE']._serialized_end=14057 + _globals['_CMKDETACH']._serialized_start=14059 + _globals['_CMKDETACH']._serialized_end=14179 +# @@protoc_insertion_point(module_scope) diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v1/auditevent_pb2.pyi b/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v1/auditevent_pb2.pyi new file mode 100644 index 0000000..00187ed --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v1/auditevent_pb2.pyi @@ -0,0 +1,1093 @@ +import datetime + +from buf.validate import validate_pb2 as _validate_pb2 +from google.protobuf import struct_pb2 as _struct_pb2 +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from protoc.gen.jsonschema.v1 import options_pb2 as _options_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class CredentialType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + CREDENTIAL_TYPE_UNSPECIFIED: _ClassVar[CredentialType] + CREDENTIAL_TYPE_X509_CERTIFICATE: _ClassVar[CredentialType] + CREDENTIAL_TYPE_KEY: _ClassVar[CredentialType] + CREDENTIAL_TYPE_SECRET: _ClassVar[CredentialType] + +class FailureReason(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + FAILURE_REASON_UNSPECIFIED: _ClassVar[FailureReason] + FAILURE_REASON_PASSWORD: _ClassVar[FailureReason] + FAILURE_REASON_MFA_FAILED: _ClassVar[FailureReason] + FAILURE_REASON_USER_NOT_FOUND: _ClassVar[FailureReason] + FAILURE_REASON_USER_LOCKED: _ClassVar[FailureReason] + FAILURE_REASON_USER_BLOCKED: _ClassVar[FailureReason] + FAILURE_REASON_USER_UNVERIFIED: _ClassVar[FailureReason] + FAILURE_REASON_USER_EXPIRED: _ClassVar[FailureReason] + FAILURE_REASON_USER_INVALID: _ClassVar[FailureReason] + FAILURE_REASON_INSECURE_CONNECTION: _ClassVar[FailureReason] + FAILURE_REASON_LOGIN_METHOD_DISABLED: _ClassVar[FailureReason] + FAILURE_REASON_TOKEN_EXPIRED: _ClassVar[FailureReason] + FAILURE_REASON_TOKEN_REVOKED: _ClassVar[FailureReason] + FAILURE_REASON_TOKEN_INVALID: _ClassVar[FailureReason] + FAILURE_REASON_SESSION_EXPIRED: _ClassVar[FailureReason] + FAILURE_REASON_SESSION_REVOKED: _ClassVar[FailureReason] + FAILURE_REASON_CERTIFICATE_EXPIRED: _ClassVar[FailureReason] + FAILURE_REASON_CERTIFICATE_REVOKED: _ClassVar[FailureReason] + FAILURE_REASON_CERTIFICATE_INVALID: _ClassVar[FailureReason] + +class LoginMethod(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + LOGIN_METHOD_UNSPECIFIED: _ClassVar[LoginMethod] + LOGIN_METHOD_OPEN_ID_CONNECT: _ClassVar[LoginMethod] + LOGIN_METHOD_SAML: _ClassVar[LoginMethod] + LOGIN_METHOD_SAML2: _ClassVar[LoginMethod] + LOGIN_METHOD_EXTERNAL: _ClassVar[LoginMethod] + LOGIN_METHOD_SPNEGO: _ClassVar[LoginMethod] + LOGIN_METHOD_PASSWORD: _ClassVar[LoginMethod] + LOGIN_METHOD_RFC_TICKET: _ClassVar[LoginMethod] + LOGIN_METHOD_SNC: _ClassVar[LoginMethod] + LOGIN_METHOD_LOGON_TICKET: _ClassVar[LoginMethod] + LOGIN_METHOD_USER_SWITCH: _ClassVar[LoginMethod] + LOGIN_METHOD_X509_CERTIFICATE: _ClassVar[LoginMethod] + LOGIN_METHOD_APC_SESSION: _ClassVar[LoginMethod] + LOGIN_METHOD_INTERNAL: _ClassVar[LoginMethod] + LOGIN_METHOD_OAUTH2: _ClassVar[LoginMethod] + LOGIN_METHOD_REENTRANCE_TICKET: _ClassVar[LoginMethod] + LOGIN_METHOD_HTTP_SESSION: _ClassVar[LoginMethod] + LOGIN_METHOD_ASSERTION_TICKET: _ClassVar[LoginMethod] + +class LogoffType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + LOGOFF_TYPE_UNSPECIFIED: _ClassVar[LogoffType] + LOGOFF_TYPE_REGULAR: _ClassVar[LogoffType] + LOGOFF_TYPE_FORCED: _ClassVar[LogoffType] + +class MaliciousBehavior(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + MALICIOUS_BEHAVIOR_UNSPECIFIED: _ClassVar[MaliciousBehavior] + MALICIOUS_BEHAVIOR_PARAMETER_SEEN: _ClassVar[MaliciousBehavior] + MALICIOUS_BEHAVIOR_PARAMETER_NOT_FOUND: _ClassVar[MaliciousBehavior] + MALICIOUS_BEHAVIOR_PARAMETER_VALUE_SEEN: _ClassVar[MaliciousBehavior] + MALICIOUS_BEHAVIOR_PARAMETER_VALUE_MODIFIED: _ClassVar[MaliciousBehavior] + +class MfaType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + MFA_TYPE_UNSPECIFIED: _ClassVar[MfaType] + MFA_TYPE_NONE: _ClassVar[MfaType] + MFA_TYPE_RSA: _ClassVar[MfaType] + MFA_TYPE_TOTP: _ClassVar[MfaType] + MFA_TYPE_WEB_AUTHN: _ClassVar[MfaType] + +class UserType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + USER_TYPE_UNSPECIFIED: _ClassVar[UserType] + USER_TYPE_BUSINESS_USER: _ClassVar[UserType] + USER_TYPE_TECHNICAL_USER: _ClassVar[UserType] + +class DataExportChannelType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + DATA_EXPORT_CHANNEL_TYPE_UNSPECIFIED: _ClassVar[DataExportChannelType] + DATA_EXPORT_CHANNEL_TYPE_DOWNLOAD: _ClassVar[DataExportChannelType] + DATA_EXPORT_CHANNEL_TYPE_API_ACCESS: _ClassVar[DataExportChannelType] + DATA_EXPORT_CHANNEL_TYPE_PRINTER: _ClassVar[DataExportChannelType] + +class EventCategoryCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + EVENT_CATEGORY_CODE_SEC_UNSPECIFIED: _ClassVar[EventCategoryCode] + EVENT_CATEGORY_CODE_IAM: _ClassVar[EventCategoryCode] + EVENT_CATEGORY_CODE_CFG: _ClassVar[EventCategoryCode] + EVENT_CATEGORY_CODE_DPP: _ClassVar[EventCategoryCode] + EVENT_CATEGORY_CODE_RAL: _ClassVar[EventCategoryCode] + +class CMKAction(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + CMK_ACTION_UNSPECIFIED: _ClassVar[CMKAction] + CMK_ACTION_ONBOARD: _ClassVar[CMKAction] + CMK_ACTION_BLOCK: _ClassVar[CMKAction] + CMK_ACTION_SHUTDOWN: _ClassVar[CMKAction] + CMK_ACTION_CSEKFALLBACK: _ClassVar[CMKAction] + CMK_ACTION_RESTORE: _ClassVar[CMKAction] + CMK_ACTION_KMS_ONBOARD: _ClassVar[CMKAction] + CMK_ACTION_KMS_OFFBOARD: _ClassVar[CMKAction] + +class KeyType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + KEY_TYPE_UNSPECIFIED: _ClassVar[KeyType] + KEY_TYPE_SYSTEM: _ClassVar[KeyType] + KEY_TYPE_SERVICE: _ClassVar[KeyType] + KEY_TYPE_DATA: _ClassVar[KeyType] + KEY_TYPE_KEK: _ClassVar[KeyType] +CREDENTIAL_TYPE_UNSPECIFIED: CredentialType +CREDENTIAL_TYPE_X509_CERTIFICATE: CredentialType +CREDENTIAL_TYPE_KEY: CredentialType +CREDENTIAL_TYPE_SECRET: CredentialType +FAILURE_REASON_UNSPECIFIED: FailureReason +FAILURE_REASON_PASSWORD: FailureReason +FAILURE_REASON_MFA_FAILED: FailureReason +FAILURE_REASON_USER_NOT_FOUND: FailureReason +FAILURE_REASON_USER_LOCKED: FailureReason +FAILURE_REASON_USER_BLOCKED: FailureReason +FAILURE_REASON_USER_UNVERIFIED: FailureReason +FAILURE_REASON_USER_EXPIRED: FailureReason +FAILURE_REASON_USER_INVALID: FailureReason +FAILURE_REASON_INSECURE_CONNECTION: FailureReason +FAILURE_REASON_LOGIN_METHOD_DISABLED: FailureReason +FAILURE_REASON_TOKEN_EXPIRED: FailureReason +FAILURE_REASON_TOKEN_REVOKED: FailureReason +FAILURE_REASON_TOKEN_INVALID: FailureReason +FAILURE_REASON_SESSION_EXPIRED: FailureReason +FAILURE_REASON_SESSION_REVOKED: FailureReason +FAILURE_REASON_CERTIFICATE_EXPIRED: FailureReason +FAILURE_REASON_CERTIFICATE_REVOKED: FailureReason +FAILURE_REASON_CERTIFICATE_INVALID: FailureReason +LOGIN_METHOD_UNSPECIFIED: LoginMethod +LOGIN_METHOD_OPEN_ID_CONNECT: LoginMethod +LOGIN_METHOD_SAML: LoginMethod +LOGIN_METHOD_SAML2: LoginMethod +LOGIN_METHOD_EXTERNAL: LoginMethod +LOGIN_METHOD_SPNEGO: LoginMethod +LOGIN_METHOD_PASSWORD: LoginMethod +LOGIN_METHOD_RFC_TICKET: LoginMethod +LOGIN_METHOD_SNC: LoginMethod +LOGIN_METHOD_LOGON_TICKET: LoginMethod +LOGIN_METHOD_USER_SWITCH: LoginMethod +LOGIN_METHOD_X509_CERTIFICATE: LoginMethod +LOGIN_METHOD_APC_SESSION: LoginMethod +LOGIN_METHOD_INTERNAL: LoginMethod +LOGIN_METHOD_OAUTH2: LoginMethod +LOGIN_METHOD_REENTRANCE_TICKET: LoginMethod +LOGIN_METHOD_HTTP_SESSION: LoginMethod +LOGIN_METHOD_ASSERTION_TICKET: LoginMethod +LOGOFF_TYPE_UNSPECIFIED: LogoffType +LOGOFF_TYPE_REGULAR: LogoffType +LOGOFF_TYPE_FORCED: LogoffType +MALICIOUS_BEHAVIOR_UNSPECIFIED: MaliciousBehavior +MALICIOUS_BEHAVIOR_PARAMETER_SEEN: MaliciousBehavior +MALICIOUS_BEHAVIOR_PARAMETER_NOT_FOUND: MaliciousBehavior +MALICIOUS_BEHAVIOR_PARAMETER_VALUE_SEEN: MaliciousBehavior +MALICIOUS_BEHAVIOR_PARAMETER_VALUE_MODIFIED: MaliciousBehavior +MFA_TYPE_UNSPECIFIED: MfaType +MFA_TYPE_NONE: MfaType +MFA_TYPE_RSA: MfaType +MFA_TYPE_TOTP: MfaType +MFA_TYPE_WEB_AUTHN: MfaType +USER_TYPE_UNSPECIFIED: UserType +USER_TYPE_BUSINESS_USER: UserType +USER_TYPE_TECHNICAL_USER: UserType +DATA_EXPORT_CHANNEL_TYPE_UNSPECIFIED: DataExportChannelType +DATA_EXPORT_CHANNEL_TYPE_DOWNLOAD: DataExportChannelType +DATA_EXPORT_CHANNEL_TYPE_API_ACCESS: DataExportChannelType +DATA_EXPORT_CHANNEL_TYPE_PRINTER: DataExportChannelType +EVENT_CATEGORY_CODE_SEC_UNSPECIFIED: EventCategoryCode +EVENT_CATEGORY_CODE_IAM: EventCategoryCode +EVENT_CATEGORY_CODE_CFG: EventCategoryCode +EVENT_CATEGORY_CODE_DPP: EventCategoryCode +EVENT_CATEGORY_CODE_RAL: EventCategoryCode +CMK_ACTION_UNSPECIFIED: CMKAction +CMK_ACTION_ONBOARD: CMKAction +CMK_ACTION_BLOCK: CMKAction +CMK_ACTION_SHUTDOWN: CMKAction +CMK_ACTION_CSEKFALLBACK: CMKAction +CMK_ACTION_RESTORE: CMKAction +CMK_ACTION_KMS_ONBOARD: CMKAction +CMK_ACTION_KMS_OFFBOARD: CMKAction +KEY_TYPE_UNSPECIFIED: KeyType +KEY_TYPE_SYSTEM: KeyType +KEY_TYPE_SERVICE: KeyType +KEY_TYPE_DATA: KeyType +KEY_TYPE_KEK: KeyType + +class Metadata(_message.Message): + __slots__ = ("ts", "source_ip", "user_impersonated_id", "user_initiator_id", "app_id", "tenant_id", "user_session_context_id", "app_context", "infrastructure", "platform") + class AppContextEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + class Infrastructure(_message.Message): + __slots__ = ("k8s", "cf", "other", "app") + class Kubernetes(_message.Message): + __slots__ = ("infrastructure_region", "cluster", "node", "pod") + INFRASTRUCTURE_REGION_FIELD_NUMBER: _ClassVar[int] + CLUSTER_FIELD_NUMBER: _ClassVar[int] + NODE_FIELD_NUMBER: _ClassVar[int] + POD_FIELD_NUMBER: _ClassVar[int] + infrastructure_region: str + cluster: str + node: str + pod: str + def __init__(self, infrastructure_region: _Optional[str] = ..., cluster: _Optional[str] = ..., node: _Optional[str] = ..., pod: _Optional[str] = ...) -> None: ... + class CloudFoundry(_message.Message): + __slots__ = ("btpregion", "org_id", "space_id", "app_id") + BTPREGION_FIELD_NUMBER: _ClassVar[int] + ORG_ID_FIELD_NUMBER: _ClassVar[int] + SPACE_ID_FIELD_NUMBER: _ClassVar[int] + APP_ID_FIELD_NUMBER: _ClassVar[int] + btpregion: str + org_id: str + space_id: str + app_id: str + def __init__(self, btpregion: _Optional[str] = ..., org_id: _Optional[str] = ..., space_id: _Optional[str] = ..., app_id: _Optional[str] = ...) -> None: ... + class Other(_message.Message): + __slots__ = ("runtime_type",) + RUNTIME_TYPE_FIELD_NUMBER: _ClassVar[int] + runtime_type: str + def __init__(self, runtime_type: _Optional[str] = ...) -> None: ... + class App(_message.Message): + __slots__ = ("image", "version") + IMAGE_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + image: str + version: str + def __init__(self, image: _Optional[str] = ..., version: _Optional[str] = ...) -> None: ... + K8S_FIELD_NUMBER: _ClassVar[int] + CF_FIELD_NUMBER: _ClassVar[int] + OTHER_FIELD_NUMBER: _ClassVar[int] + APP_FIELD_NUMBER: _ClassVar[int] + k8s: Metadata.Infrastructure.Kubernetes + cf: Metadata.Infrastructure.CloudFoundry + other: Metadata.Infrastructure.Other + app: Metadata.Infrastructure.App + def __init__(self, k8s: _Optional[_Union[Metadata.Infrastructure.Kubernetes, _Mapping]] = ..., cf: _Optional[_Union[Metadata.Infrastructure.CloudFoundry, _Mapping]] = ..., other: _Optional[_Union[Metadata.Infrastructure.Other, _Mapping]] = ..., app: _Optional[_Union[Metadata.Infrastructure.App, _Mapping]] = ...) -> None: ... + class Platform(_message.Message): + __slots__ = ("btp", "unified_services", "other") + class BTP(_message.Message): + __slots__ = ("global_account_id", "sub_account_id") + GLOBAL_ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int] + SUB_ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int] + global_account_id: str + sub_account_id: str + def __init__(self, global_account_id: _Optional[str] = ..., sub_account_id: _Optional[str] = ...) -> None: ... + class UnifiedServices(_message.Message): + __slots__ = ("account_id", "folder_path", "resourcegroup_path") + ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int] + FOLDER_PATH_FIELD_NUMBER: _ClassVar[int] + RESOURCEGROUP_PATH_FIELD_NUMBER: _ClassVar[int] + account_id: str + folder_path: str + resourcegroup_path: str + def __init__(self, account_id: _Optional[str] = ..., folder_path: _Optional[str] = ..., resourcegroup_path: _Optional[str] = ...) -> None: ... + class Other(_message.Message): + __slots__ = ("platform_name",) + PLATFORM_NAME_FIELD_NUMBER: _ClassVar[int] + platform_name: str + def __init__(self, platform_name: _Optional[str] = ...) -> None: ... + BTP_FIELD_NUMBER: _ClassVar[int] + UNIFIED_SERVICES_FIELD_NUMBER: _ClassVar[int] + OTHER_FIELD_NUMBER: _ClassVar[int] + btp: Metadata.Platform.BTP + unified_services: Metadata.Platform.UnifiedServices + other: Metadata.Platform.Other + def __init__(self, btp: _Optional[_Union[Metadata.Platform.BTP, _Mapping]] = ..., unified_services: _Optional[_Union[Metadata.Platform.UnifiedServices, _Mapping]] = ..., other: _Optional[_Union[Metadata.Platform.Other, _Mapping]] = ...) -> None: ... + TS_FIELD_NUMBER: _ClassVar[int] + SOURCE_IP_FIELD_NUMBER: _ClassVar[int] + USER_IMPERSONATED_ID_FIELD_NUMBER: _ClassVar[int] + USER_INITIATOR_ID_FIELD_NUMBER: _ClassVar[int] + APP_ID_FIELD_NUMBER: _ClassVar[int] + TENANT_ID_FIELD_NUMBER: _ClassVar[int] + USER_SESSION_CONTEXT_ID_FIELD_NUMBER: _ClassVar[int] + APP_CONTEXT_FIELD_NUMBER: _ClassVar[int] + INFRASTRUCTURE_FIELD_NUMBER: _ClassVar[int] + PLATFORM_FIELD_NUMBER: _ClassVar[int] + ts: str + source_ip: _containers.RepeatedScalarFieldContainer[str] + user_impersonated_id: str + user_initiator_id: str + app_id: str + tenant_id: str + user_session_context_id: str + app_context: _containers.ScalarMap[str, str] + infrastructure: Metadata.Infrastructure + platform: Metadata.Platform + def __init__(self, ts: _Optional[str] = ..., source_ip: _Optional[_Iterable[str]] = ..., user_impersonated_id: _Optional[str] = ..., user_initiator_id: _Optional[str] = ..., app_id: _Optional[str] = ..., tenant_id: _Optional[str] = ..., user_session_context_id: _Optional[str] = ..., app_context: _Optional[_Mapping[str, str]] = ..., infrastructure: _Optional[_Union[Metadata.Infrastructure, _Mapping]] = ..., platform: _Optional[_Union[Metadata.Platform, _Mapping]] = ...) -> None: ... + +class AuditlogClear(_message.Message): + __slots__ = ("number_of_events",) + NUMBER_OF_EVENTS_FIELD_NUMBER: _ClassVar[int] + number_of_events: int + def __init__(self, number_of_events: _Optional[int] = ...) -> None: ... + +class AuditlogDisable(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class AuditlogEnable(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class AuthnPrivilegeToGroupAdd(_message.Message): + __slots__ = ("group", "privilege", "object_type", "object_id") + GROUP_FIELD_NUMBER: _ClassVar[int] + PRIVILEGE_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + group: str + privilege: str + object_type: str + object_id: str + def __init__(self, group: _Optional[str] = ..., privilege: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class AuthnPrivilegeToGroupDelete(_message.Message): + __slots__ = ("group", "privilege", "object_type", "object_id") + GROUP_FIELD_NUMBER: _ClassVar[int] + PRIVILEGE_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + group: str + privilege: str + object_type: str + object_id: str + def __init__(self, group: _Optional[str] = ..., privilege: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class AuthnPrivilegeToRoleAdd(_message.Message): + __slots__ = ("privilege", "role", "object_type", "object_id") + PRIVILEGE_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + privilege: str + role: str + object_type: str + object_id: str + def __init__(self, privilege: _Optional[str] = ..., role: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class AuthnPrivilegeToRoleDelete(_message.Message): + __slots__ = ("privilege", "role", "object_type", "object_id") + PRIVILEGE_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + privilege: str + role: str + object_type: str + object_id: str + def __init__(self, privilege: _Optional[str] = ..., role: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class AuthnPrivilegeToUserAdd(_message.Message): + __slots__ = ("privilege", "user", "object_type", "object_id") + PRIVILEGE_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + privilege: str + user: str + object_type: str + object_id: str + def __init__(self, privilege: _Optional[str] = ..., user: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class AuthnPrivilegeToUserDelete(_message.Message): + __slots__ = ("privilege", "user", "object_type", "object_id") + PRIVILEGE_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + privilege: str + user: str + object_type: str + object_id: str + def __init__(self, privilege: _Optional[str] = ..., user: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class AuthnRoleToGroupAdd(_message.Message): + __slots__ = ("group", "role") + GROUP_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + group: str + role: str + def __init__(self, group: _Optional[str] = ..., role: _Optional[str] = ...) -> None: ... + +class AuthnRoleToGroupDelete(_message.Message): + __slots__ = ("group", "role") + GROUP_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + group: str + role: str + def __init__(self, group: _Optional[str] = ..., role: _Optional[str] = ...) -> None: ... + +class AuthnRoleToUserAdd(_message.Message): + __slots__ = ("role", "user") + ROLE_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + role: str + user: str + def __init__(self, role: _Optional[str] = ..., user: _Optional[str] = ...) -> None: ... + +class AuthnRoleToUserDelete(_message.Message): + __slots__ = ("role", "user") + ROLE_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + role: str + user: str + def __init__(self, role: _Optional[str] = ..., user: _Optional[str] = ...) -> None: ... + +class AuthnUserToGroupAdd(_message.Message): + __slots__ = ("group", "user") + GROUP_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + group: str + user: str + def __init__(self, group: _Optional[str] = ..., user: _Optional[str] = ...) -> None: ... + +class AuthnUserToGroupDelete(_message.Message): + __slots__ = ("group", "user") + GROUP_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + group: str + user: str + def __init__(self, group: _Optional[str] = ..., user: _Optional[str] = ...) -> None: ... + +class ConfigurationAdd(_message.Message): + __slots__ = ("value", "property_name", "object_type", "object_id") + VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + value: _struct_pb2.Value + property_name: str + object_type: str + object_id: str + def __init__(self, value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class ConfigurationChange(_message.Message): + __slots__ = ("new_value", "old_value", "property_name", "object_type", "object_id") + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + property_name: str + object_type: str + object_id: str + def __init__(self, new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class ConfigurationDelete(_message.Message): + __slots__ = ("value", "property_name", "object_type", "object_id") + VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + value: _struct_pb2.Value + property_name: str + object_type: str + object_id: str + def __init__(self, value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class CredentialCreate(_message.Message): + __slots__ = ("credential_id", "credential_type") + CREDENTIAL_ID_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_TYPE_FIELD_NUMBER: _ClassVar[int] + credential_id: str + credential_type: CredentialType + def __init__(self, credential_id: _Optional[str] = ..., credential_type: _Optional[_Union[CredentialType, str]] = ...) -> None: ... + +class CredentialDelete(_message.Message): + __slots__ = ("credential_id", "credential_type") + CREDENTIAL_ID_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_TYPE_FIELD_NUMBER: _ClassVar[int] + credential_id: str + credential_type: CredentialType + def __init__(self, credential_id: _Optional[str] = ..., credential_type: _Optional[_Union[CredentialType, str]] = ...) -> None: ... + +class CredentialExpiration(_message.Message): + __slots__ = ("credential_id", "credential_type", "expiration_date") + CREDENTIAL_ID_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_TYPE_FIELD_NUMBER: _ClassVar[int] + EXPIRATION_DATE_FIELD_NUMBER: _ClassVar[int] + credential_id: str + credential_type: CredentialType + expiration_date: _timestamp_pb2.Timestamp + def __init__(self, credential_id: _Optional[str] = ..., credential_type: _Optional[_Union[CredentialType, str]] = ..., expiration_date: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + +class CredentialRevokation(_message.Message): + __slots__ = ("credential_id", "credential_type", "revokation_date") + CREDENTIAL_ID_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_TYPE_FIELD_NUMBER: _ClassVar[int] + REVOKATION_DATE_FIELD_NUMBER: _ClassVar[int] + credential_id: str + credential_type: CredentialType + revokation_date: _timestamp_pb2.Timestamp + def __init__(self, credential_id: _Optional[str] = ..., credential_type: _Optional[_Union[CredentialType, str]] = ..., revokation_date: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + +class DataModelChange(_message.Message): + __slots__ = ("model_id", "new_value", "old_value", "property_name") + MODEL_ID_FIELD_NUMBER: _ClassVar[int] + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + model_id: str + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + property_name: str + def __init__(self, model_id: _Optional[str] = ..., new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ...) -> None: ... + +class DataModelCreate(_message.Message): + __slots__ = ("model_id",) + MODEL_ID_FIELD_NUMBER: _ClassVar[int] + model_id: str + def __init__(self, model_id: _Optional[str] = ...) -> None: ... + +class DataModelDelete(_message.Message): + __slots__ = ("model_id",) + MODEL_ID_FIELD_NUMBER: _ClassVar[int] + model_id: str + def __init__(self, model_id: _Optional[str] = ...) -> None: ... + +class DataAccess(_message.Message): + __slots__ = ("channel_type", "channel_id", "object_type", "object_id", "attribute", "value", "attachment_type", "attachment_id") + CHANNEL_TYPE_FIELD_NUMBER: _ClassVar[int] + CHANNEL_ID_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + ATTACHMENT_TYPE_FIELD_NUMBER: _ClassVar[int] + ATTACHMENT_ID_FIELD_NUMBER: _ClassVar[int] + channel_type: str + channel_id: str + object_type: str + object_id: str + attribute: str + value: _struct_pb2.Value + attachment_type: str + attachment_id: str + def __init__(self, channel_type: _Optional[str] = ..., channel_id: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., attachment_type: _Optional[str] = ..., attachment_id: _Optional[str] = ...) -> None: ... + +class DataCreate(_message.Message): + __slots__ = ("object_type", "object_id", "attribute", "value") + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + object_type: str + object_id: str + attribute: str + value: _struct_pb2.Value + def __init__(self, object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ...) -> None: ... + +class DataDelete(_message.Message): + __slots__ = ("object_type", "object_id", "attribute", "value") + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + object_type: str + object_id: str + attribute: str + value: _struct_pb2.Value + def __init__(self, object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ...) -> None: ... + +class DataModification(_message.Message): + __slots__ = ("object_type", "object_id", "attribute", "new_value", "old_value") + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + object_type: str + object_id: str + attribute: str + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + def __init__(self, object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ...) -> None: ... + +class DataExport(_message.Message): + __slots__ = ("channel_type", "channel_id", "object_type", "object_id", "destination_uri") + CHANNEL_TYPE_FIELD_NUMBER: _ClassVar[int] + CHANNEL_ID_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + DESTINATION_URI_FIELD_NUMBER: _ClassVar[int] + channel_type: DataExportChannelType + channel_id: str + object_type: str + object_id: str + destination_uri: str + def __init__(self, channel_type: _Optional[_Union[DataExportChannelType, str]] = ..., channel_id: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., destination_uri: _Optional[str] = ...) -> None: ... + +class DppDataAccess(_message.Message): + __slots__ = ("channel_type", "channel_id", "data_subject_type", "data_subject_id", "object_type", "object_id", "attribute", "value", "attachment_type", "attachment_id") + CHANNEL_TYPE_FIELD_NUMBER: _ClassVar[int] + CHANNEL_ID_FIELD_NUMBER: _ClassVar[int] + DATA_SUBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + DATA_SUBJECT_ID_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + ATTACHMENT_TYPE_FIELD_NUMBER: _ClassVar[int] + ATTACHMENT_ID_FIELD_NUMBER: _ClassVar[int] + channel_type: str + channel_id: str + data_subject_type: str + data_subject_id: str + object_type: str + object_id: str + attribute: str + value: _struct_pb2.Value + attachment_type: str + attachment_id: str + def __init__(self, channel_type: _Optional[str] = ..., channel_id: _Optional[str] = ..., data_subject_type: _Optional[str] = ..., data_subject_id: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., attachment_type: _Optional[str] = ..., attachment_id: _Optional[str] = ...) -> None: ... + +class DppDataCreate(_message.Message): + __slots__ = ("data_subject_type", "data_subject_id", "object_type", "object_id", "attribute", "value") + DATA_SUBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + DATA_SUBJECT_ID_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + data_subject_type: str + data_subject_id: str + object_type: str + object_id: str + attribute: str + value: _struct_pb2.Value + def __init__(self, data_subject_type: _Optional[str] = ..., data_subject_id: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ...) -> None: ... + +class DppDataDelete(_message.Message): + __slots__ = ("data_subject_type", "data_subject_id", "object_type", "object_id", "attribute", "value") + DATA_SUBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + DATA_SUBJECT_ID_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + data_subject_type: str + data_subject_id: str + object_type: str + object_id: str + attribute: str + value: _struct_pb2.Value + def __init__(self, data_subject_type: _Optional[str] = ..., data_subject_id: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ...) -> None: ... + +class DppDataModification(_message.Message): + __slots__ = ("data_subject_type", "data_subject_id", "object_type", "object_id", "attribute", "new_value", "old_value") + DATA_SUBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + DATA_SUBJECT_ID_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + data_subject_type: str + data_subject_id: str + object_type: str + object_id: str + attribute: str + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + def __init__(self, data_subject_type: _Optional[str] = ..., data_subject_id: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ...) -> None: ... + +class JobChange(_message.Message): + __slots__ = ("job_id", "new_value", "old_value", "property_name") + JOB_ID_FIELD_NUMBER: _ClassVar[int] + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + job_id: str + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + property_name: str + def __init__(self, job_id: _Optional[str] = ..., new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ...) -> None: ... + +class JobCreate(_message.Message): + __slots__ = ("job_id",) + JOB_ID_FIELD_NUMBER: _ClassVar[int] + job_id: str + def __init__(self, job_id: _Optional[str] = ...) -> None: ... + +class JobDelete(_message.Message): + __slots__ = ("job_id",) + JOB_ID_FIELD_NUMBER: _ClassVar[int] + job_id: str + def __init__(self, job_id: _Optional[str] = ...) -> None: ... + +class JobStatusChange(_message.Message): + __slots__ = ("job_id", "new_value", "old_value", "property_name") + JOB_ID_FIELD_NUMBER: _ClassVar[int] + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + job_id: str + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + property_name: str + def __init__(self, job_id: _Optional[str] = ..., new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ...) -> None: ... + +class MaliciousRequestDetected(_message.Message): + __slots__ = ("parameter", "expected_value", "received_value", "behavior") + PARAMETER_FIELD_NUMBER: _ClassVar[int] + EXPECTED_VALUE_FIELD_NUMBER: _ClassVar[int] + RECEIVED_VALUE_FIELD_NUMBER: _ClassVar[int] + BEHAVIOR_FIELD_NUMBER: _ClassVar[int] + parameter: str + expected_value: str + received_value: str + behavior: MaliciousBehavior + def __init__(self, parameter: _Optional[str] = ..., expected_value: _Optional[str] = ..., received_value: _Optional[str] = ..., behavior: _Optional[_Union[MaliciousBehavior, str]] = ...) -> None: ... + +class PasswordChange(_message.Message): + __slots__ = ("user_id",) + USER_ID_FIELD_NUMBER: _ClassVar[int] + user_id: str + def __init__(self, user_id: _Optional[str] = ...) -> None: ... + +class PasswordExpiration(_message.Message): + __slots__ = ("user_id",) + USER_ID_FIELD_NUMBER: _ClassVar[int] + user_id: str + def __init__(self, user_id: _Optional[str] = ...) -> None: ... + +class PasswordReset(_message.Message): + __slots__ = ("user_id",) + USER_ID_FIELD_NUMBER: _ClassVar[int] + user_id: str + def __init__(self, user_id: _Optional[str] = ...) -> None: ... + +class TenantModification(_message.Message): + __slots__ = ("new_value", "old_value", "property_name", "tenant_id") + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + TENANT_ID_FIELD_NUMBER: _ClassVar[int] + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + property_name: str + tenant_id: str + def __init__(self, new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ..., tenant_id: _Optional[str] = ...) -> None: ... + +class TenantOffboarding(_message.Message): + __slots__ = ("tenant_id",) + TENANT_ID_FIELD_NUMBER: _ClassVar[int] + tenant_id: str + def __init__(self, tenant_id: _Optional[str] = ...) -> None: ... + +class TenantOnboarding(_message.Message): + __slots__ = ("tenant_id",) + TENANT_ID_FIELD_NUMBER: _ClassVar[int] + tenant_id: str + def __init__(self, tenant_id: _Optional[str] = ...) -> None: ... + +class UnauthenticatedRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class UnauthorizedRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class UserActivate(_message.Message): + __slots__ = ("user_id",) + USER_ID_FIELD_NUMBER: _ClassVar[int] + user_id: str + def __init__(self, user_id: _Optional[str] = ...) -> None: ... + +class UserBlock(_message.Message): + __slots__ = ("user_id",) + USER_ID_FIELD_NUMBER: _ClassVar[int] + user_id: str + def __init__(self, user_id: _Optional[str] = ...) -> None: ... + +class UserCreate(_message.Message): + __slots__ = ("user_id",) + USER_ID_FIELD_NUMBER: _ClassVar[int] + user_id: str + def __init__(self, user_id: _Optional[str] = ...) -> None: ... + +class UserDataModification(_message.Message): + __slots__ = ("new_value", "old_value", "property_name", "user_id") + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + property_name: str + user_id: str + def __init__(self, new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ..., user_id: _Optional[str] = ...) -> None: ... + +class UserDelete(_message.Message): + __slots__ = ("user_id",) + USER_ID_FIELD_NUMBER: _ClassVar[int] + user_id: str + def __init__(self, user_id: _Optional[str] = ...) -> None: ... + +class UserImpersonationStart(_message.Message): + __slots__ = ("user_initiator_id", "user_initiator_type", "user_impersonated_id", "user_impersonated_type", "context") + USER_INITIATOR_ID_FIELD_NUMBER: _ClassVar[int] + USER_INITIATOR_TYPE_FIELD_NUMBER: _ClassVar[int] + USER_IMPERSONATED_ID_FIELD_NUMBER: _ClassVar[int] + USER_IMPERSONATED_TYPE_FIELD_NUMBER: _ClassVar[int] + CONTEXT_FIELD_NUMBER: _ClassVar[int] + user_initiator_id: str + user_initiator_type: UserType + user_impersonated_id: str + user_impersonated_type: UserType + context: str + def __init__(self, user_initiator_id: _Optional[str] = ..., user_initiator_type: _Optional[_Union[UserType, str]] = ..., user_impersonated_id: _Optional[str] = ..., user_impersonated_type: _Optional[_Union[UserType, str]] = ..., context: _Optional[str] = ...) -> None: ... + +class UserImpersonationFinish(_message.Message): + __slots__ = ("user_initiator_id", "user_initiator_type", "user_impersonated_id", "user_impersonated_type", "context") + USER_INITIATOR_ID_FIELD_NUMBER: _ClassVar[int] + USER_INITIATOR_TYPE_FIELD_NUMBER: _ClassVar[int] + USER_IMPERSONATED_ID_FIELD_NUMBER: _ClassVar[int] + USER_IMPERSONATED_TYPE_FIELD_NUMBER: _ClassVar[int] + CONTEXT_FIELD_NUMBER: _ClassVar[int] + user_initiator_id: str + user_initiator_type: UserType + user_impersonated_id: str + user_impersonated_type: UserType + context: str + def __init__(self, user_initiator_id: _Optional[str] = ..., user_initiator_type: _Optional[_Union[UserType, str]] = ..., user_impersonated_id: _Optional[str] = ..., user_impersonated_type: _Optional[_Union[UserType, str]] = ..., context: _Optional[str] = ...) -> None: ... + +class UserLock(_message.Message): + __slots__ = ("user_id",) + USER_ID_FIELD_NUMBER: _ClassVar[int] + user_id: str + def __init__(self, user_id: _Optional[str] = ...) -> None: ... + +class UserUnlock(_message.Message): + __slots__ = ("user_id",) + USER_ID_FIELD_NUMBER: _ClassVar[int] + user_id: str + def __init__(self, user_id: _Optional[str] = ...) -> None: ... + +class UserVerify(_message.Message): + __slots__ = ("user_id",) + USER_ID_FIELD_NUMBER: _ClassVar[int] + user_id: str + def __init__(self, user_id: _Optional[str] = ...) -> None: ... + +class UserLoginFailure(_message.Message): + __slots__ = ("failure_reason", "method") + FAILURE_REASON_FIELD_NUMBER: _ClassVar[int] + METHOD_FIELD_NUMBER: _ClassVar[int] + failure_reason: FailureReason + method: LoginMethod + def __init__(self, failure_reason: _Optional[_Union[FailureReason, str]] = ..., method: _Optional[_Union[LoginMethod, str]] = ...) -> None: ... + +class UserLoginSuccess(_message.Message): + __slots__ = ("is_admin", "method", "mfa_type", "user_type") + IS_ADMIN_FIELD_NUMBER: _ClassVar[int] + METHOD_FIELD_NUMBER: _ClassVar[int] + MFA_TYPE_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + is_admin: bool + method: LoginMethod + mfa_type: MfaType + user_type: UserType + def __init__(self, is_admin: _Optional[bool] = ..., method: _Optional[_Union[LoginMethod, str]] = ..., mfa_type: _Optional[_Union[MfaType, str]] = ..., user_type: _Optional[_Union[UserType, str]] = ...) -> None: ... + +class UserLogoff(_message.Message): + __slots__ = ("logoff_type",) + LOGOFF_TYPE_FIELD_NUMBER: _ClassVar[int] + logoff_type: LogoffType + def __init__(self, logoff_type: _Optional[_Union[LogoffType, str]] = ...) -> None: ... + +class ZzzCustomEvent(_message.Message): + __slots__ = ("custom",) + CUSTOM_FIELD_NUMBER: _ClassVar[int] + custom: _struct_pb2.Value + def __init__(self, custom: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ...) -> None: ... + +class CMKOnboarding(_message.Message): + __slots__ = ("system_id", "cmk_id") + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + system_id: str + cmk_id: str + def __init__(self, system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class CMKOffboarding(_message.Message): + __slots__ = ("system_id", "cmk_id") + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + system_id: str + cmk_id: str + def __init__(self, system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class CMKSwitch(_message.Message): + __slots__ = ("system_id", "cmk_id_old", "cmk_id_new") + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_OLD_FIELD_NUMBER: _ClassVar[int] + CMK_ID_NEW_FIELD_NUMBER: _ClassVar[int] + system_id: str + cmk_id_old: str + cmk_id_new: str + def __init__(self, system_id: _Optional[str] = ..., cmk_id_old: _Optional[str] = ..., cmk_id_new: _Optional[str] = ...) -> None: ... + +class CMKTenantModification(_message.Message): + __slots__ = ("system_id", "cmk_id", "cmk_action") + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ACTION_FIELD_NUMBER: _ClassVar[int] + system_id: str + cmk_id: str + cmk_action: CMKAction + def __init__(self, system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ..., cmk_action: _Optional[_Union[CMKAction, str]] = ...) -> None: ... + +class CMKCreate(_message.Message): + __slots__ = ("cmk_id", "kms_system_id") + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + cmk_id: str + kms_system_id: str + def __init__(self, cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class CMKDelete(_message.Message): + __slots__ = ("cmk_id", "kms_system_id") + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + cmk_id: str + kms_system_id: str + def __init__(self, cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class CMKRestore(_message.Message): + __slots__ = ("cmk_id", "kms_system_id") + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + cmk_id: str + kms_system_id: str + def __init__(self, cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class CMKDisable(_message.Message): + __slots__ = ("cmk_id", "kms_system_id") + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + cmk_id: str + kms_system_id: str + def __init__(self, cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class CMKEnable(_message.Message): + __slots__ = ("cmk_id", "kms_system_id") + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + cmk_id: str + kms_system_id: str + def __init__(self, cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class CMKRotate(_message.Message): + __slots__ = ("cmk_id",) + CMK_ID_FIELD_NUMBER: _ClassVar[int] + cmk_id: str + def __init__(self, cmk_id: _Optional[str] = ...) -> None: ... + +class KeyCreate(_message.Message): + __slots__ = ("key_type", "key_id", "system_id", "cmk_id") + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class KeyDelete(_message.Message): + __slots__ = ("key_type", "key_id", "system_id", "cmk_id") + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class KeyRestore(_message.Message): + __slots__ = ("key_type", "key_id", "system_id", "cmk_id") + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class KeyPurge(_message.Message): + __slots__ = ("key_type", "key_id", "system_id", "cmk_id") + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class KeyRotate(_message.Message): + __slots__ = ("key_type", "key_id", "system_id", "cmk_id") + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class KeyEnable(_message.Message): + __slots__ = ("key_type", "key_id", "system_id", "cmk_id") + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class KeyDisable(_message.Message): + __slots__ = ("key_type", "key_id", "system_id", "cmk_id") + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class CMKUnavailable(_message.Message): + __slots__ = ("cmk_id", "kms_system_id") + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + cmk_id: str + kms_system_id: str + def __init__(self, cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class CMKAvailable(_message.Message): + __slots__ = ("cmk_id", "kms_system_id") + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + cmk_id: str + kms_system_id: str + def __init__(self, cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class CMKDetach(_message.Message): + __slots__ = ("cmk_id", "kms_system_id", "system_id") + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + cmk_id: str + kms_system_id: str + system_id: str + def __init__(self, cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ..., system_id: _Optional[str] = ...) -> None: ... diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v2/__init__.py b/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v2/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v2/auditevent_pb2.py b/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v2/auditevent_pb2.py new file mode 100644 index 0000000..c507436 --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v2/auditevent_pb2.py @@ -0,0 +1,464 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: sap/auditlog/auditevent/v2/auditevent.proto +# Protobuf Python Version: 6.33.5 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 33, + 5, + '', + 'sap/auditlog/auditevent/v2/auditevent.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n+sap/auditlog/auditevent/v2/auditevent.proto\x12\x1asap.auditlog.auditevent.v2\x1a\x1b\x62uf/validate/validate.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xbc\x03\n\x06\x43ommon\x12\x38\n\ttimestamp\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12\x1b\n\tsource_ip\x18\x02 \x03(\tR\x08sourceIp\x12\x30\n\x14user_impersonated_id\x18\x03 \x01(\tR\x12userImpersonatedId\x12*\n\x11user_initiator_id\x18\x04 \x01(\tR\x0fuserInitiatorId\x12\x15\n\x06\x61pp_id\x18\x05 \x01(\tR\x05\x61ppId\x12\x1b\n\ttenant_id\x18\x06 \x01(\tR\x08tenantId\x12\x35\n\x17user_session_context_id\x18\x07 \x01(\tR\x14userSessionContextId\x12S\n\x0b\x61pp_context\x18\x08 \x03(\x0b\x32\x32.sap.auditlog.auditevent.v2.Common.AppContextEntryR\nappContext\x1a=\n\x0f\x41ppContextEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"u\n\rAuditlogClear\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12(\n\x10number_of_events\x18\x02 \x01(\x05R\x0enumberOfEvents\"M\n\x0f\x41uditlogDisable\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\"L\n\x0e\x41uditlogEnable\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\"\xda\x01\n\x18\x41uthnPrivilegeToGroupAdd\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1d\n\x05group\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05group\x12%\n\tprivilege\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tprivilege\x12\x1f\n\x0bobject_type\x18\x04 \x01(\tR\nobjectType\x12\x1b\n\tobject_id\x18\x05 \x01(\tR\x08objectId\"\xdd\x01\n\x1b\x41uthnPrivilegeToGroupDelete\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1d\n\x05group\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05group\x12%\n\tprivilege\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tprivilege\x12\x1f\n\x0bobject_type\x18\x04 \x01(\tR\nobjectType\x12\x1b\n\tobject_id\x18\x05 \x01(\tR\x08objectId\"\xd7\x01\n\x17\x41uthnPrivilegeToRoleAdd\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12%\n\tprivilege\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tprivilege\x12\x1b\n\x04role\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04role\x12\x1f\n\x0bobject_type\x18\x04 \x01(\tR\nobjectType\x12\x1b\n\tobject_id\x18\x05 \x01(\tR\x08objectId\"\xda\x01\n\x1a\x41uthnPrivilegeToRoleDelete\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12%\n\tprivilege\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tprivilege\x12\x1b\n\x04role\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04role\x12\x1f\n\x0bobject_type\x18\x04 \x01(\tR\nobjectType\x12\x1b\n\tobject_id\x18\x05 \x01(\tR\x08objectId\"\x9a\x02\n\x17\x41uthnPrivilegeToUserAdd\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12%\n\tprivilege\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tprivilege\x12\x1b\n\x04user\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04user\x12\x1f\n\x0bobject_type\x18\x04 \x01(\tR\nobjectType\x12\x1b\n\tobject_id\x18\x05 \x01(\tR\x08objectId\x12\x41\n\tuser_type\x18\x06 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\"\x9d\x02\n\x1a\x41uthnPrivilegeToUserDelete\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12%\n\tprivilege\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tprivilege\x12\x1b\n\x04user\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04user\x12\x1f\n\x0bobject_type\x18\x04 \x01(\tR\nobjectType\x12\x1b\n\tobject_id\x18\x05 \x01(\tR\x08objectId\x12\x41\n\tuser_type\x18\x06 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\"\x8d\x01\n\x13\x41uthnRoleToGroupAdd\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1d\n\x05group\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05group\x12\x1b\n\x04role\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04role\"\x90\x01\n\x16\x41uthnRoleToGroupDelete\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1d\n\x05group\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05group\x12\x1b\n\x04role\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04role\"\xcd\x01\n\x12\x41uthnRoleToUserAdd\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1b\n\x04role\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04role\x12\x1b\n\x04user\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04user\x12\x41\n\tuser_type\x18\x04 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\"\xd0\x01\n\x15\x41uthnRoleToUserDelete\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1b\n\x04role\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04role\x12\x1b\n\x04user\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04user\x12\x41\n\tuser_type\x18\x04 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\"\xd0\x01\n\x13\x41uthnUserToGroupAdd\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1d\n\x05group\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05group\x12\x1b\n\x04user\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04user\x12\x41\n\tuser_type\x18\x04 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\"\xd3\x01\n\x16\x41uthnUserToGroupDelete\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1d\n\x05group\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05group\x12\x1b\n\x04user\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04user\x12\x41\n\tuser_type\x18\x04 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\"\xf1\x01\n\x10\x43onfigurationAdd\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\x12,\n\rproperty_name\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0cpropertyName\x12(\n\x0bobject_type\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x18\x14R\nobjectType\x12\x1b\n\tobject_id\x18\x05 \x01(\tR\x08objectId\"\xb0\x02\n\x13\x43onfigurationChange\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x33\n\tnew_value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08newValue\x12\x33\n\told_value\x18\x03 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08oldValue\x12,\n\rproperty_name\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0cpropertyName\x12(\n\x0bobject_type\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x18\x14R\nobjectType\x12\x1b\n\tobject_id\x18\x06 \x01(\tR\x08objectId\"\xf4\x01\n\x13\x43onfigurationDelete\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\x12,\n\rproperty_name\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0cpropertyName\x12(\n\x0bobject_type\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x18\x14R\nobjectType\x12\x1b\n\tobject_id\x18\x05 \x01(\tR\x08objectId\"\xd1\x01\n\x10\x43redentialCreate\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12,\n\rcredential_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0c\x63redentialId\x12S\n\x0f\x63redential_type\x18\x03 \x01(\x0e\x32*.sap.auditlog.auditevent.v2.CredentialTypeR\x0e\x63redentialType\"\xd1\x01\n\x10\x43redentialDelete\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12,\n\rcredential_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0c\x63redentialId\x12S\n\x0f\x63redential_type\x18\x03 \x01(\x0e\x32*.sap.auditlog.auditevent.v2.CredentialTypeR\x0e\x63redentialType\"\x9a\x02\n\x14\x43redentialExpiration\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12,\n\rcredential_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0c\x63redentialId\x12S\n\x0f\x63redential_type\x18\x03 \x01(\x0e\x32*.sap.auditlog.auditevent.v2.CredentialTypeR\x0e\x63redentialType\x12\x43\n\x0f\x65xpiration_date\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0e\x65xpirationDate\"\x9a\x02\n\x14\x43redentialRevokation\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12,\n\rcredential_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0c\x63redentialId\x12S\n\x0f\x63redential_type\x18\x03 \x01(\x0e\x32*.sap.auditlog.auditevent.v2.CredentialTypeR\x0e\x63redentialType\x12\x43\n\x0frevokation_date\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0erevokationDate\"\x89\x02\n\x0f\x44\x61taModelChange\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\"\n\x08model_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07modelId\x12\x33\n\tnew_value\x18\x03 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08newValue\x12\x33\n\told_value\x18\x04 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08oldValue\x12,\n\rproperty_name\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0cpropertyName\"q\n\x0f\x44\x61taModelCreate\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\"\n\x08model_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07modelId\"q\n\x0f\x44\x61taModelDelete\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\"\n\x08model_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07modelId\"\x97\x03\n\nDataAccess\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12*\n\x0c\x63hannel_type\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0b\x63hannelType\x12&\n\nchannel_id\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tchannelId\x12(\n\x0bobject_type\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nobjectType\x12$\n\tobject_id\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08objectId\x12%\n\tattribute\x18\x06 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tattribute\x12,\n\x05value\x18\x07 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\x12+\n\x0f\x61ttachment_type\x18\x08 \x01(\tB\x02\x18\x01R\x0e\x61ttachmentType\x12\'\n\rattachment_id\x18\t \x01(\tB\x02\x18\x01R\x0c\x61ttachmentId\"\xed\x01\n\nDataCreate\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12(\n\x0bobject_type\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nobjectType\x12$\n\tobject_id\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08objectId\x12%\n\tattribute\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tattribute\x12,\n\x05value\x18\x05 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\"\xed\x01\n\nDataDelete\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12(\n\x0bobject_type\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nobjectType\x12$\n\tobject_id\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08objectId\x12%\n\tattribute\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tattribute\x12,\n\x05value\x18\x05 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\"\xaf\x02\n\x10\x44\x61taModification\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12(\n\x0bobject_type\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nobjectType\x12$\n\tobject_id\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08objectId\x12%\n\tattribute\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tattribute\x12\x33\n\tnew_value\x18\x05 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08newValue\x12\x33\n\told_value\x18\x06 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08oldValue\"\xc8\x02\n\nDataExport\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12T\n\x0c\x63hannel_type\x18\x02 \x01(\x0e\x32\x31.sap.auditlog.auditevent.v2.DataExportChannelTypeR\x0b\x63hannelType\x12&\n\nchannel_id\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tchannelId\x12(\n\x0bobject_type\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nobjectType\x12$\n\tobject_id\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08objectId\x12\x30\n\x0f\x64\x65stination_uri\x18\x06 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0e\x64\x65stinationUri\"\x80\x04\n\rDppDataAccess\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12*\n\x0c\x63hannel_type\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0b\x63hannelType\x12&\n\nchannel_id\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tchannelId\x12\x33\n\x11\x64\x61ta_subject_type\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0f\x64\x61taSubjectType\x12/\n\x0f\x64\x61ta_subject_id\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\rdataSubjectId\x12(\n\x0bobject_type\x18\x06 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nobjectType\x12$\n\tobject_id\x18\x07 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08objectId\x12%\n\tattribute\x18\x08 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tattribute\x12,\n\x05value\x18\t \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\x12+\n\x0f\x61ttachment_type\x18\n \x01(\tB\x02\x18\x01R\x0e\x61ttachmentType\x12\'\n\rattachment_id\x18\x0b \x01(\tB\x02\x18\x01R\x0c\x61ttachmentId\"\xd6\x02\n\rDppDataCreate\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x33\n\x11\x64\x61ta_subject_type\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0f\x64\x61taSubjectType\x12/\n\x0f\x64\x61ta_subject_id\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\rdataSubjectId\x12(\n\x0bobject_type\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nobjectType\x12$\n\tobject_id\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08objectId\x12%\n\tattribute\x18\x06 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tattribute\x12,\n\x05value\x18\x07 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\"\xd6\x02\n\rDppDataDelete\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x33\n\x11\x64\x61ta_subject_type\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0f\x64\x61taSubjectType\x12/\n\x0f\x64\x61ta_subject_id\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\rdataSubjectId\x12(\n\x0bobject_type\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nobjectType\x12$\n\tobject_id\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08objectId\x12%\n\tattribute\x18\x06 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tattribute\x12,\n\x05value\x18\x07 \x01(\x0b\x32\x16.google.protobuf.ValueR\x05value\"\x98\x03\n\x13\x44ppDataModification\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x33\n\x11\x64\x61ta_subject_type\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0f\x64\x61taSubjectType\x12/\n\x0f\x64\x61ta_subject_id\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\rdataSubjectId\x12(\n\x0bobject_type\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nobjectType\x12$\n\tobject_id\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08objectId\x12%\n\tattribute\x18\x06 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tattribute\x12\x33\n\tnew_value\x18\x07 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08newValue\x12\x33\n\told_value\x18\x08 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08oldValue\"\xff\x01\n\tJobChange\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1e\n\x06job_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05jobId\x12\x33\n\tnew_value\x18\x03 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08newValue\x12\x33\n\told_value\x18\x04 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08oldValue\x12,\n\rproperty_name\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0cpropertyName\"g\n\tJobCreate\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1e\n\x06job_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05jobId\"g\n\tJobDelete\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1e\n\x06job_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05jobId\"\x85\x02\n\x0fJobStatusChange\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1e\n\x06job_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05jobId\x12\x33\n\tnew_value\x18\x03 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08newValue\x12\x33\n\told_value\x18\x04 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08oldValue\x12,\n\rproperty_name\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0cpropertyName\"\x96\x02\n\x18MaliciousRequestDetected\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12%\n\tparameter\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tparameter\x12%\n\x0e\x65xpected_value\x18\x03 \x01(\tR\rexpectedValue\x12%\n\x0ereceived_value\x18\x04 \x01(\tR\rreceivedValue\x12I\n\x08\x62\x65havior\x18\x05 \x01(\x0e\x32-.sap.auditlog.auditevent.v2.MaliciousBehaviorR\x08\x62\x65havior\"n\n\x0ePasswordChange\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12 \n\x07user_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\"r\n\x12PasswordExpiration\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12 \n\x07user_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\"m\n\rPasswordReset\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12 \n\x07user_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\"\x8e\x02\n\x12TenantModification\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x33\n\tnew_value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08newValue\x12\x33\n\told_value\x18\x03 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08oldValue\x12,\n\rproperty_name\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0cpropertyName\x12$\n\ttenant_id\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08tenantId\"u\n\x11TenantOffboarding\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12$\n\ttenant_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08tenantId\"t\n\x10TenantOnboarding\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12$\n\ttenant_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08tenantId\"T\n\x16UnauthenticatedRequest\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\"~\n\x13UnauthorizedRequest\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12+\n\x11unauthorized_type\x18\x02 \x01(\tR\x10unauthorizedType\"\xaf\x01\n\x0cUserActivate\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12 \n\x07user_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\x12\x41\n\tuser_type\x18\x03 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\"\xac\x01\n\tUserBlock\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12 \n\x07user_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\x12\x41\n\tuser_type\x18\x03 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\"\xad\x01\n\nUserCreate\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12 \n\x07user_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\x12\x41\n\tuser_type\x18\x03 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\"\xcf\x02\n\x14UserDataModification\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x33\n\tnew_value\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08newValue\x12\x33\n\told_value\x18\x03 \x01(\x0b\x32\x16.google.protobuf.ValueR\x08oldValue\x12,\n\rproperty_name\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0cpropertyName\x12 \n\x07user_id\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\x12\x41\n\tuser_type\x18\x06 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\"\xad\x01\n\nUserDelete\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12 \n\x07user_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\x12\x41\n\tuser_type\x18\x03 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\"\x99\x03\n\x16UserImpersonationStart\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x33\n\x11user_initiator_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0fuserInitiatorId\x12T\n\x13user_initiator_type\x18\x03 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x11userInitiatorType\x12\x39\n\x14user_impersonated_id\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x12userImpersonatedId\x12Z\n\x16user_impersonated_type\x18\x05 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x14userImpersonatedType\x12!\n\x07\x63ontext\x18\x06 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07\x63ontext\"\x9a\x03\n\x17UserImpersonationFinish\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x33\n\x11user_initiator_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0fuserInitiatorId\x12T\n\x13user_initiator_type\x18\x03 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x11userInitiatorType\x12\x39\n\x14user_impersonated_id\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x12userImpersonatedId\x12Z\n\x16user_impersonated_type\x18\x05 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x14userImpersonatedType\x12!\n\x07\x63ontext\x18\x06 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07\x63ontext\"\xab\x01\n\x08UserLock\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12 \n\x07user_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\x12\x41\n\tuser_type\x18\x03 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\"\xad\x01\n\nUserUnlock\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12 \n\x07user_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\x12\x41\n\tuser_type\x18\x03 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\"\xad\x01\n\nUserVerify\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12 \n\x07user_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06userId\x12\x41\n\tuser_type\x18\x03 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\"\xd1\x03\n\x10UserLoginFailure\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12P\n\x0e\x66\x61ilure_reason\x18\x02 \x01(\x0e\x32).sap.auditlog.auditevent.v2.FailureReasonR\rfailureReason\x12?\n\x06method\x18\x03 \x01(\x0e\x32\'.sap.auditlog.auditevent.v2.LoginMethodR\x06method\x12\x19\n\x08is_admin\x18\x04 \x01(\x08R\x07isAdmin\x12>\n\x08mfa_type\x18\x05 \x01(\x0e\x32#.sap.auditlog.auditevent.v2.MfaTypeR\x07mfaType\x12\x41\n\tuser_type\x18\x06 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\x12P\n\x0elogin_protocol\x18\x07 \x01(\x0e\x32).sap.auditlog.auditevent.v2.LoginProtocolR\rloginProtocol\"\xff\x02\n\x10UserLoginSuccess\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x19\n\x08is_admin\x18\x02 \x01(\x08R\x07isAdmin\x12?\n\x06method\x18\x03 \x01(\x0e\x32\'.sap.auditlog.auditevent.v2.LoginMethodR\x06method\x12>\n\x08mfa_type\x18\x04 \x01(\x0e\x32#.sap.auditlog.auditevent.v2.MfaTypeR\x07mfaType\x12\x41\n\tuser_type\x18\x05 \x01(\x0e\x32$.sap.auditlog.auditevent.v2.UserTypeR\x08userType\x12P\n\x0elogin_protocol\x18\x06 \x01(\x0e\x32).sap.auditlog.auditevent.v2.LoginProtocolR\rloginProtocol\"\xe3\x01\n\nUserLogoff\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12G\n\x0blogoff_type\x18\x02 \x01(\x0e\x32&.sap.auditlog.auditevent.v2.LogoffTypeR\nlogoffType\x12P\n\x0elogin_protocol\x18\x03 \x01(\x0e\x32).sap.auditlog.auditevent.v2.LoginProtocolR\rloginProtocol\"|\n\x0eZzzCustomEvent\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12.\n\x06\x63ustom\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueR\x06\x63ustom\"\x7f\n\rCMKOnboarding\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1b\n\tsystem_id\x18\x02 \x01(\tR\x08systemId\x12\x15\n\x06\x63mk_id\x18\x03 \x01(\tR\x05\x63mkId\"\x80\x01\n\x0e\x43MKOffboarding\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1b\n\tsystem_id\x18\x02 \x01(\tR\x08systemId\x12\x15\n\x06\x63mk_id\x18\x03 \x01(\tR\x05\x63mkId\"\xa0\x01\n\tCMKSwitch\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1b\n\tsystem_id\x18\x02 \x01(\tR\x08systemId\x12\x1c\n\ncmk_id_old\x18\x03 \x01(\tR\x08\x63mkIdOld\x12\x1c\n\ncmk_id_new\x18\x04 \x01(\tR\x08\x63mkIdNew\"\xcd\x01\n\x15\x43MKTenantModification\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1b\n\tsystem_id\x18\x02 \x01(\tR\x08systemId\x12\x15\n\x06\x63mk_id\x18\x03 \x01(\tR\x05\x63mkId\x12\x44\n\ncmk_action\x18\x04 \x01(\x0e\x32%.sap.auditlog.auditevent.v2.CMKActionR\tcmkAction\"\x82\x01\n\tCMKCreate\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x15\n\x06\x63mk_id\x18\x02 \x01(\tR\x05\x63mkId\x12\"\n\rkms_system_id\x18\x03 \x01(\tR\x0bkmsSystemId\"\x82\x01\n\tCMKDelete\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x15\n\x06\x63mk_id\x18\x02 \x01(\tR\x05\x63mkId\x12\"\n\rkms_system_id\x18\x03 \x01(\tR\x0bkmsSystemId\"\x83\x01\n\nCMKRestore\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x15\n\x06\x63mk_id\x18\x02 \x01(\tR\x05\x63mkId\x12\"\n\rkms_system_id\x18\x03 \x01(\tR\x0bkmsSystemId\"\x83\x01\n\nCMKDisable\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x15\n\x06\x63mk_id\x18\x02 \x01(\tR\x05\x63mkId\x12\"\n\rkms_system_id\x18\x03 \x01(\tR\x0bkmsSystemId\"\x82\x01\n\tCMKEnable\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x15\n\x06\x63mk_id\x18\x02 \x01(\tR\x05\x63mkId\x12\"\n\rkms_system_id\x18\x03 \x01(\tR\x0bkmsSystemId\"^\n\tCMKRotate\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x15\n\x06\x63mk_id\x18\x02 \x01(\tR\x05\x63mkId\"\xd2\x01\n\tKeyCreate\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12>\n\x08key_type\x18\x02 \x01(\x0e\x32#.sap.auditlog.auditevent.v2.KeyTypeR\x07keyType\x12\x15\n\x06key_id\x18\x03 \x01(\tR\x05keyId\x12\x1b\n\tsystem_id\x18\x04 \x01(\tR\x08systemId\x12\x15\n\x06\x63mk_id\x18\x05 \x01(\tR\x05\x63mkId\"\xd2\x01\n\tKeyDelete\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12>\n\x08key_type\x18\x02 \x01(\x0e\x32#.sap.auditlog.auditevent.v2.KeyTypeR\x07keyType\x12\x15\n\x06key_id\x18\x03 \x01(\tR\x05keyId\x12\x1b\n\tsystem_id\x18\x04 \x01(\tR\x08systemId\x12\x15\n\x06\x63mk_id\x18\x05 \x01(\tR\x05\x63mkId\"\xd3\x01\n\nKeyRestore\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12>\n\x08key_type\x18\x02 \x01(\x0e\x32#.sap.auditlog.auditevent.v2.KeyTypeR\x07keyType\x12\x15\n\x06key_id\x18\x03 \x01(\tR\x05keyId\x12\x1b\n\tsystem_id\x18\x04 \x01(\tR\x08systemId\x12\x15\n\x06\x63mk_id\x18\x05 \x01(\tR\x05\x63mkId\"\xd1\x01\n\x08KeyPurge\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12>\n\x08key_type\x18\x02 \x01(\x0e\x32#.sap.auditlog.auditevent.v2.KeyTypeR\x07keyType\x12\x15\n\x06key_id\x18\x03 \x01(\tR\x05keyId\x12\x1b\n\tsystem_id\x18\x04 \x01(\tR\x08systemId\x12\x15\n\x06\x63mk_id\x18\x05 \x01(\tR\x05\x63mkId\"\xd2\x01\n\tKeyRotate\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12>\n\x08key_type\x18\x02 \x01(\x0e\x32#.sap.auditlog.auditevent.v2.KeyTypeR\x07keyType\x12\x15\n\x06key_id\x18\x03 \x01(\tR\x05keyId\x12\x1b\n\tsystem_id\x18\x04 \x01(\tR\x08systemId\x12\x15\n\x06\x63mk_id\x18\x05 \x01(\tR\x05\x63mkId\"\xd2\x01\n\tKeyEnable\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12>\n\x08key_type\x18\x02 \x01(\x0e\x32#.sap.auditlog.auditevent.v2.KeyTypeR\x07keyType\x12\x15\n\x06key_id\x18\x03 \x01(\tR\x05keyId\x12\x1b\n\tsystem_id\x18\x04 \x01(\tR\x08systemId\x12\x15\n\x06\x63mk_id\x18\x05 \x01(\tR\x05\x63mkId\"\xd3\x01\n\nKeyDisable\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12>\n\x08key_type\x18\x02 \x01(\x0e\x32#.sap.auditlog.auditevent.v2.KeyTypeR\x07keyType\x12\x15\n\x06key_id\x18\x03 \x01(\tR\x05keyId\x12\x1b\n\tsystem_id\x18\x04 \x01(\tR\x08systemId\x12\x15\n\x06\x63mk_id\x18\x05 \x01(\tR\x05\x63mkId\"\xd3\x01\n\nKeySuspend\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12>\n\x08key_type\x18\x02 \x01(\x0e\x32#.sap.auditlog.auditevent.v2.KeyTypeR\x07keyType\x12\x15\n\x06key_id\x18\x03 \x01(\tR\x05keyId\x12\x1b\n\tsystem_id\x18\x04 \x01(\tR\x08systemId\x12\x15\n\x06\x63mk_id\x18\x05 \x01(\tR\x05\x63mkId\"\xdb\x01\n\x12KeyOnboardKeyChain\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12>\n\x08key_type\x18\x02 \x01(\x0e\x32#.sap.auditlog.auditevent.v2.KeyTypeR\x07keyType\x12\x15\n\x06key_id\x18\x03 \x01(\tR\x05keyId\x12\x1b\n\tsystem_id\x18\x04 \x01(\tR\x08systemId\x12\x15\n\x06\x63mk_id\x18\x05 \x01(\tR\x05\x63mkId\"\x80\x01\n\x07\x43MKDrop\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x15\n\x06\x63mk_id\x18\x02 \x01(\tR\x05\x63mkId\x12\"\n\rkms_system_id\x18\x03 \x01(\tR\x0bkmsSystemId\"\x83\x01\n\nCMKSuspend\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x15\n\x06\x63mk_id\x18\x02 \x01(\tR\x05\x63mkId\x12\"\n\rkms_system_id\x18\x03 \x01(\tR\x0bkmsSystemId\"\xd5\x01\n\x0cVirusFinding\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x1d\n\nvirus_name\x18\x02 \x01(\tR\tvirusName\x12\x1b\n\tfile_name\x18\x03 \x01(\tR\x08\x66ileName\x12M\n\rvirus_channel\x18\x04 \x01(\x0e\x32(.sap.auditlog.auditevent.v2.VirusChannelR\x0cvirusChannel\"\x87\x01\n\x0e\x43MKUnavailable\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x15\n\x06\x63mk_id\x18\x02 \x01(\tR\x05\x63mkId\x12\"\n\rkms_system_id\x18\x03 \x01(\tR\x0bkmsSystemId\"\x85\x01\n\x0c\x43MKAvailable\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x15\n\x06\x63mk_id\x18\x02 \x01(\tR\x05\x63mkId\x12\"\n\rkms_system_id\x18\x03 \x01(\tR\x0bkmsSystemId\"\x9f\x01\n\tCMKDetach\x12:\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\".sap.auditlog.auditevent.v2.CommonR\x06\x63ommon\x12\x15\n\x06\x63mk_id\x18\x02 \x01(\tR\x05\x63mkId\x12\"\n\rkms_system_id\x18\x03 \x01(\tR\x0bkmsSystemId\x12\x1b\n\tsystem_id\x18\x04 \x01(\tR\x08systemId*\x8c\x01\n\x0e\x43redentialType\x12\x1f\n\x1b\x43REDENTIAL_TYPE_UNSPECIFIED\x10\x00\x12$\n CREDENTIAL_TYPE_X509_CERTIFICATE\x10\x01\x12\x17\n\x13\x43REDENTIAL_TYPE_KEY\x10\x02\x12\x1a\n\x16\x43REDENTIAL_TYPE_SECRET\x10\x03*\x8f\x06\n\rFailureReason\x12\x1e\n\x1a\x46\x41ILURE_REASON_UNSPECIFIED\x10\x00\x12\x1b\n\x17\x46\x41ILURE_REASON_PASSWORD\x10\x01\x12\x1d\n\x19\x46\x41ILURE_REASON_MFA_FAILED\x10\x02\x12!\n\x1d\x46\x41ILURE_REASON_USER_NOT_FOUND\x10\x03\x12\x1e\n\x1a\x46\x41ILURE_REASON_USER_LOCKED\x10\x04\x12\x1f\n\x1b\x46\x41ILURE_REASON_USER_BLOCKED\x10\x05\x12\"\n\x1e\x46\x41ILURE_REASON_USER_UNVERIFIED\x10\x06\x12\x1f\n\x1b\x46\x41ILURE_REASON_USER_EXPIRED\x10\x07\x12\x1f\n\x1b\x46\x41ILURE_REASON_USER_INVALID\x10\x08\x12&\n\"FAILURE_REASON_INSECURE_CONNECTION\x10\t\x12(\n$FAILURE_REASON_LOGIN_METHOD_DISABLED\x10\n\x12 \n\x1c\x46\x41ILURE_REASON_TOKEN_EXPIRED\x10\x0b\x12 \n\x1c\x46\x41ILURE_REASON_TOKEN_REVOKED\x10\x0c\x12 \n\x1c\x46\x41ILURE_REASON_TOKEN_INVALID\x10\r\x12\"\n\x1e\x46\x41ILURE_REASON_SESSION_EXPIRED\x10\x0e\x12\"\n\x1e\x46\x41ILURE_REASON_SESSION_REVOKED\x10\x0f\x12&\n\"FAILURE_REASON_CERTIFICATE_EXPIRED\x10\x10\x12&\n\"FAILURE_REASON_CERTIFICATE_REVOKED\x10\x11\x12&\n\"FAILURE_REASON_CERTIFICATE_INVALID\x10\x12\x12\x1b\n\x17\x46\x41ILURE_REASON_GEOBLOCK\x10\x13\x12 \n\x1c\x46\x41ILURE_REASON_MFA_REQUESTED\x10\x14\x12!\n\x1d\x46\x41ILURE_REASON_CRED_REQUESTED\x10\x15*\xbf\x05\n\x0bLoginMethod\x12\x1c\n\x18LOGIN_METHOD_UNSPECIFIED\x10\x00\x12 \n\x1cLOGIN_METHOD_OPEN_ID_CONNECT\x10\x01\x12\x15\n\x11LOGIN_METHOD_SAML\x10\x02\x12\x16\n\x12LOGIN_METHOD_SAML2\x10\x03\x12\x19\n\x15LOGIN_METHOD_EXTERNAL\x10\x04\x12\x17\n\x13LOGIN_METHOD_SPNEGO\x10\x05\x12\x19\n\x15LOGIN_METHOD_PASSWORD\x10\x06\x12\x1b\n\x17LOGIN_METHOD_RFC_TICKET\x10\x07\x12\x14\n\x10LOGIN_METHOD_SNC\x10\x08\x12\x1d\n\x19LOGIN_METHOD_LOGON_TICKET\x10\t\x12\x1c\n\x18LOGIN_METHOD_USER_SWITCH\x10\n\x12!\n\x1dLOGIN_METHOD_X509_CERTIFICATE\x10\x0b\x12\x1c\n\x18LOGIN_METHOD_APC_SESSION\x10\x0c\x12\x19\n\x15LOGIN_METHOD_INTERNAL\x10\r\x12\x17\n\x13LOGIN_METHOD_OAUTH2\x10\x0e\x12\"\n\x1eLOGIN_METHOD_REENTRANCE_TICKET\x10\x0f\x12\x1d\n\x19LOGIN_METHOD_HTTP_SESSION\x10\x10\x12!\n\x1dLOGIN_METHOD_ASSERTION_TICKET\x10\x11\x12\x1a\n\x16LOGIN_METHOD_REMCOOKIE\x10\x12\x12\x1a\n\x16LOGIN_METHOD_BIOMETRIC\x10\x13\x12\x19\n\x15LOGIN_METHOD_PASSCODE\x10\x14\x12\x17\n\x13LOGIN_METHOD_MOBSSO\x10\x15\x12\x1c\n\x18LOGIN_METHOD_EMAIL_TOKEN\x10\x16\x12\x1d\n\x19LOGIN_METHOD_BEARER_TOKEN\x10\x17*Z\n\nLogoffType\x12\x1b\n\x17LOGOFF_TYPE_UNSPECIFIED\x10\x00\x12\x17\n\x13LOGOFF_TYPE_REGULAR\x10\x01\x12\x16\n\x12LOGOFF_TYPE_FORCED\x10\x02*\xe8\x01\n\x11MaliciousBehavior\x12\"\n\x1eMALICIOUS_BEHAVIOR_UNSPECIFIED\x10\x00\x12%\n!MALICIOUS_BEHAVIOR_PARAMETER_SEEN\x10\x01\x12*\n&MALICIOUS_BEHAVIOR_PARAMETER_NOT_FOUND\x10\x02\x12+\n\'MALICIOUS_BEHAVIOR_PARAMETER_VALUE_SEEN\x10\x03\x12/\n+MALICIOUS_BEHAVIOR_PARAMETER_VALUE_MODIFIED\x10\x04*\x99\x01\n\x07MfaType\x12\x18\n\x14MFA_TYPE_UNSPECIFIED\x10\x00\x12\x11\n\rMFA_TYPE_NONE\x10\x01\x12\x10\n\x0cMFA_TYPE_RSA\x10\x02\x12\x11\n\rMFA_TYPE_TOTP\x10\x03\x12\x16\n\x12MFA_TYPE_WEB_AUTHN\x10\x04\x12\x10\n\x0cMFA_TYPE_SMS\x10\x05\x12\x12\n\x0eMFA_TYPE_EMAIL\x10\x06*`\n\x08UserType\x12\x19\n\x15USER_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\x17USER_TYPE_BUSINESS_USER\x10\x01\x12\x1c\n\x18USER_TYPE_TECHNICAL_USER\x10\x02*\xb7\x01\n\x15\x44\x61taExportChannelType\x12(\n$DATA_EXPORT_CHANNEL_TYPE_UNSPECIFIED\x10\x00\x12%\n!DATA_EXPORT_CHANNEL_TYPE_DOWNLOAD\x10\x01\x12\'\n#DATA_EXPORT_CHANNEL_TYPE_API_ACCESS\x10\x02\x12$\n DATA_EXPORT_CHANNEL_TYPE_PRINTER\x10\x03*\xb0\x01\n\x11\x45ventCategoryCode\x12\'\n#EVENT_CATEGORY_CODE_SEC_UNSPECIFIED\x10\x00\x12\x1b\n\x17\x45VENT_CATEGORY_CODE_IAM\x10\x01\x12\x1b\n\x17\x45VENT_CATEGORY_CODE_CFG\x10\x02\x12\x1b\n\x17\x45VENT_CATEGORY_CODE_DPP\x10\x03\x12\x1b\n\x17\x45VENT_CATEGORY_CODE_RAL\x10\x04*\xdc\x01\n\tCMKAction\x12\x1a\n\x16\x43MK_ACTION_UNSPECIFIED\x10\x00\x12\x16\n\x12\x43MK_ACTION_ONBOARD\x10\x01\x12\x14\n\x10\x43MK_ACTION_BLOCK\x10\x02\x12\x17\n\x13\x43MK_ACTION_SHUTDOWN\x10\x03\x12\x1b\n\x17\x43MK_ACTION_CSEKFALLBACK\x10\x04\x12\x16\n\x12\x43MK_ACTION_RESTORE\x10\x05\x12\x1a\n\x16\x43MK_ACTION_KMS_ONBOARD\x10\x06\x12\x1b\n\x17\x43MK_ACTION_KMS_OFFBOARD\x10\x07*s\n\x07KeyType\x12\x18\n\x14KEY_TYPE_UNSPECIFIED\x10\x00\x12\x13\n\x0fKEY_TYPE_SYSTEM\x10\x01\x12\x14\n\x10KEY_TYPE_SERVICE\x10\x02\x12\x11\n\rKEY_TYPE_DATA\x10\x03\x12\x10\n\x0cKEY_TYPE_KEK\x10\x04*_\n\x0cVirusChannel\x12\x1d\n\x19VIRUS_CHANNEL_UNSPECIFIED\x10\x00\x12\x18\n\x14VIRUS_CHANNEL_UPLOAD\x10\x01\x12\x16\n\x12VIRUS_CHANNEL_SCAN\x10\x02*{\n\rLoginProtocol\x12\x1e\n\x1aLOGIN_PROTOCOL_UNSPECIFIED\x10\x00\x12\x18\n\x14LOGIN_PROTOCOL_SAML2\x10\x01\x12\x17\n\x13LOGIN_PROTOCOL_OIDC\x10\x02\x12\x17\n\x13LOGIN_PROTOCOL_HTTP\x10\x03\x42\x1dZ\x1bsap.com/auditlog/auditeventb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sap.auditlog.auditevent.v2.auditevent_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'Z\033sap.com/auditlog/auditevent' + _globals['_COMMON_APPCONTEXTENTRY']._loaded_options = None + _globals['_COMMON_APPCONTEXTENTRY']._serialized_options = b'8\001' + _globals['_AUTHNPRIVILEGETOGROUPADD'].fields_by_name['group']._loaded_options = None + _globals['_AUTHNPRIVILEGETOGROUPADD'].fields_by_name['group']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOGROUPADD'].fields_by_name['privilege']._loaded_options = None + _globals['_AUTHNPRIVILEGETOGROUPADD'].fields_by_name['privilege']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOGROUPDELETE'].fields_by_name['group']._loaded_options = None + _globals['_AUTHNPRIVILEGETOGROUPDELETE'].fields_by_name['group']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOGROUPDELETE'].fields_by_name['privilege']._loaded_options = None + _globals['_AUTHNPRIVILEGETOGROUPDELETE'].fields_by_name['privilege']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOROLEADD'].fields_by_name['privilege']._loaded_options = None + _globals['_AUTHNPRIVILEGETOROLEADD'].fields_by_name['privilege']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOROLEADD'].fields_by_name['role']._loaded_options = None + _globals['_AUTHNPRIVILEGETOROLEADD'].fields_by_name['role']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOROLEDELETE'].fields_by_name['privilege']._loaded_options = None + _globals['_AUTHNPRIVILEGETOROLEDELETE'].fields_by_name['privilege']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOROLEDELETE'].fields_by_name['role']._loaded_options = None + _globals['_AUTHNPRIVILEGETOROLEDELETE'].fields_by_name['role']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOUSERADD'].fields_by_name['privilege']._loaded_options = None + _globals['_AUTHNPRIVILEGETOUSERADD'].fields_by_name['privilege']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOUSERADD'].fields_by_name['user']._loaded_options = None + _globals['_AUTHNPRIVILEGETOUSERADD'].fields_by_name['user']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOUSERDELETE'].fields_by_name['privilege']._loaded_options = None + _globals['_AUTHNPRIVILEGETOUSERDELETE'].fields_by_name['privilege']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNPRIVILEGETOUSERDELETE'].fields_by_name['user']._loaded_options = None + _globals['_AUTHNPRIVILEGETOUSERDELETE'].fields_by_name['user']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNROLETOGROUPADD'].fields_by_name['group']._loaded_options = None + _globals['_AUTHNROLETOGROUPADD'].fields_by_name['group']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNROLETOGROUPADD'].fields_by_name['role']._loaded_options = None + _globals['_AUTHNROLETOGROUPADD'].fields_by_name['role']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNROLETOGROUPDELETE'].fields_by_name['group']._loaded_options = None + _globals['_AUTHNROLETOGROUPDELETE'].fields_by_name['group']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNROLETOGROUPDELETE'].fields_by_name['role']._loaded_options = None + _globals['_AUTHNROLETOGROUPDELETE'].fields_by_name['role']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNROLETOUSERADD'].fields_by_name['role']._loaded_options = None + _globals['_AUTHNROLETOUSERADD'].fields_by_name['role']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNROLETOUSERADD'].fields_by_name['user']._loaded_options = None + _globals['_AUTHNROLETOUSERADD'].fields_by_name['user']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNROLETOUSERDELETE'].fields_by_name['role']._loaded_options = None + _globals['_AUTHNROLETOUSERDELETE'].fields_by_name['role']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNROLETOUSERDELETE'].fields_by_name['user']._loaded_options = None + _globals['_AUTHNROLETOUSERDELETE'].fields_by_name['user']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNUSERTOGROUPADD'].fields_by_name['group']._loaded_options = None + _globals['_AUTHNUSERTOGROUPADD'].fields_by_name['group']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNUSERTOGROUPADD'].fields_by_name['user']._loaded_options = None + _globals['_AUTHNUSERTOGROUPADD'].fields_by_name['user']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNUSERTOGROUPDELETE'].fields_by_name['group']._loaded_options = None + _globals['_AUTHNUSERTOGROUPDELETE'].fields_by_name['group']._serialized_options = b'\272H\004r\002\020\001' + _globals['_AUTHNUSERTOGROUPDELETE'].fields_by_name['user']._loaded_options = None + _globals['_AUTHNUSERTOGROUPDELETE'].fields_by_name['user']._serialized_options = b'\272H\004r\002\020\001' + _globals['_CONFIGURATIONADD'].fields_by_name['property_name']._loaded_options = None + _globals['_CONFIGURATIONADD'].fields_by_name['property_name']._serialized_options = b'\272H\004r\002\020\001' + _globals['_CONFIGURATIONADD'].fields_by_name['object_type']._loaded_options = None + _globals['_CONFIGURATIONADD'].fields_by_name['object_type']._serialized_options = b'\272H\004r\002\030\024' + _globals['_CONFIGURATIONCHANGE'].fields_by_name['property_name']._loaded_options = None + _globals['_CONFIGURATIONCHANGE'].fields_by_name['property_name']._serialized_options = b'\272H\004r\002\020\001' + _globals['_CONFIGURATIONCHANGE'].fields_by_name['object_type']._loaded_options = None + _globals['_CONFIGURATIONCHANGE'].fields_by_name['object_type']._serialized_options = b'\272H\004r\002\030\024' + _globals['_CONFIGURATIONDELETE'].fields_by_name['property_name']._loaded_options = None + _globals['_CONFIGURATIONDELETE'].fields_by_name['property_name']._serialized_options = b'\272H\004r\002\020\001' + _globals['_CONFIGURATIONDELETE'].fields_by_name['object_type']._loaded_options = None + _globals['_CONFIGURATIONDELETE'].fields_by_name['object_type']._serialized_options = b'\272H\004r\002\030\024' + _globals['_CREDENTIALCREATE'].fields_by_name['credential_id']._loaded_options = None + _globals['_CREDENTIALCREATE'].fields_by_name['credential_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_CREDENTIALDELETE'].fields_by_name['credential_id']._loaded_options = None + _globals['_CREDENTIALDELETE'].fields_by_name['credential_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_CREDENTIALEXPIRATION'].fields_by_name['credential_id']._loaded_options = None + _globals['_CREDENTIALEXPIRATION'].fields_by_name['credential_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_CREDENTIALREVOKATION'].fields_by_name['credential_id']._loaded_options = None + _globals['_CREDENTIALREVOKATION'].fields_by_name['credential_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAMODELCHANGE'].fields_by_name['model_id']._loaded_options = None + _globals['_DATAMODELCHANGE'].fields_by_name['model_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAMODELCHANGE'].fields_by_name['property_name']._loaded_options = None + _globals['_DATAMODELCHANGE'].fields_by_name['property_name']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAMODELCREATE'].fields_by_name['model_id']._loaded_options = None + _globals['_DATAMODELCREATE'].fields_by_name['model_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAMODELDELETE'].fields_by_name['model_id']._loaded_options = None + _globals['_DATAMODELDELETE'].fields_by_name['model_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAACCESS'].fields_by_name['channel_type']._loaded_options = None + _globals['_DATAACCESS'].fields_by_name['channel_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAACCESS'].fields_by_name['channel_id']._loaded_options = None + _globals['_DATAACCESS'].fields_by_name['channel_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAACCESS'].fields_by_name['object_type']._loaded_options = None + _globals['_DATAACCESS'].fields_by_name['object_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAACCESS'].fields_by_name['object_id']._loaded_options = None + _globals['_DATAACCESS'].fields_by_name['object_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAACCESS'].fields_by_name['attribute']._loaded_options = None + _globals['_DATAACCESS'].fields_by_name['attribute']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAACCESS'].fields_by_name['attachment_type']._loaded_options = None + _globals['_DATAACCESS'].fields_by_name['attachment_type']._serialized_options = b'\030\001' + _globals['_DATAACCESS'].fields_by_name['attachment_id']._loaded_options = None + _globals['_DATAACCESS'].fields_by_name['attachment_id']._serialized_options = b'\030\001' + _globals['_DATACREATE'].fields_by_name['object_type']._loaded_options = None + _globals['_DATACREATE'].fields_by_name['object_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATACREATE'].fields_by_name['object_id']._loaded_options = None + _globals['_DATACREATE'].fields_by_name['object_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATACREATE'].fields_by_name['attribute']._loaded_options = None + _globals['_DATACREATE'].fields_by_name['attribute']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATADELETE'].fields_by_name['object_type']._loaded_options = None + _globals['_DATADELETE'].fields_by_name['object_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATADELETE'].fields_by_name['object_id']._loaded_options = None + _globals['_DATADELETE'].fields_by_name['object_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATADELETE'].fields_by_name['attribute']._loaded_options = None + _globals['_DATADELETE'].fields_by_name['attribute']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAMODIFICATION'].fields_by_name['object_type']._loaded_options = None + _globals['_DATAMODIFICATION'].fields_by_name['object_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAMODIFICATION'].fields_by_name['object_id']._loaded_options = None + _globals['_DATAMODIFICATION'].fields_by_name['object_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAMODIFICATION'].fields_by_name['attribute']._loaded_options = None + _globals['_DATAMODIFICATION'].fields_by_name['attribute']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAEXPORT'].fields_by_name['channel_id']._loaded_options = None + _globals['_DATAEXPORT'].fields_by_name['channel_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAEXPORT'].fields_by_name['object_type']._loaded_options = None + _globals['_DATAEXPORT'].fields_by_name['object_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAEXPORT'].fields_by_name['object_id']._loaded_options = None + _globals['_DATAEXPORT'].fields_by_name['object_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DATAEXPORT'].fields_by_name['destination_uri']._loaded_options = None + _globals['_DATAEXPORT'].fields_by_name['destination_uri']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['channel_type']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['channel_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['channel_id']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['channel_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['data_subject_type']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['data_subject_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['data_subject_id']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['data_subject_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['object_type']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['object_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['object_id']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['object_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['attribute']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['attribute']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATAACCESS'].fields_by_name['attachment_type']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['attachment_type']._serialized_options = b'\030\001' + _globals['_DPPDATAACCESS'].fields_by_name['attachment_id']._loaded_options = None + _globals['_DPPDATAACCESS'].fields_by_name['attachment_id']._serialized_options = b'\030\001' + _globals['_DPPDATACREATE'].fields_by_name['data_subject_type']._loaded_options = None + _globals['_DPPDATACREATE'].fields_by_name['data_subject_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATACREATE'].fields_by_name['data_subject_id']._loaded_options = None + _globals['_DPPDATACREATE'].fields_by_name['data_subject_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATACREATE'].fields_by_name['object_type']._loaded_options = None + _globals['_DPPDATACREATE'].fields_by_name['object_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATACREATE'].fields_by_name['object_id']._loaded_options = None + _globals['_DPPDATACREATE'].fields_by_name['object_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATACREATE'].fields_by_name['attribute']._loaded_options = None + _globals['_DPPDATACREATE'].fields_by_name['attribute']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATADELETE'].fields_by_name['data_subject_type']._loaded_options = None + _globals['_DPPDATADELETE'].fields_by_name['data_subject_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATADELETE'].fields_by_name['data_subject_id']._loaded_options = None + _globals['_DPPDATADELETE'].fields_by_name['data_subject_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATADELETE'].fields_by_name['object_type']._loaded_options = None + _globals['_DPPDATADELETE'].fields_by_name['object_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATADELETE'].fields_by_name['object_id']._loaded_options = None + _globals['_DPPDATADELETE'].fields_by_name['object_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATADELETE'].fields_by_name['attribute']._loaded_options = None + _globals['_DPPDATADELETE'].fields_by_name['attribute']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATAMODIFICATION'].fields_by_name['data_subject_type']._loaded_options = None + _globals['_DPPDATAMODIFICATION'].fields_by_name['data_subject_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATAMODIFICATION'].fields_by_name['data_subject_id']._loaded_options = None + _globals['_DPPDATAMODIFICATION'].fields_by_name['data_subject_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATAMODIFICATION'].fields_by_name['object_type']._loaded_options = None + _globals['_DPPDATAMODIFICATION'].fields_by_name['object_type']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATAMODIFICATION'].fields_by_name['object_id']._loaded_options = None + _globals['_DPPDATAMODIFICATION'].fields_by_name['object_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_DPPDATAMODIFICATION'].fields_by_name['attribute']._loaded_options = None + _globals['_DPPDATAMODIFICATION'].fields_by_name['attribute']._serialized_options = b'\272H\004r\002\020\001' + _globals['_JOBCHANGE'].fields_by_name['job_id']._loaded_options = None + _globals['_JOBCHANGE'].fields_by_name['job_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_JOBCHANGE'].fields_by_name['property_name']._loaded_options = None + _globals['_JOBCHANGE'].fields_by_name['property_name']._serialized_options = b'\272H\004r\002\020\001' + _globals['_JOBCREATE'].fields_by_name['job_id']._loaded_options = None + _globals['_JOBCREATE'].fields_by_name['job_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_JOBDELETE'].fields_by_name['job_id']._loaded_options = None + _globals['_JOBDELETE'].fields_by_name['job_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_JOBSTATUSCHANGE'].fields_by_name['job_id']._loaded_options = None + _globals['_JOBSTATUSCHANGE'].fields_by_name['job_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_JOBSTATUSCHANGE'].fields_by_name['property_name']._loaded_options = None + _globals['_JOBSTATUSCHANGE'].fields_by_name['property_name']._serialized_options = b'\272H\004r\002\020\001' + _globals['_MALICIOUSREQUESTDETECTED'].fields_by_name['parameter']._loaded_options = None + _globals['_MALICIOUSREQUESTDETECTED'].fields_by_name['parameter']._serialized_options = b'\272H\004r\002\020\001' + _globals['_PASSWORDCHANGE'].fields_by_name['user_id']._loaded_options = None + _globals['_PASSWORDCHANGE'].fields_by_name['user_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_PASSWORDEXPIRATION'].fields_by_name['user_id']._loaded_options = None + _globals['_PASSWORDEXPIRATION'].fields_by_name['user_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_PASSWORDRESET'].fields_by_name['user_id']._loaded_options = None + _globals['_PASSWORDRESET'].fields_by_name['user_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_TENANTMODIFICATION'].fields_by_name['property_name']._loaded_options = None + _globals['_TENANTMODIFICATION'].fields_by_name['property_name']._serialized_options = b'\272H\004r\002\020\001' + _globals['_TENANTMODIFICATION'].fields_by_name['tenant_id']._loaded_options = None + _globals['_TENANTMODIFICATION'].fields_by_name['tenant_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_TENANTOFFBOARDING'].fields_by_name['tenant_id']._loaded_options = None + _globals['_TENANTOFFBOARDING'].fields_by_name['tenant_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_TENANTONBOARDING'].fields_by_name['tenant_id']._loaded_options = None + _globals['_TENANTONBOARDING'].fields_by_name['tenant_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERACTIVATE'].fields_by_name['user_id']._loaded_options = None + _globals['_USERACTIVATE'].fields_by_name['user_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERBLOCK'].fields_by_name['user_id']._loaded_options = None + _globals['_USERBLOCK'].fields_by_name['user_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERCREATE'].fields_by_name['user_id']._loaded_options = None + _globals['_USERCREATE'].fields_by_name['user_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERDATAMODIFICATION'].fields_by_name['property_name']._loaded_options = None + _globals['_USERDATAMODIFICATION'].fields_by_name['property_name']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERDATAMODIFICATION'].fields_by_name['user_id']._loaded_options = None + _globals['_USERDATAMODIFICATION'].fields_by_name['user_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERDELETE'].fields_by_name['user_id']._loaded_options = None + _globals['_USERDELETE'].fields_by_name['user_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERIMPERSONATIONSTART'].fields_by_name['user_initiator_id']._loaded_options = None + _globals['_USERIMPERSONATIONSTART'].fields_by_name['user_initiator_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERIMPERSONATIONSTART'].fields_by_name['user_impersonated_id']._loaded_options = None + _globals['_USERIMPERSONATIONSTART'].fields_by_name['user_impersonated_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERIMPERSONATIONSTART'].fields_by_name['context']._loaded_options = None + _globals['_USERIMPERSONATIONSTART'].fields_by_name['context']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERIMPERSONATIONFINISH'].fields_by_name['user_initiator_id']._loaded_options = None + _globals['_USERIMPERSONATIONFINISH'].fields_by_name['user_initiator_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERIMPERSONATIONFINISH'].fields_by_name['user_impersonated_id']._loaded_options = None + _globals['_USERIMPERSONATIONFINISH'].fields_by_name['user_impersonated_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERIMPERSONATIONFINISH'].fields_by_name['context']._loaded_options = None + _globals['_USERIMPERSONATIONFINISH'].fields_by_name['context']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERLOCK'].fields_by_name['user_id']._loaded_options = None + _globals['_USERLOCK'].fields_by_name['user_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERUNLOCK'].fields_by_name['user_id']._loaded_options = None + _globals['_USERUNLOCK'].fields_by_name['user_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_USERVERIFY'].fields_by_name['user_id']._loaded_options = None + _globals['_USERVERIFY'].fields_by_name['user_id']._serialized_options = b'\272H\004r\002\020\001' + _globals['_CREDENTIALTYPE']._serialized_start=18835 + _globals['_CREDENTIALTYPE']._serialized_end=18975 + _globals['_FAILUREREASON']._serialized_start=18978 + _globals['_FAILUREREASON']._serialized_end=19761 + _globals['_LOGINMETHOD']._serialized_start=19764 + _globals['_LOGINMETHOD']._serialized_end=20467 + _globals['_LOGOFFTYPE']._serialized_start=20469 + _globals['_LOGOFFTYPE']._serialized_end=20559 + _globals['_MALICIOUSBEHAVIOR']._serialized_start=20562 + _globals['_MALICIOUSBEHAVIOR']._serialized_end=20794 + _globals['_MFATYPE']._serialized_start=20797 + _globals['_MFATYPE']._serialized_end=20950 + _globals['_USERTYPE']._serialized_start=20952 + _globals['_USERTYPE']._serialized_end=21048 + _globals['_DATAEXPORTCHANNELTYPE']._serialized_start=21051 + _globals['_DATAEXPORTCHANNELTYPE']._serialized_end=21234 + _globals['_EVENTCATEGORYCODE']._serialized_start=21237 + _globals['_EVENTCATEGORYCODE']._serialized_end=21413 + _globals['_CMKACTION']._serialized_start=21416 + _globals['_CMKACTION']._serialized_end=21636 + _globals['_KEYTYPE']._serialized_start=21638 + _globals['_KEYTYPE']._serialized_end=21753 + _globals['_VIRUSCHANNEL']._serialized_start=21755 + _globals['_VIRUSCHANNEL']._serialized_end=21850 + _globals['_LOGINPROTOCOL']._serialized_start=21852 + _globals['_LOGINPROTOCOL']._serialized_end=21975 + _globals['_COMMON']._serialized_start=168 + _globals['_COMMON']._serialized_end=612 + _globals['_COMMON_APPCONTEXTENTRY']._serialized_start=551 + _globals['_COMMON_APPCONTEXTENTRY']._serialized_end=612 + _globals['_AUDITLOGCLEAR']._serialized_start=614 + _globals['_AUDITLOGCLEAR']._serialized_end=731 + _globals['_AUDITLOGDISABLE']._serialized_start=733 + _globals['_AUDITLOGDISABLE']._serialized_end=810 + _globals['_AUDITLOGENABLE']._serialized_start=812 + _globals['_AUDITLOGENABLE']._serialized_end=888 + _globals['_AUTHNPRIVILEGETOGROUPADD']._serialized_start=891 + _globals['_AUTHNPRIVILEGETOGROUPADD']._serialized_end=1109 + _globals['_AUTHNPRIVILEGETOGROUPDELETE']._serialized_start=1112 + _globals['_AUTHNPRIVILEGETOGROUPDELETE']._serialized_end=1333 + _globals['_AUTHNPRIVILEGETOROLEADD']._serialized_start=1336 + _globals['_AUTHNPRIVILEGETOROLEADD']._serialized_end=1551 + _globals['_AUTHNPRIVILEGETOROLEDELETE']._serialized_start=1554 + _globals['_AUTHNPRIVILEGETOROLEDELETE']._serialized_end=1772 + _globals['_AUTHNPRIVILEGETOUSERADD']._serialized_start=1775 + _globals['_AUTHNPRIVILEGETOUSERADD']._serialized_end=2057 + _globals['_AUTHNPRIVILEGETOUSERDELETE']._serialized_start=2060 + _globals['_AUTHNPRIVILEGETOUSERDELETE']._serialized_end=2345 + _globals['_AUTHNROLETOGROUPADD']._serialized_start=2348 + _globals['_AUTHNROLETOGROUPADD']._serialized_end=2489 + _globals['_AUTHNROLETOGROUPDELETE']._serialized_start=2492 + _globals['_AUTHNROLETOGROUPDELETE']._serialized_end=2636 + _globals['_AUTHNROLETOUSERADD']._serialized_start=2639 + _globals['_AUTHNROLETOUSERADD']._serialized_end=2844 + _globals['_AUTHNROLETOUSERDELETE']._serialized_start=2847 + _globals['_AUTHNROLETOUSERDELETE']._serialized_end=3055 + _globals['_AUTHNUSERTOGROUPADD']._serialized_start=3058 + _globals['_AUTHNUSERTOGROUPADD']._serialized_end=3266 + _globals['_AUTHNUSERTOGROUPDELETE']._serialized_start=3269 + _globals['_AUTHNUSERTOGROUPDELETE']._serialized_end=3480 + _globals['_CONFIGURATIONADD']._serialized_start=3483 + _globals['_CONFIGURATIONADD']._serialized_end=3724 + _globals['_CONFIGURATIONCHANGE']._serialized_start=3727 + _globals['_CONFIGURATIONCHANGE']._serialized_end=4031 + _globals['_CONFIGURATIONDELETE']._serialized_start=4034 + _globals['_CONFIGURATIONDELETE']._serialized_end=4278 + _globals['_CREDENTIALCREATE']._serialized_start=4281 + _globals['_CREDENTIALCREATE']._serialized_end=4490 + _globals['_CREDENTIALDELETE']._serialized_start=4493 + _globals['_CREDENTIALDELETE']._serialized_end=4702 + _globals['_CREDENTIALEXPIRATION']._serialized_start=4705 + _globals['_CREDENTIALEXPIRATION']._serialized_end=4987 + _globals['_CREDENTIALREVOKATION']._serialized_start=4990 + _globals['_CREDENTIALREVOKATION']._serialized_end=5272 + _globals['_DATAMODELCHANGE']._serialized_start=5275 + _globals['_DATAMODELCHANGE']._serialized_end=5540 + _globals['_DATAMODELCREATE']._serialized_start=5542 + _globals['_DATAMODELCREATE']._serialized_end=5655 + _globals['_DATAMODELDELETE']._serialized_start=5657 + _globals['_DATAMODELDELETE']._serialized_end=5770 + _globals['_DATAACCESS']._serialized_start=5773 + _globals['_DATAACCESS']._serialized_end=6180 + _globals['_DATACREATE']._serialized_start=6183 + _globals['_DATACREATE']._serialized_end=6420 + _globals['_DATADELETE']._serialized_start=6423 + _globals['_DATADELETE']._serialized_end=6660 + _globals['_DATAMODIFICATION']._serialized_start=6663 + _globals['_DATAMODIFICATION']._serialized_end=6966 + _globals['_DATAEXPORT']._serialized_start=6969 + _globals['_DATAEXPORT']._serialized_end=7297 + _globals['_DPPDATAACCESS']._serialized_start=7300 + _globals['_DPPDATAACCESS']._serialized_end=7812 + _globals['_DPPDATACREATE']._serialized_start=7815 + _globals['_DPPDATACREATE']._serialized_end=8157 + _globals['_DPPDATADELETE']._serialized_start=8160 + _globals['_DPPDATADELETE']._serialized_end=8502 + _globals['_DPPDATAMODIFICATION']._serialized_start=8505 + _globals['_DPPDATAMODIFICATION']._serialized_end=8913 + _globals['_JOBCHANGE']._serialized_start=8916 + _globals['_JOBCHANGE']._serialized_end=9171 + _globals['_JOBCREATE']._serialized_start=9173 + _globals['_JOBCREATE']._serialized_end=9276 + _globals['_JOBDELETE']._serialized_start=9278 + _globals['_JOBDELETE']._serialized_end=9381 + _globals['_JOBSTATUSCHANGE']._serialized_start=9384 + _globals['_JOBSTATUSCHANGE']._serialized_end=9645 + _globals['_MALICIOUSREQUESTDETECTED']._serialized_start=9648 + _globals['_MALICIOUSREQUESTDETECTED']._serialized_end=9926 + _globals['_PASSWORDCHANGE']._serialized_start=9928 + _globals['_PASSWORDCHANGE']._serialized_end=10038 + _globals['_PASSWORDEXPIRATION']._serialized_start=10040 + _globals['_PASSWORDEXPIRATION']._serialized_end=10154 + _globals['_PASSWORDRESET']._serialized_start=10156 + _globals['_PASSWORDRESET']._serialized_end=10265 + _globals['_TENANTMODIFICATION']._serialized_start=10268 + _globals['_TENANTMODIFICATION']._serialized_end=10538 + _globals['_TENANTOFFBOARDING']._serialized_start=10540 + _globals['_TENANTOFFBOARDING']._serialized_end=10657 + _globals['_TENANTONBOARDING']._serialized_start=10659 + _globals['_TENANTONBOARDING']._serialized_end=10775 + _globals['_UNAUTHENTICATEDREQUEST']._serialized_start=10777 + _globals['_UNAUTHENTICATEDREQUEST']._serialized_end=10861 + _globals['_UNAUTHORIZEDREQUEST']._serialized_start=10863 + _globals['_UNAUTHORIZEDREQUEST']._serialized_end=10989 + _globals['_USERACTIVATE']._serialized_start=10992 + _globals['_USERACTIVATE']._serialized_end=11167 + _globals['_USERBLOCK']._serialized_start=11170 + _globals['_USERBLOCK']._serialized_end=11342 + _globals['_USERCREATE']._serialized_start=11345 + _globals['_USERCREATE']._serialized_end=11518 + _globals['_USERDATAMODIFICATION']._serialized_start=11521 + _globals['_USERDATAMODIFICATION']._serialized_end=11856 + _globals['_USERDELETE']._serialized_start=11859 + _globals['_USERDELETE']._serialized_end=12032 + _globals['_USERIMPERSONATIONSTART']._serialized_start=12035 + _globals['_USERIMPERSONATIONSTART']._serialized_end=12444 + _globals['_USERIMPERSONATIONFINISH']._serialized_start=12447 + _globals['_USERIMPERSONATIONFINISH']._serialized_end=12857 + _globals['_USERLOCK']._serialized_start=12860 + _globals['_USERLOCK']._serialized_end=13031 + _globals['_USERUNLOCK']._serialized_start=13034 + _globals['_USERUNLOCK']._serialized_end=13207 + _globals['_USERVERIFY']._serialized_start=13210 + _globals['_USERVERIFY']._serialized_end=13383 + _globals['_USERLOGINFAILURE']._serialized_start=13386 + _globals['_USERLOGINFAILURE']._serialized_end=13851 + _globals['_USERLOGINSUCCESS']._serialized_start=13854 + _globals['_USERLOGINSUCCESS']._serialized_end=14237 + _globals['_USERLOGOFF']._serialized_start=14240 + _globals['_USERLOGOFF']._serialized_end=14467 + _globals['_ZZZCUSTOMEVENT']._serialized_start=14469 + _globals['_ZZZCUSTOMEVENT']._serialized_end=14593 + _globals['_CMKONBOARDING']._serialized_start=14595 + _globals['_CMKONBOARDING']._serialized_end=14722 + _globals['_CMKOFFBOARDING']._serialized_start=14725 + _globals['_CMKOFFBOARDING']._serialized_end=14853 + _globals['_CMKSWITCH']._serialized_start=14856 + _globals['_CMKSWITCH']._serialized_end=15016 + _globals['_CMKTENANTMODIFICATION']._serialized_start=15019 + _globals['_CMKTENANTMODIFICATION']._serialized_end=15224 + _globals['_CMKCREATE']._serialized_start=15227 + _globals['_CMKCREATE']._serialized_end=15357 + _globals['_CMKDELETE']._serialized_start=15360 + _globals['_CMKDELETE']._serialized_end=15490 + _globals['_CMKRESTORE']._serialized_start=15493 + _globals['_CMKRESTORE']._serialized_end=15624 + _globals['_CMKDISABLE']._serialized_start=15627 + _globals['_CMKDISABLE']._serialized_end=15758 + _globals['_CMKENABLE']._serialized_start=15761 + _globals['_CMKENABLE']._serialized_end=15891 + _globals['_CMKROTATE']._serialized_start=15893 + _globals['_CMKROTATE']._serialized_end=15987 + _globals['_KEYCREATE']._serialized_start=15990 + _globals['_KEYCREATE']._serialized_end=16200 + _globals['_KEYDELETE']._serialized_start=16203 + _globals['_KEYDELETE']._serialized_end=16413 + _globals['_KEYRESTORE']._serialized_start=16416 + _globals['_KEYRESTORE']._serialized_end=16627 + _globals['_KEYPURGE']._serialized_start=16630 + _globals['_KEYPURGE']._serialized_end=16839 + _globals['_KEYROTATE']._serialized_start=16842 + _globals['_KEYROTATE']._serialized_end=17052 + _globals['_KEYENABLE']._serialized_start=17055 + _globals['_KEYENABLE']._serialized_end=17265 + _globals['_KEYDISABLE']._serialized_start=17268 + _globals['_KEYDISABLE']._serialized_end=17479 + _globals['_KEYSUSPEND']._serialized_start=17482 + _globals['_KEYSUSPEND']._serialized_end=17693 + _globals['_KEYONBOARDKEYCHAIN']._serialized_start=17696 + _globals['_KEYONBOARDKEYCHAIN']._serialized_end=17915 + _globals['_CMKDROP']._serialized_start=17918 + _globals['_CMKDROP']._serialized_end=18046 + _globals['_CMKSUSPEND']._serialized_start=18049 + _globals['_CMKSUSPEND']._serialized_end=18180 + _globals['_VIRUSFINDING']._serialized_start=18183 + _globals['_VIRUSFINDING']._serialized_end=18396 + _globals['_CMKUNAVAILABLE']._serialized_start=18399 + _globals['_CMKUNAVAILABLE']._serialized_end=18534 + _globals['_CMKAVAILABLE']._serialized_start=18537 + _globals['_CMKAVAILABLE']._serialized_end=18670 + _globals['_CMKDETACH']._serialized_start=18673 + _globals['_CMKDETACH']._serialized_end=18832 +# @@protoc_insertion_point(module_scope) diff --git a/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v2/auditevent_pb2.pyi b/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v2/auditevent_pb2.pyi new file mode 100644 index 0000000..1e2322a --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/gen/sap/auditlog/auditevent/v2/auditevent_pb2.pyi @@ -0,0 +1,1319 @@ +import datetime + +from buf.validate import validate_pb2 as _validate_pb2 +from google.protobuf import struct_pb2 as _struct_pb2 +from google.protobuf import timestamp_pb2 as _timestamp_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class CredentialType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + CREDENTIAL_TYPE_UNSPECIFIED: _ClassVar[CredentialType] + CREDENTIAL_TYPE_X509_CERTIFICATE: _ClassVar[CredentialType] + CREDENTIAL_TYPE_KEY: _ClassVar[CredentialType] + CREDENTIAL_TYPE_SECRET: _ClassVar[CredentialType] + +class FailureReason(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + FAILURE_REASON_UNSPECIFIED: _ClassVar[FailureReason] + FAILURE_REASON_PASSWORD: _ClassVar[FailureReason] + FAILURE_REASON_MFA_FAILED: _ClassVar[FailureReason] + FAILURE_REASON_USER_NOT_FOUND: _ClassVar[FailureReason] + FAILURE_REASON_USER_LOCKED: _ClassVar[FailureReason] + FAILURE_REASON_USER_BLOCKED: _ClassVar[FailureReason] + FAILURE_REASON_USER_UNVERIFIED: _ClassVar[FailureReason] + FAILURE_REASON_USER_EXPIRED: _ClassVar[FailureReason] + FAILURE_REASON_USER_INVALID: _ClassVar[FailureReason] + FAILURE_REASON_INSECURE_CONNECTION: _ClassVar[FailureReason] + FAILURE_REASON_LOGIN_METHOD_DISABLED: _ClassVar[FailureReason] + FAILURE_REASON_TOKEN_EXPIRED: _ClassVar[FailureReason] + FAILURE_REASON_TOKEN_REVOKED: _ClassVar[FailureReason] + FAILURE_REASON_TOKEN_INVALID: _ClassVar[FailureReason] + FAILURE_REASON_SESSION_EXPIRED: _ClassVar[FailureReason] + FAILURE_REASON_SESSION_REVOKED: _ClassVar[FailureReason] + FAILURE_REASON_CERTIFICATE_EXPIRED: _ClassVar[FailureReason] + FAILURE_REASON_CERTIFICATE_REVOKED: _ClassVar[FailureReason] + FAILURE_REASON_CERTIFICATE_INVALID: _ClassVar[FailureReason] + FAILURE_REASON_GEOBLOCK: _ClassVar[FailureReason] + FAILURE_REASON_MFA_REQUESTED: _ClassVar[FailureReason] + FAILURE_REASON_CRED_REQUESTED: _ClassVar[FailureReason] + +class LoginMethod(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + LOGIN_METHOD_UNSPECIFIED: _ClassVar[LoginMethod] + LOGIN_METHOD_OPEN_ID_CONNECT: _ClassVar[LoginMethod] + LOGIN_METHOD_SAML: _ClassVar[LoginMethod] + LOGIN_METHOD_SAML2: _ClassVar[LoginMethod] + LOGIN_METHOD_EXTERNAL: _ClassVar[LoginMethod] + LOGIN_METHOD_SPNEGO: _ClassVar[LoginMethod] + LOGIN_METHOD_PASSWORD: _ClassVar[LoginMethod] + LOGIN_METHOD_RFC_TICKET: _ClassVar[LoginMethod] + LOGIN_METHOD_SNC: _ClassVar[LoginMethod] + LOGIN_METHOD_LOGON_TICKET: _ClassVar[LoginMethod] + LOGIN_METHOD_USER_SWITCH: _ClassVar[LoginMethod] + LOGIN_METHOD_X509_CERTIFICATE: _ClassVar[LoginMethod] + LOGIN_METHOD_APC_SESSION: _ClassVar[LoginMethod] + LOGIN_METHOD_INTERNAL: _ClassVar[LoginMethod] + LOGIN_METHOD_OAUTH2: _ClassVar[LoginMethod] + LOGIN_METHOD_REENTRANCE_TICKET: _ClassVar[LoginMethod] + LOGIN_METHOD_HTTP_SESSION: _ClassVar[LoginMethod] + LOGIN_METHOD_ASSERTION_TICKET: _ClassVar[LoginMethod] + LOGIN_METHOD_REMCOOKIE: _ClassVar[LoginMethod] + LOGIN_METHOD_BIOMETRIC: _ClassVar[LoginMethod] + LOGIN_METHOD_PASSCODE: _ClassVar[LoginMethod] + LOGIN_METHOD_MOBSSO: _ClassVar[LoginMethod] + LOGIN_METHOD_EMAIL_TOKEN: _ClassVar[LoginMethod] + LOGIN_METHOD_BEARER_TOKEN: _ClassVar[LoginMethod] + +class LogoffType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + LOGOFF_TYPE_UNSPECIFIED: _ClassVar[LogoffType] + LOGOFF_TYPE_REGULAR: _ClassVar[LogoffType] + LOGOFF_TYPE_FORCED: _ClassVar[LogoffType] + +class MaliciousBehavior(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + MALICIOUS_BEHAVIOR_UNSPECIFIED: _ClassVar[MaliciousBehavior] + MALICIOUS_BEHAVIOR_PARAMETER_SEEN: _ClassVar[MaliciousBehavior] + MALICIOUS_BEHAVIOR_PARAMETER_NOT_FOUND: _ClassVar[MaliciousBehavior] + MALICIOUS_BEHAVIOR_PARAMETER_VALUE_SEEN: _ClassVar[MaliciousBehavior] + MALICIOUS_BEHAVIOR_PARAMETER_VALUE_MODIFIED: _ClassVar[MaliciousBehavior] + +class MfaType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + MFA_TYPE_UNSPECIFIED: _ClassVar[MfaType] + MFA_TYPE_NONE: _ClassVar[MfaType] + MFA_TYPE_RSA: _ClassVar[MfaType] + MFA_TYPE_TOTP: _ClassVar[MfaType] + MFA_TYPE_WEB_AUTHN: _ClassVar[MfaType] + MFA_TYPE_SMS: _ClassVar[MfaType] + MFA_TYPE_EMAIL: _ClassVar[MfaType] + +class UserType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + USER_TYPE_UNSPECIFIED: _ClassVar[UserType] + USER_TYPE_BUSINESS_USER: _ClassVar[UserType] + USER_TYPE_TECHNICAL_USER: _ClassVar[UserType] + +class DataExportChannelType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + DATA_EXPORT_CHANNEL_TYPE_UNSPECIFIED: _ClassVar[DataExportChannelType] + DATA_EXPORT_CHANNEL_TYPE_DOWNLOAD: _ClassVar[DataExportChannelType] + DATA_EXPORT_CHANNEL_TYPE_API_ACCESS: _ClassVar[DataExportChannelType] + DATA_EXPORT_CHANNEL_TYPE_PRINTER: _ClassVar[DataExportChannelType] + +class EventCategoryCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + EVENT_CATEGORY_CODE_SEC_UNSPECIFIED: _ClassVar[EventCategoryCode] + EVENT_CATEGORY_CODE_IAM: _ClassVar[EventCategoryCode] + EVENT_CATEGORY_CODE_CFG: _ClassVar[EventCategoryCode] + EVENT_CATEGORY_CODE_DPP: _ClassVar[EventCategoryCode] + EVENT_CATEGORY_CODE_RAL: _ClassVar[EventCategoryCode] + +class CMKAction(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + CMK_ACTION_UNSPECIFIED: _ClassVar[CMKAction] + CMK_ACTION_ONBOARD: _ClassVar[CMKAction] + CMK_ACTION_BLOCK: _ClassVar[CMKAction] + CMK_ACTION_SHUTDOWN: _ClassVar[CMKAction] + CMK_ACTION_CSEKFALLBACK: _ClassVar[CMKAction] + CMK_ACTION_RESTORE: _ClassVar[CMKAction] + CMK_ACTION_KMS_ONBOARD: _ClassVar[CMKAction] + CMK_ACTION_KMS_OFFBOARD: _ClassVar[CMKAction] + +class KeyType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + KEY_TYPE_UNSPECIFIED: _ClassVar[KeyType] + KEY_TYPE_SYSTEM: _ClassVar[KeyType] + KEY_TYPE_SERVICE: _ClassVar[KeyType] + KEY_TYPE_DATA: _ClassVar[KeyType] + KEY_TYPE_KEK: _ClassVar[KeyType] + +class VirusChannel(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + VIRUS_CHANNEL_UNSPECIFIED: _ClassVar[VirusChannel] + VIRUS_CHANNEL_UPLOAD: _ClassVar[VirusChannel] + VIRUS_CHANNEL_SCAN: _ClassVar[VirusChannel] + +class LoginProtocol(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + LOGIN_PROTOCOL_UNSPECIFIED: _ClassVar[LoginProtocol] + LOGIN_PROTOCOL_SAML2: _ClassVar[LoginProtocol] + LOGIN_PROTOCOL_OIDC: _ClassVar[LoginProtocol] + LOGIN_PROTOCOL_HTTP: _ClassVar[LoginProtocol] +CREDENTIAL_TYPE_UNSPECIFIED: CredentialType +CREDENTIAL_TYPE_X509_CERTIFICATE: CredentialType +CREDENTIAL_TYPE_KEY: CredentialType +CREDENTIAL_TYPE_SECRET: CredentialType +FAILURE_REASON_UNSPECIFIED: FailureReason +FAILURE_REASON_PASSWORD: FailureReason +FAILURE_REASON_MFA_FAILED: FailureReason +FAILURE_REASON_USER_NOT_FOUND: FailureReason +FAILURE_REASON_USER_LOCKED: FailureReason +FAILURE_REASON_USER_BLOCKED: FailureReason +FAILURE_REASON_USER_UNVERIFIED: FailureReason +FAILURE_REASON_USER_EXPIRED: FailureReason +FAILURE_REASON_USER_INVALID: FailureReason +FAILURE_REASON_INSECURE_CONNECTION: FailureReason +FAILURE_REASON_LOGIN_METHOD_DISABLED: FailureReason +FAILURE_REASON_TOKEN_EXPIRED: FailureReason +FAILURE_REASON_TOKEN_REVOKED: FailureReason +FAILURE_REASON_TOKEN_INVALID: FailureReason +FAILURE_REASON_SESSION_EXPIRED: FailureReason +FAILURE_REASON_SESSION_REVOKED: FailureReason +FAILURE_REASON_CERTIFICATE_EXPIRED: FailureReason +FAILURE_REASON_CERTIFICATE_REVOKED: FailureReason +FAILURE_REASON_CERTIFICATE_INVALID: FailureReason +FAILURE_REASON_GEOBLOCK: FailureReason +FAILURE_REASON_MFA_REQUESTED: FailureReason +FAILURE_REASON_CRED_REQUESTED: FailureReason +LOGIN_METHOD_UNSPECIFIED: LoginMethod +LOGIN_METHOD_OPEN_ID_CONNECT: LoginMethod +LOGIN_METHOD_SAML: LoginMethod +LOGIN_METHOD_SAML2: LoginMethod +LOGIN_METHOD_EXTERNAL: LoginMethod +LOGIN_METHOD_SPNEGO: LoginMethod +LOGIN_METHOD_PASSWORD: LoginMethod +LOGIN_METHOD_RFC_TICKET: LoginMethod +LOGIN_METHOD_SNC: LoginMethod +LOGIN_METHOD_LOGON_TICKET: LoginMethod +LOGIN_METHOD_USER_SWITCH: LoginMethod +LOGIN_METHOD_X509_CERTIFICATE: LoginMethod +LOGIN_METHOD_APC_SESSION: LoginMethod +LOGIN_METHOD_INTERNAL: LoginMethod +LOGIN_METHOD_OAUTH2: LoginMethod +LOGIN_METHOD_REENTRANCE_TICKET: LoginMethod +LOGIN_METHOD_HTTP_SESSION: LoginMethod +LOGIN_METHOD_ASSERTION_TICKET: LoginMethod +LOGIN_METHOD_REMCOOKIE: LoginMethod +LOGIN_METHOD_BIOMETRIC: LoginMethod +LOGIN_METHOD_PASSCODE: LoginMethod +LOGIN_METHOD_MOBSSO: LoginMethod +LOGIN_METHOD_EMAIL_TOKEN: LoginMethod +LOGIN_METHOD_BEARER_TOKEN: LoginMethod +LOGOFF_TYPE_UNSPECIFIED: LogoffType +LOGOFF_TYPE_REGULAR: LogoffType +LOGOFF_TYPE_FORCED: LogoffType +MALICIOUS_BEHAVIOR_UNSPECIFIED: MaliciousBehavior +MALICIOUS_BEHAVIOR_PARAMETER_SEEN: MaliciousBehavior +MALICIOUS_BEHAVIOR_PARAMETER_NOT_FOUND: MaliciousBehavior +MALICIOUS_BEHAVIOR_PARAMETER_VALUE_SEEN: MaliciousBehavior +MALICIOUS_BEHAVIOR_PARAMETER_VALUE_MODIFIED: MaliciousBehavior +MFA_TYPE_UNSPECIFIED: MfaType +MFA_TYPE_NONE: MfaType +MFA_TYPE_RSA: MfaType +MFA_TYPE_TOTP: MfaType +MFA_TYPE_WEB_AUTHN: MfaType +MFA_TYPE_SMS: MfaType +MFA_TYPE_EMAIL: MfaType +USER_TYPE_UNSPECIFIED: UserType +USER_TYPE_BUSINESS_USER: UserType +USER_TYPE_TECHNICAL_USER: UserType +DATA_EXPORT_CHANNEL_TYPE_UNSPECIFIED: DataExportChannelType +DATA_EXPORT_CHANNEL_TYPE_DOWNLOAD: DataExportChannelType +DATA_EXPORT_CHANNEL_TYPE_API_ACCESS: DataExportChannelType +DATA_EXPORT_CHANNEL_TYPE_PRINTER: DataExportChannelType +EVENT_CATEGORY_CODE_SEC_UNSPECIFIED: EventCategoryCode +EVENT_CATEGORY_CODE_IAM: EventCategoryCode +EVENT_CATEGORY_CODE_CFG: EventCategoryCode +EVENT_CATEGORY_CODE_DPP: EventCategoryCode +EVENT_CATEGORY_CODE_RAL: EventCategoryCode +CMK_ACTION_UNSPECIFIED: CMKAction +CMK_ACTION_ONBOARD: CMKAction +CMK_ACTION_BLOCK: CMKAction +CMK_ACTION_SHUTDOWN: CMKAction +CMK_ACTION_CSEKFALLBACK: CMKAction +CMK_ACTION_RESTORE: CMKAction +CMK_ACTION_KMS_ONBOARD: CMKAction +CMK_ACTION_KMS_OFFBOARD: CMKAction +KEY_TYPE_UNSPECIFIED: KeyType +KEY_TYPE_SYSTEM: KeyType +KEY_TYPE_SERVICE: KeyType +KEY_TYPE_DATA: KeyType +KEY_TYPE_KEK: KeyType +VIRUS_CHANNEL_UNSPECIFIED: VirusChannel +VIRUS_CHANNEL_UPLOAD: VirusChannel +VIRUS_CHANNEL_SCAN: VirusChannel +LOGIN_PROTOCOL_UNSPECIFIED: LoginProtocol +LOGIN_PROTOCOL_SAML2: LoginProtocol +LOGIN_PROTOCOL_OIDC: LoginProtocol +LOGIN_PROTOCOL_HTTP: LoginProtocol + +class Common(_message.Message): + __slots__ = ("timestamp", "source_ip", "user_impersonated_id", "user_initiator_id", "app_id", "tenant_id", "user_session_context_id", "app_context") + class AppContextEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + SOURCE_IP_FIELD_NUMBER: _ClassVar[int] + USER_IMPERSONATED_ID_FIELD_NUMBER: _ClassVar[int] + USER_INITIATOR_ID_FIELD_NUMBER: _ClassVar[int] + APP_ID_FIELD_NUMBER: _ClassVar[int] + TENANT_ID_FIELD_NUMBER: _ClassVar[int] + USER_SESSION_CONTEXT_ID_FIELD_NUMBER: _ClassVar[int] + APP_CONTEXT_FIELD_NUMBER: _ClassVar[int] + timestamp: _timestamp_pb2.Timestamp + source_ip: _containers.RepeatedScalarFieldContainer[str] + user_impersonated_id: str + user_initiator_id: str + app_id: str + tenant_id: str + user_session_context_id: str + app_context: _containers.ScalarMap[str, str] + def __init__(self, timestamp: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., source_ip: _Optional[_Iterable[str]] = ..., user_impersonated_id: _Optional[str] = ..., user_initiator_id: _Optional[str] = ..., app_id: _Optional[str] = ..., tenant_id: _Optional[str] = ..., user_session_context_id: _Optional[str] = ..., app_context: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class AuditlogClear(_message.Message): + __slots__ = ("common", "number_of_events") + COMMON_FIELD_NUMBER: _ClassVar[int] + NUMBER_OF_EVENTS_FIELD_NUMBER: _ClassVar[int] + common: Common + number_of_events: int + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., number_of_events: _Optional[int] = ...) -> None: ... + +class AuditlogDisable(_message.Message): + __slots__ = ("common",) + COMMON_FIELD_NUMBER: _ClassVar[int] + common: Common + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ...) -> None: ... + +class AuditlogEnable(_message.Message): + __slots__ = ("common",) + COMMON_FIELD_NUMBER: _ClassVar[int] + common: Common + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ...) -> None: ... + +class AuthnPrivilegeToGroupAdd(_message.Message): + __slots__ = ("common", "group", "privilege", "object_type", "object_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + GROUP_FIELD_NUMBER: _ClassVar[int] + PRIVILEGE_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + group: str + privilege: str + object_type: str + object_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., group: _Optional[str] = ..., privilege: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class AuthnPrivilegeToGroupDelete(_message.Message): + __slots__ = ("common", "group", "privilege", "object_type", "object_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + GROUP_FIELD_NUMBER: _ClassVar[int] + PRIVILEGE_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + group: str + privilege: str + object_type: str + object_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., group: _Optional[str] = ..., privilege: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class AuthnPrivilegeToRoleAdd(_message.Message): + __slots__ = ("common", "privilege", "role", "object_type", "object_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + PRIVILEGE_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + privilege: str + role: str + object_type: str + object_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., privilege: _Optional[str] = ..., role: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class AuthnPrivilegeToRoleDelete(_message.Message): + __slots__ = ("common", "privilege", "role", "object_type", "object_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + PRIVILEGE_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + privilege: str + role: str + object_type: str + object_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., privilege: _Optional[str] = ..., role: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class AuthnPrivilegeToUserAdd(_message.Message): + __slots__ = ("common", "privilege", "user", "object_type", "object_id", "user_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + PRIVILEGE_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + privilege: str + user: str + object_type: str + object_id: str + user_type: UserType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., privilege: _Optional[str] = ..., user: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., user_type: _Optional[_Union[UserType, str]] = ...) -> None: ... + +class AuthnPrivilegeToUserDelete(_message.Message): + __slots__ = ("common", "privilege", "user", "object_type", "object_id", "user_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + PRIVILEGE_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + privilege: str + user: str + object_type: str + object_id: str + user_type: UserType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., privilege: _Optional[str] = ..., user: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., user_type: _Optional[_Union[UserType, str]] = ...) -> None: ... + +class AuthnRoleToGroupAdd(_message.Message): + __slots__ = ("common", "group", "role") + COMMON_FIELD_NUMBER: _ClassVar[int] + GROUP_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + common: Common + group: str + role: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., group: _Optional[str] = ..., role: _Optional[str] = ...) -> None: ... + +class AuthnRoleToGroupDelete(_message.Message): + __slots__ = ("common", "group", "role") + COMMON_FIELD_NUMBER: _ClassVar[int] + GROUP_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + common: Common + group: str + role: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., group: _Optional[str] = ..., role: _Optional[str] = ...) -> None: ... + +class AuthnRoleToUserAdd(_message.Message): + __slots__ = ("common", "role", "user", "user_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + role: str + user: str + user_type: UserType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., role: _Optional[str] = ..., user: _Optional[str] = ..., user_type: _Optional[_Union[UserType, str]] = ...) -> None: ... + +class AuthnRoleToUserDelete(_message.Message): + __slots__ = ("common", "role", "user", "user_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + role: str + user: str + user_type: UserType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., role: _Optional[str] = ..., user: _Optional[str] = ..., user_type: _Optional[_Union[UserType, str]] = ...) -> None: ... + +class AuthnUserToGroupAdd(_message.Message): + __slots__ = ("common", "group", "user", "user_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + GROUP_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + group: str + user: str + user_type: UserType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., group: _Optional[str] = ..., user: _Optional[str] = ..., user_type: _Optional[_Union[UserType, str]] = ...) -> None: ... + +class AuthnUserToGroupDelete(_message.Message): + __slots__ = ("common", "group", "user", "user_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + GROUP_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + group: str + user: str + user_type: UserType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., group: _Optional[str] = ..., user: _Optional[str] = ..., user_type: _Optional[_Union[UserType, str]] = ...) -> None: ... + +class ConfigurationAdd(_message.Message): + __slots__ = ("common", "value", "property_name", "object_type", "object_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + value: _struct_pb2.Value + property_name: str + object_type: str + object_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class ConfigurationChange(_message.Message): + __slots__ = ("common", "new_value", "old_value", "property_name", "object_type", "object_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + property_name: str + object_type: str + object_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class ConfigurationDelete(_message.Message): + __slots__ = ("common", "value", "property_name", "object_type", "object_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + value: _struct_pb2.Value + property_name: str + object_type: str + object_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ...) -> None: ... + +class CredentialCreate(_message.Message): + __slots__ = ("common", "credential_id", "credential_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_ID_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + credential_id: str + credential_type: CredentialType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., credential_id: _Optional[str] = ..., credential_type: _Optional[_Union[CredentialType, str]] = ...) -> None: ... + +class CredentialDelete(_message.Message): + __slots__ = ("common", "credential_id", "credential_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_ID_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + credential_id: str + credential_type: CredentialType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., credential_id: _Optional[str] = ..., credential_type: _Optional[_Union[CredentialType, str]] = ...) -> None: ... + +class CredentialExpiration(_message.Message): + __slots__ = ("common", "credential_id", "credential_type", "expiration_date") + COMMON_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_ID_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_TYPE_FIELD_NUMBER: _ClassVar[int] + EXPIRATION_DATE_FIELD_NUMBER: _ClassVar[int] + common: Common + credential_id: str + credential_type: CredentialType + expiration_date: _timestamp_pb2.Timestamp + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., credential_id: _Optional[str] = ..., credential_type: _Optional[_Union[CredentialType, str]] = ..., expiration_date: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + +class CredentialRevokation(_message.Message): + __slots__ = ("common", "credential_id", "credential_type", "revokation_date") + COMMON_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_ID_FIELD_NUMBER: _ClassVar[int] + CREDENTIAL_TYPE_FIELD_NUMBER: _ClassVar[int] + REVOKATION_DATE_FIELD_NUMBER: _ClassVar[int] + common: Common + credential_id: str + credential_type: CredentialType + revokation_date: _timestamp_pb2.Timestamp + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., credential_id: _Optional[str] = ..., credential_type: _Optional[_Union[CredentialType, str]] = ..., revokation_date: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + +class DataModelChange(_message.Message): + __slots__ = ("common", "model_id", "new_value", "old_value", "property_name") + COMMON_FIELD_NUMBER: _ClassVar[int] + MODEL_ID_FIELD_NUMBER: _ClassVar[int] + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + common: Common + model_id: str + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + property_name: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., model_id: _Optional[str] = ..., new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ...) -> None: ... + +class DataModelCreate(_message.Message): + __slots__ = ("common", "model_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + MODEL_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + model_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., model_id: _Optional[str] = ...) -> None: ... + +class DataModelDelete(_message.Message): + __slots__ = ("common", "model_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + MODEL_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + model_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., model_id: _Optional[str] = ...) -> None: ... + +class DataAccess(_message.Message): + __slots__ = ("common", "channel_type", "channel_id", "object_type", "object_id", "attribute", "value", "attachment_type", "attachment_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + CHANNEL_TYPE_FIELD_NUMBER: _ClassVar[int] + CHANNEL_ID_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + ATTACHMENT_TYPE_FIELD_NUMBER: _ClassVar[int] + ATTACHMENT_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + channel_type: str + channel_id: str + object_type: str + object_id: str + attribute: str + value: _struct_pb2.Value + attachment_type: str + attachment_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., channel_type: _Optional[str] = ..., channel_id: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., attachment_type: _Optional[str] = ..., attachment_id: _Optional[str] = ...) -> None: ... + +class DataCreate(_message.Message): + __slots__ = ("common", "object_type", "object_id", "attribute", "value") + COMMON_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + common: Common + object_type: str + object_id: str + attribute: str + value: _struct_pb2.Value + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ...) -> None: ... + +class DataDelete(_message.Message): + __slots__ = ("common", "object_type", "object_id", "attribute", "value") + COMMON_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + common: Common + object_type: str + object_id: str + attribute: str + value: _struct_pb2.Value + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ...) -> None: ... + +class DataModification(_message.Message): + __slots__ = ("common", "object_type", "object_id", "attribute", "new_value", "old_value") + COMMON_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + common: Common + object_type: str + object_id: str + attribute: str + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ...) -> None: ... + +class DataExport(_message.Message): + __slots__ = ("common", "channel_type", "channel_id", "object_type", "object_id", "destination_uri") + COMMON_FIELD_NUMBER: _ClassVar[int] + CHANNEL_TYPE_FIELD_NUMBER: _ClassVar[int] + CHANNEL_ID_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + DESTINATION_URI_FIELD_NUMBER: _ClassVar[int] + common: Common + channel_type: DataExportChannelType + channel_id: str + object_type: str + object_id: str + destination_uri: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., channel_type: _Optional[_Union[DataExportChannelType, str]] = ..., channel_id: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., destination_uri: _Optional[str] = ...) -> None: ... + +class DppDataAccess(_message.Message): + __slots__ = ("common", "channel_type", "channel_id", "data_subject_type", "data_subject_id", "object_type", "object_id", "attribute", "value", "attachment_type", "attachment_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + CHANNEL_TYPE_FIELD_NUMBER: _ClassVar[int] + CHANNEL_ID_FIELD_NUMBER: _ClassVar[int] + DATA_SUBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + DATA_SUBJECT_ID_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + ATTACHMENT_TYPE_FIELD_NUMBER: _ClassVar[int] + ATTACHMENT_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + channel_type: str + channel_id: str + data_subject_type: str + data_subject_id: str + object_type: str + object_id: str + attribute: str + value: _struct_pb2.Value + attachment_type: str + attachment_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., channel_type: _Optional[str] = ..., channel_id: _Optional[str] = ..., data_subject_type: _Optional[str] = ..., data_subject_id: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., attachment_type: _Optional[str] = ..., attachment_id: _Optional[str] = ...) -> None: ... + +class DppDataCreate(_message.Message): + __slots__ = ("common", "data_subject_type", "data_subject_id", "object_type", "object_id", "attribute", "value") + COMMON_FIELD_NUMBER: _ClassVar[int] + DATA_SUBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + DATA_SUBJECT_ID_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + common: Common + data_subject_type: str + data_subject_id: str + object_type: str + object_id: str + attribute: str + value: _struct_pb2.Value + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., data_subject_type: _Optional[str] = ..., data_subject_id: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ...) -> None: ... + +class DppDataDelete(_message.Message): + __slots__ = ("common", "data_subject_type", "data_subject_id", "object_type", "object_id", "attribute", "value") + COMMON_FIELD_NUMBER: _ClassVar[int] + DATA_SUBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + DATA_SUBJECT_ID_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + common: Common + data_subject_type: str + data_subject_id: str + object_type: str + object_id: str + attribute: str + value: _struct_pb2.Value + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., data_subject_type: _Optional[str] = ..., data_subject_id: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ...) -> None: ... + +class DppDataModification(_message.Message): + __slots__ = ("common", "data_subject_type", "data_subject_id", "object_type", "object_id", "attribute", "new_value", "old_value") + COMMON_FIELD_NUMBER: _ClassVar[int] + DATA_SUBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + DATA_SUBJECT_ID_FIELD_NUMBER: _ClassVar[int] + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_ID_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTE_FIELD_NUMBER: _ClassVar[int] + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + common: Common + data_subject_type: str + data_subject_id: str + object_type: str + object_id: str + attribute: str + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., data_subject_type: _Optional[str] = ..., data_subject_id: _Optional[str] = ..., object_type: _Optional[str] = ..., object_id: _Optional[str] = ..., attribute: _Optional[str] = ..., new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ...) -> None: ... + +class JobChange(_message.Message): + __slots__ = ("common", "job_id", "new_value", "old_value", "property_name") + COMMON_FIELD_NUMBER: _ClassVar[int] + JOB_ID_FIELD_NUMBER: _ClassVar[int] + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + common: Common + job_id: str + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + property_name: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., job_id: _Optional[str] = ..., new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ...) -> None: ... + +class JobCreate(_message.Message): + __slots__ = ("common", "job_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + JOB_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + job_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., job_id: _Optional[str] = ...) -> None: ... + +class JobDelete(_message.Message): + __slots__ = ("common", "job_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + JOB_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + job_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., job_id: _Optional[str] = ...) -> None: ... + +class JobStatusChange(_message.Message): + __slots__ = ("common", "job_id", "new_value", "old_value", "property_name") + COMMON_FIELD_NUMBER: _ClassVar[int] + JOB_ID_FIELD_NUMBER: _ClassVar[int] + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + common: Common + job_id: str + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + property_name: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., job_id: _Optional[str] = ..., new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ...) -> None: ... + +class MaliciousRequestDetected(_message.Message): + __slots__ = ("common", "parameter", "expected_value", "received_value", "behavior") + COMMON_FIELD_NUMBER: _ClassVar[int] + PARAMETER_FIELD_NUMBER: _ClassVar[int] + EXPECTED_VALUE_FIELD_NUMBER: _ClassVar[int] + RECEIVED_VALUE_FIELD_NUMBER: _ClassVar[int] + BEHAVIOR_FIELD_NUMBER: _ClassVar[int] + common: Common + parameter: str + expected_value: str + received_value: str + behavior: MaliciousBehavior + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., parameter: _Optional[str] = ..., expected_value: _Optional[str] = ..., received_value: _Optional[str] = ..., behavior: _Optional[_Union[MaliciousBehavior, str]] = ...) -> None: ... + +class PasswordChange(_message.Message): + __slots__ = ("common", "user_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + user_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., user_id: _Optional[str] = ...) -> None: ... + +class PasswordExpiration(_message.Message): + __slots__ = ("common", "user_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + user_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., user_id: _Optional[str] = ...) -> None: ... + +class PasswordReset(_message.Message): + __slots__ = ("common", "user_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + user_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., user_id: _Optional[str] = ...) -> None: ... + +class TenantModification(_message.Message): + __slots__ = ("common", "new_value", "old_value", "property_name", "tenant_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + TENANT_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + property_name: str + tenant_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ..., tenant_id: _Optional[str] = ...) -> None: ... + +class TenantOffboarding(_message.Message): + __slots__ = ("common", "tenant_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + TENANT_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + tenant_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., tenant_id: _Optional[str] = ...) -> None: ... + +class TenantOnboarding(_message.Message): + __slots__ = ("common", "tenant_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + TENANT_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + tenant_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., tenant_id: _Optional[str] = ...) -> None: ... + +class UnauthenticatedRequest(_message.Message): + __slots__ = ("common",) + COMMON_FIELD_NUMBER: _ClassVar[int] + common: Common + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ...) -> None: ... + +class UnauthorizedRequest(_message.Message): + __slots__ = ("common", "unauthorized_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + UNAUTHORIZED_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + unauthorized_type: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., unauthorized_type: _Optional[str] = ...) -> None: ... + +class UserActivate(_message.Message): + __slots__ = ("common", "user_id", "user_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + user_id: str + user_type: UserType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., user_id: _Optional[str] = ..., user_type: _Optional[_Union[UserType, str]] = ...) -> None: ... + +class UserBlock(_message.Message): + __slots__ = ("common", "user_id", "user_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + user_id: str + user_type: UserType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., user_id: _Optional[str] = ..., user_type: _Optional[_Union[UserType, str]] = ...) -> None: ... + +class UserCreate(_message.Message): + __slots__ = ("common", "user_id", "user_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + user_id: str + user_type: UserType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., user_id: _Optional[str] = ..., user_type: _Optional[_Union[UserType, str]] = ...) -> None: ... + +class UserDataModification(_message.Message): + __slots__ = ("common", "new_value", "old_value", "property_name", "user_id", "user_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + NEW_VALUE_FIELD_NUMBER: _ClassVar[int] + OLD_VALUE_FIELD_NUMBER: _ClassVar[int] + PROPERTY_NAME_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + new_value: _struct_pb2.Value + old_value: _struct_pb2.Value + property_name: str + user_id: str + user_type: UserType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., new_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., old_value: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., property_name: _Optional[str] = ..., user_id: _Optional[str] = ..., user_type: _Optional[_Union[UserType, str]] = ...) -> None: ... + +class UserDelete(_message.Message): + __slots__ = ("common", "user_id", "user_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + user_id: str + user_type: UserType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., user_id: _Optional[str] = ..., user_type: _Optional[_Union[UserType, str]] = ...) -> None: ... + +class UserImpersonationStart(_message.Message): + __slots__ = ("common", "user_initiator_id", "user_initiator_type", "user_impersonated_id", "user_impersonated_type", "context") + COMMON_FIELD_NUMBER: _ClassVar[int] + USER_INITIATOR_ID_FIELD_NUMBER: _ClassVar[int] + USER_INITIATOR_TYPE_FIELD_NUMBER: _ClassVar[int] + USER_IMPERSONATED_ID_FIELD_NUMBER: _ClassVar[int] + USER_IMPERSONATED_TYPE_FIELD_NUMBER: _ClassVar[int] + CONTEXT_FIELD_NUMBER: _ClassVar[int] + common: Common + user_initiator_id: str + user_initiator_type: UserType + user_impersonated_id: str + user_impersonated_type: UserType + context: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., user_initiator_id: _Optional[str] = ..., user_initiator_type: _Optional[_Union[UserType, str]] = ..., user_impersonated_id: _Optional[str] = ..., user_impersonated_type: _Optional[_Union[UserType, str]] = ..., context: _Optional[str] = ...) -> None: ... + +class UserImpersonationFinish(_message.Message): + __slots__ = ("common", "user_initiator_id", "user_initiator_type", "user_impersonated_id", "user_impersonated_type", "context") + COMMON_FIELD_NUMBER: _ClassVar[int] + USER_INITIATOR_ID_FIELD_NUMBER: _ClassVar[int] + USER_INITIATOR_TYPE_FIELD_NUMBER: _ClassVar[int] + USER_IMPERSONATED_ID_FIELD_NUMBER: _ClassVar[int] + USER_IMPERSONATED_TYPE_FIELD_NUMBER: _ClassVar[int] + CONTEXT_FIELD_NUMBER: _ClassVar[int] + common: Common + user_initiator_id: str + user_initiator_type: UserType + user_impersonated_id: str + user_impersonated_type: UserType + context: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., user_initiator_id: _Optional[str] = ..., user_initiator_type: _Optional[_Union[UserType, str]] = ..., user_impersonated_id: _Optional[str] = ..., user_impersonated_type: _Optional[_Union[UserType, str]] = ..., context: _Optional[str] = ...) -> None: ... + +class UserLock(_message.Message): + __slots__ = ("common", "user_id", "user_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + user_id: str + user_type: UserType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., user_id: _Optional[str] = ..., user_type: _Optional[_Union[UserType, str]] = ...) -> None: ... + +class UserUnlock(_message.Message): + __slots__ = ("common", "user_id", "user_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + user_id: str + user_type: UserType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., user_id: _Optional[str] = ..., user_type: _Optional[_Union[UserType, str]] = ...) -> None: ... + +class UserVerify(_message.Message): + __slots__ = ("common", "user_id", "user_type") + COMMON_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + common: Common + user_id: str + user_type: UserType + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., user_id: _Optional[str] = ..., user_type: _Optional[_Union[UserType, str]] = ...) -> None: ... + +class UserLoginFailure(_message.Message): + __slots__ = ("common", "failure_reason", "method", "is_admin", "mfa_type", "user_type", "login_protocol") + COMMON_FIELD_NUMBER: _ClassVar[int] + FAILURE_REASON_FIELD_NUMBER: _ClassVar[int] + METHOD_FIELD_NUMBER: _ClassVar[int] + IS_ADMIN_FIELD_NUMBER: _ClassVar[int] + MFA_TYPE_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + LOGIN_PROTOCOL_FIELD_NUMBER: _ClassVar[int] + common: Common + failure_reason: FailureReason + method: LoginMethod + is_admin: bool + mfa_type: MfaType + user_type: UserType + login_protocol: LoginProtocol + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., failure_reason: _Optional[_Union[FailureReason, str]] = ..., method: _Optional[_Union[LoginMethod, str]] = ..., is_admin: _Optional[bool] = ..., mfa_type: _Optional[_Union[MfaType, str]] = ..., user_type: _Optional[_Union[UserType, str]] = ..., login_protocol: _Optional[_Union[LoginProtocol, str]] = ...) -> None: ... + +class UserLoginSuccess(_message.Message): + __slots__ = ("common", "is_admin", "method", "mfa_type", "user_type", "login_protocol") + COMMON_FIELD_NUMBER: _ClassVar[int] + IS_ADMIN_FIELD_NUMBER: _ClassVar[int] + METHOD_FIELD_NUMBER: _ClassVar[int] + MFA_TYPE_FIELD_NUMBER: _ClassVar[int] + USER_TYPE_FIELD_NUMBER: _ClassVar[int] + LOGIN_PROTOCOL_FIELD_NUMBER: _ClassVar[int] + common: Common + is_admin: bool + method: LoginMethod + mfa_type: MfaType + user_type: UserType + login_protocol: LoginProtocol + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., is_admin: _Optional[bool] = ..., method: _Optional[_Union[LoginMethod, str]] = ..., mfa_type: _Optional[_Union[MfaType, str]] = ..., user_type: _Optional[_Union[UserType, str]] = ..., login_protocol: _Optional[_Union[LoginProtocol, str]] = ...) -> None: ... + +class UserLogoff(_message.Message): + __slots__ = ("common", "logoff_type", "login_protocol") + COMMON_FIELD_NUMBER: _ClassVar[int] + LOGOFF_TYPE_FIELD_NUMBER: _ClassVar[int] + LOGIN_PROTOCOL_FIELD_NUMBER: _ClassVar[int] + common: Common + logoff_type: LogoffType + login_protocol: LoginProtocol + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., logoff_type: _Optional[_Union[LogoffType, str]] = ..., login_protocol: _Optional[_Union[LoginProtocol, str]] = ...) -> None: ... + +class ZzzCustomEvent(_message.Message): + __slots__ = ("common", "custom") + COMMON_FIELD_NUMBER: _ClassVar[int] + CUSTOM_FIELD_NUMBER: _ClassVar[int] + common: Common + custom: _struct_pb2.Value + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., custom: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ...) -> None: ... + +class CMKOnboarding(_message.Message): + __slots__ = ("common", "system_id", "cmk_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + system_id: str + cmk_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class CMKOffboarding(_message.Message): + __slots__ = ("common", "system_id", "cmk_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + system_id: str + cmk_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class CMKSwitch(_message.Message): + __slots__ = ("common", "system_id", "cmk_id_old", "cmk_id_new") + COMMON_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_OLD_FIELD_NUMBER: _ClassVar[int] + CMK_ID_NEW_FIELD_NUMBER: _ClassVar[int] + common: Common + system_id: str + cmk_id_old: str + cmk_id_new: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., system_id: _Optional[str] = ..., cmk_id_old: _Optional[str] = ..., cmk_id_new: _Optional[str] = ...) -> None: ... + +class CMKTenantModification(_message.Message): + __slots__ = ("common", "system_id", "cmk_id", "cmk_action") + COMMON_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ACTION_FIELD_NUMBER: _ClassVar[int] + common: Common + system_id: str + cmk_id: str + cmk_action: CMKAction + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ..., cmk_action: _Optional[_Union[CMKAction, str]] = ...) -> None: ... + +class CMKCreate(_message.Message): + __slots__ = ("common", "cmk_id", "kms_system_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + cmk_id: str + kms_system_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class CMKDelete(_message.Message): + __slots__ = ("common", "cmk_id", "kms_system_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + cmk_id: str + kms_system_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class CMKRestore(_message.Message): + __slots__ = ("common", "cmk_id", "kms_system_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + cmk_id: str + kms_system_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class CMKDisable(_message.Message): + __slots__ = ("common", "cmk_id", "kms_system_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + cmk_id: str + kms_system_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class CMKEnable(_message.Message): + __slots__ = ("common", "cmk_id", "kms_system_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + cmk_id: str + kms_system_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class CMKRotate(_message.Message): + __slots__ = ("common", "cmk_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + cmk_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class KeyCreate(_message.Message): + __slots__ = ("common", "key_type", "key_id", "system_id", "cmk_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class KeyDelete(_message.Message): + __slots__ = ("common", "key_type", "key_id", "system_id", "cmk_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class KeyRestore(_message.Message): + __slots__ = ("common", "key_type", "key_id", "system_id", "cmk_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class KeyPurge(_message.Message): + __slots__ = ("common", "key_type", "key_id", "system_id", "cmk_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class KeyRotate(_message.Message): + __slots__ = ("common", "key_type", "key_id", "system_id", "cmk_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class KeyEnable(_message.Message): + __slots__ = ("common", "key_type", "key_id", "system_id", "cmk_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class KeyDisable(_message.Message): + __slots__ = ("common", "key_type", "key_id", "system_id", "cmk_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class KeySuspend(_message.Message): + __slots__ = ("common", "key_type", "key_id", "system_id", "cmk_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class KeyOnboardKeyChain(_message.Message): + __slots__ = ("common", "key_type", "key_id", "system_id", "cmk_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + KEY_TYPE_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + key_type: KeyType + key_id: str + system_id: str + cmk_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., key_type: _Optional[_Union[KeyType, str]] = ..., key_id: _Optional[str] = ..., system_id: _Optional[str] = ..., cmk_id: _Optional[str] = ...) -> None: ... + +class CMKDrop(_message.Message): + __slots__ = ("common", "cmk_id", "kms_system_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + cmk_id: str + kms_system_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class CMKSuspend(_message.Message): + __slots__ = ("common", "cmk_id", "kms_system_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + cmk_id: str + kms_system_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class VirusFinding(_message.Message): + __slots__ = ("common", "virus_name", "file_name", "virus_channel") + COMMON_FIELD_NUMBER: _ClassVar[int] + VIRUS_NAME_FIELD_NUMBER: _ClassVar[int] + FILE_NAME_FIELD_NUMBER: _ClassVar[int] + VIRUS_CHANNEL_FIELD_NUMBER: _ClassVar[int] + common: Common + virus_name: str + file_name: str + virus_channel: VirusChannel + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., virus_name: _Optional[str] = ..., file_name: _Optional[str] = ..., virus_channel: _Optional[_Union[VirusChannel, str]] = ...) -> None: ... + +class CMKUnavailable(_message.Message): + __slots__ = ("common", "cmk_id", "kms_system_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + cmk_id: str + kms_system_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class CMKAvailable(_message.Message): + __slots__ = ("common", "cmk_id", "kms_system_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + cmk_id: str + kms_system_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ...) -> None: ... + +class CMKDetach(_message.Message): + __slots__ = ("common", "cmk_id", "kms_system_id", "system_id") + COMMON_FIELD_NUMBER: _ClassVar[int] + CMK_ID_FIELD_NUMBER: _ClassVar[int] + KMS_SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + SYSTEM_ID_FIELD_NUMBER: _ClassVar[int] + common: Common + cmk_id: str + kms_system_id: str + system_id: str + def __init__(self, common: _Optional[_Union[Common, _Mapping]] = ..., cmk_id: _Optional[str] = ..., kms_system_id: _Optional[str] = ..., system_id: _Optional[str] = ...) -> None: ... diff --git a/src/sap_cloud_sdk/core/auditlog_ng/proto/protoc/gen/jsonschema/v1/options.proto b/src/sap_cloud_sdk/core/auditlog_ng/proto/protoc/gen/jsonschema/v1/options.proto new file mode 100644 index 0000000..433f3df --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/proto/protoc/gen/jsonschema/v1/options.proto @@ -0,0 +1,32 @@ +// Custom options for protoc-gen-jsonschema +// Allocated range is 1125-1129 +// See https://github.com/protocolbuffers/protobuf/blob/master/docs/options.md + +syntax = "proto3"; +package protoc.gen.jsonschema.v1; + +import "google/protobuf/descriptor.proto"; + +option go_package = "github.com/chrusty/protoc-gen-jsonschema"; + +// Custom FieldOptions +message FieldOptions { + // Fields tagged with this will be omitted from generated schemas + bool ignore = 1; + + // Fields tagged with this will be marked as "required" in generated schemas + bool required = 2; + + // Fields tagged with this will constrain strings using the "minLength" keyword in generated schemas + int32 min_length = 3; + + // Fields tagged with this will constrain strings using the "maxLength" keyword in generated schemas + int32 max_length = 4; + + // Fields tagged with this will constrain strings using the "pattern" keyword in generated schemas + string pattern = 5; +} + +extend google.protobuf.FieldOptions { + FieldOptions field_options = 1125; +} diff --git a/src/sap_cloud_sdk/core/auditlog_ng/proto/sap/auditlog/auditevent/v1/auditevent.proto b/src/sap_cloud_sdk/core/auditlog_ng/proto/sap/auditlog/auditevent/v1/auditevent.proto new file mode 100644 index 0000000..7a04c91 --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/proto/sap/auditlog/auditevent/v1/auditevent.proto @@ -0,0 +1,1625 @@ +syntax = "proto3"; +package sap.auditlog.auditevent.v1; + +import "buf/validate/validate.proto"; +import "google/protobuf/struct.proto"; +import "google/protobuf/timestamp.proto"; +import "protoc/gen/jsonschema/v1/options.proto"; + +option go_package = "sap.com/auditlog/auditevent"; + +// Metadata +// contains information that are attached to all events. +message Metadata { + string ts = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; // Required format: 2023-10-23T10:00:00.000Z + repeated string source_ip = 2; // IPv4 or IPv6 + string user_impersonated_id = 3; + string user_initiator_id = 4; + string app_id = 5; + string tenant_id = 6; + string user_session_context_id = 7; + map app_context = 8; + Infrastructure infrastructure = 9; + Platform platform = 10; + + message Infrastructure { + oneof runtime { + option (buf.validate.oneof).required = true; + + Kubernetes k8s = 1; + CloudFoundry cf = 2; + Other other = 3; + } + App app = 4; + + message Kubernetes { + string infrastructure_region = 1; + string cluster = 2; + string node = 3; + string pod = 4; + } + + message CloudFoundry { + string btpregion = 1; + string org_id = 2; + string space_id = 3; + string app_id = 4; + } + + message Other { + string runtime_type = 1; + } + + message App { + string image = 1; + string version = 2; + } + } + + message Platform { + oneof platform { + option (buf.validate.oneof).required = true; + + BTP btp = 1; + UnifiedServices unified_services = 2; + Other other = 3; + } + + message BTP { + string global_account_id = 1; + string sub_account_id = 2; + } + + message UnifiedServices { + string account_id = 1; + string folder_path = 2; + string resourcegroup_path = 3; + } + + message Other { + string platform_name = 1; + } + } +} + +/* AuditlogClear + * @EventShortText: "Audit Log has been deleted" + * @EventCode: "AE-0001" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "Audit Log has been deleted (event count: ${number_of_events})" + * @EventDocumentation: "The Audit log has been deleted and is no longer available. The number of events has been deleted." + */ +message AuditlogClear { + int32 number_of_events = 1; +} + +/* AuditlogDisable + * @EventShortText: "Audit Log has been disabled" + * @EventCode: "AE-0002" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "Audit Log has been disabled" + * @EventDocumentation: "The Audit log has been disabled" + */ +message AuditlogDisable {} + +/* AuditlogEnable + * @EventShortText: "Audit Log has been enabled" + * @EventCode: "AE-0003" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "Audit Log has been enabled" + * @EventDocumentation: "The Audit log has been enabled" + */ +message AuditlogEnable {} + +/* AuthnPrivilegeToGroupAdd + * @EventShortText: "An additional privilege has been added to a group" + * @EventCode: "AE-0004" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Privilege ${privilege} (Type: ${object_type}, ID: ${object_id}) has been added to group ${group}" + * @EventDocumentation: "A new privilege has been added to a user group. This privilege grants members of that group access to objects and the ability to perform operations that they are otherwise not permitted to do." + */ +message AuthnPrivilegeToGroupAdd { + string group = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string privilege = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_type = 3; + string object_id = 4; +} + +/* AuthnPrivilegeToGroupDelete + * @EventShortText: "An privilege has been deleted from a group" + * @EventCode: "AE-0005" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Privilege ${privilege} (Type: ${object_type}, ID: ${object_id}) has been deleted from group ${group}" + * @EventDocumentation: "A new privilege has been deleted from the specified user group. Deleting privileges from a group disallows its members from accessing objects and performing actions they were previously permitted to do." + */ +message AuthnPrivilegeToGroupDelete { + string group = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string privilege = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_type = 3; + string object_id = 4; +} + +/* AuthnPrivilegeToRoleAdd + * @EventShortText: "An privilege has been added to a role" + * @EventCode: "AE-0006" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Privilege ${privilege} (Type: ${object_type}, ID: ${object_id}) has been added to role ${role}" + * @EventDocumentation: "A new privilege has been added to the role. This privilege grants users assigned to that role access objects and the ability to perform operations." + */ +message AuthnPrivilegeToRoleAdd { + string privilege = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string role = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_type = 3; + string object_id = 4; +} + +/* AuthnPrivilegeToRoleDelete + * @EventShortText: "An privilege has been deleted from a role" + * @EventCode: "AE-0007" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Privilege ${privilege} (Type: ${object_type}, ID: ${object_id}) has been deleted from role ${role}" + * @EventDocumentation: "A privilege has been deleted from the role. As a result, users assigned to that role no longer have access to the privileges and cannot perform the associated operations." + */ +message AuthnPrivilegeToRoleDelete { + string privilege = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string role = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_type = 3; + string object_id = 4; +} + +/* AuthnPrivilegeToUserAdd + * @EventShortText: "A privilege has been added to a user" + * @EventCode: "AE-0008" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Privilege ${privilege} (Type: ${object_type}, ID: ${object_id}) has been added to user ${user}" + * @EventDocumentation: "A user has been added access to specific objects and operations by a privilege." + */ +message AuthnPrivilegeToUserAdd { + string privilege = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string user = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_type = 3; + string object_id = 4; +} + +/* AuthnPrivilegeToUserDelete + * @EventShortText: "An privilege has been removed from a user" + * @EventCode: "AE-0009" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Privilege ${privilege} (Type: ${object_type}, ID: ${object_id}) has been deleted from user ${user}" + * @EventDocumentation: "A user’s privileges have been deleted, preventing them from accessing the assigned objects and performing the corresponding operations." + */ +message AuthnPrivilegeToUserDelete { + string privilege = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string user = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_type = 3; + string object_id = 4; +} + +/* AuthnRoleToGroupAdd + * @EventShortText: "A user group has been added to a new role." + * @EventCode: "AE-0010" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Role ${role} has been added to group ${group}" + * @EventDocumentation: "A new role has been added to a user group. Now, members of the group can access the assigned objects and perform the corresponding operations." + */ +message AuthnRoleToGroupAdd { + string group = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string role = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* AuthnRoleToGroupDelete + * @EventShortText: "A user group role has been deleted" + * @EventCode: "AE-0011" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Role ${role} has been deleted from group ${group}" + * @EventDocumentation: "A user group has been stripped of a new role, resulting in members losing access to the assigned objects and the ability to perform the associated operations." + */ +message AuthnRoleToGroupDelete { + string group = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string role = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* AuthnRoleToUserAdd + * @EventShortText: "A user has been added a role." + * @EventCode: "AE-0012" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Role ${role} has been added to user ${user}" + * @EventDocumentation: "A new role has been added to a user. Now, the user can access the assigned objects and perform the corresponding operations." + */ +message AuthnRoleToUserAdd { + string role = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string user = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* AuthnRoleToUserDelete + * @EventShortText: "A user’s role has been deleted" + * @EventCode: "AE-0013" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Role ${role} has been deleted from user ${user}" + * @EventDocumentation: "A user has been stripped of a role, resulting in user losing access to the assigned objects and the ability to perform the associated operations." + */ +message AuthnRoleToUserDelete { + string role = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string user = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* AuthnUserToGroupAdd + * @EventShortText: "The user has been added to a group." + * @EventCode: "AE-0014" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User ${user} has been added to group ${group}" + * @EventDocumentation: "A user has been assigned to a user group." + */ +message AuthnUserToGroupAdd { + string group = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string user = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* AuthnUserToGroupDelete + * @EventShortText: "The user has been deleted from the user group." + * @EventCode: "AE-0015" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User ${user} has been deleted from group ${group}" + * @EventDocumentation: "A user has been deleted from mentioned user group." + */ +message AuthnUserToGroupDelete { + string group = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string user = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* ConfigurationAdd + * @EventShortText: "A new configuration has been added" + * @EventCode: "AE-0016" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "A new configuration has been created for the property named ${property_name} (Type: ${object_type}, ID: ${object_id}). The value associated with this property is ${value}" + * @EventDocumentation: "A new configuration has been created for a named property that belongs to an object type with an identifier. This event type of log is being used to record any configuration changes that may be relevant for security or compliance reasons." + */ +message ConfigurationAdd { + google.protobuf.Value value = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string property_name = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_type = 4 [(buf.validate.field).string.max_len = 20]; + string object_id = 5; +} + +/* ConfigurationChange + * @EventShortText: "An existing configuration has been changed" + * @EventCode: "AE-0017" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "An existing configuration has been modified for the property named ${property_name} (Type: ${object_type}, ID: ${object_id}). The value associated with this property has been changed from ${old_value} to ${new_value}" + * @EventDocumentation: "An existing configuration has been changed for a named property that belongs to an object type with an identifier. This event type of log is being used to record any configuration changes that may be relevant for security or compliance reasons." + */ +message ConfigurationChange { + google.protobuf.Value new_value = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + google.protobuf.Value old_value = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string property_name = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_type = 4 [(buf.validate.field).string.max_len = 20]; + string object_id = 5; +} + +/* ConfigurationDelete + * @EventShortText: "A configuration has been deleted" + * @EventCode: "AE-0018" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "A configuration has been deleted for the property named ${property_name} (Type: ${object_type}, ID: ${object_id}). The value associated with this property was ${value}" + * @EventDocumentation: "A configuration has been deleted for a named property that belongs to an object type with an identifier. This event type of log is being used to record any configuration changes that may be relevant for security or compliance reasons." + */ +message ConfigurationDelete { + google.protobuf.Value value = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string property_name = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_type = 4 [(buf.validate.field).string.max_len = 20]; + string object_id = 5; +} + +/* CredentialCreate + * @EventShortText: "A credential has been created" + * @EventCode: "AE-0019" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "A credential with ID ${credential_id} of type ${credential_type} has been successfully created" + * @EventDocumentation: "A credential of a specific type has been successfully created." + */ +message CredentialCreate { + string credential_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + CredentialType credential_type = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* CredentialDelete + * @EventShortText: "A credential has been deleted" + * @EventCode: "AE-0020" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "A credential with ID ${credential_id} of type ${credential_type} has been deleted" + * @EventDocumentation: "A credential of a specific type has been deleted." + */ +message CredentialDelete { + string credential_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + CredentialType credential_type = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* CredentialExpiration + * @EventShortText: "A credential has been expired" + * @EventCode: "AE-0021" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "A credential with ID ${credential_id} of type ${credential_type} has been expired (Expiration date: ${expiration_date})" + * @EventDocumentation: "A credential of a specific type has been expired at a specific time." + */ +message CredentialExpiration { + string credential_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + CredentialType credential_type = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + google.protobuf.Timestamp expiration_date = 3; +} + +/* CredentialRevokation + * @EventShortText: "A credential has been revoked" + * @EventCode: "AE-0022" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "A credential with ID ${credential_id} of type ${credential_type} has been revoked (Revokation date: ${revokation_date})" + * @EventDocumentation: "A credential of a specific type has been invalidated at a specific time." + */ +message CredentialRevokation { + string credential_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + CredentialType credential_type = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + google.protobuf.Timestamp revokation_date = 3; +} + +/* DataModelChange + * @EventShortText: "Data Model has been changed" + * @EventCode: "AE-0023" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Property named ${property_name} of data Model with ID ${model_id} changed. The value associated with this property has been changed from ${old_value} to ${new_value}" + * @EventDocumentation: "A security-relevant DataModel has been modified. A DataModel is a representation of a real-world scenario about which data is to be collected and stored in a database. It depicts the data flow and logical relationships between various data elements." + */ +message DataModelChange { + string model_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + google.protobuf.Value new_value = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + google.protobuf.Value old_value = 3 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string property_name = 4 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* DataModelCreate + * @EventShortText: "Data Model has been created" + * @EventCode: "AE-0024" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Data Model with ID ${model_id} has been created" + * @EventDocumentation: "A security-relevant DataModel has been created. A DataModel is a representation of a real-world scenario about which data is to be collected and stored in a database. It depicts the data flow and logical relationships between various data elements." + */ +message DataModelCreate { + string model_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* DataModelDelete + * @EventShortText: "Data Model has been deleted" + * @EventCode: "AE-0025" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Data Model with ID ${model_id} has been deleted" + * @EventDocumentation: "A security-relevant DataModel has been deleted. A DataModel is a representation of a real-world scenario about which data is to be collected and stored in a database. It depicts the data flow and logical relationships between various data elements." + */ +message DataModelDelete { + string model_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* DataAccess + * @EventShortText: "Security-relevant data has been accessed" + * @EventCode: "AE-0026" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_RAL" + * @EventMessageText: "The attribute ${attribute} of Object Type ${object_type} with Object ID ${object_id} has been accessed via Channel ID ${channel_id} (Channel Type ${channel_type}). The read value is ${value}" + * @EventDocumentation: "A security-relevant property has been read through the designated channel." + */ +message DataAccess { + string channel_type = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string channel_id = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_type = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_id = 4 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string attribute = 5 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + google.protobuf.Value value = 6; + string attachment_type = 7 [deprecated = true]; + string attachment_id = 8 [deprecated = true]; +} + +/* DataCreate + * @EventShortText: "Security-relevant data has been created" + * @EventCode: "AE-0027" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_RAL" + * @EventMessageText: "The attribute ${attribute} with Object ID ${object_id} of Object Type ${object_type} with value ${value} has been created" + * @EventDocumentation: "A security-relevant property has been created." + */ +message DataCreate { + string object_type = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_id = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string attribute = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + google.protobuf.Value value = 4; +} + +/* DataDelete + * @EventShortText: "Security-relevant data has been deleted" + * @EventCode: "AE-0028" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_RAL" + * @EventMessageText: "The attribute ${attribute} of Object ID ${object_id} (Object Type ${object_type}) with value ${value} has been deleted" + * @EventDocumentation: "A security-relevant property has been deleted." + */ +message DataDelete { + string object_type = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_id = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string attribute = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + google.protobuf.Value value = 4; +} + +/* DataModification + * @EventShortText: "Security-relevant data has been modified" + * @EventCode: "AE-0029" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_RAL" + * @EventMessageText: "The attribute ${attribute} of Object ID ${object_id} (Object Type ${object_type}) has been changed from value ${old_value} to new value ${new_value}" + * @EventDocumentation: "A security-relevant property has been changed." + */ +message DataModification { + string object_type = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_id = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string attribute = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + google.protobuf.Value new_value = 4; + google.protobuf.Value old_value = 5; +} + +/* DataExport + * @EventShortText: "Security-relevant data has been exported" + * @EventCode: "AE-0030" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_RAL" + * @EventMessageText: "Object ID ${object_id} (Object Type ${object_type}) has been exported via Channel ID ${channel_id}. Destination URI: ${destination_uri}" + * @EventDocumentation: "A security-relevant data has been exported to a desinated URI" + */ +message DataExport { + DataExportChannelType channel_type = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string channel_id = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_type = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_id = 4 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string destination_uri = 5 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* DppDataAccess + * @EventShortText: "DPP relevant data has been accessed" + * @EventCode: "AE-0031" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_DPP" + * @EventMessageText: "Data Subject ${data_subject_id} of Data Subject Type ${data_subject_type} has been accessed. Object ID ${object_id} (Object Type ${object_type}) has been accessed via Channel ID ${channel_id}. The value associated with attribute ${attribute} was ${value}" + * @EventDocumentation: "Data relevant to the Data Protection and Privacy guidelines or similar purposes has been accessed. Data protection is closely linked to numerous legal requirements and privacy concerns." + */ +message DppDataAccess { + string channel_type = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string channel_id = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string data_subject_type = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string data_subject_id = 4 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_type = 5 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_id = 6 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string attribute = 7 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + google.protobuf.Value value = 8; + string attachment_type = 9 [deprecated = true]; + string attachment_id = 10 [deprecated = true]; +} + +/* DppDataCreate + * @EventShortText: "DPP relevant data has been created" + * @EventCode: "AE-0032" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_DPP" + * @EventMessageText: "Data Subject ${data_subject_id} of Data Subject Type ${data_subject_type} has been created. Object ID ${object_id} (Object Type ${object_type}) has been created. The value associated with attribute ${attribute} was ${value}" + * @EventDocumentation: "Data relevant to the Data Protection and Privacy guidelines or similar purposes has been created. Data protection is closely linked to numerous legal requirements and privacy concerns." + */ +message DppDataCreate { + string data_subject_type = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string data_subject_id = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_type = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_id = 4 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string attribute = 5 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + google.protobuf.Value value = 6; +} + +/* DppDataDelete + * @EventShortText: "DPP relevant data has been deleted" + * @EventCode: "AE-0033" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_DPP" + * @EventMessageText: "Data Subject ${data_subject_id} of Data Subject Type ${data_subject_type} has been deleted. Object ID ${object_id} (Object Type ${object_type}) has been deleted. The value associated with attribute ${attribute} was ${value}" + * @EventDocumentation: "Data relevant to the Data Protection and Privacy guidelines or similar purposes has been deleted. Data protection is closely linked to numerous legal requirements and privacy concerns." + */ +message DppDataDelete { + string data_subject_type = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string data_subject_id = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_type = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_id = 4 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string attribute = 5 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + google.protobuf.Value value = 6; +} + +/* DppDataModification + * @EventShortText: "DPP relevant data has been modified" + * @EventCode: "AE-0034" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_DPP" + * @EventMessageText: "Data Subject ${data_subject_id} of Data Subject Type ${data_subject_type} has been modified. Object ID ${object_id} (Object Type ${object_type}) has been modified. The value associated with attribute ${attribute} was changed from ${old_value} to ${new_value}" + * @EventDocumentation: "Data relevant to the Data Protection and Privacy guidelines or similar purposes has been modified. Data protection is closely linked to numerous legal requirements and privacy concerns." + */ +message DppDataModification { + string data_subject_type = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string data_subject_id = 2 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_type = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string object_id = 4 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string attribute = 5 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + google.protobuf.Value new_value = 6; + google.protobuf.Value old_value = 7; +} + +/* JobChange + * @EventShortText: "A property of job has been changed" + * @EventCode: "AE-0035" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "The property named ${property_name} of Job ${job_id} has been updated from its previous value of ${old_value} to ${new_value}" + * @EventDocumentation: "A named property of a job definition has been updated. Background jobs are automated tasks that run in the background without any user interaction. They are scheduled to run at specific times and are useful for executing time-consuming and repetitive tasks such as data archiving, batch processing, and report generation." + */ +message JobChange { + string job_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + google.protobuf.Value new_value = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + google.protobuf.Value old_value = 3 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string property_name = 4 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* JobCreate + * @EventShortText: "A job has been created" + * @EventCode: "AE-0036" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "Job with ID ${job_id} has been created" + * @EventDocumentation: "A job with the specified ID has been created. Background jobs are automated tasks that run in the background without any user interaction. They are scheduled to run at specific times and are useful for executing time-consuming and repetitive tasks such as data archiving, batch processing, and report generation." + */ +message JobCreate { + string job_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* JobDelete + * @EventShortText: "A job has been deleted" + * @EventCode: "AE-0037" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "Job with ID ${job_id} has been deleted" + * @EventDocumentation: "A job with the specified ID has been deleted. Background jobs are automated tasks that run in the background without any user interaction. They are scheduled to run at specific times and are useful for executing time-consuming and repetitive tasks such as data archiving, batch processing, and report generation." + */ +message JobDelete { + string job_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* JobStatusChange + * @EventShortText: "A job status has been changed" + * @EventCode: "AE-0038" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "The job status of Job ${job_id} has modified the property named ${property_name}. Its previous value was ${old_value}, and it has now been updated to ${new_value}" + * @EventDocumentation: "A job status has changed by changing a named property. Background jobs are automated tasks that run in the background without any user interaction. They are scheduled to run at specific times and are useful for executing time-consuming and repetitive tasks such as data archiving, batch processing, and report generation." + */ +message JobStatusChange { + string job_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + google.protobuf.Value new_value = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + google.protobuf.Value old_value = 3 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string property_name = 4 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* MaliciousRequestDetected + * @EventShortText: "The server has received a request that it seems malicious" + * @EventCode: "AE-0039" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Malicious behavior ${behavior} for parameter ${parameter} detected. The received value was ${received_value}, but the expected value was ${expected_value}" + * @EventDocumentation: "A Malicious Request is a well-crafted and harmful request sent by a hacker to an authenticated user. This request contains the necessary parameters to execute valid actions on a web application without the user’s knowledge." + */ +message MaliciousRequestDetected { + string parameter = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string expected_value = 2; + string received_value = 3; + MaliciousBehavior behavior = 4 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* PasswordChange + * @EventShortText: "The password of a user has been changed" + * @EventCode: "AE-0040" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "The password of user ${user_id} has been changed" + * @EventDocumentation: "Password of the mentioned user has been changed." + */ +message PasswordChange { + string user_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* PasswordExpiration + * @EventShortText: "The password of a user has expired" + * @EventCode: "AE-0041" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "The password of user ${user_id} has expired" + * @EventDocumentation: "Password of the mentioned user has expired." + */ +message PasswordExpiration { + string user_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* PasswordReset + * @EventShortText: "The user’s password has been reset" + * @EventCode: "AE-0042" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "The password of user ${user_id} has been reset" + * @EventDocumentation: "Password of the mentioned user has been reset." + */ +message PasswordReset { + string user_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* TenantModification + * @EventShortText: "A property of a tenant was modified" + * @EventCode: "AE-0043" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "The property named ${property_name} has been updated for the tenant with ID ${tenant_id}. The value has been changed from ${old_value} to ${new_value}" + * @EventDocumentation: "A property of a tenant was changed." + */ +message TenantModification { + google.protobuf.Value new_value = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + google.protobuf.Value old_value = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string property_name = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string tenant_id = 4 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* TenantOffboarding + * @EventShortText: "A tenant was offboarded" + * @EventCode: "AE-0044" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "The tenant with ID ${tenant_id} has been terminated" + * @EventDocumentation: "The tenant has been terminated from the service." + */ +message TenantOffboarding { + string tenant_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* TenantOnboarding + * @EventShortText: "A tenant was onboarded" + * @EventCode: "AE-0045" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "The tenant with ID ${tenant_id} has been created" + * @EventDocumentation: "The tenant has been created" + */ +message TenantOnboarding { + string tenant_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* UnauthenticatedRequest + * @EventShortText: "Unauthenticated request has been performed" + * @EventCode: "AE-0046" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "An unauthenticated request has been performed" + * @EventDocumentation: "An unauthenticated request (in the sense of an HTTP status code 401) has been performed" + */ +message UnauthenticatedRequest {} + +/* UnauthorizedRequest + * @EventShortText: "Unauthenticated request has been performed" + * @EventCode: "AE-0047" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "An unauthorized request has been performed" + * @EventDocumentation: "An unauthenticated request (in the sense of an HTTP status code 401) has been performed" + */ +message UnauthorizedRequest {} + +/* UserActivate + * @EventShortText: "User has been activated" + * @EventCode: "AE-0048" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User with ID ${user_id} has been activated" + * @EventDocumentation: "A specific user has been acitvated" + */ +message UserActivate { + string user_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* UserBlock + * @EventShortText: "User has been blocked" + * @EventCode: "AE-0049" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User with ID ${user_id} has been blocked" + * @EventDocumentation: "A specific user has been blocked" + */ +message UserBlock { + string user_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* UserCreate + * @EventShortText: "User has been created" + * @EventCode: "AE-0050" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User with ID ${user_id} has been created" + * @EventDocumentation: "A specific user has been created" + */ +message UserCreate { + string user_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* UserDataModification + * @EventShortText: "User's master data has been modified" + * @EventCode: "AE-0051" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "The property named ${property_name} of user with ID ${user_id} has been updated from its previous value of ${old_value} to ${new_value}" + * @EventDocumentation: "User's master data has been modified. A specific property of user has been changed" + */ +message UserDataModification { + google.protobuf.Value new_value = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + google.protobuf.Value old_value = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string property_name = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + string user_id = 4 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* UserDelete + * @EventShortText: "User has been deleted" + * @EventCode: "AE-0052" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User with ID ${user_id} has been deleted" + * @EventDocumentation: "A specific user has been deleted" + */ +message UserDelete { + string user_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* UserImpersonationStart + * @EventShortText: "User impersonation started" + * @EventCode: "AE-0053" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "User with ID ${user_initiator_id} (User Type:${user_initiator_type}) started impersonation for user with ID ${user_impersonated_id} (User Type:${user_impersonated_type}). Context ID: ${context}" + * @EventDocumentation: "Impersonation session has been started. User impersonation enables initiating user to access and operate as if they were logged in as that impersonated user. User A receives the authorizations of user B, user A is the Initiator and user B the Impersonated" + */ +message UserImpersonationStart { + string user_initiator_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + UserType user_initiator_type = 2; + string user_impersonated_id = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + UserType user_impersonated_type = 4; + string context = 5 [(buf.validate.field).string.min_len = 1]; +} + +/* UserImpersonationFinish + * @EventShortText: "User impersonation finished" + * @EventCode: "AE-0054" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "User with ID ${user_initiator_id} (User Type:${user_initiator_type}) finished impersonation for user with ID ${user_impersonated_id} (User Type:${user_impersonated_type}).Context ID: ${context}" + * @EventDocumentation: "Impersonation session has been finished. User impersonation enables initiating user to access and operate as if they were logged in as that impersonated user. User A receives the authorizations of user B, user A is the Initiator and user B the Impersonated." + */ +message UserImpersonationFinish { + string user_initiator_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + UserType user_initiator_type = 2; + string user_impersonated_id = 3 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; + UserType user_impersonated_type = 4; + string context = 5 [(buf.validate.field).string.min_len = 1]; +} + +/* UserLock + * @EventShortText: "User has been locked" + * @EventCode: "AE-0055" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User with ID ${user_id} has been locked" + * @EventDocumentation: "A specific user has been locked" + */ +message UserLock { + string user_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* UserUnlock + * @EventShortText: "User has been unlocked" + * @EventCode: "AE-0056" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User with ID ${user_id} has been unlocked" + * @EventDocumentation: "A specific user has been unlocked" + */ +message UserUnlock { + string user_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* UserVerify + * @EventShortText: "User has been verified" + * @EventCode: "AE-0057" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "User with ID ${user_id} has been verified" + * @EventDocumentation: "A specific user has been verified." + */ +message UserVerify { + string user_id = 1 [ + (buf.validate.field).string.min_len = 1, + (protoc.gen.jsonschema.v1.field_options).required = true + ]; +} + +/* UserLoginFailure + * @EventShortText: "User login failed" + * @EventCode: "AE-0058" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "User failed (reason: ${failure_reason}) to login via ${method}" + * @EventDocumentation: "The user could not be logged on to the system" + */ +message UserLoginFailure { + FailureReason failure_reason = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + LoginMethod method = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* UserLoginSuccess + * @EventShortText: "User login was successful" + * @EventCode: "AE-0059" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "User logged on successfully (User Type: ${user_type}, Method: ${method}, Admin: ${is_admin}, Multifactor Type: ${mfa_type} " + * @EventDocumentation: "The user has logged onto the system successfully." + */ +message UserLoginSuccess { + bool is_admin = 1; + LoginMethod method = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + MfaType mfa_type = 3 [(protoc.gen.jsonschema.v1.field_options).required = true]; + UserType user_type = 4 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* UserLogoff + * @EventShortText: "User logged off" + * @EventCode: "AE-0060" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "User logged off (Type: ${logoff_type})" + * @EventDocumentation: "The logged off." + */ +message UserLogoff { + LogoffType logoff_type = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* ZzzCustomEvent + * @EventShortText: "Custom Event" + * @EventCode: "AE-0061" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${custom}" + * @EventDocumentation: "Custom event-type used for security related events that are not part of the Audit Log Event Catalog." + */ +message ZzzCustomEvent { + google.protobuf.Value custom = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* CMKOnboarding + * @EventShortText: "System has been onboarded to CMK" + * @EventCode: "AE-0062" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "System ${system_id} has been onboarded to Customer Managed Key ${cmk_id} in KMS Tenant ${tenant_id}" + * @EventDocumentation: "A System has been onboarded to a Customer Managed Key within an SAP Key Management Service Tenant." + */ +message CMKOnboarding { + string system_id = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string cmk_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* CMKOffboarding + * @EventShortText: "System has been offboarded from CMK" + * @EventCode: "AE-0063" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "System ${system_id} has been offboarded from Customer Managed Key ${cmk_id} in KMS Tenant ${tenant_id}" + * @EventDocumentation: "A System has been offboarded from a Customer Managed Key within as SAP Key Management Service Tenant." + */ +message CMKOffboarding { + string system_id = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string cmk_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* CMKSwitch + * @EventShortText: "System has switched CMKs within SAP KMS" + * @EventCode: "AE-0064" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "System ${system_id} has been switched from Customer Managed Key ${cmk_id_old} to Customer Managed Key ${cmk_id_new} in KMS Tenant ${tenant_id}" + * @EventDocumentation: "A System has been offboarded from a Customer Managed Key within as SAP Key Management Service Tenant." + */ +message CMKSwitch { + string system_id = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string cmk_id_old = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string cmk_id_new = 3 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* CMKTenantModification + * @EventShortText: "CMK Tenant modification" + * @EventCode: "AE-0065" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Tenant with ID ${tenant_id} (Customer Tenant Context ID: ${system_id}) has been modified. Action = ${cmk_action} for Customer Managed Key ${cmk_id}" + * @EventDocumentation: "A Tenant has been modifed as a result of a customer action within the SAP Key Management Service (e.g. System Onboarding, System Offboarding or Key Revocation)" + */ +message CMKTenantModification { + string system_id = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string cmk_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + CMKAction cmk_action = 3 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* CMKCreate + * @EventShortText: "CMK has been created" + * @EventCode: "AE-0066" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has been created" + * @EventDocumentation: "Customer Managed Key has been created in SAP KMS. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKCreate { + string cmk_id = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string kms_system_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* CMKDelete + * @EventShortText: "CMK has been deleted" + * @EventCode: "AE-0067" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has been deleted" + * @EventDocumentation: "Customer Managed Key has been deleted in SAP KMS. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKDelete { + string cmk_id = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string kms_system_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* CMKRestore + * @EventShortText: "CMK has been restored" + * @EventCode: "AE-0068" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has been restored" + * @EventDocumentation: "Customer Managed Key has been restored in SAP KMS. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKRestore { + string cmk_id = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string kms_system_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* CMKDisable + * @EventShortText: "CMK has been disabled" + * @EventCode: "AE-0069" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has been disabled" + * @EventDocumentation: "Customer Managed Key has been disabled in SAP KMS. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKDisable { + string cmk_id = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string kms_system_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* CMKEnable + * @EventShortText: "CMK has been enabled" + * @EventCode: "AE-0070" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has been enabled" + * @EventDocumentation: "Customer Managed Key has been enabled in SAP KMS. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKEnable { + string cmk_id = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string kms_system_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* CMKRotate + * @EventShortText: "CMK has been rotated" + * @EventCode: "AE-0071" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} has been rotated" + * @EventDocumentation: "Customer Managed Key has rotated in SAP KMS. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKRotate { + string cmk_id = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* KeyCreate + * @EventShortText: "Key has been created" + * @EventCode: "AE-0072" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} has been created (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key indentified by its Key ID has been created. The key was assigned to a system referenced by a Customer Managed Key." + */ +message KeyCreate { + KeyType key_type = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string key_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string system_id = 3 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string cmk_id = 4 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* KeyDelete + * @EventShortText: "Key has been deleted" + * @EventCode: "AE-0073" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} has been deleted (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key indentified by its Key ID has been deleted. The key was assigned to a system referenced by a Customer Managed Key. Reasons for deleting a key are: consumer-controlled key termination" + */ +message KeyDelete { + KeyType key_type = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string key_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string system_id = 3 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string cmk_id = 4 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* KeyRestore + * @EventShortText: "Key has been restored" + * @EventCode: "AE-0074" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} has been restored (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key indentified by its Key ID has been restored. The key was assigned to a system referenced by a Customer Managed Key. Reasons for restoring are e.g. restore from backup" + */ +message KeyRestore { + KeyType key_type = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string key_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string system_id = 3 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string cmk_id = 4 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* KeyPurge + * @EventShortText: "Key has been purged" + * @EventCode: "AE-0075" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} has been purged (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key indentified by its Key ID has been purged. The key was assigned to a system referenced by a Customer Managed Key. Reasons for purging a key from memory are: mainly Customer Managed Key revocation" + */ +message KeyPurge { + KeyType key_type = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string key_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string system_id = 3 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string cmk_id = 4 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* KeyRotate + * @EventShortText: "Key has been rotated" + * @EventCode: "AE-0076" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} has been rotated (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key indentified by its Key ID has been rotated. The key was assigned to a system referenced by a Customer Managed Key. Reasons for rotating a key are: scheduled internal key rotation, Customer Managed Key rotation" + */ +message KeyRotate { + KeyType key_type = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string key_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string system_id = 3 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string cmk_id = 4 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* KeyEnable + * @EventShortText: "Key has been enabled" + * @EventCode: "AE-0077" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} has been enabled (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key indentified by its Key ID has been enabled. The key was assigned to a system referenced by a Customer Managed Key. Reasons for enabling a key are: Customer Managed Key restore, consumer-side key management" + */ +message KeyEnable { + KeyType key_type = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string key_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string system_id = 3 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string cmk_id = 4 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* KeyDisable + * @EventShortText: "Key has been disabled" + * @EventCode: "AE-0078" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} has been disabled (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key indentified by its Key ID has been disabled. The key was assigned to a system referenced by a Customer Managed Key. Reasons for disabling a key are: Customer Managed Key restore, consumer-side key management" + */ +message KeyDisable { + KeyType key_type = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string key_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string system_id = 3 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string cmk_id = 4 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* CMKUnavailable + * @EventShortText: "CMK has become unavailable" + * @EventCode: "AE-0084" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has become unavailable" + * @EventDocumentation: "Customer Managed Key has become unavailable for SAP Key Management Service. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKUnavailable { + string cmk_id = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string kms_system_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* CMKAvailable + * @EventShortText: "CMK has become available" + * @EventCode: "AE-0085" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has become available" + * @EventDocumentation: "Customer Managed Key has become available for SAP Key Management Service. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKAvailable { + string cmk_id = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string kms_system_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +/* CMKDetach + * @EventShortText: "CMK has been detached" + * @EventCode: "AE-0086" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has been detached from System ${system_id}" + * @EventDocumentation: "Customer Managed Key has been detached from System in SAP Key Management Service. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKDetach { + string cmk_id = 1 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string kms_system_id = 2 [(protoc.gen.jsonschema.v1.field_options).required = true]; + string system_id = 3 [(protoc.gen.jsonschema.v1.field_options).required = true]; +} + +enum CredentialType { + //@ShortText: "Unspecified" + CREDENTIAL_TYPE_UNSPECIFIED = 0; + //@ShortText: "X.509" + CREDENTIAL_TYPE_X509_CERTIFICATE = 1; + //@ShortText: "Key" + CREDENTIAL_TYPE_KEY = 2; + //@ShortText: "Secret" + CREDENTIAL_TYPE_SECRET = 3; +} + +// FailureReason +enum FailureReason { + //@ShortText: "Unspecified Reason" + FAILURE_REASON_UNSPECIFIED = 0; + //@ShortText: "Wrong Password" + FAILURE_REASON_PASSWORD = 1; + //@ShortText: "Multi-Factor Authentication failed" + FAILURE_REASON_MFA_FAILED = 2; + //@ShortText: "User not found" + FAILURE_REASON_USER_NOT_FOUND = 3; + //@ShortText: "User locked" + FAILURE_REASON_USER_LOCKED = 4; + //@ShortText: "User blocked" + FAILURE_REASON_USER_BLOCKED = 5; + //@ShortText: "User not verified + FAILURE_REASON_USER_UNVERIFIED = 6; + //@ShortText: "User expired" + FAILURE_REASON_USER_EXPIRED = 7; + //@ShortText: "User invalid" + FAILURE_REASON_USER_INVALID = 8; + //@ShortText: "Insecure connection" + FAILURE_REASON_INSECURE_CONNECTION = 9; + //@ShortText: "Login method disabled" + FAILURE_REASON_LOGIN_METHOD_DISABLED = 10; + //@ShortText: "Token expired" + FAILURE_REASON_TOKEN_EXPIRED = 11; + //@ShortText: "Token revoked" + FAILURE_REASON_TOKEN_REVOKED = 12; + //@ShortText: "Token invaled" + FAILURE_REASON_TOKEN_INVALID = 13; + //@ShortText: "Session expired" + FAILURE_REASON_SESSION_EXPIRED = 14; + //@ShortText: "Session revoked" + FAILURE_REASON_SESSION_REVOKED = 15; + //@ShortText: "Certificate expired" + FAILURE_REASON_CERTIFICATE_EXPIRED = 16; + //@ShortText: "Certificate revoked" + FAILURE_REASON_CERTIFICATE_REVOKED = 17; + //@ShortText: "Certificate invalid" + FAILURE_REASON_CERTIFICATE_INVALID = 18; +} + +// LoginMethod +enum LoginMethod { + //@ShortText: "Unspecified" + LOGIN_METHOD_UNSPECIFIED = 0; + //@ShortText: "OIDC" + LOGIN_METHOD_OPEN_ID_CONNECT = 1; + //@ShortText: "SAML" + LOGIN_METHOD_SAML = 2; + //@ShortText: "SAML2" + LOGIN_METHOD_SAML2 = 3; + //@ShortText: "External" + LOGIN_METHOD_EXTERNAL = 4; + //@ShortText: "SPNego" + LOGIN_METHOD_SPNEGO = 5; + //@ShortText: "Password" + LOGIN_METHOD_PASSWORD = 6; + //@ShortText: "RFC Ticket" + LOGIN_METHOD_RFC_TICKET = 7; + //@ShortText: "SNC" + LOGIN_METHOD_SNC = 8; + //@ShortText: "Logon Ticket" + LOGIN_METHOD_LOGON_TICKET = 9; + //@ShortText: "User switch" + LOGIN_METHOD_USER_SWITCH = 10; + //@ShortText: "X.509" + LOGIN_METHOD_X509_CERTIFICATE = 11; + //@ShortText: "APC Session" + LOGIN_METHOD_APC_SESSION = 12; + //@ShortText: "Internal" + LOGIN_METHOD_INTERNAL = 13; + //@ShortText: "OAuth 2.0" + LOGIN_METHOD_OAUTH2 = 14; + //@ShortText: "Reentrance Ticket" + LOGIN_METHOD_REENTRANCE_TICKET = 15; + //@ShortText: Http security session" + LOGIN_METHOD_HTTP_SESSION = 16; + //@ShortText: "Assertion Ticket" + LOGIN_METHOD_ASSERTION_TICKET = 17; +} + +// LogoffType +enum LogoffType { + //@ShortText: "Unspecified" + LOGOFF_TYPE_UNSPECIFIED = 0; + //@ShortText: "Regular" + LOGOFF_TYPE_REGULAR = 1; + //@ShortText: "Forced" + LOGOFF_TYPE_FORCED = 2; +} + +// MaliciousBehavior +enum MaliciousBehavior { + //@ShortText: "Unspecified" + MALICIOUS_BEHAVIOR_UNSPECIFIED = 0; + //@ShortText: "Malicious parameter" + MALICIOUS_BEHAVIOR_PARAMETER_SEEN = 1; + //@ShortText: "Parameter not found" + MALICIOUS_BEHAVIOR_PARAMETER_NOT_FOUND = 2; + //@ShortText: "Malicious parameter value" + MALICIOUS_BEHAVIOR_PARAMETER_VALUE_SEEN = 3; + //@ShortText: "Parameter value modified" + MALICIOUS_BEHAVIOR_PARAMETER_VALUE_MODIFIED = 4; +} + +// MfaType +enum MfaType { + //@ShortText: "Unspecified" + MFA_TYPE_UNSPECIFIED = 0; + //@ShortText: "None" + MFA_TYPE_NONE = 1; + //@ShortText: "RSA" + MFA_TYPE_RSA = 2; + //@ShortText: "TOTP" + MFA_TYPE_TOTP = 3; + //@ShortText: "WebAuthn" + MFA_TYPE_WEB_AUTHN = 4; +} + +// UserType +enum UserType { + //@ShortText: "Unspecified" + USER_TYPE_UNSPECIFIED = 0; + //@ShortText: "Business User" + USER_TYPE_BUSINESS_USER = 1; + //@ShortText: "Technical User" + USER_TYPE_TECHNICAL_USER = 2; +} + +// DataExportChannelType +enum DataExportChannelType { + //@ShortText: "Unspecified" + DATA_EXPORT_CHANNEL_TYPE_UNSPECIFIED = 0; + //@ShortText: "Download" + DATA_EXPORT_CHANNEL_TYPE_DOWNLOAD = 1; + //@ShortText: "API" + DATA_EXPORT_CHANNEL_TYPE_API_ACCESS = 2; + //@ShortText: "Printer" + DATA_EXPORT_CHANNEL_TYPE_PRINTER = 3; +} + +//Categories for grouping Events +enum EventCategoryCode { + //@ShortText: "Security related events" + EVENT_CATEGORY_CODE_SEC_UNSPECIFIED = 0; + //@ShortText: "Identity Management & Access Management" + EVENT_CATEGORY_CODE_IAM = 1; + //@ShortText: "Configuration Changes" + EVENT_CATEGORY_CODE_CFG = 2; + //@ShortText: "Sensitive Personal Data Logging" + EVENT_CATEGORY_CODE_DPP = 3; + //@ShortText: "Read Access Logging" + EVENT_CATEGORY_CODE_RAL = 4; +} + +// CMK Actions +enum CMKAction { + //@ShortText: "Unspecified" + CMK_ACTION_UNSPECIFIED = 0; + //@ShortText: "Customer Managed Key Onboarding" + CMK_ACTION_ONBOARD = 1; + //@ShortText: "Tenant blocked" + CMK_ACTION_BLOCK = 2; + //@ShortText: "Tenant shutdown" + CMK_ACTION_SHUTDOWN = 3; + //@ShortText: "Fallback to SAP Managed Key" + CMK_ACTION_CSEKFALLBACK = 4; + //@ShortText: "Tenant restored" + CMK_ACTION_RESTORE = 5; + //@ShortText: "KMS System onboarded" + CMK_ACTION_KMS_ONBOARD = 6; + //@ShortText: "KMS System offboarded" + CMK_ACTION_KMS_OFFBOARD = 7; +} + +// Key Types within key operations +enum KeyType { + //@ShortText: "Unspecified" + KEY_TYPE_UNSPECIFIED = 0; + //@ShortText: "System Key" + KEY_TYPE_SYSTEM = 1; + //@ShortText: "Service Key" + KEY_TYPE_SERVICE = 2; + //@ShortText: "Data Encryption Key" + KEY_TYPE_DATA = 3; + //@ShortText: "Key Encryption Key" + KEY_TYPE_KEK = 4; +} diff --git a/src/sap_cloud_sdk/core/auditlog_ng/proto/sap/auditlog/auditevent/v2/auditevent.proto b/src/sap_cloud_sdk/core/auditlog_ng/proto/sap/auditlog/auditevent/v2/auditevent.proto new file mode 100644 index 0000000..a4bc211 --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/proto/sap/auditlog/auditevent/v2/auditevent.proto @@ -0,0 +1,1766 @@ +syntax = "proto3"; +package sap.auditlog.auditevent.v2; + +import "buf/validate/validate.proto"; +import "google/protobuf/struct.proto"; +import "google/protobuf/timestamp.proto"; + +option go_package = "sap.com/auditlog/auditevent"; + +// Common Fields +// contains information that are attached to all events. +message Common { + //timestamp of the event + google.protobuf.Timestamp timestamp = 1; // Required format: 2023-10-23T10:00:00.000Z + //IP Adress of the source in IPv4 or IPv6 + repeated string source_ip = 2; // IPv4 or IPv6 + //contains the local user ID, which is used in case of impersonation + string user_impersonated_id = 3; + //contains the local user ID, who caused the audit log event + string user_initiator_id = 4; + string app_id = 5; + //tenant ID of the source + string tenant_id = 6; + string user_session_context_id = 7; + map app_context = 8; +} + +/* AuditlogClear + * @EventShortText: "Audit Log has been deleted" + * @EventCode: "AE-0001" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "Audit Log has been deleted (event count: ${number_of_events})" + * @EventDocumentation: "The Audit log has been deleted and is no longer available. The number of events has been deleted." + */ +message AuditlogClear { + Common common = 1; + int32 number_of_events = 2; +} + +/* AuditlogDisable + * @EventShortText: "Audit Log has been disabled" + * @EventCode: "AE-0002" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "Audit Log has been disabled" + * @EventDocumentation: "The Audit log has been disabled" + */ +message AuditlogDisable { + Common common = 1; +} + +/* AuditlogEnable + * @EventShortText: "Audit Log has been enabled" + * @EventCode: "AE-0003" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "Audit Log has been enabled" + * @EventDocumentation: "The Audit log has been enabled" + */ +message AuditlogEnable { + Common common = 1; +} + +/* AuthnPrivilegeToGroupAdd + * @EventShortText: "An additional privilege has been added to a group" + * @EventCode: "AE-0004" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Privilege ${privilege} (Type: ${object_type}, ID: ${object_id}) has been added to group ${group}" + * @EventDocumentation: "A new privilege has been added to a user group. This privilege grants members of that group access to objects and the ability to perform operations that they are otherwise not permitted to do." + */ +message AuthnPrivilegeToGroupAdd { + Common common = 1; + string group = 2 [ + (buf.validate.field).string.min_len = 1 + ]; + string privilege = 3 [ + (buf.validate.field).string.min_len = 1 + ]; + string object_type = 4; + string object_id = 5; +} + +/* AuthnPrivilegeToGroupDelete + * @EventShortText: "An privilege has been deleted from a group" + * @EventCode: "AE-0005" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Privilege ${privilege} (Type: ${object_type}, ID: ${object_id}) has been deleted from group ${group}" + * @EventDocumentation: "A new privilege has been deleted from the specified user group. Deleting privileges from a group disallows its members from accessing objects and performing actions they were previously permitted to do." + */ +message AuthnPrivilegeToGroupDelete { + Common common = 1; + string group = 2 [ + (buf.validate.field).string.min_len = 1 + ]; + string privilege = 3 [ + (buf.validate.field).string.min_len = 1 + ]; + string object_type = 4; + string object_id = 5; +} + +/* AuthnPrivilegeToRoleAdd + * @EventShortText: "An privilege has been added to a role" + * @EventCode: "AE-0006" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Privilege ${privilege} (Type: ${object_type}, ID: ${object_id}) has been added to role ${role}" + * @EventDocumentation: "A new privilege has been added to the role. This privilege grants users assigned to that role access objects and the ability to perform operations." + */ +message AuthnPrivilegeToRoleAdd { + Common common = 1; + string privilege = 2 [ + (buf.validate.field).string.min_len = 1 + ]; + string role = 3 [ + (buf.validate.field).string.min_len = 1 + ]; + string object_type = 4; + string object_id = 5; +} + +/* AuthnPrivilegeToRoleDelete + * @EventShortText: "An privilege has been deleted from a role" + * @EventCode: "AE-0007" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Privilege ${privilege} (Type: ${object_type}, ID: ${object_id}) has been deleted from role ${role}" + * @EventDocumentation: "A privilege has been deleted from the role. As a result, users assigned to that role no longer have access to the privileges and cannot perform the associated operations." + */ +message AuthnPrivilegeToRoleDelete { + Common common = 1 ; + string privilege = 2 [ + (buf.validate.field).string.min_len = 1 + ]; + string role = 3 [ + (buf.validate.field).string.min_len = 1 + ]; + string object_type = 4; + string object_id = 5; +} + +/* AuthnPrivilegeToUserAdd + * @EventShortText: "A privilege has been added to a user" + * @EventCode: "AE-0008" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Privilege ${privilege} (Type: ${object_type}, ID: ${object_id}) has been added to user ${user} (User Type: ${user_type}) " + * @EventDocumentation: "A user has been added access to specific objects and operations by a privilege." + */ +message AuthnPrivilegeToUserAdd { + Common common = 1 ; + string privilege = 2 [ + (buf.validate.field).string.min_len = 1 + ]; + string user = 3 [ + (buf.validate.field).string.min_len = 1 + ]; + string object_type = 4; + string object_id = 5; + UserType user_type = 6; +} + +/* AuthnPrivilegeToUserDelete + * @EventShortText: "An privilege has been removed from a user" + * @EventCode: "AE-0009" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Privilege ${privilege} (Type: ${object_type}, ID: ${object_id}) has been deleted from user ${user} (User Type: ${user_type})" + * @EventDocumentation: "A user’s privileges have been deleted, preventing them from accessing the assigned objects and performing the corresponding operations." + */ +message AuthnPrivilegeToUserDelete { + Common common = 1 ; + string privilege = 2 [ + (buf.validate.field).string.min_len = 1 + ]; + string user = 3 [ + (buf.validate.field).string.min_len = 1 + ]; + string object_type = 4; + string object_id = 5; + UserType user_type = 6; +} + +/* AuthnRoleToGroupAdd + * @EventShortText: "A user group has been added to a new role." + * @EventCode: "AE-0010" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Role ${role} has been added to group ${group}" + * @EventDocumentation: "A new role has been added to a user group. Now, members of the group can access the assigned objects and perform the corresponding operations." + */ +message AuthnRoleToGroupAdd { + Common common = 1; + string group = 2 [ + (buf.validate.field).string.min_len = 1 + ]; + string role = 3 [ + (buf.validate.field).string.min_len = 1 + ]; +} + +/* AuthnRoleToGroupDelete + * @EventShortText: "A user group role has been deleted" + * @EventCode: "AE-0011" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Role ${role} has been deleted from group ${group}" + * @EventDocumentation: "A user group has been stripped of a new role, resulting in members losing access to the assigned objects and the ability to perform the associated operations." + */ +message AuthnRoleToGroupDelete { + Common common = 1; + string group = 2 [ + (buf.validate.field).string.min_len = 1 + ]; + string role = 3 [ + (buf.validate.field).string.min_len = 1 + ]; +} + +/* AuthnRoleToUserAdd + * @EventShortText: "A user has been added a role." + * @EventCode: "AE-0012" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Role ${role} has been added to user ${user} (User Type: ${user_type})" + * @EventDocumentation: "A new role has been added to a user. Now, the user can access the assigned objects and perform the corresponding operations." + */ +message AuthnRoleToUserAdd { + Common common = 1; + string role = 2 [ + (buf.validate.field).string.min_len = 1 + ]; + string user = 3 [ + (buf.validate.field).string.min_len = 1 + ]; + UserType user_type = 4; +} + +/* AuthnRoleToUserDelete + * @EventShortText: "A user’s role has been deleted" + * @EventCode: "AE-0013" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "Role ${role} has been deleted from user ${user} (User Type: ${user_type})" + * @EventDocumentation: "A user has been stripped of a role, resulting in user losing access to the assigned objects and the ability to perform the associated operations." + */ +message AuthnRoleToUserDelete { + Common common = 1; + string role = 2 [ + (buf.validate.field).string.min_len = 1 + ]; + string user = 3 [ + (buf.validate.field).string.min_len = 1 + ]; + UserType user_type = 4; +} + +/* AuthnUserToGroupAdd + * @EventShortText: "The user has been added to a group." + * @EventCode: "AE-0014" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User ${user} (User Type: ${user_type}) has been added to group ${group}" + * @EventDocumentation: "A user has been assigned to a user group." + */ +message AuthnUserToGroupAdd { + Common common = 1 ; + string group = 2 [ + (buf.validate.field).string.min_len = 1 + ]; + string user = 3 [ + (buf.validate.field).string.min_len = 1 + ]; + UserType user_type = 4; +} + +/* AuthnUserToGroupDelete + * @EventShortText: "The user has been deleted from the user group." + * @EventCode: "AE-0015" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User ${user} (User Type: ${user_type}) has been deleted from group ${group}" + * @EventDocumentation: "A user has been deleted from mentioned user group." + */ +message AuthnUserToGroupDelete { + Common common = 1 ; + string group = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + string user = 3 [ + (buf.validate.field).string.min_len = 1 + + ]; + UserType user_type = 4; +} + +/* ConfigurationAdd + * @EventShortText: "A new configuration has been added" + * @EventCode: "AE-0016" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "A new configuration has been created for the property named ${property_name} (Type: ${object_type}, ID: ${object_id}). The value associated with this property is ${value}" + * @EventDocumentation: "A new configuration has been created for a named property that belongs to an object type with an identifier. This event type of log is being used to record any configuration changes that may be relevant for security or compliance reasons." + */ +message ConfigurationAdd { + Common common = 1 ; + google.protobuf.Value value = 2 ; + string property_name = 3 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_type = 4 [(buf.validate.field).string.max_len = 20]; + string object_id = 5; +} + +/* ConfigurationChange + * @EventShortText: "An existing configuration has been changed" + * @EventCode: "AE-0017" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "An existing configuration has been modified for the property named ${property_name} (Type: ${object_type}, ID: ${object_id}). The value associated with this property has been changed from ${old_value} to ${new_value}" + * @EventDocumentation: "An existing configuration has been changed for a named property that belongs to an object type with an identifier. This event type of log is being used to record any configuration changes that may be relevant for security or compliance reasons." + */ +message ConfigurationChange { + Common common = 1 ; + google.protobuf.Value new_value = 2 ; + google.protobuf.Value old_value = 3 ; + string property_name = 4 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_type = 5 [(buf.validate.field).string.max_len = 20]; + string object_id = 6; +} + +/* ConfigurationDelete + * @EventShortText: "A configuration has been deleted" + * @EventCode: "AE-0018" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "A configuration has been deleted for the property named ${property_name} (Type: ${object_type}, ID: ${object_id}). The value associated with this property was ${value}" + * @EventDocumentation: "A configuration has been deleted for a named property that belongs to an object type with an identifier. This event type of log is being used to record any configuration changes that may be relevant for security or compliance reasons." + */ +message ConfigurationDelete { + Common common = 1 ; + google.protobuf.Value value = 2 ; + string property_name = 3 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_type = 4 [(buf.validate.field).string.max_len = 20]; + string object_id = 5; +} + +/* CredentialCreate + * @EventShortText: "A credential has been created" + * @EventCode: "AE-0019" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "A credential with ID ${credential_id} of type ${credential_type} has been successfully created" + * @EventDocumentation: "A credential of a specific type has been successfully created." + */ +message CredentialCreate { + Common common = 1 ; + string credential_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + CredentialType credential_type = 3 ; +} + +/* CredentialDelete + * @EventShortText: "A credential has been deleted" + * @EventCode: "AE-0020" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "A credential with ID ${credential_id} of type ${credential_type} has been deleted" + * @EventDocumentation: "A credential of a specific type has been deleted." + */ +message CredentialDelete { + Common common = 1 ; + string credential_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + CredentialType credential_type = 3 ; +} + +/* CredentialExpiration + * @EventShortText: "A credential has been expired" + * @EventCode: "AE-0021" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "A credential with ID ${credential_id} of type ${credential_type} has been expired (Expiration date: ${expiration_date})" + * @EventDocumentation: "A credential of a specific type has been expired at a specific time." + */ +message CredentialExpiration { + Common common = 1 ; + string credential_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + CredentialType credential_type = 3 ; + google.protobuf.Timestamp expiration_date = 4; +} + +/* CredentialRevokation + * @EventShortText: "A credential has been revoked" + * @EventCode: "AE-0022" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "A credential with ID ${credential_id} of type ${credential_type} has been revoked (Revokation date: ${revokation_date})" + * @EventDocumentation: "A credential of a specific type has been invalidated at a specific time." + */ +message CredentialRevokation { + Common common = 1 ; + string credential_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + CredentialType credential_type = 3 ; + google.protobuf.Timestamp revokation_date = 4; +} + +/* DataModelChange + * @EventShortText: "Data Model has been changed" + * @EventCode: "AE-0023" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Property named ${property_name} of data Model with ID ${model_id} changed. The value associated with this property has been changed from ${old_value} to ${new_value}" + * @EventDocumentation: "A security-relevant DataModel has been modified. A DataModel is a representation of a real-world scenario about which data is to be collected and stored in a database. It depicts the data flow and logical relationships between various data elements." + */ +message DataModelChange { + Common common = 1 ; + string model_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + google.protobuf.Value new_value = 3 ; + google.protobuf.Value old_value = 4 ; + string property_name = 5 [ + (buf.validate.field).string.min_len = 1 + + ]; +} + +/* DataModelCreate + * @EventShortText: "Data Model has been created" + * @EventCode: "AE-0024" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Data Model with ID ${model_id} has been created" + * @EventDocumentation: "A security-relevant DataModel has been created. A DataModel is a representation of a real-world scenario about which data is to be collected and stored in a database. It depicts the data flow and logical relationships between various data elements." + */ +message DataModelCreate { + Common common = 1 ; + string model_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; +} + +/* DataModelDelete + * @EventShortText: "Data Model has been deleted" + * @EventCode: "AE-0025" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Data Model with ID ${model_id} has been deleted" + * @EventDocumentation: "A security-relevant DataModel has been deleted. A DataModel is a representation of a real-world scenario about which data is to be collected and stored in a database. It depicts the data flow and logical relationships between various data elements." + */ +message DataModelDelete { + Common common = 1 ; + string model_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; +} + +/* DataAccess + * @EventShortText: "Security-relevant data has been accessed" + * @EventCode: "AE-0026" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_RAL" + * @EventMessageText: "The attribute ${attribute} of Object Type ${object_type} with Object ID ${object_id} has been accessed via Channel ID ${channel_id} (Channel Type ${channel_type}). The read value is ${value}" + * @EventDocumentation: "A security-relevant property has been read through the designated channel." + */ +message DataAccess { + Common common = 1 ; + string channel_type = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + string channel_id = 3 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_type = 4 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_id = 5 [ + (buf.validate.field).string.min_len = 1 + + ]; + string attribute = 6 [ + (buf.validate.field).string.min_len = 1 + + ]; + google.protobuf.Value value = 7; + string attachment_type = 8 [deprecated = true]; + string attachment_id = 9 [deprecated = true]; +} + +/* DataCreate + * @EventShortText: "Security-relevant data has been created" + * @EventCode: "AE-0027" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_RAL" + * @EventMessageText: "The attribute ${attribute} with Object ID ${object_id} of Object Type ${object_type} with value ${value} has been created" + * @EventDocumentation: "A security-relevant property has been created." + */ +message DataCreate { + Common common = 1 ; + string object_type = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_id = 3 [ + (buf.validate.field).string.min_len = 1 + + ]; + string attribute = 4 [ + (buf.validate.field).string.min_len = 1 + + ]; + google.protobuf.Value value = 5; +} + +/* DataDelete + * @EventShortText: "Security-relevant data has been deleted" + * @EventCode: "AE-0028" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_RAL" + * @EventMessageText: "The attribute ${attribute} of Object ID ${object_id} (Object Type ${object_type}) with value ${value} has been deleted" + * @EventDocumentation: "A security-relevant property has been deleted." + */ +message DataDelete { + Common common = 1 ; + string object_type = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_id = 3 [ + (buf.validate.field).string.min_len = 1 + + ]; + string attribute = 4 [ + (buf.validate.field).string.min_len = 1 + + ]; + google.protobuf.Value value = 5; +} + +/* DataModification + * @EventShortText: "Security-relevant data has been modified" + * @EventCode: "AE-0029" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_RAL" + * @EventMessageText: "The attribute ${attribute} of Object ID ${object_id} (Object Type ${object_type}) has been changed from value ${old_value} to new value ${new_value}" + * @EventDocumentation: "A security-relevant property has been changed." + */ +message DataModification { + Common common = 1 ; + string object_type = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_id = 3 [ + (buf.validate.field).string.min_len = 1 + + ]; + string attribute = 4 [ + (buf.validate.field).string.min_len = 1 + + ]; + google.protobuf.Value new_value = 5; + google.protobuf.Value old_value = 6; +} + +/* DataExport + * @EventShortText: "Security-relevant data has been exported" + * @EventCode: "AE-0030" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_RAL" + * @EventMessageText: "Object ID ${object_id} (Object Type ${object_type}) has been exported via Channel ID ${channel_id}. Destination URI: ${destination_uri}" + * @EventDocumentation: "A security-relevant data has been exported to a designated URI" + */ +message DataExport { + Common common = 1 ; + DataExportChannelType channel_type = 2 ; + string channel_id = 3 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_type = 4 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_id = 5 [ + (buf.validate.field).string.min_len = 1 + + ]; + string destination_uri = 6 [ + (buf.validate.field).string.min_len = 1 + + ]; +} + +/* DppDataAccess + * @EventShortText: "DPP relevant data has been accessed" + * @EventCode: "AE-0031" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_DPP" + * @EventMessageText: "Data Subject ${data_subject_id} of Data Subject Type ${data_subject_type} has been accessed. Object ID ${object_id} (Object Type ${object_type}) has been accessed via Channel ID ${channel_id}. The value associated with attribute ${attribute} was ${value}" + * @EventDocumentation: "Data relevant to the Data Protection and Privacy guidelines or similar purposes has been accessed. Data protection is closely linked to numerous legal requirements and privacy concerns." + */ +message DppDataAccess { + Common common = 1 ; + string channel_type = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + string channel_id = 3 [ + (buf.validate.field).string.min_len = 1 + + ]; + string data_subject_type = 4 [ + (buf.validate.field).string.min_len = 1 + + ]; + string data_subject_id = 5 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_type = 6 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_id = 7 [ + (buf.validate.field).string.min_len = 1 + + ]; + string attribute = 8 [ + (buf.validate.field).string.min_len = 1 + + ]; + google.protobuf.Value value = 9; + string attachment_type = 10 [deprecated = true]; + string attachment_id = 11 [deprecated = true]; +} + +/* DppDataCreate + * @EventShortText: "DPP relevant data has been created" + * @EventCode: "AE-0032" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_DPP" + * @EventMessageText: "Data Subject ${data_subject_id} of Data Subject Type ${data_subject_type} has been created. Object ID ${object_id} (Object Type ${object_type}) has been created. The value associated with attribute ${attribute} was ${value}" + * @EventDocumentation: "Data relevant to the Data Protection and Privacy guidelines or similar purposes has been created. Data protection is closely linked to numerous legal requirements and privacy concerns." + */ +message DppDataCreate { + Common common = 1 ; + string data_subject_type = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + string data_subject_id = 3 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_type = 4 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_id = 5 [ + (buf.validate.field).string.min_len = 1 + + ]; + string attribute = 6 [ + (buf.validate.field).string.min_len = 1 + + ]; + google.protobuf.Value value = 7; +} + +/* DppDataDelete + * @EventShortText: "DPP relevant data has been deleted" + * @EventCode: "AE-0033" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_DPP" + * @EventMessageText: "Data Subject ${data_subject_id} of Data Subject Type ${data_subject_type} has been deleted. Object ID ${object_id} (Object Type ${object_type}) has been deleted. The value associated with attribute ${attribute} was ${value}" + * @EventDocumentation: "Data relevant to the Data Protection and Privacy guidelines or similar purposes has been deleted. Data protection is closely linked to numerous legal requirements and privacy concerns." + */ +message DppDataDelete { + Common common = 1 ; + string data_subject_type = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + string data_subject_id = 3 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_type = 4 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_id = 5 [ + (buf.validate.field).string.min_len = 1 + + ]; + string attribute = 6 [ + (buf.validate.field).string.min_len = 1 + + ]; + google.protobuf.Value value = 7; +} + +/* DppDataModification + * @EventShortText: "DPP relevant data has been modified" + * @EventCode: "AE-0034" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_DPP" + * @EventMessageText: "Data Subject ${data_subject_id} of Data Subject Type ${data_subject_type} has been modified. Object ID ${object_id} (Object Type ${object_type}) has been modified. The value associated with attribute ${attribute} was changed from ${old_value} to ${new_value}" + * @EventDocumentation: "Data relevant to the Data Protection and Privacy guidelines or similar purposes has been modified. Data protection is closely linked to numerous legal requirements and privacy concerns." + */ +message DppDataModification { + Common common = 1 ; + string data_subject_type = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + string data_subject_id = 3 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_type = 4 [ + (buf.validate.field).string.min_len = 1 + + ]; + string object_id = 5 [ + (buf.validate.field).string.min_len = 1 + + ]; + string attribute = 6 [ + (buf.validate.field).string.min_len = 1 + + ]; + google.protobuf.Value new_value = 7; + google.protobuf.Value old_value = 8; +} + +/* JobChange + * @EventShortText: "A property of job has been changed" + * @EventCode: "AE-0035" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "The property named ${property_name} of Job ${job_id} has been updated from its previous value of ${old_value} to ${new_value}" + * @EventDocumentation: "A named property of a job definition has been updated. Background jobs are automated tasks that run in the background without any user interaction. They are scheduled to run at specific times and are useful for executing time-consuming and repetitive tasks such as data archiving, batch processing, and report generation." + */ +message JobChange { + Common common = 1 ; + string job_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + google.protobuf.Value new_value = 3 ; + google.protobuf.Value old_value = 4 ; + string property_name = 5 [ + (buf.validate.field).string.min_len = 1 + + ]; +} + +/* JobCreate + * @EventShortText: "A job has been created" + * @EventCode: "AE-0036" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "Job with ID ${job_id} has been created" + * @EventDocumentation: "A job with the specified ID has been created. Background jobs are automated tasks that run in the background without any user interaction. They are scheduled to run at specific times and are useful for executing time-consuming and repetitive tasks such as data archiving, batch processing, and report generation." + */ +message JobCreate { + Common common = 1 ; + string job_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; +} + +/* JobDelete + * @EventShortText: "A job has been deleted" + * @EventCode: "AE-0037" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "Job with ID ${job_id} has been deleted" + * @EventDocumentation: "A job with the specified ID has been deleted. Background jobs are automated tasks that run in the background without any user interaction. They are scheduled to run at specific times and are useful for executing time-consuming and repetitive tasks such as data archiving, batch processing, and report generation." + */ +message JobDelete { + Common common = 1 ; + string job_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; +} + +/* JobStatusChange + * @EventShortText: "A job status has been changed" + * @EventCode: "AE-0038" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "The job status of Job ${job_id} has modified the property named ${property_name}. Its previous value was ${old_value}, and it has now been updated to ${new_value}" + * @EventDocumentation: "A job status has changed by changing a named property. Background jobs are automated tasks that run in the background without any user interaction. They are scheduled to run at specific times and are useful for executing time-consuming and repetitive tasks such as data archiving, batch processing, and report generation." + */ +message JobStatusChange { + Common common = 1 ; + string job_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + google.protobuf.Value new_value = 3 ; + google.protobuf.Value old_value = 4 ; + string property_name = 5 [ + (buf.validate.field).string.min_len = 1 + + ]; +} + +/* MaliciousRequestDetected + * @EventShortText: "The server has received a request that it seems malicious" + * @EventCode: "AE-0039" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Malicious behavior ${behavior} for parameter ${parameter} detected. The received value was ${received_value}, but the expected value was ${expected_value}" + * @EventDocumentation: "A Malicious Request is a well-crafted and harmful request sent by a hacker to an authenticated user. This request contains the necessary parameters to execute valid actions on a web application without the user’s knowledge." + */ +message MaliciousRequestDetected { + Common common = 1 ; + string parameter = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + string expected_value = 3; + string received_value = 4; + MaliciousBehavior behavior = 5 ; +} + +/* PasswordChange + * @EventShortText: "The password of a user has been changed" + * @EventCode: "AE-0040" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "The password of user ${user_id} has been changed" + * @EventDocumentation: "Password of the mentioned user has been changed." + */ +message PasswordChange { + Common common = 1 ; + string user_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; +} + +/* PasswordExpiration + * @EventShortText: "The password of a user has expired" + * @EventCode: "AE-0041" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "The password of user ${user_id} has expired" + * @EventDocumentation: "Password of the mentioned user has expired." + */ +message PasswordExpiration { + Common common = 1 ; + string user_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; +} + +/* PasswordReset + * @EventShortText: "The user’s password has been reset" + * @EventCode: "AE-0042" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "The password of user ${user_id} has been reset" + * @EventDocumentation: "Password of the mentioned user has been reset." + */ +message PasswordReset { + Common common = 1 ; + string user_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; +} + +/* TenantModification + * @EventShortText: "A property of a tenant was modified" + * @EventCode: "AE-0043" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "The property named ${property_name} has been updated for the tenant with ID ${tenant_id}. The value has been changed from ${old_value} to ${new_value}" + * @EventDocumentation: "A property of a tenant was changed." + */ +message TenantModification { + Common common = 1 ; + google.protobuf.Value new_value = 2 ; + google.protobuf.Value old_value = 3 ; + string property_name = 4 [ + (buf.validate.field).string.min_len = 1 + + ]; + string tenant_id = 5 [ + (buf.validate.field).string.min_len = 1 + + ]; +} + +/* TenantOffboarding + * @EventShortText: "A tenant was offboarded" + * @EventCode: "AE-0044" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "The tenant with ID ${tenant_id} has been terminated" + * @EventDocumentation: "The tenant has been terminated from the service." + */ +message TenantOffboarding { + Common common = 1 ; + string tenant_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; +} + +/* TenantOnboarding + * @EventShortText: "A tenant was onboarded" + * @EventCode: "AE-0045" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_CFG" + * @EventMessageText: "The tenant with ID ${tenant_id} has been created" + * @EventDocumentation: "The tenant has been created" + */ +message TenantOnboarding { + Common common = 1 ; + string tenant_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; +} + +/* UnauthenticatedRequest + * @EventShortText: "Unauthenticated request has been performed" + * @EventCode: "AE-0046" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "An unauthenticated request has been performed" + * @EventDocumentation: "An unauthenticated request (in the sense of an HTTP status code 401) has been performed" + */ +message UnauthenticatedRequest { + Common common = 1 ; +} + +/* UnauthorizedRequest + * @EventShortText: "Unauthenticated request has been performed" + * @EventCode: "AE-0047" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "An unauthorized request of type ${unauthorized_type} has been performed" + * @EventDocumentation: "An unauthenticated request (in the sense of an HTTP status code 401) has been performed" + */ +message UnauthorizedRequest { + Common common = 1 ; + string unauthorized_type = 2; +} + +/* UserActivate + * @EventShortText: "User has been activated" + * @EventCode: "AE-0048" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User with ID ${user_id} (User Type: ${user_type}) has been activated" + * @EventDocumentation: "A specific user has been activated" + */ +message UserActivate { + Common common = 1 ; + string user_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + UserType user_type = 3; +} + +/* UserBlock + * @EventShortText: "User has been blocked" + * @EventCode: "AE-0049" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User with ID ${user_id} (User Type: ${user_type}) has been blocked" + * @EventDocumentation: "A specific user has been blocked" + */ +message UserBlock { + Common common = 1 ; + string user_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + UserType user_type = 3; +} + +/* UserCreate + * @EventShortText: "User has been created" + * @EventCode: "AE-0050" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User with ID ${user_id} (User Type: ${user_type}) has been created" + * @EventDocumentation: "A specific user has been created" + */ +message UserCreate { + Common common = 1 ; + string user_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + UserType user_type = 3; +} + +/* UserDataModification + * @EventShortText: "User's master data has been modified" + * @EventCode: "AE-0051" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "The property named ${property_name} of user with ID ${user_id} (User Type: ${user_type}) has been updated from its previous value of ${old_value} to ${new_value}" + * @EventDocumentation: "User's master data has been modified. A specific property of user has been changed" + */ +message UserDataModification { + Common common = 1 ; + google.protobuf.Value new_value = 2 ; + google.protobuf.Value old_value = 3 ; + string property_name = 4 [ + (buf.validate.field).string.min_len = 1 + + ]; + string user_id = 5 [ + (buf.validate.field).string.min_len = 1 + + ]; + UserType user_type = 6; +} + +/* UserDelete + * @EventShortText: "User has been deleted" + * @EventCode: "AE-0052" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User with ID ${user_id} (User Type: ${user_type}) has been deleted" + * @EventDocumentation: "A specific user has been deleted" + */ +message UserDelete { + Common common = 1 ; + string user_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + UserType user_type = 3; +} + +/* UserImpersonationStart + * @EventShortText: "User impersonation started" + * @EventCode: "AE-0053" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "User with ID ${user_initiator_id} (User Type:${user_initiator_type}) started impersonation for user with ID ${user_impersonated_id} (User Type:${user_impersonated_type}). Context ID: ${context}" + * @EventDocumentation: "Impersonation session has been started. User impersonation enables initiating user to access and operate as if they were logged in as that impersonated user. User A receives the authorizations of user B, user A is the Initiator and user B the Impersonated" + */ +message UserImpersonationStart { + Common common = 1 ; + string user_initiator_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + UserType user_initiator_type = 3; + string user_impersonated_id = 4 [ + (buf.validate.field).string.min_len = 1 + + ]; + UserType user_impersonated_type = 5; + string context = 6 [(buf.validate.field).string.min_len = 1]; +} + +/* UserImpersonationFinish + * @EventShortText: "User impersonation finished" + * @EventCode: "AE-0054" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "User with ID ${user_initiator_id} (User Type:${user_initiator_type}) finished impersonation for user with ID ${user_impersonated_id} (User Type:${user_impersonated_type}).Context ID: ${context}" + * @EventDocumentation: "Impersonation session has been finished. User impersonation enables initiating user to access and operate as if they were logged in as that impersonated user. User A receives the authorizations of user B, user A is the Initiator and user B the Impersonated." + */ +message UserImpersonationFinish { + Common common = 1 ; + string user_initiator_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + UserType user_initiator_type = 3; + string user_impersonated_id = 4 [ + (buf.validate.field).string.min_len = 1 + + ]; + UserType user_impersonated_type = 5; + string context = 6 [(buf.validate.field).string.min_len = 1]; +} + +/* UserLock + * @EventShortText: "User has been locked" + * @EventCode: "AE-0055" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User with ID ${user_id} (User Type: ${user_type}) has been locked" + * @EventDocumentation: "A specific user has been locked" + */ +message UserLock { + Common common = 1 ; + string user_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + UserType user_type = 3; +} + +/* UserUnlock + * @EventShortText: "User has been unlocked" + * @EventCode: "AE-0056" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_IAM" + * @EventMessageText: "User with ID ${user_id} (User Type: ${user_type}) has been unlocked" + * @EventDocumentation: "A specific user has been unlocked" + */ +message UserUnlock { + Common common = 1 ; + string user_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + UserType user_type = 3; +} + +/* UserVerify + * @EventShortText: "User has been verified" + * @EventCode: "AE-0057" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "User with ID ${user_id} (User Type: ${user_type}) has been verified" + * @EventDocumentation: "A specific user has been verified." + */ +message UserVerify { + Common common = 1 ; + string user_id = 2 [ + (buf.validate.field).string.min_len = 1 + + ]; + UserType user_type = 3; +} + +/* UserLoginFailure + * @EventShortText: "User login failed" + * @EventCode: "AE-0058" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "User failed (reason: ${failure_reason}) to login via ${method} (User Type: ${user_type}, Protocol: ${login_protocol}, Admin: ${is_admin}, Multi-Factor Type: ${mfa_type}" + * @EventDocumentation: "The user could not be logged on to the system" + */ +message UserLoginFailure { + Common common = 1 ; + FailureReason failure_reason = 2 ; + LoginMethod method = 3 ; + bool is_admin = 4; + MfaType mfa_type = 5; + UserType user_type = 6; + LoginProtocol login_protocol = 7; +} + +/* UserLoginSuccess + * @EventShortText: "User login was successful" + * @EventCode: "AE-0059" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "User logged on successfully (User Type: ${user_type}, Method: ${method}, Protocol: ${login_protocol}, Admin: ${is_admin}, Multi-Factor Type: ${mfa_type} " + * @EventDocumentation: "The user has logged onto the system successfully." + */ +message UserLoginSuccess { + Common common = 1 ; + bool is_admin = 2; + LoginMethod method = 3 ; + MfaType mfa_type = 4 ; + UserType user_type = 5 ; + LoginProtocol login_protocol = 6; +} + +/* UserLogoff + * @EventShortText: "User logged off" + * @EventCode: "AE-0060" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "User logged off (Type: ${logoff_type}, Protocol: ${login_protocol})" + * @EventDocumentation: "The logged off." + */ +message UserLogoff { + Common common = 1 ; + LogoffType logoff_type = 2 ; + LoginProtocol login_protocol = 3; +} + +/* ZzzCustomEvent + * @EventShortText: "Custom Event" + * @EventCode: "AE-0061" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${custom}" + * @EventDocumentation: "Custom event-type used for security related events that are not part of the Audit Log Event Catalog." + */ +message ZzzCustomEvent { + Common common = 1 ; + google.protobuf.Value custom = 2 ; +} + +/* CMKOnboarding + * @EventShortText: "System has been onboarded to CMK" + * @EventCode: "AE-0062" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "System ${system_id} has been onboarded to Customer Managed Key ${cmk_id} in KMS Tenant ${tenant_id}" + * @EventDocumentation: "A System has been onboarded to a Customer Managed Key within an SAP Key Management Service Tenant." + */ +message CMKOnboarding { + Common common = 1 ; + string system_id = 2 ; + string cmk_id = 3 ; +} + +/* CMKOffboarding + * @EventShortText: "System has been offboarded from CMK" + * @EventCode: "AE-0063" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "System ${system_id} has been offboarded from Customer Managed Key ${cmk_id} in KMS Tenant ${tenant_id}" + * @EventDocumentation: "A System has been offboarded from a Customer Managed Key within as SAP Key Management Service Tenant." + */ +message CMKOffboarding { + Common common = 1 ; + string system_id = 2 ; + string cmk_id = 3 ; +} + +/* CMKSwitch + * @EventShortText: "System has switched CMKs within SAP KMS" + * @EventCode: "AE-0064" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "System ${system_id} has been switched from Customer Managed Key ${cmk_id_old} to Customer Managed Key ${cmk_id_new} in KMS Tenant ${tenant_id}" + * @EventDocumentation: "A System has been switched from a Customer Managed Key within as SAP Key Management Service Tenant." + */ +message CMKSwitch { + Common common = 1 ; + string system_id = 2 ; + string cmk_id_old = 3 ; + string cmk_id_new = 4 ; +} + +/* CMKTenantModification + * @EventShortText: "CMK Tenant modification" + * @EventCode: "AE-0065" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Tenant with ID ${tenant_id} (Customer Tenant Context ID: ${system_id}) has been modified. Action = ${cmk_action} for Customer Managed Key ${cmk_id}" + * @EventDocumentation: "A Tenant has been modified as a result of a customer action within the SAP Key Management Service (e.g. System Onboarding, System Offboarding or Key Revocation)" + */ +message CMKTenantModification { + Common common = 1 ; + string system_id = 2 ; + string cmk_id = 3 ; + CMKAction cmk_action = 4 ; +} + +/* CMKCreate + * @EventShortText: "CMK has been created" + * @EventCode: "AE-0066" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has been created" + * @EventDocumentation: "Customer Managed Key has been created in SAP KMS. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKCreate { + Common common = 1 ; + string cmk_id = 2 ; + string kms_system_id = 3 ; +} + +/* CMKDelete + * @EventShortText: "CMK has been deleted" + * @EventCode: "AE-0067" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has been deleted" + * @EventDocumentation: "Customer Managed Key has been deleted in SAP KMS. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKDelete { + Common common = 1 ; + string cmk_id = 2 ; + string kms_system_id = 3 ; +} + +/* CMKRestore + * @EventShortText: "CMK has been restored" + * @EventCode: "AE-0068" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has been restored" + * @EventDocumentation: "Customer Managed Key has been restored in SAP KMS. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKRestore { + Common common = 1 ; + string cmk_id = 2 ; + string kms_system_id = 3 ; +} + +/* CMKDisable + * @EventShortText: "CMK has been disabled" + * @EventCode: "AE-0069" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has been disabled" + * @EventDocumentation: "Customer Managed Key has been disabled in SAP KMS. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKDisable { + Common common = 1 ; + string cmk_id = 2 ; + string kms_system_id = 3 ; +} + +/* CMKEnable + * @EventShortText: "CMK has been enabled" + * @EventCode: "AE-0070" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has been enabled" + * @EventDocumentation: "Customer Managed Key has been enabled in SAP KMS. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKEnable { + Common common = 1 ; + string cmk_id = 2 ; + string kms_system_id = 3 ; +} + +/* CMKRotate + * @EventShortText: "CMK has been rotated" + * @EventCode: "AE-0071" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} has been rotated" + * @EventDocumentation: "Customer Managed Key has rotated in SAP KMS. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKRotate { + Common common = 1 ; + string cmk_id = 2 ; +} + +/* KeyCreate + * @EventShortText: "Key has been created" + * @EventCode: "AE-0072" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} has been created (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key identified by its Key ID has been created. The key was assigned to a system referenced by a Customer Managed Key." + */ +message KeyCreate { + Common common = 1 ; + KeyType key_type = 2 ; + string key_id = 3 ; + string system_id = 4 ; + string cmk_id = 5 ; +} + +/* KeyDelete + * @EventShortText: "Key has been deleted" + * @EventCode: "AE-0073" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} has been deleted (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key identified by its Key ID has been deleted. The key was assigned to a system referenced by a Customer Managed Key. Reasons for deleting a key are: consumer-controlled key termination" + */ +message KeyDelete { + Common common = 1 ; + KeyType key_type = 2 ; + string key_id = 3 ; + string system_id = 4 ; + string cmk_id = 5 ; +} + +/* KeyRestore + * @EventShortText: "Key has been restored" + * @EventCode: "AE-0074" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} has been restored (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key identified by its Key ID has been restored. The key was assigned to a system referenced by a Customer Managed Key. Reasons for restoring are e.g. restore from backup" + */ +message KeyRestore { + Common common = 1 ; + KeyType key_type = 2 ; + string key_id = 3 ; + string system_id = 4 ; + string cmk_id = 5 ; +} + +/* KeyPurge + * @EventShortText: "Key has been purged" + * @EventCode: "AE-0075" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} has been purged (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key identified by its Key ID has been purged. The key was assigned to a system referenced by a Customer Managed Key. Reasons for purging a key from memory are: mainly Customer Managed Key revocation" + */ +message KeyPurge { + Common common = 1 ; + KeyType key_type = 2 ; + string key_id = 3 ; + string system_id = 4 ; + string cmk_id = 5 ; +} + +/* KeyRotate + * @EventShortText: "Key has been rotated" + * @EventCode: "AE-0076" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} has been rotated (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key identified by its Key ID has been rotated. The key was assigned to a system referenced by a Customer Managed Key. Reasons for rotating a key are: scheduled internal key rotation, Customer Managed Key rotation" + */ +message KeyRotate { + Common common = 1 ; + KeyType key_type = 2 ; + string key_id = 3 ; + string system_id = 4 ; + string cmk_id = 5 ; +} + +/* KeyEnable + * @EventShortText: "Key has been enabled" + * @EventCode: "AE-0077" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} has been enabled (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key identified by its Key ID has been enabled. The key was assigned to a system referenced by a Customer Managed Key. Reasons for enabling a key are: Customer Managed Key restore, consumer-side key management" + */ +message KeyEnable { + Common common = 1 ; + KeyType key_type = 2 ; + string key_id = 3 ; + string system_id = 4 ; + string cmk_id = 5 ; +} + +/* KeyDisable + * @EventShortText: "Key has been disabled" + * @EventCode: "AE-0078" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} has been disabled (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key identified by its Key ID has been disabled. The key was assigned to a system referenced by a Customer Managed Key. Reasons for disabling a key are: Customer Managed Key restore, consumer-side key management" + */ +message KeyDisable { + Common common = 1 ; + KeyType key_type = 2 ; + string key_id = 3 ; + string system_id = 4 ; + string cmk_id = 5 ; +} + +/* KeySuspend + * @EventShortText: "Key has been suspended" + * @EventCode: "AE-0079" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} has been suspended (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key identified by its Key ID has been suspended. The key was assigned to a system referenced by a Customer Managed Key. Reasons for suspending of a key are: Customer Managed Key restore, consumer-side key management" + */ +message KeySuspend { + Common common = 1 ; + KeyType key_type = 2 ; + string key_id = 3 ; + string system_id = 4 ; + string cmk_id = 5 ; +} + +/* KeyOnboardKeyChain + * @EventShortText: "Key has been onboarded to keychain" + * @EventCode: "AE-0080" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "${key_type} Key ${key_id} onboarded to keychain (System: ${system_id}, Customer Managed Key: ${cmk_id})" + * @EventDocumentation: "A key identified by its Key ID has been onboarded to keychain. The key was assigned to a system referenced by a Customer Managed Key. Reasons for onboarding a key are: Customer Managed Key restore, consumer-side key management" + */ +message KeyOnboardKeyChain { + Common common = 1 ; + KeyType key_type = 2 ; + string key_id = 3 ; + string system_id = 4 ; + string cmk_id = 5 ; +} + +/* CMKDrop + * @EventShortText: "CMK has been dropped" + * @EventCode: "AE-0081" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Metadata of Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} have been dropped" + * @EventDocumentation: "Metadata of Customer Managed Key have been dropped in SAP KMS. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKDrop { + Common common = 1 ; + string cmk_id = 2 ; + string kms_system_id = 3 ; +} + +/* CMKSuspend + * @EventShortText: "CMK has been suspended" + * @EventCode: "AE-0082" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has been suspended" + * @EventDocumentation: "Customer Managed Key has been suspended in SAP KMS. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKSuspend { + Common common = 1 ; + string cmk_id = 2 ; + string kms_system_id = 3 ; +} + +/* VirusFinding + * @EventShortText: "Virus detected" + * @EventCode: "AE-0083" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Virus (${virus_name}) detected in file ${file_name} (Channel:${virus_channel})" + * @EventDocumentation: "During a scan of the aforementioned file, a virus was detected. The channel provides insights into the manner in which the virus was identified, particularly during upload processes and routine scans." + */ +message VirusFinding { + Common common = 1 ; + string virus_name = 2 ; + string file_name = 3 ; + VirusChannel virus_channel = 4 ; +} + +/* CMKUnavailable + * @EventShortText: "CMK has become unavailable" + * @EventCode: "AE-0084" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has become unavailable" + * @EventDocumentation: "Customer Managed Key has become unavailable for SAP Key Management Service. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKUnavailable { + Common common = 1 ; + string cmk_id = 2 ; + string kms_system_id = 3 ; +} + +/* CMKAvailable + * @EventShortText: "CMK has become available" + * @EventCode: "AE-0085" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has become available" + * @EventDocumentation: "Customer Managed Key has become available for SAP Key Management Service. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKAvailable { + Common common = 1 ; + string cmk_id = 2 ; + string kms_system_id = 3 ; +} + +/* CMKDetach + * @EventShortText: "CMK has been detached" + * @EventCode: "AE-0086" + * @EventCategoryCode: "EVENT_CATEGORY_CODE_SEC_UNSPECIFIED" + * @EventMessageText: "Customer Managed Key ${cmk_id} in KMS System ${kms_system_id} has been detached from System ${system_id}" + * @EventDocumentation: "Customer Managed Key has been detached from System in SAP Key Management Service. SAP Key Management Service is a kernel service that provides key management infrastructure for SAP cloud applications and services to support encryption with customer-specific encryption keys (CSEK) or with customer-managed keys (CMK)." + */ +message CMKDetach { + Common common = 1 ; + string cmk_id = 2 ; + string kms_system_id = 3 ; + string system_id = 4 ; +} + +enum CredentialType { + //@ShortText: "Unspecified" + CREDENTIAL_TYPE_UNSPECIFIED = 0; + //@ShortText: "X.509" + CREDENTIAL_TYPE_X509_CERTIFICATE = 1; + //@ShortText: "Key" + CREDENTIAL_TYPE_KEY = 2; + //@ShortText: "Secret" + CREDENTIAL_TYPE_SECRET = 3; +} + +// FailureReason +enum FailureReason { + //@ShortText: "Unspecified Reason" + FAILURE_REASON_UNSPECIFIED = 0; + //@ShortText: "Wrong Password" + FAILURE_REASON_PASSWORD = 1; + //@ShortText: "Multi-Factor Authentication failed" + FAILURE_REASON_MFA_FAILED = 2; + //@ShortText: "User not found" + FAILURE_REASON_USER_NOT_FOUND = 3; + //@ShortText: "User locked" + FAILURE_REASON_USER_LOCKED = 4; + //@ShortText: "User blocked" + FAILURE_REASON_USER_BLOCKED = 5; + //@ShortText: "User not verified + FAILURE_REASON_USER_UNVERIFIED = 6; + //@ShortText: "User expired" + FAILURE_REASON_USER_EXPIRED = 7; + //@ShortText: "User invalid" + FAILURE_REASON_USER_INVALID = 8; + //@ShortText: "Insecure connection" + FAILURE_REASON_INSECURE_CONNECTION = 9; + //@ShortText: "Login method disabled" + FAILURE_REASON_LOGIN_METHOD_DISABLED = 10; + //@ShortText: "Token expired" + FAILURE_REASON_TOKEN_EXPIRED = 11; + //@ShortText: "Token revoked" + FAILURE_REASON_TOKEN_REVOKED = 12; + //@ShortText: "Token invalid" + FAILURE_REASON_TOKEN_INVALID = 13; + //@ShortText: "Session expired" + FAILURE_REASON_SESSION_EXPIRED = 14; + //@ShortText: "Session revoked" + FAILURE_REASON_SESSION_REVOKED = 15; + //@ShortText: "Certificate expired" + FAILURE_REASON_CERTIFICATE_EXPIRED = 16; + //@ShortText: "Certificate revoked" + FAILURE_REASON_CERTIFICATE_REVOKED = 17; + //@ShortText: "Certificate invalid" + FAILURE_REASON_CERTIFICATE_INVALID = 18; + //@ShortText: "User geo blocked" + FAILURE_REASON_GEOBLOCK = 19; + //@ShortText: "Multi-Factor-Authentication requested" + FAILURE_REASON_MFA_REQUESTED = 20; + //@ShortText: "Credential requested" + FAILURE_REASON_CRED_REQUESTED = 21; +} + +// LoginMethod +enum LoginMethod { + //@ShortText: "Unspecified" + LOGIN_METHOD_UNSPECIFIED = 0; + //@ShortText: "OIDC" + LOGIN_METHOD_OPEN_ID_CONNECT = 1; + //@ShortText: "SAML" + LOGIN_METHOD_SAML = 2; + //@ShortText: "SAML2" + LOGIN_METHOD_SAML2 = 3; + //@ShortText: "External" + LOGIN_METHOD_EXTERNAL = 4; + //@ShortText: "SPNego" + LOGIN_METHOD_SPNEGO = 5; + //@ShortText: "Password" + LOGIN_METHOD_PASSWORD = 6; + //@ShortText: "RFC Ticket" + LOGIN_METHOD_RFC_TICKET = 7; + //@ShortText: "SNC" + LOGIN_METHOD_SNC = 8; + //@ShortText: "Logon Ticket" + LOGIN_METHOD_LOGON_TICKET = 9; + //@ShortText: "User switch" + LOGIN_METHOD_USER_SWITCH = 10; + //@ShortText: "X.509" + LOGIN_METHOD_X509_CERTIFICATE = 11; + //@ShortText: "APC Session" + LOGIN_METHOD_APC_SESSION = 12; + //@ShortText: "Internal" + LOGIN_METHOD_INTERNAL = 13; + //@ShortText: "OAuth 2.0" + LOGIN_METHOD_OAUTH2 = 14; + //@ShortText: "Reentrance Ticket" + LOGIN_METHOD_REENTRANCE_TICKET = 15; + //@ShortText: Http security session" + LOGIN_METHOD_HTTP_SESSION = 16; + //@ShortText: "Assertion Ticket" + LOGIN_METHOD_ASSERTION_TICKET = 17; + //@ShortText: "Remember me cookie" + LOGIN_METHOD_REMCOOKIE = 18; + //@ShortText: "Biometric Authentication" + LOGIN_METHOD_BIOMETRIC = 19; + //@ShortText: "Passcode Values" + LOGIN_METHOD_PASSCODE = 20; + //@ShortText: "Mobile SSO Passcode" + LOGIN_METHOD_MOBSSO = 21; + //@ShortText: "Email Token" + LOGIN_METHOD_EMAIL_TOKEN = 22; + //@ShortText: "Bearer Token" + LOGIN_METHOD_BEARER_TOKEN = 23; +} + +// LogoffType +enum LogoffType { + //@ShortText: "Unspecified" + LOGOFF_TYPE_UNSPECIFIED = 0; + //@ShortText: "Regular" + LOGOFF_TYPE_REGULAR = 1; + //@ShortText: "Forced" + LOGOFF_TYPE_FORCED = 2; +} + +// MaliciousBehavior +enum MaliciousBehavior { + //@ShortText: "Unspecified" + MALICIOUS_BEHAVIOR_UNSPECIFIED = 0; + //@ShortText: "Malicious parameter" + MALICIOUS_BEHAVIOR_PARAMETER_SEEN = 1; + //@ShortText: "Parameter not found" + MALICIOUS_BEHAVIOR_PARAMETER_NOT_FOUND = 2; + //@ShortText: "Malicious parameter value" + MALICIOUS_BEHAVIOR_PARAMETER_VALUE_SEEN = 3; + //@ShortText: "Parameter value modified" + MALICIOUS_BEHAVIOR_PARAMETER_VALUE_MODIFIED = 4; +} + +// MfaType +enum MfaType { + //@ShortText: "Unspecified" + MFA_TYPE_UNSPECIFIED = 0; + //@ShortText: "None" + MFA_TYPE_NONE = 1; + //@ShortText: "RSA" + MFA_TYPE_RSA = 2; + //@ShortText: "TOTP" + MFA_TYPE_TOTP = 3; + //@ShortText: "WebAuthn" + MFA_TYPE_WEB_AUTHN = 4; + //@ShortText: "SMS" + MFA_TYPE_SMS = 5; + //@ShortText: "E-Mail" + MFA_TYPE_EMAIL = 6; +} + +// UserType +enum UserType { + //@ShortText: "Unspecified" + USER_TYPE_UNSPECIFIED = 0; + //@ShortText: "Business User" + USER_TYPE_BUSINESS_USER = 1; + //@ShortText: "Technical User" + USER_TYPE_TECHNICAL_USER = 2; +} + +// DataExportChannelType +enum DataExportChannelType { + //@ShortText: "Unspecified" + DATA_EXPORT_CHANNEL_TYPE_UNSPECIFIED = 0; + //@ShortText: "Download" + DATA_EXPORT_CHANNEL_TYPE_DOWNLOAD = 1; + //@ShortText: "API" + DATA_EXPORT_CHANNEL_TYPE_API_ACCESS = 2; + //@ShortText: "Printer" + DATA_EXPORT_CHANNEL_TYPE_PRINTER = 3; +} + +//Categories for grouping Events +enum EventCategoryCode { + //@ShortText: "Security related events" + EVENT_CATEGORY_CODE_SEC_UNSPECIFIED = 0; + //@ShortText: "Identity Management & Access Management" + EVENT_CATEGORY_CODE_IAM = 1; + //@ShortText: "Configuration Changes" + EVENT_CATEGORY_CODE_CFG = 2; + //@ShortText: "Sensitive Personal Data Logging" + EVENT_CATEGORY_CODE_DPP = 3; + //@ShortText: "Read Access Logging" + EVENT_CATEGORY_CODE_RAL = 4; +} + +// CMK Actions +enum CMKAction { + //@ShortText: "Unspecified" + CMK_ACTION_UNSPECIFIED = 0; + //@ShortText: "Customer Managed Key Onboarding" + CMK_ACTION_ONBOARD = 1; + //@ShortText: "Tenant blocked" + CMK_ACTION_BLOCK = 2; + //@ShortText: "Tenant shutdown" + CMK_ACTION_SHUTDOWN = 3; + //@ShortText: "Fallback to SAP Managed Key" + CMK_ACTION_CSEKFALLBACK = 4; + //@ShortText: "Tenant restored" + CMK_ACTION_RESTORE = 5; + //@ShortText: "KMS System onboarded" + CMK_ACTION_KMS_ONBOARD = 6; + //@ShortText: "KMS System offboarded" + CMK_ACTION_KMS_OFFBOARD = 7; +} + +// Key Types within key operations +enum KeyType { + //@ShortText: "Unspecified" + KEY_TYPE_UNSPECIFIED = 0; + //@ShortText: "System Key" + KEY_TYPE_SYSTEM = 1; + //@ShortText: "Service Key" + KEY_TYPE_SERVICE = 2; + //@ShortText: "Data Encryption Key" + KEY_TYPE_DATA = 3; + //@ShortText: "Key Encryption Key" + KEY_TYPE_KEK = 4; +} + +// Virus channels +enum VirusChannel { + //@ShortText: "Unknown Channel" + VIRUS_CHANNEL_UNSPECIFIED = 0; + //@ShortText: "File has been uploaded" + VIRUS_CHANNEL_UPLOAD = 1; + //@ShortText: "Directory/Table scan" + VIRUS_CHANNEL_SCAN = 2; +} + +//Login Protocol +enum LoginProtocol { + //@ShortText: "Unspecified" + LOGIN_PROTOCOL_UNSPECIFIED = 0; + //@ShortText: "SAML 2.0" + LOGIN_PROTOCOL_SAML2 = 1; + //@ShortText: "Open ID Connect" + LOGIN_PROTOCOL_OIDC = 2; + //@ShortText: "HTTP" + LOGIN_PROTOCOL_HTTP = 3; +} diff --git a/src/sap_cloud_sdk/core/auditlog_ng/py.typed b/src/sap_cloud_sdk/core/auditlog_ng/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/src/sap_cloud_sdk/core/auditlog_ng/user-guide.md b/src/sap_cloud_sdk/core/auditlog_ng/user-guide.md new file mode 100644 index 0000000..a0ef42f --- /dev/null +++ b/src/sap_cloud_sdk/core/auditlog_ng/user-guide.md @@ -0,0 +1,244 @@ +# Using the `auditlog_ng` Client in an Agent + +This module provides an OTLP/gRPC client for sending structured audit log events + to the SAP Audit Log Service (v3/NG). It supports mTLS, insecure mode for local + testing, and both binary protobuf and JSON serialization formats. +--- + +## Overview + +The Auditlog NG client sends audit log events as OpenTelemetry (OTLP) LogRecords over gRPC to the SAP Audit Log Service. It supports: + +- **mTLS** (mutual TLS with client certificates) +- **Insecure** mode (local testing / no-auth) +- **Binary protobuf** and **JSON** serialization formats + +--- + +## Prerequisites + +### 1. Required Dependencies + +``` +grpcio>=1.60.0 +protobuf>=4.25.0 +protovalidate>=0.13.0 +opentelemetry-api>=1.28.0 +opentelemetry-sdk>=1.28.0 +opentelemetry-exporter-otlp-proto-grpc>=1.28.0 +``` + +### 2. Generated Protobuf Code + +The client depends on generated protobuf classes. + +--- + +## Configuration + +All constructor parameters for `AuditClient`: + +| Parameter | Type | Required | Default | Description | +|-----------------|---------|----------|----------------|-------------------------------------------------------------------------------------------------------| +| `endpoint` | `str` | ✅ Yes | — | OTLP gRPC endpoint of the Audit Log Service (`host:port`) | +| `deployment_id` | `str` | ✅ Yes | — | Deployment/region identifier. Validated: only `[a-zA-Z0-9._-/~]` allowed. Raises `ValueError` if invalid. | +| `namespace` | `str` | ✅ Yes | — | Audit log namespace (e.g. `sap.als`). Same character-set validation as `deployment_id`. | +| `cert_file` | `str` | ❌ No | `None` | Path to the mTLS client certificate file (PEM). Required together with `key_file` for mTLS. | +| `key_file` | `str` | ❌ No | `None` | Path to the mTLS client private key file (PEM). Required together with `cert_file` for mTLS. | +| `ca_file` | `str` | ❌ No | `None` | Path to a custom CA certificate (PEM) for server verification. Uses system trust store if omitted. | +| `insecure` | `bool` | ❌ No | `False` | Disable TLS entirely (plaintext gRPC). | +| `service_name` | `str` | ❌ No | `"audit-client"` | OpenTelemetry `service.name` resource attribute attached to every log record. | +| `batch` | `bool` | ❌ No | `False` | When `True`, uses `BatchLogRecordProcessor` (better throughput, small delay). When `False`, uses `SimpleLogRecordProcessor` (immediate, lower throughput). | +| `compression` | `bool` | ❌ No | `True` | Enable gzip compression on the gRPC channel (`grpc.Compression.Gzip`). Set to `False` to disable. | +| `schema_url` | `str` | ❌ No | `SCHEMA_URL` | OpenTelemetry schema URL attached to the logger. Defaults to the canonical ALS proto schema URL. | + +### Example values + +| Parameter | Production example | +|-----------------|---------------------------------------------------| +| `endpoint` | `us30.als.services.cloud.sap:443` | +| `deployment_id` | `us30-staging` | +| `namespace` | `sap.als` | +| `cert_file` | `/path/to/client-certificate_chain.pem` | +| `key_file` | `/path/to/private-key.pem` | +| `ca_file` | `/path/to/ca.pem` | +| `insecure` | `False` | +| `service_name` | `"my-agent"` | +| `batch` | `True` (high-throughput agents) | +| `compression` | `True` | + +--- + +## Usage in an Agent + +### Step 1: Import the Client and Generated Protobuf + +```python +from sap_cloud_sdk.core.auditlog_ng import create_client, AuditLogNGConfig +from sap_cloud_sdk.core.auditlog_ng.gen.sap.auditlog.auditevent.v2 import auditevent_pb2 as pb +``` + +### Step 2: Initialize the Client + +**With mTLS (production):** + +```python +client = create_client( + endpoint="us30.als.services.cloud.sap:443", + deployment_id="us30-staging", + namespace="sap.als", + cert_file="/path/to/client-certificate_chain.pem", + key_file="/path/to/private-key.pem", + ca_file="/path/to/ca.pem", # optional +) +``` + +**Insecure mode (local testing):** + +```python +client = create_client( + endpoint="localhost:4317", + deployment_id="my-deployment", + namespace="sap.als", + insecure=True, +) +``` + +> ⚠️ **Important:** `deployment_id` and `namespace` are validated at construction time. +> Invalid values (e.g. containing spaces) will raise a `ValueError`. + +### Step 3: Build an Audit Event + +```python +event = pb.DataAccess() +event.common.timestamp.FromDatetime(datetime.now(timezone.utc)) +event.common.user_initiator_id = "agent@example.com" +event.common.tenant_id = "9e0d89c9-17cd-439d-8a8b-9c44d3d272f0" +event.channel_type = "API" +event.channel_id = "agent-v1" +event.object_type = "resource" +event.object_id = "resource-001" +``` + +### Step 4: Send the Event + +**Binary protobuf:** + +```python +event_id = client.send(event, "DataAccess") +print(f"Sent event with ID: {event_id}") +``` + +**JSON format:** + +```python +event_id = client.send_json(event, "DataAccess") +``` + +> The `event_type` argument is optional. If omitted, the client derives it from the protobuf descriptor name (e.g., `"sap.als.AuditEvent.DataAccess.v2"`). + +### Step 5: Close the Client + +Always close the client when the agent shuts down to flush pending events: + +```python +client.close() +``` + +> Calling `send()` on a closed client raises a `RuntimeError`. + +--- + +## Full Agent Integration Example + +```python +from sap_cloud_sdk.core.auditlog_ng import create_client +from sap_cloud_sdk.core.auditlog_ng.gen.sap.auditlog.auditevent.v2 import auditevent_pb2 as pb +from datetime import datetime, timezone + + +class AgentAuditLogger: + def __init__(self): + self.client = create_client( + endpoint="us30.als.services.cloud.sap:443", + deployment_id="us30-staging", + namespace="sap.als", + cert_file="/path/to/client-certificate_chain.pem", + key_file="/path/to/private-key.pem", + ) + + def log_data_access(self, user: str, tenant_id: str, resource: str): + event = pb.DataAccess() + event.common.timestamp.FromDatetime(datetime.now(timezone.utc)) + event.common.user_initiator_id = user + event.common.tenant_id = tenant_id + event.channel_type = "API" + event.channel_id = "agent-v1" + event.object_type = "resource" + event.object_id = resource + + event_id = self.client.send(event, "DataAccess") + return event_id + + def shutdown(self): + self.client.close() + + +# In your agent main loop +audit_logger = AgentAuditLogger() +try: + event_id = audit_logger.log_data_access( + user="agent-user@example.com", + tenant_id="9e0d89c9-17cd-439d-8a8b-9c44d3d272f0", + resource="sensitive-record-42", + ) + print(f"Audit event logged: {event_id}") +finally: + audit_logger.shutdown() +``` + +--- + +## One-Off Sends (Convenience Function) + +For simple, one-off audit events without managing a persistent client: + +```python +from sap_cloud_sdk.core.auditlog_ng import create_client + +with create_client( + endpoint="us30.als.services.cloud.sap:443", + deployment_id="us30-staging", + namespace="sap.als", + cert_file="/path/to/cert.pem", + key_file="/path/to/key.pem", +) as client: + event_id = client.send(event, "DataAccess") +``` + +--- + +## Event Serialization Formats + +| Method | Format | MIME Type | +|---------------|--------------------|------------------------| +| `send()` | Binary protobuf | `application/protobuf` | +| `send_json()` | JSON | `application/json` | + +--- + +## Validation + +Events are validated against protobuf constraints using `protovalidate` before sending. A `ValueError` is raised if: + +- The event fails schema validation +- The `tenant_id` is not a valid UUID +- The client has already been closed + +--- + +## Running the Unit Tests + +```bash + uv run pytest tests/core/unit/auditlog_ng/ +``` diff --git a/src/sap_cloud_sdk/core/telemetry/module.py b/src/sap_cloud_sdk/core/telemetry/module.py index b7d592b..53d3d00 100644 --- a/src/sap_cloud_sdk/core/telemetry/module.py +++ b/src/sap_cloud_sdk/core/telemetry/module.py @@ -8,6 +8,7 @@ class Module(str, Enum): AICORE = "aicore" AUDITLOG = "auditlog" + AUDITLOG_NG = "auditlog_ng" DESTINATION = "destination" OBJECTSTORE = "objectstore" diff --git a/src/sap_cloud_sdk/core/telemetry/operation.py b/src/sap_cloud_sdk/core/telemetry/operation.py index f640953..29252fb 100644 --- a/src/sap_cloud_sdk/core/telemetry/operation.py +++ b/src/sap_cloud_sdk/core/telemetry/operation.py @@ -9,6 +9,7 @@ class Operation(str, Enum): # Audit Log Operations AUDITLOG_LOG = "log" AUDITLOG_LOG_BATCH = "log_batch" + AUDITLOG_CREATE_CLIENT = "create_client" # Destination Operations DESTINATION_GET_INSTANCE_DESTINATION = "get_instance_destination" diff --git a/tests/core/unit/auditlog_ng/__init__.py b/tests/core/unit/auditlog_ng/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/core/unit/auditlog_ng/unit/__init__.py b/tests/core/unit/auditlog_ng/unit/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/core/unit/auditlog_ng/unit/test_client.py b/tests/core/unit/auditlog_ng/unit/test_client.py new file mode 100644 index 0000000..34f04ab --- /dev/null +++ b/tests/core/unit/auditlog_ng/unit/test_client.py @@ -0,0 +1,233 @@ +"""Tests for AuditClient.""" +from __future__ import annotations + +import json +from typing import TypedDict, Unpack +from unittest.mock import MagicMock, Mock, patch + +import pytest + +from sap_cloud_sdk.core.auditlog_ng.client import AuditClient +from sap_cloud_sdk.core.auditlog_ng.config import AuditLogNGConfig, SCHEMA_URL +from sap_cloud_sdk.core.auditlog_ng.exceptions import ValidationError + + +class ConfigKwargs(TypedDict, total=False): + endpoint: str + deployment_id: str + namespace: str + insecure: bool + service_name: str + cert_file: str | None + key_file: str | None + ca_file: str | None + batch: bool + compression: bool + schema_url: str + + +def _make_config(**overrides: Unpack[ConfigKwargs]) -> AuditLogNGConfig: + defaults: ConfigKwargs = { + "endpoint": "localhost:4317", + "deployment_id": "deployment-123", + "namespace": "namespace-123", + "insecure": True, + } + defaults.update(overrides) + return AuditLogNGConfig(**defaults) + + +@patch("sap_cloud_sdk.core.auditlog_ng.client.OTLPLogExporter") +@patch("sap_cloud_sdk.core.auditlog_ng.client.LoggerProvider") +def _make_mocked_client(mock_provider_cls, mock_exporter_cls, *, validate_side_effect=None): + mock_logger = Mock() + mock_provider = Mock() + mock_provider.get_logger.return_value = mock_logger + mock_provider_cls.return_value = mock_provider + + config = _make_config() + client = AuditClient(config) + + validate_patcher = patch( + "sap_cloud_sdk.core.auditlog_ng.client.protovalidate.validate", + side_effect=validate_side_effect, + ) + mock_validate = validate_patcher.start() + + return client, mock_logger, mock_provider, mock_validate, validate_patcher, mock_provider_cls + + +def _make_mock_event(tenant_id="tenant-123", descriptor_name="DataAccess"): + event = MagicMock() + event.common.tenant_id = tenant_id + event.DESCRIPTOR.name = descriptor_name + event.SerializeToString.return_value = b"\x00\x01\x02" + return event + + +class TestAuditClientInit: + + @patch("sap_cloud_sdk.core.auditlog_ng.client.OTLPLogExporter") + @patch("sap_cloud_sdk.core.auditlog_ng.client.LoggerProvider") + def test_creates_insecure_client(self, mock_provider_cls, mock_exporter_cls): + config = _make_config(insecure=True) + client = AuditClient(config) + + assert client._closed is False + mock_exporter_cls.assert_called_once() + _, kwargs = mock_exporter_cls.call_args + assert kwargs["insecure"] is True + + @patch("sap_cloud_sdk.core.auditlog_ng.client.OTLPLogExporter") + @patch("sap_cloud_sdk.core.auditlog_ng.client.LoggerProvider") + def test_sets_schema_url_on_logger(self, mock_provider_cls, mock_exporter_cls): + mock_provider = Mock() + mock_provider.get_logger.return_value = Mock() + mock_provider_cls.return_value = mock_provider + + config = _make_config() + AuditClient(config) + + mock_provider.get_logger.assert_called_once() + _, kwargs = mock_provider.get_logger.call_args + assert kwargs["schema_url"] == SCHEMA_URL + + @patch("sap_cloud_sdk.core.auditlog_ng.client.OTLPLogExporter") + @patch("sap_cloud_sdk.core.auditlog_ng.client.LoggerProvider") + def test_sets_resource_attributes(self, mock_provider_cls, mock_exporter_cls): + config = _make_config(service_name="my-svc") + AuditClient(config) + + call_kwargs = mock_provider_cls.call_args[1] + resource = call_kwargs["resource"] + attrs = dict(resource.attributes) + assert attrs["service.name"] == "my-svc" + assert attrs["sap.ucl.deployment_id"] == "deployment-123" + assert attrs["sap.ucl.system_namespace"] == "namespace-123" + + +class TestAuditClientSend: + + def test_send_binary_success(self): + client, mock_logger, _, mock_validate, patcher, _ = _make_mocked_client() + try: + event = _make_mock_event() + event_id = client.send(event, "DataAccess") + + assert isinstance(event_id, str) + mock_validate.assert_called_once_with(event) + mock_logger.emit.assert_called_once() + + _, kwargs = mock_logger.emit.call_args + assert kwargs["event_name"] == "sap.als.AuditEvent.DataAccess.v2" + assert kwargs["body"] == b"\x00\x01\x02" + assert kwargs["attributes"]["sap.auditlogging.mime_type"] == "application/protobuf" + assert kwargs["attributes"]["sap.tenancy.tenant_id"] == "tenant-123" + assert "cloudevents.event_id" in kwargs["attributes"] + finally: + patcher.stop() + + def test_send_json_success(self): + client, mock_logger, _, mock_validate, patcher, _ = _make_mocked_client() + try: + event = _make_mock_event() + event_id = client.send_json(event, "DataAccess") + + assert isinstance(event_id, str) + mock_logger.emit.assert_called_once() + + _, kwargs = mock_logger.emit.call_args + assert kwargs["attributes"]["sap.auditlogging.mime_type"] == "application/json" + assert isinstance(kwargs["body"], str) + finally: + patcher.stop() + + def test_send_uses_descriptor_name_when_event_type_missing(self): + client, mock_logger, _, _, patcher, _ = _make_mocked_client() + try: + event = _make_mock_event(descriptor_name="ConfigurationChange") + client.send(event) + + _, kwargs = mock_logger.emit.call_args + assert kwargs["event_name"] == "sap.als.AuditEvent.ConfigurationChange.v2" + finally: + patcher.stop() + + def test_send_on_closed_client_raises(self): + client, _, _, _, patcher, _ = _make_mocked_client() + patcher.stop() + client.close() + + with pytest.raises(RuntimeError, match="Client is closed"): + client.send(_make_mock_event(), "DataAccess") + + def test_send_invalid_format_raises(self): + client, _, _, _, patcher, _ = _make_mocked_client() + try: + with pytest.raises(ValueError, match="format must be"): + client.send(_make_mock_event(), "DataAccess", format="xml") + finally: + patcher.stop() + + def test_send_validation_failure_raises_validation_error(self): + from protovalidate import ValidationError as ProtoValidationError + + client, mock_logger, _, _, patcher, _ = _make_mocked_client( + validate_side_effect=ProtoValidationError("bad event", []) + ) + try: + with pytest.raises(ValidationError, match="Audit event validation failed"): + client.send(_make_mock_event(), "DataAccess") + + mock_logger.emit.assert_not_called() + finally: + patcher.stop() + + def test_send_invalid_tenant_id_raises(self): + client, mock_logger, _, _, patcher, _ = _make_mocked_client() + try: + event = _make_mock_event(tenant_id="bad tenant id") + + with pytest.raises(ValueError): + client.send(event, "DataAccess") + + mock_logger.emit.assert_not_called() + finally: + patcher.stop() + + +class TestAuditClientLifecycle: + + def test_flush(self): + client, _, mock_provider, _, patcher, _ = _make_mocked_client() + patcher.stop() + + client.flush() + mock_provider.force_flush.assert_called_once() + + def test_flush_on_closed_client_is_noop(self): + client, _, mock_provider, _, patcher, _ = _make_mocked_client() + patcher.stop() + client.close() + + mock_provider.force_flush.reset_mock() + client.flush() + mock_provider.force_flush.assert_not_called() + + def test_close(self): + client, _, mock_provider, _, patcher, _ = _make_mocked_client() + patcher.stop() + + client.close() + assert client._closed is True + mock_provider.shutdown.assert_called_once() + + def test_context_manager(self): + client, _, mock_provider, _, patcher, _ = _make_mocked_client() + patcher.stop() + + with client: + assert client._closed is False + + assert client._closed is True + mock_provider.shutdown.assert_called_once() diff --git a/tests/core/unit/auditlog_ng/unit/test_config.py b/tests/core/unit/auditlog_ng/unit/test_config.py new file mode 100644 index 0000000..24b464c --- /dev/null +++ b/tests/core/unit/auditlog_ng/unit/test_config.py @@ -0,0 +1,108 @@ +"""Tests for configuration and validation.""" + +import pytest + +from sap_cloud_sdk.core.auditlog_ng.config import ( + AuditLogNGConfig, + SCHEMA_URL, + _validate_source_arg, +) + + +class TestValidateSourceArg: + + def test_valid_alphanumeric(self): + _validate_source_arg("abc123", "test") + + def test_valid_with_dots_dashes_underscores(self): + _validate_source_arg("my-deployment_v1.0", "test") + + def test_valid_with_slashes_and_tildes(self): + _validate_source_arg("sap/als~v2", "test") + + def test_rejects_spaces(self): + with pytest.raises(ValueError, match="test"): + _validate_source_arg("bad value", "test") + + def test_rejects_empty_string(self): + with pytest.raises(ValueError, match="test"): + _validate_source_arg("", "test") + + def test_rejects_special_characters(self): + with pytest.raises(ValueError, match="test"): + _validate_source_arg("value@#!", "test") + + +class TestAuditLogNGConfig: + + def test_valid_minimal_config(self): + config = AuditLogNGConfig( + endpoint="localhost:4317", + deployment_id="my-deployment", + namespace="sap.als", + ) + assert config.endpoint == "localhost:4317" + assert config.deployment_id == "my-deployment" + assert config.namespace == "sap.als" + assert config.insecure is False + assert config.batch is False + assert config.compression is True + assert config.service_name == "audit-client" + assert config.schema_url == SCHEMA_URL + + def test_valid_full_config(self): + config = AuditLogNGConfig( + endpoint="audit.example.com:443", + deployment_id="us30-staging", + namespace="sap.als", + cert_file="/path/to/cert.pem", + key_file="/path/to/key.pem", + ca_file="/path/to/ca.pem", + insecure=False, + service_name="my-agent", + batch=True, + compression=False, + schema_url="https://custom.schema/url", + ) + assert config.cert_file == "/path/to/cert.pem" + assert config.key_file == "/path/to/key.pem" + assert config.ca_file == "/path/to/ca.pem" + assert config.service_name == "my-agent" + assert config.batch is True + assert config.compression is False + assert config.schema_url == "https://custom.schema/url" + + def test_empty_endpoint_raises(self): + with pytest.raises(ValueError, match="endpoint is required"): + AuditLogNGConfig( + endpoint="", + deployment_id="my-deployment", + namespace="sap.als", + ) + + def test_invalid_deployment_id_raises(self): + with pytest.raises(ValueError, match="deployment_id"): + AuditLogNGConfig( + endpoint="localhost:4317", + deployment_id="bad value", + namespace="sap.als", + ) + + def test_invalid_namespace_raises(self): + with pytest.raises(ValueError, match="namespace"): + AuditLogNGConfig( + endpoint="localhost:4317", + deployment_id="my-deployment", + namespace="bad value", + ) + + def test_defaults_for_optional_fields(self): + config = AuditLogNGConfig( + endpoint="localhost:4317", + deployment_id="dep", + namespace="ns", + ) + assert config.cert_file is None + assert config.key_file is None + assert config.ca_file is None + assert config.insecure is False diff --git a/tests/core/unit/auditlog_ng/unit/test_create_client.py b/tests/core/unit/auditlog_ng/unit/test_create_client.py new file mode 100644 index 0000000..25dca9f --- /dev/null +++ b/tests/core/unit/auditlog_ng/unit/test_create_client.py @@ -0,0 +1,105 @@ +"""Tests for create_client factory function.""" + +import pytest +from unittest.mock import patch, Mock + +from sap_cloud_sdk.core.auditlog_ng import create_client, AuditClient +from sap_cloud_sdk.core.auditlog_ng.config import AuditLogNGConfig, SCHEMA_URL +from sap_cloud_sdk.core.auditlog_ng.exceptions import ClientCreationError + + +class TestCreateClient: + + @patch("sap_cloud_sdk.core.auditlog_ng.client.OTLPLogExporter") + @patch("sap_cloud_sdk.core.auditlog_ng.client.LoggerProvider") + def test_create_client_with_config(self, mock_provider_cls, mock_exporter_cls): + mock_provider = Mock() + mock_provider.get_logger.return_value = Mock() + mock_provider_cls.return_value = mock_provider + + config = AuditLogNGConfig( + endpoint="localhost:4317", + deployment_id="dep-1", + namespace="ns-1", + insecure=True, + ) + + client = create_client(config=config) + + assert isinstance(client, AuditClient) + + @patch("sap_cloud_sdk.core.auditlog_ng.client.OTLPLogExporter") + @patch("sap_cloud_sdk.core.auditlog_ng.client.LoggerProvider") + def test_create_client_with_keyword_args(self, mock_provider_cls, mock_exporter_cls): + mock_provider = Mock() + mock_provider.get_logger.return_value = Mock() + mock_provider_cls.return_value = mock_provider + + client = create_client( + endpoint="localhost:4317", + deployment_id="dep-1", + namespace="ns-1", + insecure=True, + ) + + assert isinstance(client, AuditClient) + + def test_create_client_missing_endpoint_raises(self): + with pytest.raises(ValueError, match="endpoint, deployment_id, and namespace are required"): + create_client(deployment_id="dep-1", namespace="ns-1") + + def test_create_client_missing_deployment_id_raises(self): + with pytest.raises(ValueError, match="endpoint, deployment_id, and namespace are required"): + create_client(endpoint="localhost:4317", namespace="ns-1") + + def test_create_client_missing_namespace_raises(self): + with pytest.raises(ValueError, match="endpoint, deployment_id, and namespace are required"): + create_client(endpoint="localhost:4317", deployment_id="dep-1") + + def test_create_client_no_args_raises(self): + with pytest.raises(ValueError, match="endpoint, deployment_id, and namespace are required"): + create_client() + + def test_create_client_invalid_deployment_id_raises(self): + with pytest.raises(ValueError, match="deployment_id"): + create_client( + endpoint="localhost:4317", + deployment_id="bad value", + namespace="ns-1", + ) + + @patch("sap_cloud_sdk.core.auditlog_ng.client.OTLPLogExporter") + @patch("sap_cloud_sdk.core.auditlog_ng.client.LoggerProvider") + def test_create_client_unexpected_exception_wraps_in_client_creation_error( + self, mock_provider_cls, mock_exporter_cls + ): + mock_provider_cls.side_effect = RuntimeError("Unexpected failure") + + with pytest.raises(ClientCreationError, match="Failed to create audit log NG client"): + create_client( + endpoint="localhost:4317", + deployment_id="dep-1", + namespace="ns-1", + insecure=True, + ) + + @patch("sap_cloud_sdk.core.auditlog_ng.client.OTLPLogExporter") + @patch("sap_cloud_sdk.core.auditlog_ng.client.LoggerProvider") + def test_config_keyword_args_are_forwarded(self, mock_provider_cls, mock_exporter_cls): + mock_provider = Mock() + mock_provider.get_logger.return_value = Mock() + mock_provider_cls.return_value = mock_provider + + client = create_client( + endpoint="audit.example.com:443", + deployment_id="dep-1", + namespace="ns-1", + service_name="my-svc", + batch=True, + compression=False, + insecure=True, + ) + + assert client._config.service_name == "my-svc" + assert client._config.batch is True + assert client._config.compression is False diff --git a/tests/core/unit/auditlog_ng/unit/test_exceptions.py b/tests/core/unit/auditlog_ng/unit/test_exceptions.py new file mode 100644 index 0000000..c1ca111 --- /dev/null +++ b/tests/core/unit/auditlog_ng/unit/test_exceptions.py @@ -0,0 +1,41 @@ +"""Tests for exception classes.""" + +import pytest + +from sap_cloud_sdk.core.auditlog_ng.exceptions import ( + AuditLogNGError, + ClientCreationError, + ValidationError +) + + +class TestExceptions: + + def test_exception_hierarchy(self): + assert issubclass(ClientCreationError, AuditLogNGError) + assert issubclass(ValidationError, AuditLogNGError) + assert issubclass(AuditLogNGError, Exception) + + def test_base_auditlog_ng_error(self): + error = AuditLogNGError("Base error") + assert str(error) == "Base error" + assert isinstance(error, Exception) + + def test_client_creation_error(self): + error = ClientCreationError("Failed to create client") + assert str(error) == "Failed to create client" + assert isinstance(error, AuditLogNGError) + + def test_validation_error(self): + error = ValidationError("Validation failed") + assert str(error) == "Validation failed" + assert isinstance(error, AuditLogNGError) + + def test_exceptions_with_chained_causes(self): + original_error = ValueError("Original cause") + + try: + raise ClientCreationError("Client failed") from original_error + except ClientCreationError as e: + assert e.__cause__ is original_error + assert "Client failed" in str(e) diff --git a/tests/core/unit/telemetry/test_module.py b/tests/core/unit/telemetry/test_module.py index 5a8077a..8ff03f2 100644 --- a/tests/core/unit/telemetry/test_module.py +++ b/tests/core/unit/telemetry/test_module.py @@ -12,6 +12,7 @@ def test_module_values(self): """Test that Module enum has expected values.""" assert Module.AICORE.value == "aicore" assert Module.AUDITLOG.value == "auditlog" + assert Module.AUDITLOG_NG.value == "auditlog_ng" assert Module.DESTINATION.value == "destination" assert Module.OBJECTSTORE.value == "objectstore" @@ -19,6 +20,7 @@ def test_module_str_representation(self): """Test that Module enum converts to string correctly.""" assert str(Module.AICORE) == "aicore" assert str(Module.AUDITLOG) == "auditlog" + assert str(Module.AUDITLOG_NG) == "auditlog_ng" assert str(Module.DESTINATION) == "destination" assert str(Module.OBJECTSTORE) == "objectstore" @@ -26,6 +28,7 @@ def test_module_is_string_enum(self): """Test that Module enum inherits from str.""" assert isinstance(Module.AICORE, str) assert isinstance(Module.AUDITLOG, str) + assert isinstance(Module.AUDITLOG_NG, str) assert isinstance(Module.DESTINATION, str) def test_module_equality(self): @@ -44,7 +47,7 @@ def test_module_in_collection(self): def test_all_modules_present(self): """Test that all expected modules are present.""" all_modules = list(Module) - assert len(all_modules) == 4 + assert len(all_modules) == 5 assert Module.AICORE in all_modules assert Module.AUDITLOG in all_modules assert Module.DESTINATION in all_modules @@ -55,5 +58,6 @@ def test_module_iteration(self): module_values = [str(m) for m in Module] assert "aicore" in module_values assert "auditlog" in module_values + assert "auditlog_ng" in module_values assert "destination" in module_values assert "objectstore" in module_values diff --git a/tests/core/unit/telemetry/test_operation.py b/tests/core/unit/telemetry/test_operation.py index 9bf9801..f61fba1 100644 --- a/tests/core/unit/telemetry/test_operation.py +++ b/tests/core/unit/telemetry/test_operation.py @@ -12,6 +12,7 @@ def test_auditlog_operations(self): """Test Audit Log operation values.""" assert Operation.AUDITLOG_LOG.value == "log" assert Operation.AUDITLOG_LOG_BATCH.value == "log_batch" + assert Operation.AUDITLOG_CREATE_CLIENT.value == "create_client" def test_destination_operations(self): """Test Destination operation values.""" @@ -105,5 +106,5 @@ def test_operation_iteration(self): def test_operation_count(self): """Test that we have the expected number of operations.""" all_operations = list(Operation) - # 2 auditlog + 8 destination + 7 certificate + 7 fragment + 8 objectstore + 2 aicore = 34 - assert len(all_operations) == 34 + # 3 auditlog + 8 destination + 7 certificate + 7 fragment + 8 objectstore + 2 aicore = 34 + assert len(all_operations) == 35