From fbb30840f16909462d86b07e3fc6253ffc425489 Mon Sep 17 00:00:00 2001 From: Fabi <38692350+fgerschwiler@users.noreply.github.com> Date: Thu, 15 Oct 2020 10:27:13 +0200 Subject: [PATCH] feat: policies on aggregates (#799) * feat: move pw policy * feat: default pw complexity policy * fix: org password complexity policy * fix: org password complexity policy * fix: pw complexity policy with setup * fix: age and lockout policies on aggregates * fix: migration * fix: org iam policy * fix: org iam policy * fix: org iam policy * fix: tests * fix: policy request * fix: merge master * fix(console): policies frontend (#817) * fix policy build * fix: age, complexity, lockout policies * fix: ready return err of setup not done * fix: fix remove policies in spoolers * fix: fix remove policies in spoolers * feat(console): policy settings for iam and org (#824) * fix policy build * fix: age, complexity, lockout policies * fix pwd complexity * policy remove action * add imports * fix accounts card, enable mgmt login policy * lint * add iam policy to admin * toasts, i18n, show default * routing, i18n * reset policy, toast i18n, cleanup, routing * policy delete permission * lint style * delete iam policy * delete non project from grid list, i18n * lint ts, style * fix: remove instead delete * feat(console): delete external idp from user (#835) * dialog i18n, delete column and function * dialog i18n * fix rm button * Update console/src/assets/i18n/de.json Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com> * Update console/src/assets/i18n/de.json Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com> * fix: revert env, rename policy, remove comments * fix: lowercase sich * fix: pr requests * Update internal/iam/repository/eventsourcing/eventstore_test.go Co-authored-by: Silvan * fix: tests * fix: tests * fix(console): policies (#839) * fix: nil pointer on get userdata (#815) * fix: external login (#818) * fix: external login * fix: external login * feat(console): delete user (#819) * add action col to user table, i18n * delete user from detail component * lint * fix(console): cleanup user detail and member components, user/me redirect, permission guards, filter, org policy guard, user table, scss cleanup (#808) * fix: remove user.write guard for filtering * border color * fix user routing from member tables * idp detail layout * generic contact component * fix redirect to auth user, user grant disable * disable policy action without permission, i18n * user-create flex fix, contact ng-content * rm unused styles * sidenav divider * lint * chore(deps-dev): bump @angular/cli from 10.1.3 to 10.1.4 in /console (#806) * fix: user session with external login (#797) * fix: user session with external login * fix: tests * fix: tests * fix: change idp config name * fix(container): stop copying / and instead only copy zitadel (#691) * chore: stop copying / and instead only copy zitadel * Update Dockerfile * Update release.yml * enable anchors debug * fix(container): don't copy alpine content into scratch execpt pwd * chore: remove need step * merge master * chore(deps-dev): bump @angular/cli from 10.1.3 to 10.1.4 in /console Bumps [@angular/cli](https://github.com/angular/angular-cli) from 10.1.3 to 10.1.4. - [Release notes](https://github.com/angular/angular-cli/releases) - [Commits](https://github.com/angular/angular-cli/compare/v10.1.3...v10.1.4) Signed-off-by: dependabot[bot] Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com> Co-authored-by: Florian Forster Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump @angular/language-service from 10.1.3 to 10.1.4 in /console (#805) * fix: user session with external login (#797) * fix: user session with external login * fix: tests * fix: tests * fix: change idp config name * fix(container): stop copying / and instead only copy zitadel (#691) * chore: stop copying / and instead only copy zitadel * Update Dockerfile * Update release.yml * enable anchors debug * fix(container): don't copy alpine content into scratch execpt pwd * chore: remove need step * merge master * chore(deps-dev): bump @angular/language-service in /console Bumps [@angular/language-service](https://github.com/angular/angular/tree/HEAD/packages/language-service) from 10.1.3 to 10.1.4. - [Release notes](https://github.com/angular/angular/releases) - [Changelog](https://github.com/angular/angular/blob/master/CHANGELOG.md) - [Commits](https://github.com/angular/angular/commits/10.1.4/packages/language-service) Signed-off-by: dependabot[bot] Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com> Co-authored-by: Florian Forster Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump codelyzer from 6.0.0 to 6.0.1 in /console (#804) * fix: user session with external login (#797) * fix: user session with external login * fix: tests * fix: tests * fix: change idp config name * fix(container): stop copying / and instead only copy zitadel (#691) * chore: stop copying / and instead only copy zitadel * Update Dockerfile * Update release.yml * enable anchors debug * fix(container): don't copy alpine content into scratch execpt pwd * chore: remove need step * merge master * chore(deps-dev): bump codelyzer from 6.0.0 to 6.0.1 in /console Bumps [codelyzer](https://github.com/mgechev/codelyzer) from 6.0.0 to 6.0.1. - [Release notes](https://github.com/mgechev/codelyzer/releases) - [Changelog](https://github.com/mgechev/codelyzer/blob/master/CHANGELOG.md) - [Commits](https://github.com/mgechev/codelyzer/commits/6.0.1) Signed-off-by: dependabot[bot] Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com> Co-authored-by: Florian Forster Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump @angular-devkit/build-angular from 0.1000.8 to 0.1001.4 in /console (#803) * fix: user session with external login (#797) * fix: user session with external login * fix: tests * fix: tests * fix: change idp config name * fix(container): stop copying / and instead only copy zitadel (#691) * chore: stop copying / and instead only copy zitadel * Update Dockerfile * Update release.yml * enable anchors debug * fix(container): don't copy alpine content into scratch execpt pwd * chore: remove need step * merge master * chore(deps-dev): bump @angular-devkit/build-angular in /console Bumps [@angular-devkit/build-angular](https://github.com/angular/angular-cli) from 0.1000.8 to 0.1001.4. - [Release notes](https://github.com/angular/angular-cli/releases) - [Commits](https://github.com/angular/angular-cli/commits) Signed-off-by: dependabot[bot] Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com> Co-authored-by: Florian Forster Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Max Peintner * chore(deps): bump uuid from 8.3.0 to 8.3.1 in /console (#802) * fix: user session with external login (#797) * fix: user session with external login * fix: tests * fix: tests * fix: change idp config name * fix(container): stop copying / and instead only copy zitadel (#691) * chore: stop copying / and instead only copy zitadel * Update Dockerfile * Update release.yml * enable anchors debug * fix(container): don't copy alpine content into scratch execpt pwd * chore: remove need step * merge master * chore(deps): bump uuid from 8.3.0 to 8.3.1 in /console Bumps [uuid](https://github.com/uuidjs/uuid) from 8.3.0 to 8.3.1. - [Release notes](https://github.com/uuidjs/uuid/releases) - [Changelog](https://github.com/uuidjs/uuid/blob/master/CHANGELOG.md) - [Commits](https://github.com/uuidjs/uuid/compare/v8.3.0...v8.3.1) Signed-off-by: dependabot[bot] Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com> Co-authored-by: Florian Forster Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * create memberstable as common component * iam member cleanup * iam + org m table, user table service user avatar * toast config * fix selection emitter * fix project grant table width * project grant members refactor * theme optimizations * member table col delete * lint * fix table row color * refactor grey color * lint scss * org list redirect on click, fix user table undef * refresh table after grant add Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com> Co-authored-by: Florian Forster * fix(console): intercept navigator.language, set browser lang as default for user without explicit setting, user table outline, member create dialog import (#820) * i18n interceptor, set language to browser lang * nullcheck * rm external idp log * fix module imports, rm user displayname from i18n * Update console/src/assets/i18n/de.json Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com> * fix: delete external idps from users (#822) * fix(console): permission regex, account switcher null check, restrict app and member create access (#821) * fix member table disable, gerneal regexp * fix user session card, app disable * memberships max count * fix policy permissions * permission check for member add dialog * lint * rm accounts log * rm id regex * fix: handle usermemberships on project and project grant delete (#825) * fix: go handler Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Florian Forster * fix: tests * fix: not needed error handling Co-authored-by: Max Peintner Co-authored-by: Silvan Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Florian Forster --- cmd/zitadel/setup.yaml | 23 +- cmd/zitadel/system-defaults.yaml | 19 - .../accounts-card.component.scss | 2 + .../detail-layout.component.scss | 3 +- .../idp-table/idp-table.component.html | 3 +- .../login-policy/login-policy.component.html | 32 +- .../login-policy/login-policy.component.scss | 17 +- .../login-policy/login-policy.component.ts | 49 +- .../org-iam-policy-routing.module.ts | 20 + .../org-iam-policy.component.html | 27 + .../org-iam-policy.component.scss} | 8 +- .../org-iam-policy.component.spec.ts} | 12 +- .../org-iam-policy.component.ts | 132 + .../org-iam-policy.module.ts} | 10 +- .../password-age-policy-routing.module.ts | 10 - .../password-age-policy.component.html | 15 +- .../password-age-policy.component.scss | 3 +- .../password-age-policy.component.ts | 138 +- ...ssword-complexity-policy-routing.module.ts | 10 - .../password-complexity-policy.component.html | 20 +- .../password-complexity-policy.component.scss | 9 +- .../password-complexity-policy.component.ts | 162 +- .../password-iam-policy-routing.module.ts | 30 - .../password-iam-policy.component.html | 28 - .../password-iam-policy.component.ts | 102 - .../password-lockout-policy-routing.module.ts | 10 - .../password-lockout-policy.component.html | 21 +- .../password-lockout-policy.component.scss | 7 +- .../password-lockout-policy.component.ts | 131 +- .../policies/policy-component-action.enum.ts | 5 - .../iam-policy-grid.component.html | 48 + .../iam-policy-grid.component.ts | 6 +- .../src/app/pages/iam/iam-routing.module.ts | 49 +- .../orgs/org-create/org-create.component.ts | 4 +- .../src/app/pages/orgs/orgs-routing.module.ts | 16 +- .../policy-grid/policy-grid.component.html | 73 +- .../orgs/policy-grid/policy-grid.component.ts | 21 +- .../owned-project-grid.component.html | 8 +- .../owned-project-grid.component.scss | 16 + .../owned-project-grid.component.ts | 41 +- .../owned-project-list.component.html | 15 +- .../owned-project-list.component.ts | 38 +- .../owned-projects/owned-projects.module.ts | 2 + .../external-idps.component.html | 10 + .../external-idps/external-idps.component.ts | 48 +- console/src/app/services/admin.service.ts | 155 +- console/src/app/services/mgmt.service.ts | 79 +- console/src/assets/i18n/de.json | 19 +- console/src/assets/i18n/en.json | 17 +- .../eventsourcing/eventstore/iam.go | 72 + .../eventsourcing/eventstore/org.go | 48 +- .../eventsourcing/eventstore/user.go | 45 +- .../eventsourcing/handler/handler.go | 6 +- .../eventsourcing/handler/org_iam_policy.go | 69 + .../handler/password_age_policy.go | 69 + .../handler/password_complexity_policy.go | 69 + .../handler/password_lockout_policy.go | 69 + .../repository/eventsourcing/handler/user.go | 35 +- .../repository/eventsourcing/repository.go | 28 +- .../eventsourcing/view/org_iam_policy.go | 48 + .../eventsourcing/view/password_age_policy.go | 48 + .../view/password_complexity_policy.go | 48 + .../view/password_lockout_policy.go | 48 + internal/admin/repository/iam.go | 16 + internal/admin/repository/org.go | 10 +- internal/api/api.go | 8 +- internal/api/grpc/admin/login_policy.go | 2 +- .../api/grpc/admin/login_policy_converter.go | 20 +- internal/api/grpc/admin/org.go | 34 +- internal/api/grpc/admin/org_converter.go | 25 +- .../api/grpc/admin/password_age_policy.go | 23 + .../admin/password_age_policy_converter.go | 45 + .../grpc/admin/password_complexity_policy.go | 23 + .../password_complexity_policy_converter.go | 54 + .../api/grpc/admin/password_lockout_policy.go | 23 + .../password_lockout_policy_converter.go | 45 + .../grpc/auth/policy_complexity_converter.go | 5 +- internal/api/grpc/management/login_policy.go | 16 +- .../grpc/management/login_policy_converter.go | 27 +- internal/api/grpc/management/org.go | 4 +- internal/api/grpc/management/org_converter.go | 7 +- .../grpc/management/password_age_policy.go | 44 + .../password_age_policy_converter.go | 46 + .../management/password_complexity_policy.go | 44 + .../password_complexity_policy_converter.go | 55 + .../management/password_lockout_policy.go | 44 + .../password_lockout_policy_converter.go | 46 + internal/api/grpc/management/policy.go | 112 - .../grpc/management/policy_age_converter.go | 68 - .../management/policy_complexity_converter.go | 81 - .../management/policy_lockout_converter.go | 70 - internal/api/grpc/management/server.go | 2 - internal/api/http/marshal.go | 6 +- .../eventsourcing/eventstore/auth_request.go | 16 +- .../eventsourcing/eventstore/org.go | 59 +- .../eventsourcing/eventstore/policy.go | 18 - .../eventsourcing/eventstore/user.go | 77 +- .../eventsourcing/handler/handler.go | 5 +- .../eventsourcing/handler/org_iam_policy.go | 69 + .../handler/password_complexity_policy.go | 69 + .../repository/eventsourcing/handler/user.go | 30 +- .../repository/eventsourcing/repository.go | 39 +- .../eventsourcing/view/org_iam_policy.go | 48 + .../view/password_complexity_policy.go | 48 + internal/auth/repository/org.go | 6 +- internal/auth/repository/policy.go | 10 - internal/auth/repository/repository.go | 1 - .../config/systemdefaults/system_defaults.go | 10 - internal/iam/model/iam.go | 24 +- internal/{org => iam}/model/org_iam_policy.go | 9 - internal/iam/model/org_iam_policy_view.go | 47 + .../model/password_age_policy.go} | 1 - .../iam/model/password_age_policy_view.go | 47 + .../iam/model/password_complexity_policy.go | 32 + .../model/password_complexity_policy_view.go | 74 + .../password_complexity_policy_view_test.go} | 26 +- .../model/password_lockout_policy.go} | 5 +- .../iam/model/password_lockout_policy_view.go | 47 + .../repository/eventsourcing/eventstore.go | 260 +- .../eventsourcing/eventstore_mock_test.go | 90 +- .../eventsourcing/eventstore_test.go | 1028 +- internal/iam/repository/eventsourcing/iam.go | 224 +- .../iam/repository/eventsourcing/iam_test.go | 778 +- .../iam/repository/eventsourcing/model/iam.go | 63 +- .../eventsourcing/model/org_iam_policy.go | 63 + .../model/org_iam_policy_test.go | 125 + .../model/password_age_policy.go | 69 + .../model/password_age_policy_test.go | 128 + .../model/password_complexity_policy.go} | 95 +- .../model/password_complexity_policy_test.go | 137 + .../model/password_lockout_policy.go | 69 + .../model/password_lockout_policy_test.go | 128 + .../repository/eventsourcing/model/types.go | 12 + .../repository/view/model/org_iam_policy.go | 78 + .../view/model/org_iam_policy_query.go | 59 + .../view/model/password_age_policy.go | 81 + .../view/model/password_age_policy_query.go | 59 + .../view/model/password_complexity_policy.go | 90 + .../model/password_complexity_policy_query.go | 59 + .../view/model/password_lockout_policy.go | 81 + .../model/password_lockout_policy_query.go | 59 + .../repository/view/org_iam_policy_view.go | 32 + .../view/password_age_policy_view.go | 32 + .../view/password_complexity_policy_view.go | 32 + .../view/password_lockout_policy_view.go | 32 + .../eventsourcing/eventstore/org.go | 147 +- .../eventsourcing/eventstore/policy.go | 48 - .../eventsourcing/eventstore/user.go | 55 +- .../eventsourcing/handler/handler.go | 40 +- .../eventsourcing/handler/login_policy.go | 2 + .../eventsourcing/handler/org_iam_policy.go | 69 + .../handler/password_age_policy.go | 69 + .../handler/password_complexity_policy.go | 69 + .../handler/password_lockout_policy.go | 69 + .../repository/eventsourcing/handler/user.go | 30 +- .../repository/eventsourcing/repository.go | 12 +- .../eventsourcing/view/org_iam_policy.go | 48 + .../eventsourcing/view/password_age_policy.go | 48 + .../view/password_complexity_policy.go | 48 + .../view/password_lockout_policy.go | 48 + internal/management/repository/org.go | 21 +- internal/management/repository/policy.go | 20 - internal/management/repository/repository.go | 1 - .../eventsourcing/handler/handler.go | 4 + .../eventsourcing/handler/notify_user.go | 30 +- .../repository/eventsourcing/repository.go | 10 +- internal/org/model/org.go | 9 +- .../repository/eventsourcing/eventstore.go | 274 +- .../eventsourcing/eventstore_mock_test.go | 70 +- .../eventsourcing/eventstore_test.go | 896 +- .../org/repository/eventsourcing/model/org.go | 55 +- .../eventsourcing/model/org_iam_policy.go | 60 +- .../model/password_age_policy.go | 24 + .../model/password_age_policy_test.go | 86 + .../model/password_complexity_policy.go | 24 + .../model/password_complexity_policy_test.go | 86 + .../model/password_lockout_policy.go | 24 + .../model/password_lockout_policy_test.go | 86 + .../repository/eventsourcing/model/types.go | 12 + .../eventsourcing/org_iam_policy.go | 7 +- .../eventsourcing/org_iam_policy_test.go | 23 +- .../eventsourcing/password_age_policy.go | 76 + .../eventsourcing/password_age_policy_test.go | 258 + .../password_complexity_policy.go | 76 + .../password_complexity_policy_test.go | 258 + .../eventsourcing/password_lockout_policy.go | 76 + .../password_lockout_policy_test.go | 258 + internal/policy/default.go | 22 - internal/policy/model/policy_complexity.go | 56 - internal/policy/model/types.go | 33 - .../policy/repository/eventsourcing/cache.go | 34 - .../repository/eventsourcing/cache_age.go | 20 - .../eventsourcing/cache_complexity.go | 20 - .../repository/eventsourcing/cache_lockout.go | 20 - .../repository/eventsourcing/eventstore.go | 38 - .../eventsourcing/eventstore_age.go | 76 - .../eventsourcing/eventstore_age_mock_test.go | 70 - .../eventsourcing/eventstore_age_test.go | 169 - .../eventsourcing/eventstore_complexity.go | 85 - .../eventstore_complexity_mock_test.go | 64 - .../eventstore_complexity_test.go | 188 - .../eventsourcing/eventstore_lockout.go | 76 - .../eventstore_lockout_mock_test.go | 64 - .../eventsourcing/eventstore_lockout_test.go | 169 - .../repository/eventsourcing/model_age.go | 80 - .../repository/eventsourcing/model_lockout.go | 80 - .../repository/eventsourcing/policy_age.go | 51 - .../eventsourcing/policy_age_test.go | 268 - .../eventsourcing/policy_complexity.go | 52 - .../eventsourcing/policy_complexity_test.go | 268 - .../eventsourcing/policy_lockout.go | 53 - .../eventsourcing/policy_lockout_test.go | 268 - internal/setup/config.go | 18 +- internal/setup/setup.go | 12 +- internal/setup/step.go | 2 +- internal/setup/step1.go | 55 +- internal/setup/step2.go | 69 +- internal/setup/step3.go | 57 + internal/setup/step4.go | 57 + internal/setup/step5.go | 57 + internal/static/i18n/de.yaml | 32 + internal/static/i18n/en.yaml | 32 + .../login/handler/external_login_handler.go | 2 +- .../handler/external_register_handler.go | 2 +- .../password_complexity_policy_handler.go | 8 +- internal/ui/login/handler/policy_handler.go | 11 +- .../ui/login/handler/register_org_handler.go | 4 +- internal/user/model/password.go | 4 +- internal/user/model/user.go | 6 +- internal/user/model/user_human.go | 5 +- .../repository/eventsourcing/eventstore.go | 32 +- .../eventsourcing/eventstore_test.go | 105 +- .../user/repository/view/model/notify_user.go | 3 +- internal/user/repository/view/model/user.go | 3 +- migrations/cockroach/V1.17__policies.sql | 173 + pkg/grpc/admin/admin.pb.authoptions.go | 46 +- pkg/grpc/admin/admin.pb.go | 3589 +++-- pkg/grpc/admin/admin.pb.gw.go | 594 +- pkg/grpc/admin/admin.pb.validate.go | 997 +- pkg/grpc/admin/admin.swagger.json | 483 +- pkg/grpc/admin/mock/admin.proto.mock.go | 222 +- pkg/grpc/admin/proto/admin.proto | 194 +- .../management/management.pb.authoptions.go | 145 +- pkg/grpc/management/management.pb.go | 11947 ++++++++-------- pkg/grpc/management/management.pb.gw.go | 2052 +-- pkg/grpc/management/management.pb.validate.go | 1910 ++- .../management/mock/management.proto.mock.go | 216 +- pkg/grpc/management/proto/management.proto | 499 +- 248 files changed, 23960 insertions(+), 13843 deletions(-) create mode 100644 console/src/app/modules/policies/org-iam-policy/org-iam-policy-routing.module.ts create mode 100644 console/src/app/modules/policies/org-iam-policy/org-iam-policy.component.html rename console/src/app/modules/policies/{password-iam-policy/password-iam-policy.component.scss => org-iam-policy/org-iam-policy.component.scss} (87%) rename console/src/app/modules/policies/{password-iam-policy/password-iam-policy.component.spec.ts => org-iam-policy/org-iam-policy.component.spec.ts} (52%) create mode 100644 console/src/app/modules/policies/org-iam-policy/org-iam-policy.component.ts rename console/src/app/modules/policies/{password-iam-policy/password-iam-policy.module.ts => org-iam-policy/org-iam-policy.module.ts} (78%) delete mode 100644 console/src/app/modules/policies/password-iam-policy/password-iam-policy-routing.module.ts delete mode 100644 console/src/app/modules/policies/password-iam-policy/password-iam-policy.component.html delete mode 100644 console/src/app/modules/policies/password-iam-policy/password-iam-policy.component.ts delete mode 100644 console/src/app/modules/policies/policy-component-action.enum.ts create mode 100644 internal/admin/repository/eventsourcing/handler/org_iam_policy.go create mode 100644 internal/admin/repository/eventsourcing/handler/password_age_policy.go create mode 100644 internal/admin/repository/eventsourcing/handler/password_complexity_policy.go create mode 100644 internal/admin/repository/eventsourcing/handler/password_lockout_policy.go create mode 100644 internal/admin/repository/eventsourcing/view/org_iam_policy.go create mode 100644 internal/admin/repository/eventsourcing/view/password_age_policy.go create mode 100644 internal/admin/repository/eventsourcing/view/password_complexity_policy.go create mode 100644 internal/admin/repository/eventsourcing/view/password_lockout_policy.go create mode 100644 internal/api/grpc/admin/password_age_policy.go create mode 100644 internal/api/grpc/admin/password_age_policy_converter.go create mode 100644 internal/api/grpc/admin/password_complexity_policy.go create mode 100644 internal/api/grpc/admin/password_complexity_policy_converter.go create mode 100644 internal/api/grpc/admin/password_lockout_policy.go create mode 100644 internal/api/grpc/admin/password_lockout_policy_converter.go create mode 100644 internal/api/grpc/management/password_age_policy.go create mode 100644 internal/api/grpc/management/password_age_policy_converter.go create mode 100644 internal/api/grpc/management/password_complexity_policy.go create mode 100644 internal/api/grpc/management/password_complexity_policy_converter.go create mode 100644 internal/api/grpc/management/password_lockout_policy.go create mode 100644 internal/api/grpc/management/password_lockout_policy_converter.go delete mode 100644 internal/api/grpc/management/policy.go delete mode 100644 internal/api/grpc/management/policy_age_converter.go delete mode 100644 internal/api/grpc/management/policy_complexity_converter.go delete mode 100644 internal/api/grpc/management/policy_lockout_converter.go delete mode 100644 internal/auth/repository/eventsourcing/eventstore/policy.go create mode 100644 internal/auth/repository/eventsourcing/handler/org_iam_policy.go create mode 100644 internal/auth/repository/eventsourcing/handler/password_complexity_policy.go create mode 100644 internal/auth/repository/eventsourcing/view/org_iam_policy.go create mode 100644 internal/auth/repository/eventsourcing/view/password_complexity_policy.go delete mode 100644 internal/auth/repository/policy.go rename internal/{org => iam}/model/org_iam_policy.go (59%) create mode 100644 internal/iam/model/org_iam_policy_view.go rename internal/{policy/model/policy_age.go => iam/model/password_age_policy.go} (90%) create mode 100644 internal/iam/model/password_age_policy_view.go create mode 100644 internal/iam/model/password_complexity_policy.go create mode 100644 internal/iam/model/password_complexity_policy_view.go rename internal/{policy/model/policy_complecity_test.go => iam/model/password_complexity_policy_view_test.go} (85%) rename internal/{policy/model/policy_lockout.go => iam/model/password_lockout_policy.go} (64%) create mode 100644 internal/iam/model/password_lockout_policy_view.go create mode 100644 internal/iam/repository/eventsourcing/model/org_iam_policy.go create mode 100644 internal/iam/repository/eventsourcing/model/org_iam_policy_test.go create mode 100644 internal/iam/repository/eventsourcing/model/password_age_policy.go create mode 100644 internal/iam/repository/eventsourcing/model/password_age_policy_test.go rename internal/{policy/repository/eventsourcing/model_complexity.go => iam/repository/eventsourcing/model/password_complexity_policy.go} (54%) create mode 100644 internal/iam/repository/eventsourcing/model/password_complexity_policy_test.go create mode 100644 internal/iam/repository/eventsourcing/model/password_lockout_policy.go create mode 100644 internal/iam/repository/eventsourcing/model/password_lockout_policy_test.go create mode 100644 internal/iam/repository/view/model/org_iam_policy.go create mode 100644 internal/iam/repository/view/model/org_iam_policy_query.go create mode 100644 internal/iam/repository/view/model/password_age_policy.go create mode 100644 internal/iam/repository/view/model/password_age_policy_query.go create mode 100644 internal/iam/repository/view/model/password_complexity_policy.go create mode 100644 internal/iam/repository/view/model/password_complexity_policy_query.go create mode 100644 internal/iam/repository/view/model/password_lockout_policy.go create mode 100644 internal/iam/repository/view/model/password_lockout_policy_query.go create mode 100644 internal/iam/repository/view/org_iam_policy_view.go create mode 100644 internal/iam/repository/view/password_age_policy_view.go create mode 100644 internal/iam/repository/view/password_complexity_policy_view.go create mode 100644 internal/iam/repository/view/password_lockout_policy_view.go delete mode 100644 internal/management/repository/eventsourcing/eventstore/policy.go create mode 100644 internal/management/repository/eventsourcing/handler/org_iam_policy.go create mode 100644 internal/management/repository/eventsourcing/handler/password_age_policy.go create mode 100644 internal/management/repository/eventsourcing/handler/password_complexity_policy.go create mode 100644 internal/management/repository/eventsourcing/handler/password_lockout_policy.go create mode 100644 internal/management/repository/eventsourcing/view/org_iam_policy.go create mode 100644 internal/management/repository/eventsourcing/view/password_age_policy.go create mode 100644 internal/management/repository/eventsourcing/view/password_complexity_policy.go create mode 100644 internal/management/repository/eventsourcing/view/password_lockout_policy.go delete mode 100644 internal/management/repository/policy.go create mode 100644 internal/org/repository/eventsourcing/model/password_age_policy.go create mode 100644 internal/org/repository/eventsourcing/model/password_age_policy_test.go create mode 100644 internal/org/repository/eventsourcing/model/password_complexity_policy.go create mode 100644 internal/org/repository/eventsourcing/model/password_complexity_policy_test.go create mode 100644 internal/org/repository/eventsourcing/model/password_lockout_policy.go create mode 100644 internal/org/repository/eventsourcing/model/password_lockout_policy_test.go create mode 100644 internal/org/repository/eventsourcing/password_age_policy.go create mode 100644 internal/org/repository/eventsourcing/password_age_policy_test.go create mode 100644 internal/org/repository/eventsourcing/password_complexity_policy.go create mode 100644 internal/org/repository/eventsourcing/password_complexity_policy_test.go create mode 100644 internal/org/repository/eventsourcing/password_lockout_policy.go create mode 100644 internal/org/repository/eventsourcing/password_lockout_policy_test.go delete mode 100644 internal/policy/default.go delete mode 100644 internal/policy/model/policy_complexity.go delete mode 100644 internal/policy/model/types.go delete mode 100644 internal/policy/repository/eventsourcing/cache.go delete mode 100644 internal/policy/repository/eventsourcing/cache_age.go delete mode 100644 internal/policy/repository/eventsourcing/cache_complexity.go delete mode 100644 internal/policy/repository/eventsourcing/cache_lockout.go delete mode 100644 internal/policy/repository/eventsourcing/eventstore.go delete mode 100644 internal/policy/repository/eventsourcing/eventstore_age.go delete mode 100644 internal/policy/repository/eventsourcing/eventstore_age_mock_test.go delete mode 100644 internal/policy/repository/eventsourcing/eventstore_age_test.go delete mode 100644 internal/policy/repository/eventsourcing/eventstore_complexity.go delete mode 100644 internal/policy/repository/eventsourcing/eventstore_complexity_mock_test.go delete mode 100644 internal/policy/repository/eventsourcing/eventstore_complexity_test.go delete mode 100644 internal/policy/repository/eventsourcing/eventstore_lockout.go delete mode 100644 internal/policy/repository/eventsourcing/eventstore_lockout_mock_test.go delete mode 100644 internal/policy/repository/eventsourcing/eventstore_lockout_test.go delete mode 100644 internal/policy/repository/eventsourcing/model_age.go delete mode 100644 internal/policy/repository/eventsourcing/model_lockout.go delete mode 100644 internal/policy/repository/eventsourcing/policy_age.go delete mode 100644 internal/policy/repository/eventsourcing/policy_age_test.go delete mode 100644 internal/policy/repository/eventsourcing/policy_complexity.go delete mode 100644 internal/policy/repository/eventsourcing/policy_complexity_test.go delete mode 100644 internal/policy/repository/eventsourcing/policy_lockout.go delete mode 100644 internal/policy/repository/eventsourcing/policy_lockout_test.go create mode 100644 internal/setup/step3.go create mode 100644 internal/setup/step4.go create mode 100644 internal/setup/step5.go create mode 100644 migrations/cockroach/V1.17__policies.sql diff --git a/cmd/zitadel/setup.yaml b/cmd/zitadel/setup.yaml index 3db9f42f6d..379a71f040 100644 --- a/cmd/zitadel/setup.yaml +++ b/cmd/zitadel/setup.yaml @@ -73,8 +73,21 @@ SetUp: DevMode: $ZITADEL_CONSOLE_DEV_MODE Owners: - 'zitadel-admin@caos.ch' - #TODO: label policy - # Step2: - # DefaulLabelPolicy: - # PrimaryColor: green - # SecondaryColor: red \ No newline at end of file + Step2: + DefaultPasswordComplexityPolicy: + MinLength: 8 + HasLowercase: true + HasUppercase: true + HasSymbol: true + HasNumber: true + Step3: + DefaultPasswordAgePolicy: + MaxAgeDays: 0 + ExpireWarnDays: 0 + Step4: + DefaultPasswordLockoutPolicy: + MaxAttempts: 5 + ShowLockOutFailures: false + Step5: + DefaultOrgIAMPolicy: + UserLoginMustBeDomain: true \ No newline at end of file diff --git a/cmd/zitadel/system-defaults.yaml b/cmd/zitadel/system-defaults.yaml index 330bac863d..4a406784b7 100644 --- a/cmd/zitadel/system-defaults.yaml +++ b/cmd/zitadel/system-defaults.yaml @@ -56,25 +56,6 @@ SystemDefaults: MfaInitSkip: 720h #30d MfaSoftwareCheck: 18h MfaHardwareCheck: 12h - DefaultPolicies: - Age: - Description: Standard age policy - MaxAgeDays: 365 - ExpireWarnDays: 10 - Complexity: - Description: Standard complexity policy - MinLength: 8 - HasLowercase: true - HasUppercase: false - HasNumber: true - HasSymbol: true - Lockout: - Description: Standard lockout policy - MaxAttempts: 5 - ShowLockOutFailures: true - OrgIam: - Description: Standard org policy - UserLoginMustBeDomain: true IamID: 'IAM' DomainVerification: VerificationKey: diff --git a/console/src/app/modules/accounts-card/accounts-card.component.scss b/console/src/app/modules/accounts-card/accounts-card.component.scss index 2494389039..f308d56de5 100644 --- a/console/src/app/modules/accounts-card/accounts-card.component.scss +++ b/console/src/app/modules/accounts-card/accounts-card.component.scss @@ -42,6 +42,8 @@ flex-direction: column; width: 100%; padding: .5rem 0; + max-height: 310px; + overflow-y: auto; border-top: 1px solid rgba(#8795a1, .3); border-bottom: 1px solid rgba(#8795a1, .3); diff --git a/console/src/app/modules/detail-layout/detail-layout.component.scss b/console/src/app/modules/detail-layout/detail-layout.component.scss index 65abe29721..bf909abc65 100644 --- a/console/src/app/modules/detail-layout/detail-layout.component.scss +++ b/console/src/app/modules/detail-layout/detail-layout.component.scss @@ -40,7 +40,8 @@ margin-bottom: 2rem; h1 { - font-size: 1.2rem; + font-size: 1.5rem; + margin-top: 10px; } .desc { diff --git a/console/src/app/modules/idp-table/idp-table.component.html b/console/src/app/modules/idp-table/idp-table.component.html index f1750e8fec..9b528a60ae 100644 --- a/console/src/app/modules/idp-table/idp-table.component.html +++ b/console/src/app/modules/idp-table/idp-table.component.html @@ -16,8 +16,7 @@ *ngIf="selection.hasValue() && serviceType!=PolicyComponentServiceType.MGMT" [disabled]="disabled"> - + add{{ 'ACTIONS.NEW' | translate }} diff --git a/console/src/app/modules/policies/login-policy/login-policy.component.html b/console/src/app/modules/policies/login-policy/login-policy.component.html index 245b8f18e6..28baabcf96 100644 --- a/console/src/app/modules/policies/login-policy/login-policy.component.html +++ b/console/src/app/modules/policies/login-policy/login-policy.component.html @@ -1,62 +1,64 @@ - - +
{{'ORG.POLICY.DATA.ALLOWUSERNAMEPASSWORD' | translate}} + [(ngModel)]="loginData.allowUsernamePassword">
{{'ORG.POLICY.DATA.ALLOWREGISTER' | translate}} - +
{{'ORG.POLICY.DATA.ALLOWEXTERNALIDP' | translate}} + [(ngModel)]="loginData.allowExternalIdp">
-

{{'LOGINPOLICY.IDPS' | translate}}

+

{{'LOGINPOLICY.IDPS' | translate}}

- + remove_circle {{idp.name}} {{ 'IDP.TYPE' | translate }}: {{ 'IDP.TYPES.'+idp.type | translate }} {{ 'IDP.ID' | translate }}: {{idp.idpConfigId}}
-
+
add
- + + [disabled]="([serviceType == PolicyComponentServiceType.ADMIN ? 'iam.idp.write' : serviceType == PolicyComponentServiceType.MGMT ? 'org.idp.write' : ''] | hasRole | async) == false"> diff --git a/console/src/app/modules/policies/login-policy/login-policy.component.scss b/console/src/app/modules/policies/login-policy/login-policy.component.scss index 145f6994ca..4010bfe8d8 100644 --- a/console/src/app/modules/policies/login-policy/login-policy.component.scss +++ b/console/src/app/modules/policies/login-policy/login-policy.component.scss @@ -1,3 +1,8 @@ +.default { + color: #5282c1; + margin-top: 0; +} + .content { padding-top: 1rem; display: flex; @@ -7,21 +12,15 @@ .row { display: flex; align-items: center; - padding: .5rem 0; + padding: .3rem 0; .left-desc { - color: var(--grey); font-size: .9rem; } .fill-space { flex: 1; } - - .length-wrapper { - display: flex; - align-items: center; - } } } @@ -37,6 +36,10 @@ } } +.idp-table-card { + width: 100%; +} + .subheader { width: 100%; } diff --git a/console/src/app/modules/policies/login-policy/login-policy.component.ts b/console/src/app/modules/policies/login-policy/login-policy.component.ts index 6a35916f92..0a7ff87229 100644 --- a/console/src/app/modules/policies/login-policy/login-policy.component.ts +++ b/console/src/app/modules/policies/login-policy/login-policy.component.ts @@ -1,7 +1,6 @@ import { Component, Injector, OnDestroy, Type } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { ActivatedRoute, Router } from '@angular/router'; -import { Empty } from 'google-protobuf/google/protobuf/empty_pb'; +import { ActivatedRoute } from '@angular/router'; import { Subscription } from 'rxjs'; import { switchMap } from 'rxjs/operators'; import { @@ -39,7 +38,6 @@ export class LoginPolicyComponent implements OnDestroy { public idps: MgmtIdpProviderView.AsObject[] | AdminIdpProviderView.AsObject[] = []; constructor( private route: ActivatedRoute, - private router: Router, private toast: ToastService, private dialog: MatDialog, private injector: Injector, @@ -107,7 +105,11 @@ export class LoginPolicyComponent implements OnDestroy { mgmtreq.setAllowExternalIdp(this.loginData.allowExternalIdp); mgmtreq.setAllowRegister(this.loginData.allowRegister); mgmtreq.setAllowUsernamePassword(this.loginData.allowUsernamePassword); - return (this.service as ManagementService).UpdateLoginPolicy(mgmtreq); + if ((this.loginData as LoginPolicyView.AsObject).pb_default) { + return (this.service as ManagementService).CreateLoginPolicy(mgmtreq); + } else { + return (this.service as ManagementService).UpdateLoginPolicy(mgmtreq); + } case PolicyComponentServiceType.ADMIN: const adminreq = new DefaultLoginPolicy(); adminreq.setAllowExternalIdp(this.loginData.allowExternalIdp); @@ -119,25 +121,22 @@ export class LoginPolicyComponent implements OnDestroy { public savePolicy(): void { this.updateData().then(() => { - switch (this.serviceType) { - case PolicyComponentServiceType.MGMT: - this.router.navigate(['org']); - break; - case PolicyComponentServiceType.ADMIN: - this.router.navigate(['iam']); - break; - } + this.toast.showInfo('ORG.POLICY.LOGIN_POLICY.SAVED', true); }).catch(error => { this.toast.showError(error); }); } - public deletePolicy(): Promise { - switch (this.serviceType) { - case PolicyComponentServiceType.MGMT: - return (this.service as ManagementService).RemoveLoginPolicy(); - case PolicyComponentServiceType.ADMIN: - return (this.service as AdminService).GetDefaultLoginPolicy(); + public removePolicy(): void { + if (this.serviceType === PolicyComponentServiceType.MGMT) { + (this.service as ManagementService).RemoveLoginPolicy().then(() => { + this.toast.showInfo('ORG.POLICY.TOAST.RESETSUCCESS', true); + setTimeout(() => { + this.getData(); + }, 1000); + }).catch(error => { + this.toast.showError(error); + }); } } @@ -179,15 +178,11 @@ export class LoginPolicyComponent implements OnDestroy { } } - public get backroutes(): string[] { - switch (this.serviceType) { - case PolicyComponentServiceType.MGMT: - return ['/org']; - case PolicyComponentServiceType.ADMIN: - return ['/iam']; - break; + public get isDefault(): boolean { + if (this.loginData && this.serviceType === PolicyComponentServiceType.MGMT) { + return (this.loginData as LoginPolicyView.AsObject).pb_default; + } else { + return false; } - return []; } - } diff --git a/console/src/app/modules/policies/org-iam-policy/org-iam-policy-routing.module.ts b/console/src/app/modules/policies/org-iam-policy/org-iam-policy-routing.module.ts new file mode 100644 index 0000000000..f27987683c --- /dev/null +++ b/console/src/app/modules/policies/org-iam-policy/org-iam-policy-routing.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { OrgIamPolicyComponent } from './org-iam-policy.component'; + +const routes: Routes = [ + { + path: '', + component: OrgIamPolicyComponent, + data: { + animation: 'DetailPage', + }, + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class OrgIamPolicyRoutingModule { } diff --git a/console/src/app/modules/policies/org-iam-policy/org-iam-policy.component.html b/console/src/app/modules/policies/org-iam-policy/org-iam-policy.component.html new file mode 100644 index 0000000000..1ae2416630 --- /dev/null +++ b/console/src/app/modules/policies/org-iam-policy/org-iam-policy.component.html @@ -0,0 +1,27 @@ + +

{{'ORG.POLICY.DEFAULTLABEL' | translate}}

+ + + + + +
+
+ {{'ORG.POLICY.DATA.USERLOGINMUSTBEDOMAIN' | translate}} + + + +
+
+ +
+ +
+
\ No newline at end of file diff --git a/console/src/app/modules/policies/password-iam-policy/password-iam-policy.component.scss b/console/src/app/modules/policies/org-iam-policy/org-iam-policy.component.scss similarity index 87% rename from console/src/app/modules/policies/password-iam-policy/password-iam-policy.component.scss rename to console/src/app/modules/policies/org-iam-policy/org-iam-policy.component.scss index 3e48cbe4cd..53d79e16f9 100644 --- a/console/src/app/modules/policies/password-iam-policy/password-iam-policy.component.scss +++ b/console/src/app/modules/policies/org-iam-policy/org-iam-policy.component.scss @@ -1,3 +1,8 @@ +.default { + color: #5282c1; + margin-top: 0; +} + .content { padding-top: 1rem; display: flex; @@ -7,10 +12,9 @@ .row { display: flex; align-items: center; - padding: .5rem 0; + padding: .3rem 0; .left-desc { - color: var(--grey); font-size: .9rem; } diff --git a/console/src/app/modules/policies/password-iam-policy/password-iam-policy.component.spec.ts b/console/src/app/modules/policies/org-iam-policy/org-iam-policy.component.spec.ts similarity index 52% rename from console/src/app/modules/policies/password-iam-policy/password-iam-policy.component.spec.ts rename to console/src/app/modules/policies/org-iam-policy/org-iam-policy.component.spec.ts index 455f9fe36e..d19b9463fa 100644 --- a/console/src/app/modules/policies/password-iam-policy/password-iam-policy.component.spec.ts +++ b/console/src/app/modules/policies/org-iam-policy/org-iam-policy.component.spec.ts @@ -1,20 +1,20 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { PasswordIamPolicyComponent } from './password-iam-policy.component'; +import { OrgIamPolicyComponent } from './org-iam-policy.component'; -describe('PasswordIamPolicyComponent', () => { - let component: PasswordIamPolicyComponent; - let fixture: ComponentFixture; +describe('OrgIamPolicyComponent', () => { + let component: OrgIamPolicyComponent; + let fixture: ComponentFixture; beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [PasswordIamPolicyComponent], + declarations: [OrgIamPolicyComponent], }) .compileComponents(); })); beforeEach(() => { - fixture = TestBed.createComponent(PasswordIamPolicyComponent); + fixture = TestBed.createComponent(OrgIamPolicyComponent); component = fixture.componentInstance; fixture.detectChanges(); }); diff --git a/console/src/app/modules/policies/org-iam-policy/org-iam-policy.component.ts b/console/src/app/modules/policies/org-iam-policy/org-iam-policy.component.ts new file mode 100644 index 0000000000..75fb428f0d --- /dev/null +++ b/console/src/app/modules/policies/org-iam-policy/org-iam-policy.component.ts @@ -0,0 +1,132 @@ +import { Component, Injector, Input, OnDestroy, Type } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { Subscription } from 'rxjs'; +import { switchMap } from 'rxjs/operators'; +import { OrgIamPolicyView as AdminOrgIamPolicyView } from 'src/app/proto/generated/admin_pb'; +import { Org } from 'src/app/proto/generated/auth_pb'; +import { OrgIamPolicyView as MgmtOrgIamPolicyView } from 'src/app/proto/generated/management_pb'; +import { AdminService } from 'src/app/services/admin.service'; +import { ManagementService } from 'src/app/services/mgmt.service'; +import { StorageService } from 'src/app/services/storage.service'; +import { ToastService } from 'src/app/services/toast.service'; + +import { PolicyComponentServiceType } from '../policy-component-types.enum'; + +@Component({ + selector: 'app-org-iam-policy', + templateUrl: './org-iam-policy.component.html', + styleUrls: ['./org-iam-policy.component.scss'], +}) +export class OrgIamPolicyComponent implements OnDestroy { + @Input() service!: AdminService; + private managementService!: ManagementService; + public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT; + + public iamData!: AdminOrgIamPolicyView.AsObject | MgmtOrgIamPolicyView.AsObject; + + private sub: Subscription = new Subscription(); + private org!: Org.AsObject; + + public PolicyComponentServiceType: any = PolicyComponentServiceType; + + constructor( + private route: ActivatedRoute, + private toast: ToastService, + private sessionStorage: StorageService, + private injector: Injector, + private adminService: AdminService, + ) { + const temporg = this.sessionStorage.getItem('organization') as Org.AsObject; + if (temporg) { + this.org = temporg; + } + this.sub = this.route.data.pipe(switchMap(data => { + this.serviceType = data.serviceType; + if (this.serviceType === PolicyComponentServiceType.MGMT) { + this.managementService = this.injector.get(ManagementService as Type); + } + return this.route.params; + })).subscribe(_ => { + this.getData().then(data => { + if (data) { + this.iamData = data.toObject(); + } + }); + }); + } + + public ngOnDestroy(): void { + this.sub.unsubscribe(); + } + + private async getData(): Promise { + switch (this.serviceType) { + case PolicyComponentServiceType.MGMT: + return this.managementService.GetMyOrgIamPolicy(); + case PolicyComponentServiceType.ADMIN: + if (this.org?.id) { + return this.adminService.GetOrgIamPolicy(this.org.id); + } + break; + } + } + + public savePolicy(): void { + switch (this.serviceType) { + case PolicyComponentServiceType.MGMT: + if ((this.iamData as MgmtOrgIamPolicyView.AsObject).pb_default) { + this.adminService.CreateOrgIamPolicy( + this.org.id, + this.iamData.userLoginMustBeDomain, + ).then(() => { + this.toast.showInfo('ORG.POLICY.TOAST.SET', true); + }).catch(error => { + this.toast.showError(error); + }); + break; + } else { + this.adminService.UpdateOrgIamPolicy( + this.org.id, + this.iamData.userLoginMustBeDomain, + ).then(() => { + this.toast.showInfo('ORG.POLICY.TOAST.SET', true); + }).catch(error => { + this.toast.showError(error); + }); + break; + } + case PolicyComponentServiceType.ADMIN: + // update Default org iam policy? + this.adminService.UpdateOrgIamPolicy( + this.org.id, + this.iamData.userLoginMustBeDomain, + ).then(() => { + this.toast.showInfo('ORG.POLICY.TOAST.SET', true); + }).catch(error => { + this.toast.showError(error); + }); + break; + } + } + + public removePolicy(): void { + if (this.serviceType === PolicyComponentServiceType.MGMT) { + this.adminService.RemoveOrgIamPolicy(this.org.id).then(() => { + this.toast.showInfo('ORG.POLICY.TOAST.RESETSUCCESS', true); + setTimeout(() => { + this.getData(); + }, 1000); + }).catch(error => { + this.toast.showError(error); + }); + } + } + + public get isDefault(): boolean { + if (this.iamData && this.serviceType === PolicyComponentServiceType.MGMT) { + return (this.iamData as MgmtOrgIamPolicyView.AsObject).pb_default; + } else { + return false; + } + } +} diff --git a/console/src/app/modules/policies/password-iam-policy/password-iam-policy.module.ts b/console/src/app/modules/policies/org-iam-policy/org-iam-policy.module.ts similarity index 78% rename from console/src/app/modules/policies/password-iam-policy/password-iam-policy.module.ts rename to console/src/app/modules/policies/org-iam-policy/org-iam-policy.module.ts index 1bf5b378e9..a4d4508e86 100644 --- a/console/src/app/modules/policies/password-iam-policy/password-iam-policy.module.ts +++ b/console/src/app/modules/policies/org-iam-policy/org-iam-policy.module.ts @@ -11,13 +11,13 @@ import { TranslateModule } from '@ngx-translate/core'; import { HasRoleModule } from 'src/app/directives/has-role/has-role.module'; import { DetailLayoutModule } from 'src/app/modules/detail-layout/detail-layout.module'; -import { PasswordIamPolicyRoutingModule } from './password-iam-policy-routing.module'; -import { PasswordIamPolicyComponent } from './password-iam-policy.component'; +import { OrgIamPolicyRoutingModule } from './org-iam-policy-routing.module'; +import { OrgIamPolicyComponent } from './org-iam-policy.component'; @NgModule({ - declarations: [PasswordIamPolicyComponent], + declarations: [OrgIamPolicyComponent], imports: [ - PasswordIamPolicyRoutingModule, + OrgIamPolicyRoutingModule, CommonModule, FormsModule, MatInputModule, @@ -31,4 +31,4 @@ import { PasswordIamPolicyComponent } from './password-iam-policy.component'; DetailLayoutModule, ], }) -export class PasswordIamPolicyModule { } +export class OrgIamPolicyModule { } diff --git a/console/src/app/modules/policies/password-age-policy/password-age-policy-routing.module.ts b/console/src/app/modules/policies/password-age-policy/password-age-policy-routing.module.ts index 3e39b87b4f..1fc2b16fe6 100644 --- a/console/src/app/modules/policies/password-age-policy/password-age-policy-routing.module.ts +++ b/console/src/app/modules/policies/password-age-policy/password-age-policy-routing.module.ts @@ -1,7 +1,6 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { PolicyComponentAction } from '../policy-component-action.enum'; import { PasswordAgePolicyComponent } from './password-age-policy.component'; const routes: Routes = [ @@ -10,15 +9,6 @@ const routes: Routes = [ component: PasswordAgePolicyComponent, data: { animation: 'DetailPage', - action: PolicyComponentAction.MODIFY, - }, - }, - { - path: 'create', - component: PasswordAgePolicyComponent, - data: { - animation: 'DetailPage', - action: PolicyComponentAction.CREATE, }, }, ]; diff --git a/console/src/app/modules/policies/password-age-policy/password-age-policy.component.html b/console/src/app/modules/policies/password-age-policy/password-age-policy.component.html index 0c30ebe6b3..50bffc0794 100644 --- a/console/src/app/modules/policies/password-age-policy/password-age-policy.component.html +++ b/console/src/app/modules/policies/password-age-policy/password-age-policy.component.html @@ -1,17 +1,14 @@ - - -
- - {{ 'ORG.POLICY.DATA.DESCRIPTION' | translate }} - -
{{'ORG.POLICY.DATA.EXPIREWARNDAYS' | translate}} diff --git a/console/src/app/modules/policies/password-age-policy/password-age-policy.component.scss b/console/src/app/modules/policies/password-age-policy/password-age-policy.component.scss index 3e48cbe4cd..6c63cab893 100644 --- a/console/src/app/modules/policies/password-age-policy/password-age-policy.component.scss +++ b/console/src/app/modules/policies/password-age-policy/password-age-policy.component.scss @@ -7,7 +7,7 @@ .row { display: flex; align-items: center; - padding: .5rem 0; + padding: .3rem 0; .left-desc { color: var(--grey); @@ -21,6 +21,7 @@ .length-wrapper { display: flex; align-items: center; + margin-right: -.6rem; } } } diff --git a/console/src/app/modules/policies/password-age-policy/password-age-policy.component.ts b/console/src/app/modules/policies/password-age-policy/password-age-policy.component.ts index edf5c3e2f8..4b45707df6 100644 --- a/console/src/app/modules/policies/password-age-policy/password-age-policy.component.ts +++ b/console/src/app/modules/policies/password-age-policy/password-age-policy.component.ts @@ -1,17 +1,14 @@ -import { Component, OnDestroy } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; +import { Component, Injector, OnDestroy, Type } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; import { Subscription } from 'rxjs'; import { switchMap } from 'rxjs/operators'; -import { - OrgIamPolicy, - PasswordAgePolicy, - PasswordComplexityPolicy, - PasswordLockoutPolicy, -} from 'src/app/proto/generated/management_pb'; +import { DefaultPasswordAgePolicyView } from 'src/app/proto/generated/admin_pb'; +import { PasswordAgePolicyView } from 'src/app/proto/generated/management_pb'; +import { AdminService } from 'src/app/services/admin.service'; import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; -import { PolicyComponentAction } from '../policy-component-action.enum'; +import { PolicyComponentServiceType } from '../policy-component-types.enum'; @Component({ @@ -20,37 +17,37 @@ import { PolicyComponentAction } from '../policy-component-action.enum'; styleUrls: ['./password-age-policy.component.scss'], }) export class PasswordAgePolicyComponent implements OnDestroy { - public title: string = ''; - public desc: string = ''; + public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT; + public service!: AdminService | ManagementService; - componentAction: PolicyComponentAction = PolicyComponentAction.CREATE; - - public PolicyComponentAction: any = PolicyComponentAction; - - public ageData!: PasswordAgePolicy.AsObject; + public ageData!: PasswordAgePolicyView.AsObject | DefaultPasswordAgePolicyView.AsObject; private sub: Subscription = new Subscription(); + public PolicyComponentServiceType: any = PolicyComponentServiceType; constructor( private route: ActivatedRoute, - private mgmtService: ManagementService, - private router: Router, private toast: ToastService, + private injector: Injector, ) { this.sub = this.route.data.pipe(switchMap(data => { - this.componentAction = data.action; - return this.route.params; - })).subscribe(params => { - this.title = 'ORG.POLICY.PWD_AGE.TITLECREATE'; - this.desc = 'ORG.POLICY.PWD_AGE.DESCRIPTIONCREATE'; - - if (this.componentAction === PolicyComponentAction.MODIFY) { - this.getData(params).then(data => { - if (data) { - this.ageData = data.toObject() as PasswordAgePolicy.AsObject; - } - }); + this.serviceType = data.serviceType; + switch (this.serviceType) { + case PolicyComponentServiceType.MGMT: + this.service = this.injector.get(ManagementService as Type); + break; + case PolicyComponentServiceType.ADMIN: + this.service = this.injector.get(AdminService as Type); + break; } + + return this.route.params; + })).subscribe(() => { + this.getData().then(data => { + if (data) { + this.ageData = data.toObject(); + } + }); }); } @@ -58,19 +55,28 @@ export class PasswordAgePolicyComponent implements OnDestroy { this.sub.unsubscribe(); } - private async getData(params: any): - Promise { - this.title = 'ORG.POLICY.PWD_AGE.TITLE'; - this.desc = 'ORG.POLICY.PWD_AGE.DESCRIPTION'; - return this.mgmtService.GetPasswordAgePolicy(); + private async getData(): + Promise { + + switch (this.serviceType) { + case PolicyComponentServiceType.MGMT: + return (this.service as ManagementService).GetPasswordAgePolicy(); + case PolicyComponentServiceType.ADMIN: + return (this.service as AdminService).GetDefaultPasswordAgePolicy(); + } } - public deletePolicy(): void { - this.mgmtService.DeletePasswordAgePolicy(this.ageData.id).then(() => { - this.toast.showInfo('Successfully deleted'); - }).catch(error => { - this.toast.showError(error); - }); + public removePolicy(): void { + if (this.serviceType === PolicyComponentServiceType.MGMT) { + (this.service as ManagementService).RemovePasswordAgePolicy().then(() => { + this.toast.showInfo('ORG.POLICY.TOAST.RESETSUCCESS', true); + setTimeout(() => { + this.getData(); + }, 1000); + }).catch(error => { + this.toast.showError(error); + }); + } } public incrementExpireWarnDays(): void { @@ -98,29 +104,33 @@ export class PasswordAgePolicyComponent implements OnDestroy { } public savePolicy(): void { - if (this.componentAction === PolicyComponentAction.CREATE) { - - this.mgmtService.CreatePasswordAgePolicy( - this.ageData.description, - this.ageData.maxAgeDays, - this.ageData.expireWarnDays, - ).then(() => { - this.router.navigate(['org']); - }).catch(error => { - this.toast.showError(error); - }); - - } else if (this.componentAction === PolicyComponentAction.MODIFY) { - - this.mgmtService.UpdatePasswordAgePolicy( - this.ageData.description, - this.ageData.maxAgeDays, - this.ageData.expireWarnDays, - ).then(() => { - this.router.navigate(['org']); - }).catch(error => { - this.toast.showError(error); - }); + switch (this.serviceType) { + case PolicyComponentServiceType.MGMT: + if ((this.ageData as PasswordAgePolicyView.AsObject).pb_default) { + (this.service as ManagementService).CreatePasswordAgePolicy( + this.ageData.maxAgeDays, + this.ageData.expireWarnDays, + ).catch(error => { + this.toast.showError(error); + }); + } else { + (this.service as ManagementService).UpdatePasswordAgePolicy( + this.ageData.maxAgeDays, + this.ageData.expireWarnDays, + ).catch(error => { + this.toast.showError(error); + }); + } + break; + case PolicyComponentServiceType.ADMIN: + (this.service as AdminService).UpdateDefaultPasswordAgePolicy( + this.ageData.maxAgeDays, + this.ageData.expireWarnDays, + ).catch(error => { + this.toast.showError(error); + }); + break; } + } } diff --git a/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy-routing.module.ts b/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy-routing.module.ts index 65157f3e43..a8a893a405 100644 --- a/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy-routing.module.ts +++ b/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy-routing.module.ts @@ -1,7 +1,6 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { PolicyComponentAction } from '../policy-component-action.enum'; import { PasswordComplexityPolicyComponent } from './password-complexity-policy.component'; const routes: Routes = [ @@ -10,15 +9,6 @@ const routes: Routes = [ component: PasswordComplexityPolicyComponent, data: { animation: 'DetailPage', - action: PolicyComponentAction.MODIFY, - }, - }, - { - path: 'create', - component: PasswordComplexityPolicyComponent, - data: { - animation: 'DetailPage', - action: PolicyComponentAction.CREATE, }, }, ]; diff --git a/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.html b/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.html index 598788a46c..c107c76e34 100644 --- a/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.html +++ b/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.html @@ -1,17 +1,17 @@ - - -
- - {{ 'ORG.POLICY.DATA.DESCRIPTION' | translate }} - -
{{'ORG.POLICY.DATA.MINLENGTH' | translate}} @@ -54,7 +54,7 @@
-
\ No newline at end of file diff --git a/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.scss b/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.scss index 3e48cbe4cd..a80b1ae8f7 100644 --- a/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.scss +++ b/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.scss @@ -1,3 +1,8 @@ +.default { + color: #5282c1; + margin-top: 0; +} + .content { padding-top: 1rem; display: flex; @@ -7,10 +12,9 @@ .row { display: flex; align-items: center; - padding: .5rem 0; + padding: .3rem 0; .left-desc { - color: var(--grey); font-size: .9rem; } @@ -21,6 +25,7 @@ .length-wrapper { display: flex; align-items: center; + margin-right: -.6rem; } } } diff --git a/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.ts b/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.ts index 4cc5c6c47d..d559f97745 100644 --- a/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.ts +++ b/console/src/app/modules/policies/password-complexity-policy/password-complexity-policy.component.ts @@ -1,17 +1,14 @@ -import { Component, OnDestroy } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; +import { Component, Injector, OnDestroy, Type } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; import { Subscription } from 'rxjs'; import { switchMap } from 'rxjs/operators'; -import { - OrgIamPolicy, - PasswordAgePolicy, - PasswordComplexityPolicy, - PasswordLockoutPolicy, -} from 'src/app/proto/generated/management_pb'; +import { DefaultPasswordComplexityPolicy } from 'src/app/proto/generated/admin_pb'; +import { PasswordComplexityPolicyView } from 'src/app/proto/generated/management_pb'; +import { AdminService } from 'src/app/services/admin.service'; import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; -import { PolicyComponentAction } from '../policy-component-action.enum'; +import { PolicyComponentServiceType } from '../policy-component-types.enum'; @Component({ selector: 'app-password-policy', @@ -19,37 +16,37 @@ import { PolicyComponentAction } from '../policy-component-action.enum'; styleUrls: ['./password-complexity-policy.component.scss'], }) export class PasswordComplexityPolicyComponent implements OnDestroy { - public title: string = ''; - public desc: string = ''; + public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT; + public service!: ManagementService | AdminService; - componentAction: PolicyComponentAction = PolicyComponentAction.CREATE; - - public PolicyComponentAction: any = PolicyComponentAction; - - public complexityData!: PasswordComplexityPolicy.AsObject; + public complexityData!: PasswordComplexityPolicyView.AsObject | DefaultPasswordComplexityPolicy.AsObject; private sub: Subscription = new Subscription(); - + public PolicyComponentServiceType: any = PolicyComponentServiceType; constructor( private route: ActivatedRoute, - private mgmtService: ManagementService, - private router: Router, private toast: ToastService, + private injector: Injector, ) { this.sub = this.route.data.pipe(switchMap(data => { - this.componentAction = data.action; - return this.route.params; - })).subscribe(params => { - this.title = 'ORG.POLICY.PWD_COMPLEXITY.TITLECREATE'; - this.desc = 'ORG.POLICY.PWD_COMPLEXITY.DESCRIPTIONCREATE'; + this.serviceType = data.serviceType; - if (this.componentAction === PolicyComponentAction.MODIFY) { - this.getData(params).then(data => { - if (data) { - this.complexityData = data.toObject() as PasswordComplexityPolicy.AsObject; - } - }); + switch (this.serviceType) { + case PolicyComponentServiceType.MGMT: + this.service = this.injector.get(ManagementService as Type); + break; + case PolicyComponentServiceType.ADMIN: + this.service = this.injector.get(AdminService as Type); + break; } + + return this.route.params; + })).subscribe(() => { + this.getData().then(data => { + if (data) { + this.complexityData = data.toObject(); + } + }); }); } @@ -57,19 +54,27 @@ export class PasswordComplexityPolicyComponent implements OnDestroy { this.sub.unsubscribe(); } - private async getData(params: any): - Promise { - this.title = 'ORG.POLICY.PWD_COMPLEXITY.TITLE'; - this.desc = 'ORG.POLICY.PWD_COMPLEXITY.DESCRIPTION'; - return this.mgmtService.GetPasswordComplexityPolicy(); + private async getData(): + Promise { + switch (this.serviceType) { + case PolicyComponentServiceType.MGMT: + return (this.service as ManagementService).GetPasswordComplexityPolicy(); + case PolicyComponentServiceType.ADMIN: + return (this.service as AdminService).GetDefaultPasswordComplexityPolicy(); + } } - public deletePolicy(): void { - this.mgmtService.DeletePasswordComplexityPolicy(this.complexityData.id).then(() => { - this.toast.showInfo('Successfully deleted'); - }).catch(error => { - this.toast.showError(error); - }); + public removePolicy(): void { + if (this.service instanceof ManagementService) { + this.service.removePasswordComplexityPolicy().then(() => { + this.toast.showInfo('ORG.POLICY.TOAST.RESETSUCCESS', true); + setTimeout(() => { + this.getData(); + }, 1000); + }).catch(error => { + this.toast.showError(error); + }); + } } public incrementLength(): void { @@ -85,35 +90,56 @@ export class PasswordComplexityPolicyComponent implements OnDestroy { } public savePolicy(): void { - if (this.componentAction === PolicyComponentAction.CREATE) { + switch (this.serviceType) { + case PolicyComponentServiceType.MGMT: + if ((this.complexityData as PasswordComplexityPolicyView.AsObject).pb_default) { + (this.service as ManagementService).CreatePasswordComplexityPolicy( - this.mgmtService.CreatePasswordComplexityPolicy( - this.complexityData.description, - this.complexityData.hasLowercase, - this.complexityData.hasUppercase, - this.complexityData.hasNumber, - this.complexityData.hasSymbol, - this.complexityData.minLength, - ).then(() => { - this.router.navigate(['org']); - }).catch(error => { - this.toast.showError(error); - }); + this.complexityData.hasLowercase, + this.complexityData.hasUppercase, + this.complexityData.hasNumber, + this.complexityData.hasSymbol, + this.complexityData.minLength, + ).then(() => { + this.toast.showInfo('ORG.POLICY.TOAST.SET', true); + }).catch(error => { + this.toast.showError(error); + }); + } else { + (this.service as ManagementService).UpdatePasswordComplexityPolicy( + this.complexityData.hasLowercase, + this.complexityData.hasUppercase, + this.complexityData.hasNumber, + this.complexityData.hasSymbol, + this.complexityData.minLength, + ).then(() => { + this.toast.showInfo('ORG.POLICY.TOAST.SET', true); + }).catch(error => { + this.toast.showError(error); + }); + } + break; + case PolicyComponentServiceType.ADMIN: + (this.service as AdminService).UpdateDefaultPasswordComplexityPolicy( + this.complexityData.hasLowercase, + this.complexityData.hasUppercase, + this.complexityData.hasNumber, + this.complexityData.hasSymbol, + this.complexityData.minLength, + ).then(() => { + this.toast.showInfo('ORG.POLICY.TOAST.SET', true); + }).catch(error => { + this.toast.showError(error); + }); + break; + } + } - } else if (this.componentAction === PolicyComponentAction.MODIFY) { - - this.mgmtService.UpdatePasswordComplexityPolicy( - this.complexityData.description, - this.complexityData.hasLowercase, - this.complexityData.hasUppercase, - this.complexityData.hasNumber, - this.complexityData.hasSymbol, - this.complexityData.minLength, - ).then(() => { - this.router.navigate(['org']); - }).catch(error => { - this.toast.showError(error); - }); + public get isDefault(): boolean { + if (this.complexityData && this.serviceType === PolicyComponentServiceType.MGMT) { + return (this.complexityData as PasswordComplexityPolicyView.AsObject).pb_default; + } else { + return false; } } } diff --git a/console/src/app/modules/policies/password-iam-policy/password-iam-policy-routing.module.ts b/console/src/app/modules/policies/password-iam-policy/password-iam-policy-routing.module.ts deleted file mode 100644 index c0c86d4d2d..0000000000 --- a/console/src/app/modules/policies/password-iam-policy/password-iam-policy-routing.module.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -import { PolicyComponentAction } from '../policy-component-action.enum'; -import { PasswordIamPolicyComponent } from './password-iam-policy.component'; - -const routes: Routes = [ - { - path: '', - component: PasswordIamPolicyComponent, - data: { - animation: 'DetailPage', - action: PolicyComponentAction.MODIFY, - }, - }, - { - path: 'create', - component: PasswordIamPolicyComponent, - data: { - animation: 'DetailPage', - action: PolicyComponentAction.CREATE, - }, - }, -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule], -}) -export class PasswordIamPolicyRoutingModule { } diff --git a/console/src/app/modules/policies/password-iam-policy/password-iam-policy.component.html b/console/src/app/modules/policies/password-iam-policy/password-iam-policy.component.html deleted file mode 100644 index 5ef10571fc..0000000000 --- a/console/src/app/modules/policies/password-iam-policy/password-iam-policy.component.html +++ /dev/null @@ -1,28 +0,0 @@ - - - -
- - {{ 'ORG.POLICY.DATA.DESCRIPTION' | translate }} - - -
- {{'ORG.POLICY.DATA.USERLOGINMUSTBEDOMAIN' | translate}} - - - -
-
- -
- -
-
\ No newline at end of file diff --git a/console/src/app/modules/policies/password-iam-policy/password-iam-policy.component.ts b/console/src/app/modules/policies/password-iam-policy/password-iam-policy.component.ts deleted file mode 100644 index cf8eb91648..0000000000 --- a/console/src/app/modules/policies/password-iam-policy/password-iam-policy.component.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { Component, OnDestroy } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; -import { Subscription } from 'rxjs'; -import { switchMap } from 'rxjs/operators'; -import { - OrgIamPolicy, - PasswordAgePolicy, - PasswordComplexityPolicy, - PasswordLockoutPolicy, -} from 'src/app/proto/generated/management_pb'; -import { AdminService } from 'src/app/services/admin.service'; -import { ManagementService } from 'src/app/services/mgmt.service'; -import { StorageService } from 'src/app/services/storage.service'; -import { ToastService } from 'src/app/services/toast.service'; - -import { PolicyComponentAction } from '../policy-component-action.enum'; - -@Component({ - selector: 'app-password-iam-policy', - templateUrl: './password-iam-policy.component.html', - styleUrls: ['./password-iam-policy.component.scss'], -}) -export class PasswordIamPolicyComponent implements OnDestroy { - public title: string = ''; - public desc: string = ''; - - componentAction: PolicyComponentAction = PolicyComponentAction.CREATE; - - public PolicyComponentAction: any = PolicyComponentAction; - - public iamData!: OrgIamPolicy.AsObject; - - private sub: Subscription = new Subscription(); - - constructor( - private route: ActivatedRoute, - private mgmtService: ManagementService, - private adminService: AdminService, - private router: Router, - private toast: ToastService, - private sessionStorage: StorageService, - ) { - this.sub = this.route.data.pipe(switchMap(data => { - this.componentAction = data.action; - console.log(data.action); - return this.route.params; - })).subscribe(params => { - this.title = 'ORG.POLICY.IAM_POLICY.TITLECREATE'; - this.desc = 'ORG.POLICY.IAM_POLICY.DESCRIPTIONCREATE'; - - if (this.componentAction === PolicyComponentAction.MODIFY) { - this.getData(params).then(data => { - if (data) { - this.iamData = data.toObject() as OrgIamPolicy.AsObject; - } - }); - } - }); - } - - public ngOnDestroy(): void { - this.sub.unsubscribe(); - } - - private async getData(params: any): - Promise { - - this.title = 'ORG.POLICY.IAM_POLICY.TITLECREATE'; - this.desc = 'ORG.POLICY.IAM_POLICY.DESCRIPTIONCREATE'; - return this.mgmtService.GetMyOrgIamPolicy(); - } - - public savePolicy(): void { - if (this.componentAction === PolicyComponentAction.CREATE) { - const orgId = this.sessionStorage.getItem('organization'); - if (orgId) { - this.adminService.CreateOrgIamPolicy( - orgId, - this.iamData.description, - this.iamData.userLoginMustBeDomain, - ).then(() => { - this.router.navigate(['org']); - }).catch(error => { - this.toast.showError(error); - }); - } - } else if (this.componentAction === PolicyComponentAction.MODIFY) { - const orgId = this.sessionStorage.getItem('organization'); - if (orgId) { - this.adminService.UpdateOrgIamPolicy( - orgId, - this.iamData.description, - this.iamData.userLoginMustBeDomain, - ).then(() => { - this.router.navigate(['org']); - }).catch(error => { - this.toast.showError(error); - }); - } - } - } -} diff --git a/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy-routing.module.ts b/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy-routing.module.ts index 61e1cfdec2..1572a12262 100644 --- a/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy-routing.module.ts +++ b/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy-routing.module.ts @@ -1,7 +1,6 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { PolicyComponentAction } from '../policy-component-action.enum'; import { PasswordLockoutPolicyComponent } from './password-lockout-policy.component'; const routes: Routes = [ @@ -10,15 +9,6 @@ const routes: Routes = [ component: PasswordLockoutPolicyComponent, data: { animation: 'DetailPage', - action: PolicyComponentAction.MODIFY, - }, - }, - { - path: 'create', - component: PasswordLockoutPolicyComponent, - data: { - animation: 'DetailPage', - action: PolicyComponentAction.CREATE, }, }, ]; diff --git a/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.html b/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.html index af366cf470..9633d01002 100644 --- a/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.html +++ b/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.html @@ -1,17 +1,16 @@ - - -
- - {{ 'ORG.POLICY.DATA.DESCRIPTION' | translate }} - -
{{'ORG.POLICY.DATA.MAXATTEMPTS' | translate}} @@ -28,8 +27,8 @@
{{'ORG.POLICY.DATA.SHOWLOCKOUTFAILURES' | translate}} - +
diff --git a/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.scss b/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.scss index f6454c0be3..53d79e16f9 100644 --- a/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.scss +++ b/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.scss @@ -1,3 +1,7 @@ +.default { + color: #5282c1; + margin-top: 0; +} .content { padding-top: 1rem; @@ -8,10 +12,9 @@ .row { display: flex; align-items: center; - padding: .5rem 0; + padding: .3rem 0; .left-desc { - color: var(--grey); font-size: .9rem; } diff --git a/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.ts b/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.ts index 61a63833e4..40fe1bd068 100644 --- a/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.ts +++ b/console/src/app/modules/policies/password-lockout-policy/password-lockout-policy.component.ts @@ -1,18 +1,15 @@ -import { Component, OnDestroy } from '@angular/core'; +import { Component, Injector, Input, OnDestroy, Type } from '@angular/core'; import { FormGroup } from '@angular/forms'; -import { ActivatedRoute, Router } from '@angular/router'; +import { ActivatedRoute } from '@angular/router'; import { Subscription } from 'rxjs'; import { switchMap } from 'rxjs/operators'; -import { - OrgIamPolicy, - PasswordAgePolicy, - PasswordComplexityPolicy, - PasswordLockoutPolicy, -} from 'src/app/proto/generated/management_pb'; +import { DefaultPasswordLockoutPolicyView } from 'src/app/proto/generated/admin_pb'; +import { PasswordLockoutPolicyView } from 'src/app/proto/generated/management_pb'; +import { AdminService } from 'src/app/services/admin.service'; import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; -import { PolicyComponentAction } from '../policy-component-action.enum'; +import { PolicyComponentServiceType } from '../policy-component-types.enum'; @Component({ selector: 'app-password-lockout-policy', @@ -20,37 +17,39 @@ import { PolicyComponentAction } from '../policy-component-action.enum'; styleUrls: ['./password-lockout-policy.component.scss'], }) export class PasswordLockoutPolicyComponent implements OnDestroy { - public title: string = ''; - public desc: string = ''; + @Input() public service!: ManagementService | AdminService; + public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT; - componentAction: PolicyComponentAction = PolicyComponentAction.CREATE; - - public PolicyComponentAction: any = PolicyComponentAction; public lockoutForm!: FormGroup; - public lockoutData!: PasswordLockoutPolicy.AsObject; + public lockoutData!: PasswordLockoutPolicyView.AsObject; private sub: Subscription = new Subscription(); + public PolicyComponentServiceType: any = PolicyComponentServiceType; constructor( private route: ActivatedRoute, - private mgmtService: ManagementService, - private router: Router, private toast: ToastService, + private injector: Injector, ) { this.sub = this.route.data.pipe(switchMap(data => { - this.componentAction = data.action; - return this.route.params; - })).subscribe(params => { - this.title = 'ORG.POLICY.PWD_LOCKOUT.TITLECREATE'; - this.desc = 'ORG.POLICY.PWD_LOCKOUT.DESCRIPTIONCREATE'; + this.serviceType = data.serviceType; - if (this.componentAction === PolicyComponentAction.MODIFY) { - this.getData(params).then(data => { - if (data) { - this.lockoutData = data.toObject() as PasswordLockoutPolicy.AsObject; - } - }); + switch (this.serviceType) { + case PolicyComponentServiceType.MGMT: + this.service = this.injector.get(ManagementService as Type); + break; + case PolicyComponentServiceType.ADMIN: + this.service = this.injector.get(AdminService as Type); + break; } + + return this.route.params; + })).subscribe(() => { + this.getData().then(data => { + if (data) { + this.lockoutData = data.toObject() as PasswordLockoutPolicyView.AsObject; + } + }); }); } @@ -58,20 +57,27 @@ export class PasswordLockoutPolicyComponent implements OnDestroy { this.sub.unsubscribe(); } - private async getData(params: any): - Promise { + private getData(): Promise { - this.title = 'ORG.POLICY.PWD_LOCKOUT.TITLE'; - this.desc = 'ORG.POLICY.PWD_LOCKOUT.DESCRIPTION'; - return this.mgmtService.GetPasswordLockoutPolicy(); + switch (this.serviceType) { + case PolicyComponentServiceType.MGMT: + return (this.service as ManagementService).GetPasswordLockoutPolicy(); + case PolicyComponentServiceType.ADMIN: + return (this.service as AdminService).GetDefaultPasswordLockoutPolicy(); + } } - public deletePolicy(): void { - this.mgmtService.DeletePasswordLockoutPolicy(this.lockoutData.id).then(() => { - this.toast.showInfo('Successfully deleted'); - }).catch(error => { - this.toast.showError(error); - }); + public removePolicy(): void { + if (this.service instanceof ManagementService) { + this.service.RemovePasswordLockoutPolicy().then(() => { + this.toast.showInfo('ORG.POLICY.TOAST.RESETSUCCESS', true); + setTimeout(() => { + this.getData(); + }, 1000); + }).catch(error => { + this.toast.showError(error); + }); + } } public incrementMaxAttempts(): void { @@ -87,27 +93,44 @@ export class PasswordLockoutPolicyComponent implements OnDestroy { } public savePolicy(): void { - if (this.componentAction === PolicyComponentAction.CREATE) { - this.mgmtService.CreatePasswordLockoutPolicy( - this.lockoutData.description, + let promise: Promise; + if (this.service instanceof AdminService) { + promise = this.service.UpdateDefaultPasswordLockoutPolicy( this.lockoutData.maxAttempts, - this.lockoutData.showLockOutFailures, + this.lockoutData.showLockoutFailure, ).then(() => { - this.router.navigate(['org']); + this.toast.showInfo('ORG.POLICY.TOAST.SET', true); }).catch(error => { this.toast.showError(error); }); - } else if (this.componentAction === PolicyComponentAction.MODIFY) { + } else { + if ((this.lockoutData as PasswordLockoutPolicyView.AsObject).pb_default) { + promise = this.service.CreatePasswordLockoutPolicy( + this.lockoutData.maxAttempts, + this.lockoutData.showLockoutFailure, + ).then(() => { + this.toast.showInfo('ORG.POLICY.TOAST.SET', true); + }).catch(error => { + this.toast.showError(error); + }); + } else { + promise = this.service.UpdatePasswordLockoutPolicy( + this.lockoutData.maxAttempts, + this.lockoutData.showLockoutFailure, + ).then(() => { + this.toast.showInfo('ORG.POLICY.TOAST.SET', true); + }).catch(error => { + this.toast.showError(error); + }); + } + } + } - this.mgmtService.UpdatePasswordLockoutPolicy( - this.lockoutData.description, - this.lockoutData.maxAttempts, - this.lockoutData.showLockOutFailures, - ).then(() => { - this.router.navigate(['org']); - }).catch(error => { - this.toast.showError(error); - }); + public get isDefault(): boolean { + if (this.lockoutData && this.serviceType === PolicyComponentServiceType.MGMT) { + return (this.lockoutData as PasswordLockoutPolicyView.AsObject).pb_default; + } else { + return false; } } } diff --git a/console/src/app/modules/policies/policy-component-action.enum.ts b/console/src/app/modules/policies/policy-component-action.enum.ts deleted file mode 100644 index 9e5b4835c1..0000000000 --- a/console/src/app/modules/policies/policy-component-action.enum.ts +++ /dev/null @@ -1,5 +0,0 @@ - -export enum PolicyComponentAction { - CREATE = 'create', - MODIFY = 'modify', -} diff --git a/console/src/app/pages/iam/iam-policy-grid/iam-policy-grid.component.html b/console/src/app/pages/iam/iam-policy-grid/iam-policy-grid.component.html index 485990d8c7..d4e0045e2d 100644 --- a/console/src/app/pages/iam/iam-policy-grid/iam-policy-grid.component.html +++ b/console/src/app/pages/iam/iam-policy-grid/iam-policy-grid.component.html @@ -3,6 +3,29 @@

{{'IAM.POLICY.DESCRIPTION' | translate}}

+ +
+
+ +
+
+ {{'ORG.POLICY.PWD_COMPLEXITY.TITLE' | translate}} + +
+ +

+ {{'ORG.POLICY.PWD_COMPLEXITY.DESCRIPTION' | translate}}

+ + +
+ +
+
+
+
@@ -27,4 +50,29 @@
+ + +
+
+ +
+
+ {{'ORG.POLICY.IAM_POLICY.TITLE' | translate}} + +
+ +

+ {{'ORG.POLICY.IAM_POLICY.DESCRIPTION' | translate}}

+ + +
+ + + +
+
+
\ No newline at end of file diff --git a/console/src/app/pages/iam/iam-policy-grid/iam-policy-grid.component.ts b/console/src/app/pages/iam/iam-policy-grid/iam-policy-grid.component.ts index 299495bc93..fc66d6ee1c 100644 --- a/console/src/app/pages/iam/iam-policy-grid/iam-policy-grid.component.ts +++ b/console/src/app/pages/iam/iam-policy-grid/iam-policy-grid.component.ts @@ -1,6 +1,6 @@ import { Component } from '@angular/core'; import { PolicyComponentType } from 'src/app/modules/policies/policy-component-types.enum'; -import { DefaultLoginPolicy } from 'src/app/proto/generated/admin_pb'; +import { DefaultLoginPolicy, DefaultPasswordComplexityPolicyView, OrgIamPolicyView } from 'src/app/proto/generated/admin_pb'; import { PolicyState } from 'src/app/proto/generated/management_pb'; import { AdminService } from 'src/app/services/admin.service'; @@ -10,7 +10,9 @@ import { AdminService } from 'src/app/services/admin.service'; styleUrls: ['./iam-policy-grid.component.scss'], }) export class IamPolicyGridComponent { + public complexityPolicy!: DefaultPasswordComplexityPolicyView.AsObject; public loginPolicy!: DefaultLoginPolicy.AsObject; + public iamPolicy!: OrgIamPolicyView.AsObject; public PolicyState: any = PolicyState; public PolicyComponentType: any = PolicyComponentType; @@ -23,5 +25,7 @@ export class IamPolicyGridComponent { private getData(): void { this.adminService.GetDefaultLoginPolicy().then(data => this.loginPolicy = data.toObject()); + this.adminService.GetDefaultOrgIamPolicy().then(data => this.iamPolicy = data.toObject()); + this.adminService.GetDefaultPasswordComplexityPolicy().then(data => this.complexityPolicy = data.toObject()); } } diff --git a/console/src/app/pages/iam/iam-routing.module.ts b/console/src/app/pages/iam/iam-routing.module.ts index 10372cb075..752ac7bdb6 100644 --- a/console/src/app/pages/iam/iam-routing.module.ts +++ b/console/src/app/pages/iam/iam-routing.module.ts @@ -47,12 +47,49 @@ const routes: Routes = [ ], }, { - path: `policy/${PolicyComponentType.LOGIN}`, - data: { - serviceType: PolicyComponentServiceType.ADMIN, - }, - loadChildren: () => import('src/app/modules/policies/login-policy/login-policy.module') - .then(m => m.LoginPolicyModule), + path: 'policy', + children: [ + { + path: PolicyComponentType.AGE, + data: { + serviceType: PolicyComponentServiceType.ADMIN, + }, + loadChildren: () => import('src/app/modules/policies/password-age-policy/password-age-policy.module') + .then(m => m.PasswordAgePolicyModule), + }, + { + path: PolicyComponentType.LOCKOUT, + data: { + serviceType: PolicyComponentServiceType.ADMIN, + }, + loadChildren: () => import('src/app/modules/policies/password-lockout-policy/password-lockout-policy.module') + .then(m => m.PasswordLockoutPolicyModule), + }, + { + path: PolicyComponentType.COMPLEXITY, + data: { + serviceType: PolicyComponentServiceType.ADMIN, + }, + loadChildren: () => import('src/app/modules/policies/password-complexity-policy/password-complexity-policy.module') + .then(m => m.PasswordComplexityPolicyModule), + }, + { + path: PolicyComponentType.IAM, + data: { + serviceType: PolicyComponentServiceType.ADMIN, + }, + loadChildren: () => import('src/app/modules/policies/org-iam-policy/org-iam-policy.module') + .then(m => m.OrgIamPolicyModule), + }, + { + path: PolicyComponentType.LOGIN, + data: { + serviceType: PolicyComponentServiceType.ADMIN, + }, + loadChildren: () => import('src/app/modules/policies/login-policy/login-policy.module') + .then(m => m.LoginPolicyModule), + }, + ], }, ]; diff --git a/console/src/app/pages/orgs/org-create/org-create.component.ts b/console/src/app/pages/orgs/org-create/org-create.component.ts index ace1c86866..d487201638 100644 --- a/console/src/app/pages/orgs/org-create/org-create.component.ts +++ b/console/src/app/pages/orgs/org-create/org-create.component.ts @@ -7,7 +7,7 @@ import { Router } from '@angular/router'; import { take } from 'rxjs/operators'; import { lowerCaseValidator, numberValidator, symbolValidator, upperCaseValidator } from 'src/app/pages/validators'; import { CreateHumanRequest, CreateOrgRequest, Gender, OrgSetUpResponse } from 'src/app/proto/generated/admin_pb'; -import { PasswordComplexityPolicy } from 'src/app/proto/generated/auth_pb'; +import { PasswordComplexityPolicy as MgmtPasswordComplexityPolicy } from 'src/app/proto/generated/management_pb'; import { AdminService } from 'src/app/services/admin.service'; import { GrpcAuthService } from 'src/app/services/grpc-auth.service'; import { ManagementService } from 'src/app/services/mgmt.service'; @@ -57,7 +57,7 @@ export class OrgCreateComponent { public genders: Gender[] = [Gender.GENDER_FEMALE, Gender.GENDER_MALE, Gender.GENDER_UNSPECIFIED]; public languages: string[] = ['de', 'en']; - public policy!: PasswordComplexityPolicy.AsObject; + public policy!: MgmtPasswordComplexityPolicy.AsObject; public usePassword: boolean = false; public forSelf: boolean = true; diff --git a/console/src/app/pages/orgs/orgs-routing.module.ts b/console/src/app/pages/orgs/orgs-routing.module.ts index ac0bb1ebd0..e0f849189a 100644 --- a/console/src/app/pages/orgs/orgs-routing.module.ts +++ b/console/src/app/pages/orgs/orgs-routing.module.ts @@ -43,23 +43,35 @@ const routes: Routes = [ children: [ { path: PolicyComponentType.AGE, + data: { + serviceType: PolicyComponentServiceType.MGMT, + }, loadChildren: () => import('src/app/modules/policies/password-age-policy/password-age-policy.module') .then(m => m.PasswordAgePolicyModule), }, { path: PolicyComponentType.LOCKOUT, + data: { + serviceType: PolicyComponentServiceType.MGMT, + }, loadChildren: () => import('src/app/modules/policies/password-lockout-policy/password-lockout-policy.module') .then(m => m.PasswordLockoutPolicyModule), }, { path: PolicyComponentType.COMPLEXITY, + data: { + serviceType: PolicyComponentServiceType.MGMT, + }, loadChildren: () => import('src/app/modules/policies/password-complexity-policy/password-complexity-policy.module') .then(m => m.PasswordComplexityPolicyModule), }, { path: PolicyComponentType.IAM, - loadChildren: () => import('src/app/modules/policies/password-iam-policy/password-iam-policy.module') - .then(m => m.PasswordIamPolicyModule), + data: { + serviceType: PolicyComponentServiceType.MGMT, + }, + loadChildren: () => import('src/app/modules/policies/org-iam-policy/org-iam-policy.module') + .then(m => m.OrgIamPolicyModule), }, { path: PolicyComponentType.LOGIN, diff --git a/console/src/app/pages/orgs/policy-grid/policy-grid.component.html b/console/src/app/pages/orgs/policy-grid/policy-grid.component.html index 94daf05770..4d57058706 100644 --- a/console/src/app/pages/orgs/policy-grid/policy-grid.component.html +++ b/console/src/app/pages/orgs/policy-grid/policy-grid.component.html @@ -3,34 +3,28 @@

{{'ORG.POLICY.DESCRIPTION' | translate}}

-
-
- -
-
- {{'ORG.POLICY.PWD_COMPLEXITY.TITLE' | translate}} - -
+ +
+
+ +
+
+ {{'ORG.POLICY.PWD_COMPLEXITY.TITLE' | translate}} + +
-

- {{ complexityPolicy.description }}

-

{{'ORG.POLICY.PWD_COMPLEXITY.DESCRIPTION' | translate}}

-
- -
- - + +
+ +
-
+
@@ -44,22 +38,15 @@
-

- {{ iamPolicy.description }}

- -

- {{'ORG.POLICY.IAM_POLICY.DESCRIPTION' | translate}}

-
+

+ {{'ORG.POLICY.IAM_POLICY.DESCRIPTION' | translate}}

- -
- - +
+ + +
@@ -82,13 +69,11 @@ -
- - +
+ + +
diff --git a/console/src/app/pages/orgs/policy-grid/policy-grid.component.ts b/console/src/app/pages/orgs/policy-grid/policy-grid.component.ts index b209e89a03..c1e11aa4fd 100644 --- a/console/src/app/pages/orgs/policy-grid/policy-grid.component.ts +++ b/console/src/app/pages/orgs/policy-grid/policy-grid.component.ts @@ -1,7 +1,13 @@ import { Component } from '@angular/core'; import { PolicyComponentType } from 'src/app/modules/policies/policy-component-types.enum'; -import { LoginPolicy, OrgIamPolicy, PasswordComplexityPolicy, PolicyState } from 'src/app/proto/generated/management_pb'; +import { + LoginPolicyView, + OrgIamPolicyView, + PasswordComplexityPolicyView, + PolicyState, +} from 'src/app/proto/generated/management_pb'; import { ManagementService } from 'src/app/services/mgmt.service'; +import { ToastService } from 'src/app/services/toast.service'; @Component({ selector: 'app-policy-grid', @@ -9,21 +15,24 @@ import { ManagementService } from 'src/app/services/mgmt.service'; styleUrls: ['./policy-grid.component.scss'], }) export class PolicyGridComponent { - public complexityPolicy!: PasswordComplexityPolicy.AsObject; - public iamPolicy!: OrgIamPolicy.AsObject; - public loginPolicy!: LoginPolicy.AsObject; + public complexityPolicy!: PasswordComplexityPolicyView.AsObject; + public iamPolicy!: OrgIamPolicyView.AsObject; + public loginPolicy!: LoginPolicyView.AsObject; public PolicyState: any = PolicyState; public PolicyComponentType: any = PolicyComponentType; constructor( - private mgmtService: ManagementService, + public mgmtService: ManagementService, + private toast: ToastService, ) { this.getData(); } private getData(): void { - this.mgmtService.GetPasswordComplexityPolicy().then(data => this.complexityPolicy = data.toObject()); + this.mgmtService.GetPasswordComplexityPolicy().then(data => this.complexityPolicy = data.toObject()).catch(error => { + this.toast.showError(error); + }); this.mgmtService.GetMyOrgIamPolicy().then(data => this.iamPolicy = data.toObject()); this.mgmtService.GetLoginPolicy().then(data => { this.loginPolicy = data.toObject(); diff --git a/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-grid/owned-project-grid.component.html b/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-grid/owned-project-grid.component.html index 2d7740d19e..c7ee504df8 100644 --- a/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-grid/owned-project-grid.component.html +++ b/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-grid/owned-project-grid.component.html @@ -52,8 +52,12 @@ }}
- + diff --git a/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-grid/owned-project-grid.component.scss b/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-grid/owned-project-grid.component.scss index e21118b5bf..6d30cb404f 100644 --- a/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-grid/owned-project-grid.component.scss +++ b/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-grid/owned-project-grid.component.scss @@ -112,6 +112,20 @@ } } + .delete-button { + opacity: 0; + user-select: none; + position: absolute; + bottom: 0; + right: 30px; + margin: 0; + margin-bottom: .25rem; + + &:not(:hover) { + color: #8795a1; + } + } + .edit-button { opacity: 0; user-select: none; @@ -130,12 +144,14 @@ &:hover { box-shadow: 0 5px 10px rgba(0, 0, 0, .12); + .delete-button, .edit-button { opacity: 1; } } &.selected { + .delete-button, .edit-button { opacity: 1; } diff --git a/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-grid/owned-project-grid.component.ts b/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-grid/owned-project-grid.component.ts index f1756c3185..0b0755587e 100644 --- a/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-grid/owned-project-grid.component.ts +++ b/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-grid/owned-project-grid.component.ts @@ -1,11 +1,14 @@ import { animate, animateChild, keyframes, query, stagger, style, transition, trigger } from '@angular/animations'; import { SelectionModel } from '@angular/cdk/collections'; import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; import { Router } from '@angular/router'; +import { WarnDialogComponent } from 'src/app/modules/warn-dialog/warn-dialog.component'; import { Org } from 'src/app/proto/generated/auth_pb'; import { ProjectState, ProjectType, ProjectView } from 'src/app/proto/generated/management_pb'; -import { AuthenticationService } from 'src/app/services/authentication.service'; +import { ManagementService } from 'src/app/services/mgmt.service'; import { StorageKey, StorageService } from 'src/app/services/storage.service'; +import { ToastService } from 'src/app/services/toast.service'; @Component({ selector: 'app-owned-project-grid', @@ -48,8 +51,14 @@ export class OwnedProjectGridComponent implements OnChanges { public showNewProject: boolean = false; public ProjectState: any = ProjectState; public ProjectType: any = ProjectType; - - constructor(private router: Router, private authService: AuthenticationService, private storage: StorageService) { + @Input() public zitadelProjectId: string = ''; + constructor( + private router: Router, + private dialog: MatDialog, + private storage: StorageService, + private mgmtService: ManagementService, + private toast: ToastService, + ) { this.selection.changed.subscribe(selection => { this.setPrefixedItem('pinned-projects', JSON.stringify( this.selection.selected.map(item => item.projectId), @@ -123,4 +132,30 @@ export class OwnedProjectGridComponent implements OnChanges { public closeGridView(): void { this.changedView.emit(true); } + + public deleteProject(item: ProjectView.AsObject): void { + const dialogRef = this.dialog.open(WarnDialogComponent, { + data: { + confirmKey: 'ACTIONS.DELETE', + cancelKey: 'ACTIONS.CANCEL', + titleKey: 'PROJECT.PAGES.DIALOG.DELETE.TITLE', + descriptionKey: 'PROJECT.PAGES.DIALOG.DELETE.DESCRIPTION', + }, + width: '400px', + }); + + dialogRef.afterClosed().subscribe(resp => { + if (resp && item.projectId !== this.zitadelProjectId) { + this.mgmtService.RemoveProject(item.projectId).then(() => { + this.toast.showInfo('PROJECT.TOAST.DELETED', true); + const index = this.items.findIndex(iter => iter.projectId === item.projectId); + if (index > -1) { + this.items.splice(index, 1); + } + }).catch(error => { + this.toast.showError(error); + }); + } + }); + } } diff --git a/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.html b/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.html index 6c6a4a9ac3..649ecaf830 100644 --- a/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.html +++ b/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.html @@ -1,5 +1,6 @@ - +
@@ -61,6 +62,16 @@ + + + + + + + diff --git a/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.ts b/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.ts index 96c9588497..8b52d2bb71 100644 --- a/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.ts +++ b/console/src/app/pages/projects/owned-projects/owned-project-list/owned-project-list.component.ts @@ -1,12 +1,14 @@ import { animate, animateChild, query, stagger, style, transition, trigger } from '@angular/animations'; import { SelectionModel } from '@angular/cdk/collections'; import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; import { Router } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { Timestamp } from 'google-protobuf/google/protobuf/timestamp_pb'; import { BehaviorSubject, Observable, Subscription } from 'rxjs'; +import { WarnDialogComponent } from 'src/app/modules/warn-dialog/warn-dialog.component'; import { ProjectView } from 'src/app/proto/generated/management_pb'; import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; @@ -45,7 +47,7 @@ export class OwnedProjectListComponent implements OnInit, OnDestroy { @ViewChild(MatPaginator) public paginator!: MatPaginator; public ownedProjectList: ProjectView.AsObject[] = []; - public displayedColumns: string[] = ['select', 'name', 'state', 'creationDate', 'changeDate']; + public displayedColumns: string[] = ['select', 'name', 'state', 'creationDate', 'changeDate', 'actions']; public selection: SelectionModel = new SelectionModel(true, []); private loadingSubject: BehaviorSubject = new BehaviorSubject(false); @@ -54,11 +56,18 @@ export class OwnedProjectListComponent implements OnInit, OnDestroy { public grid: boolean = true; private subscription?: Subscription; + public zitadelProjectId: string = ''; + constructor(private router: Router, public translate: TranslateService, private mgmtService: ManagementService, private toast: ToastService, - ) { } + private dialog: MatDialog, + ) { + this.mgmtService.GetIam().then(iam => { + this.zitadelProjectId = iam.toObject().iamProjectId; + }); + } public ngOnInit(): void { this.getData(10, 0); @@ -140,4 +149,29 @@ export class OwnedProjectListComponent implements OnInit, OnDestroy { this.selection.clear(); this.getData(this.paginator.pageSize, this.paginator.pageIndex * this.paginator.pageSize); } + + public deleteProject(item: ProjectView.AsObject): void { + const dialogRef = this.dialog.open(WarnDialogComponent, { + data: { + confirmKey: 'ACTIONS.DELETE', + cancelKey: 'ACTIONS.CANCEL', + titleKey: 'PROJECT.PAGES.DIALOG.DELETE.TITLE', + descriptionKey: 'PROJECT.PAGES.DIALOG.DELETE.DESCRIPTION', + }, + width: '400px', + }); + + dialogRef.afterClosed().subscribe(resp => { + if (this.zitadelProjectId && resp && item.projectId !== this.zitadelProjectId) { + this.mgmtService.RemoveProject(item.projectId).then(() => { + this.toast.showInfo('PROJECT.TOAST.DELETED', true); + setTimeout(() => { + this.refreshPage(); + }, 1000); + }).catch(error => { + this.toast.showError(error); + }); + } + }); + } } diff --git a/console/src/app/pages/projects/owned-projects/owned-projects.module.ts b/console/src/app/pages/projects/owned-projects/owned-projects.module.ts index 8e868db9a9..63fc30ca76 100644 --- a/console/src/app/pages/projects/owned-projects/owned-projects.module.ts +++ b/console/src/app/pages/projects/owned-projects/owned-projects.module.ts @@ -20,6 +20,7 @@ import { CardModule } from 'src/app/modules/card/card.module'; import { RefreshTableModule } from 'src/app/modules/refresh-table/refresh-table.module'; import { SharedModule } from 'src/app/modules/shared/shared.module'; import { UserGrantsModule } from 'src/app/modules/user-grants/user-grants.module'; +import { WarnDialogModule } from 'src/app/modules/warn-dialog/warn-dialog.module'; import { HasRolePipeModule } from 'src/app/pipes/has-role-pipe/has-role-pipe.module'; import { LocalizedDatePipeModule } from 'src/app/pipes/localized-date-pipe/localized-date-pipe.module'; import { TimestampToDatePipeModule } from 'src/app/pipes/timestamp-to-date-pipe/timestamp-to-date-pipe.module'; @@ -51,6 +52,7 @@ import { OwnedProjectsComponent } from './owned-projects.component'; MatInputModule, MatChipsModule, MatIconModule, + WarnDialogModule, MatButtonModule, MatProgressSpinnerModule, MatProgressBarModule, diff --git a/console/src/app/pages/users/user-detail/external-idps/external-idps.component.html b/console/src/app/pages/users/user-detail/external-idps/external-idps.component.html index 6d33551364..1194cee981 100644 --- a/console/src/app/pages/users/user-detail/external-idps/external-idps.component.html +++ b/console/src/app/pages/users/user-detail/external-idps/external-idps.component.html @@ -37,6 +37,16 @@ {{idp?.externalUserId}} + + + + + + + diff --git a/console/src/app/pages/users/user-detail/external-idps/external-idps.component.ts b/console/src/app/pages/users/user-detail/external-idps/external-idps.component.ts index ca92245a43..9fcd1e1737 100644 --- a/console/src/app/pages/users/user-detail/external-idps/external-idps.component.ts +++ b/console/src/app/pages/users/user-detail/external-idps/external-idps.component.ts @@ -1,8 +1,10 @@ import { SelectionModel } from '@angular/cdk/collections'; import { Component, Input, OnInit, ViewChild } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; import { BehaviorSubject, Observable } from 'rxjs'; +import { WarnDialogComponent } from 'src/app/modules/warn-dialog/warn-dialog.component'; import { ExternalIDPView as AuthExternalIDPView } from '../../../../proto/generated/auth_pb'; import { @@ -29,9 +31,9 @@ export class ExternalIdpsComponent implements OnInit { = new SelectionModel(true, []); private loadingSubject: BehaviorSubject = new BehaviorSubject(false); public loading$: Observable = this.loadingSubject.asObservable(); - @Input() public displayedColumns: string[] = ['idpConfigId', 'idpName', 'externalUserId', 'externalUserDisplayName']; + @Input() public displayedColumns: string[] = ['idpConfigId', 'idpName', 'externalUserId', 'externalUserDisplayName', 'actions']; - constructor(private toast: ToastService) { } + constructor(private toast: ToastService, private dialog: MatDialog) { } ngOnInit(): void { this.getData(10, 0); @@ -80,19 +82,35 @@ export class ExternalIdpsComponent implements OnInit { } public removeExternalIdp(idp: AuthExternalIDPView.AsObject | MgmtExternalIDPView.AsObject): void { - let promise; - if (this.service instanceof ManagementService) { - promise = (this.service as ManagementService).RemoveExternalIDP(idp.externalUserId, idp.idpConfigId, idp.userId); - } else if (this.service instanceof GrpcAuthService) { - promise = (this.service as GrpcAuthService).RemoveExternalIDP(idp.externalUserId, idp.idpConfigId); - } + const dialogRef = this.dialog.open(WarnDialogComponent, { + data: { + confirmKey: 'ACTIONS.REMOVE', + cancelKey: 'ACTIONS.CANCEL', + titleKey: 'USER.EXTERNALIDP.DIALOG.DELETE_TITLE', + descriptionKey: 'USER.EXTERNALIDP.DIALOG.DELETE_DESCRIPTION', + }, + width: '400px', + }); - if (promise) { - promise.then(_ => { - this.getData(this.paginator.pageSize, this.paginator.pageIndex * this.paginator.pageSize); - }).catch((error: any) => { - this.toast.showError(error); - }); - } + dialogRef.afterClosed().subscribe(resp => { + if (resp) { + let promise; + if (this.service instanceof ManagementService) { + promise = (this.service as ManagementService) + .RemoveExternalIDP(idp.externalUserId, idp.idpConfigId, idp.userId); + } else if (this.service instanceof GrpcAuthService) { + promise = (this.service as GrpcAuthService) + .RemoveExternalIDP(idp.externalUserId, idp.idpConfigId); + } + + if (promise) { + promise.then(_ => { + this.refreshPage(); + }).catch((error: any) => { + this.toast.showError(error); + }); + } + } + }); } } diff --git a/console/src/app/services/admin.service.ts b/console/src/app/services/admin.service.ts index c4482f0030..9e668fec8e 100644 --- a/console/src/app/services/admin.service.ts +++ b/console/src/app/services/admin.service.ts @@ -9,6 +9,14 @@ import { CreateUserRequest, DefaultLoginPolicy, DefaultLoginPolicyView, + DefaultPasswordAgePolicyRequest, + DefaultPasswordAgePolicyView, + DefaultPasswordComplexityPolicy, + DefaultPasswordComplexityPolicyRequest, + DefaultPasswordComplexityPolicyView, + DefaultPasswordLockoutPolicy, + DefaultPasswordLockoutPolicyRequest, + DefaultPasswordLockoutPolicyView, FailedEventID, FailedEvents, IamMember, @@ -31,6 +39,7 @@ import { OrgIamPolicy, OrgIamPolicyID, OrgIamPolicyRequest, + OrgIamPolicyView, OrgSetUpRequest, OrgSetUpResponse, RemoveIamMemberRequest, @@ -91,6 +100,70 @@ export class AdminService { return this.grpcService.admin.removeFailedEvent(req); } + /* Policies */ + + /* complexity */ + + public GetDefaultPasswordComplexityPolicy(): Promise { + const req = new Empty(); + return this.grpcService.admin.getDefaultPasswordComplexityPolicy(req); + } + + public UpdateDefaultPasswordComplexityPolicy( + hasLowerCase: boolean, + hasUpperCase: boolean, + hasNumber: boolean, + hasSymbol: boolean, + minLength: number, + ): Promise { + const req = new DefaultPasswordComplexityPolicyRequest(); + req.setHasLowercase(hasLowerCase); + req.setHasUppercase(hasUpperCase); + req.setHasNumber(hasNumber); + req.setHasSymbol(hasSymbol); + req.setMinLength(minLength); + return this.grpcService.admin.updateDefaultPasswordComplexityPolicy(req); + } + + /* age */ + + public GetDefaultPasswordAgePolicy(): Promise { + const req = new Empty(); + + return this.grpcService.admin.getDefaultPasswordAgePolicy(req); + } + + public UpdateDefaultPasswordAgePolicy( + maxAgeDays: number, + expireWarnDays: number, + ): Promise { + const req = new DefaultPasswordAgePolicyRequest(); + req.setMaxAgeDays(maxAgeDays); + req.setExpireWarnDays(expireWarnDays); + + return this.grpcService.admin.updateDefaultPasswordAgePolicy(req); + } + + /* lockout */ + + public GetDefaultPasswordLockoutPolicy(): Promise { + const req = new Empty(); + return this.grpcService.admin.getDefaultPasswordLockoutPolicy(req); + } + + public UpdateDefaultPasswordLockoutPolicy( + maxAttempts: number, + showLockoutFailures: boolean, + ): Promise { + const req = new DefaultPasswordLockoutPolicyRequest(); + req.setMaxAttempts(maxAttempts); + req.setShowLockoutFailure(showLockoutFailures); + + return this.grpcService.admin.updateDefaultPasswordLockoutPolicy(req); + } + + /* login */ + public GetDefaultLoginPolicy( ): Promise { const req = new Empty(); @@ -101,6 +174,50 @@ export class AdminService { return this.grpcService.admin.updateDefaultLoginPolicy(req); } + /* org iam */ + + public GetOrgIamPolicy(orgId: string): Promise { + const req = new OrgIamPolicyID(); + req.setOrgId(orgId); + return this.grpcService.admin.getOrgIamPolicy(req); + } + + public CreateOrgIamPolicy( + orgId: string, + userLoginMustBeDomain: boolean): Promise { + const req = new OrgIamPolicyRequest(); + req.setOrgId(orgId); + req.setUserLoginMustBeDomain(userLoginMustBeDomain); + + return this.grpcService.admin.createOrgIamPolicy(req); + } + + public UpdateOrgIamPolicy( + orgId: string, + userLoginMustBeDomain: boolean): Promise { + const req = new OrgIamPolicyRequest(); + req.setOrgId(orgId); + req.setUserLoginMustBeDomain(userLoginMustBeDomain); + return this.grpcService.admin.updateOrgIamPolicy(req); + } + + public RemoveOrgIamPolicy( + orgId: string, + ): Promise { + const req = new OrgIamPolicyID(); + req.setOrgId(orgId); + return this.grpcService.admin.removeOrgIamPolicy(req); + } + + /* admin iam */ + + public GetDefaultOrgIamPolicy(): Promise { + const req = new Empty(); + return this.grpcService.admin.getDefaultOrgIamPolicy(req); + } + + /* policies end */ + public AddIdpProviderToDefaultLoginPolicy(configId: string): Promise { const req = new IdpProviderID(); req.setIdpConfigId(configId); @@ -236,42 +353,4 @@ export class AdminService { return this.grpcService.admin.changeIamMember(req); } - - public GetOrgIamPolicy(orgId: string): Promise { - const req = new OrgIamPolicyID(); - req.setOrgId(orgId); - - return this.grpcService.admin.getOrgIamPolicy(req); - } - - public CreateOrgIamPolicy( - orgId: string, - description: string, - userLoginMustBeDomain: boolean): Promise { - const req = new OrgIamPolicyRequest(); - req.setOrgId(orgId); - req.setDescription(description); - req.setUserLoginMustBeDomain(userLoginMustBeDomain); - - return this.grpcService.admin.createOrgIamPolicy(req); - } - - public UpdateOrgIamPolicy( - orgId: string, - description: string, - userLoginMustBeDomain: boolean): Promise { - const req = new OrgIamPolicyRequest(); - req.setOrgId(orgId); - req.setDescription(description); - req.setUserLoginMustBeDomain(userLoginMustBeDomain); - return this.grpcService.admin.updateOrgIamPolicy(req); - } - - public deleteOrgIamPolicy( - orgId: string, - ): Promise { - const req = new OrgIamPolicyID(); - req.setOrgId(orgId); - return this.grpcService.admin.deleteOrgIamPolicy(req); - } } diff --git a/console/src/app/services/mgmt.service.ts b/console/src/app/services/mgmt.service.ts index 0768dbcc56..d2ecdc53b4 100644 --- a/console/src/app/services/mgmt.service.ts +++ b/console/src/app/services/mgmt.service.ts @@ -41,6 +41,7 @@ import { IdpView, LoginName, LoginPolicy, + LoginPolicyRequest, LoginPolicyView, MachineKeyIDRequest, MachineKeySearchRequest, @@ -64,24 +65,20 @@ import { OrgDomainValidationRequest, OrgDomainValidationResponse, OrgDomainValidationType, - OrgIamPolicy, + OrgIamPolicyView, OrgMember, OrgMemberRoles, OrgMemberSearchRequest, OrgMemberSearchResponse, OrgView, PasswordAgePolicy, - PasswordAgePolicyCreate, - PasswordAgePolicyID, - PasswordAgePolicyUpdate, + PasswordAgePolicyRequest, + PasswordAgePolicyView, PasswordComplexityPolicy, - PasswordComplexityPolicyCreate, - PasswordComplexityPolicyID, - PasswordComplexityPolicyUpdate, + PasswordComplexityPolicyRequest, + PasswordComplexityPolicyView, PasswordLockoutPolicy, - PasswordLockoutPolicyCreate, - PasswordLockoutPolicyID, - PasswordLockoutPolicyUpdate, + PasswordLockoutPolicyRequest, PasswordRequest, PrimaryOrgDomainRequest, Project, @@ -188,10 +185,14 @@ export class ManagementService { return this.grpcService.mgmt.getLoginPolicy(req); } - public UpdateLoginPolicy(req: LoginPolicy): Promise { + public UpdateLoginPolicy(req: LoginPolicyRequest): Promise { return this.grpcService.mgmt.updateLoginPolicy(req); } + public CreateLoginPolicy(req: LoginPolicyRequest): Promise { + return this.grpcService.mgmt.createLoginPolicy(req); + } + public RemoveLoginPolicy(): Promise { return this.grpcService.mgmt.removeLoginPolicy(new Empty()); } @@ -498,63 +499,56 @@ export class ManagementService { // Policy - public GetMyOrgIamPolicy(): Promise { + public GetMyOrgIamPolicy(): Promise { const req = new Empty(); return this.grpcService.mgmt.getMyOrgIamPolicy(req); } - public GetPasswordAgePolicy(): Promise { + public GetPasswordAgePolicy(): Promise { const req = new Empty(); return this.grpcService.mgmt.getPasswordAgePolicy(req); } public CreatePasswordAgePolicy( - description: string, maxAgeDays: number, expireWarnDays: number, ): Promise { - const req = new PasswordAgePolicyCreate(); - req.setDescription(description); + const req = new PasswordAgePolicyRequest(); req.setMaxAgeDays(maxAgeDays); req.setExpireWarnDays(expireWarnDays); return this.grpcService.mgmt.createPasswordAgePolicy(req); } - public DeletePasswordAgePolicy(id: string): Promise { - const req = new PasswordAgePolicyID(); - req.setId(id); - return this.grpcService.mgmt.deletePasswordAgePolicy(req); + public RemovePasswordAgePolicy(): Promise { + const req = new Empty(); + return this.grpcService.mgmt.removePasswordAgePolicy(req); } public UpdatePasswordAgePolicy( - description: string, maxAgeDays: number, expireWarnDays: number, ): Promise { - const req = new PasswordAgePolicyUpdate(); - req.setDescription(description); + const req = new PasswordAgePolicyRequest(); req.setMaxAgeDays(maxAgeDays); req.setExpireWarnDays(expireWarnDays); return this.grpcService.mgmt.updatePasswordAgePolicy(req); } - public GetPasswordComplexityPolicy(): Promise { + public GetPasswordComplexityPolicy(): Promise { const req = new Empty(); return this.grpcService.mgmt.getPasswordComplexityPolicy(req); } public CreatePasswordComplexityPolicy( - description: string, hasLowerCase: boolean, hasUpperCase: boolean, hasNumber: boolean, hasSymbol: boolean, minLength: number, ): Promise { - const req = new PasswordComplexityPolicyCreate(); - req.setDescription(description); + const req = new PasswordComplexityPolicyRequest(); req.setHasLowercase(hasLowerCase); req.setHasUppercase(hasUpperCase); req.setHasNumber(hasNumber); @@ -563,22 +557,19 @@ export class ManagementService { return this.grpcService.mgmt.createPasswordComplexityPolicy(req); } - public DeletePasswordComplexityPolicy(id: string): Promise { - const req = new PasswordComplexityPolicyID(); - req.setId(id); - return this.grpcService.mgmt.deletePasswordComplexityPolicy(req); + public removePasswordComplexityPolicy(): Promise { + const req = new Empty(); + return this.grpcService.mgmt.removePasswordComplexityPolicy(req); } public UpdatePasswordComplexityPolicy( - description: string, hasLowerCase: boolean, hasUpperCase: boolean, hasNumber: boolean, hasSymbol: boolean, minLength: number, ): Promise { - const req = new PasswordComplexityPolicyUpdate(); - req.setDescription(description); + const req = new PasswordComplexityPolicy(); req.setHasLowercase(hasLowerCase); req.setHasUppercase(hasUpperCase); req.setHasNumber(hasNumber); @@ -594,34 +585,28 @@ export class ManagementService { } public CreatePasswordLockoutPolicy( - description: string, maxAttempts: number, showLockoutFailures: boolean, ): Promise { - const req = new PasswordLockoutPolicyCreate(); - req.setDescription(description); + const req = new PasswordLockoutPolicyRequest(); req.setMaxAttempts(maxAttempts); - req.setShowLockOutFailures(showLockoutFailures); + req.setShowLockoutFailure(showLockoutFailures); return this.grpcService.mgmt.createPasswordLockoutPolicy(req); } - public DeletePasswordLockoutPolicy(id: string): Promise { - const req = new PasswordLockoutPolicyID(); - req.setId(id); - - return this.grpcService.mgmt.deletePasswordLockoutPolicy(req); + public RemovePasswordLockoutPolicy(): Promise { + const req = new Empty(); + return this.grpcService.mgmt.removePasswordLockoutPolicy(req); } public UpdatePasswordLockoutPolicy( - description: string, maxAttempts: number, showLockoutFailures: boolean, ): Promise { - const req = new PasswordLockoutPolicyUpdate(); - req.setDescription(description); + const req = new PasswordLockoutPolicy(); req.setMaxAttempts(maxAttempts); - req.setShowLockOutFailures(showLockoutFailures); + req.setShowLockoutFailure(showLockoutFailures); return this.grpcService.mgmt.updatePasswordLockoutPolicy(req); } diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json index ec929495c2..091c5a6a1a 100644 --- a/console/src/assets/i18n/de.json +++ b/console/src/assets/i18n/de.json @@ -61,6 +61,7 @@ "REFRESH":"Aktualisieren", "LOGIN":"Einloggen", "EDIT":"Bearbeiten", + "PIN":"Anpinnen", "CONFIGURE":"Konfigurieren" }, "ERRORS": { @@ -139,7 +140,11 @@ "IDPCONFIGID": "Idp Konfig ID", "IDPNAME": "Idp Name", "USERDISPLAYNAME": "Externer Name", - "EXTERNALUSERID": "Externe Benutzer ID" + "EXTERNALUSERID": "Externe Benutzer ID", + "DIALOG": { + "REMOVE_TITLE":"Idp entfernen", + "REMOVE_DESCRIPTION":"Sie sind im Begriff einen Identity Provider zu entfernen. Wollen Sie dies wirklich tun?" + } }, "CREATE": { "TITLE": "Neuen Benutzer erstellen", @@ -443,9 +448,11 @@ "TITLE":"Login Richtlinien", "DESCRIPTION":"Definiere die Loginmethoden für Benutzer", "TITLECREATE":"Definiere die Loginmethoden für Benutzer", - "DESCRIPTIONCREATEADMIN":"Nutzer können Sich mit den verfügbaren Idps authentifizieren.", - "DESCRIPTIONCREATEMGMT":"Nutzer können Sich mit den verfügbaren Idps authentifizieren. Achtung: Es kann von System-, sowie von selbsterstellten Providern Ihrer Organisation gewählt werden." + "DESCRIPTIONCREATEADMIN":"Nutzer können sich mit den verfügbaren Idps authentifizieren.", + "DESCRIPTIONCREATEMGMT":"Nutzer können sich mit den verfügbaren Idps authentifizieren. Achtung: Es kann zwischen System- und organisationsspezifischen Providern gewählt werden.", + "SAVED":"Erfolgreich gespeichert." }, + "DEFAULTLABEL":"Die aktuelle Richtlinie entspricht der IAM-Standard Einstellung.", "BTN_INSTALL":"Installieren", "BTN_EDIT":"Modifizieren", "DATA": { @@ -464,7 +471,11 @@ "ALLOWEXTERNALIDP":"Externer IDP erlaubt", "ALLOWREGISTER":"Registrieren erlaubt" }, - "DELETE":"Richtlinie entfernen/zurücksetzen" + "RESET":"Richtlinie zurücksetzen", + "TOAST":{ + "SET":"Richtline erfolgreich gesetzt!", + "RESETSUCCESS":"Richtline zurückgesetzt!" + } }, "TOAST": { "DEACTIVATED":"Organisation deaktiviert.", diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index 3f9eef018c..b42fff877d 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -61,6 +61,7 @@ "REFRESH":"Refresh", "LOGIN":"Login", "EDIT":"Edit", + "PIN":"Pin / Unpin", "CONFIGURE":"Configure" }, "ERRORS": { @@ -139,7 +140,11 @@ "IDPCONFIGID": "Idp Config ID", "IDPNAME": "Idp Name", "USERDISPLAYNAME": "External Name", - "EXTERNALUSERID": "External User ID" + "EXTERNALUSERID": "External User ID", + "DIALOG": { + "REMOVE_TITLE":"Remove IDP", + "REMOVE_DESCRIPTION":"You are about to delete an Identity Provider from a user. Do you really want to continue?" + } }, "CREATE": { "TITLE": "Create a New User", @@ -444,8 +449,10 @@ "DESCRIPTION":"Define how Users can be authenticated", "TITLECREATE":"Define how Users can be authenticated", "DESCRIPTIONCREATEADMIN":"Users can choose from the available identity providers below.", - "DESCRIPTIONCREATEMGMT":"Users can choose from the available identity providers below. Note: You can use System-set providers as well as providers set for your organisation only." + "DESCRIPTIONCREATEMGMT":"Users can choose from the available identity providers below. Note: You can use System-set providers as well as providers set for your organisation only.", + "SAVED":"Saved successfully!" }, + "DEFAULTLABEL":"The currently set guideline corresponds to the standard setting set by the IAM Administrator.", "BTN_INSTALL":"Setup", "BTN_EDIT":"Modify", "DATA": { @@ -464,7 +471,11 @@ "ALLOWEXTERNALIDP":"External IDP allowed", "ALLOWREGISTER":"Register allowed" }, - "DELETE":"Uninstall/Reset Policy" + "RESET":"Reset Policy", + "TOAST":{ + "SET":"Policy set successfully!", + "RESETSUCCESS":"Policy reset successfully!" + } }, "TOAST": { "DEACTIVATED":"Organisation deactivated.", diff --git a/internal/admin/repository/eventsourcing/eventstore/iam.go b/internal/admin/repository/eventsourcing/eventstore/iam.go index c74c8ce8e9..065c2bea63 100644 --- a/internal/admin/repository/eventsourcing/eventstore/iam.go +++ b/internal/admin/repository/eventsourcing/eventstore/iam.go @@ -242,3 +242,75 @@ func (repo *IAMRepository) RemoveIDPProviderFromLoginPolicy(ctx context.Context, } return es_sdk.PushAggregates(ctx, repo.Eventstore.PushAggregates, nil, aggregates...) } + +func (repo *IAMRepository) GetDefaultPasswordComplexityPolicy(ctx context.Context) (*iam_model.PasswordComplexityPolicyView, error) { + policy, err := repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } + return iam_es_model.PasswordComplexityViewToModel(policy), nil +} + +func (repo *IAMRepository) AddDefaultPasswordComplexityPolicy(ctx context.Context, policy *iam_model.PasswordComplexityPolicy) (*iam_model.PasswordComplexityPolicy, error) { + policy.AggregateID = repo.SystemDefaults.IamID + return repo.IAMEventstore.AddPasswordComplexityPolicy(ctx, policy) +} + +func (repo *IAMRepository) ChangeDefaultPasswordComplexityPolicy(ctx context.Context, policy *iam_model.PasswordComplexityPolicy) (*iam_model.PasswordComplexityPolicy, error) { + policy.AggregateID = repo.SystemDefaults.IamID + return repo.IAMEventstore.ChangePasswordComplexityPolicy(ctx, policy) +} + +func (repo *IAMRepository) GetDefaultPasswordAgePolicy(ctx context.Context) (*iam_model.PasswordAgePolicyView, error) { + policy, err := repo.View.PasswordAgePolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } + return iam_es_model.PasswordAgeViewToModel(policy), nil +} + +func (repo *IAMRepository) AddDefaultPasswordAgePolicy(ctx context.Context, policy *iam_model.PasswordAgePolicy) (*iam_model.PasswordAgePolicy, error) { + policy.AggregateID = repo.SystemDefaults.IamID + return repo.IAMEventstore.AddPasswordAgePolicy(ctx, policy) +} + +func (repo *IAMRepository) ChangeDefaultPasswordAgePolicy(ctx context.Context, policy *iam_model.PasswordAgePolicy) (*iam_model.PasswordAgePolicy, error) { + policy.AggregateID = repo.SystemDefaults.IamID + return repo.IAMEventstore.ChangePasswordAgePolicy(ctx, policy) +} + +func (repo *IAMRepository) GetDefaultPasswordLockoutPolicy(ctx context.Context) (*iam_model.PasswordLockoutPolicyView, error) { + policy, err := repo.View.PasswordLockoutPolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } + return iam_es_model.PasswordLockoutViewToModel(policy), nil +} + +func (repo *IAMRepository) AddDefaultPasswordLockoutPolicy(ctx context.Context, policy *iam_model.PasswordLockoutPolicy) (*iam_model.PasswordLockoutPolicy, error) { + policy.AggregateID = repo.SystemDefaults.IamID + return repo.IAMEventstore.AddPasswordLockoutPolicy(ctx, policy) +} + +func (repo *IAMRepository) ChangeDefaultPasswordLockoutPolicy(ctx context.Context, policy *iam_model.PasswordLockoutPolicy) (*iam_model.PasswordLockoutPolicy, error) { + policy.AggregateID = repo.SystemDefaults.IamID + return repo.IAMEventstore.ChangePasswordLockoutPolicy(ctx, policy) +} + +func (repo *IAMRepository) GetOrgIAMPolicy(ctx context.Context) (*iam_model.OrgIAMPolicyView, error) { + policy, err := repo.View.OrgIAMPolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } + return iam_es_model.OrgIAMViewToModel(policy), nil +} + +func (repo *IAMRepository) AddDefaultOrgIAMPolicy(ctx context.Context, policy *iam_model.OrgIAMPolicy) (*iam_model.OrgIAMPolicy, error) { + policy.AggregateID = repo.SystemDefaults.IamID + return repo.IAMEventstore.AddOrgIAMPolicy(ctx, policy) +} + +func (repo *IAMRepository) ChangeDefaultOrgIAMPolicy(ctx context.Context, policy *iam_model.OrgIAMPolicy) (*iam_model.OrgIAMPolicy, error) { + policy.AggregateID = repo.SystemDefaults.IamID + return repo.IAMEventstore.ChangeOrgIAMPolicy(ctx, policy) +} diff --git a/internal/admin/repository/eventsourcing/eventstore/org.go b/internal/admin/repository/eventsourcing/eventstore/org.go index 2d651001f6..a7d23cb368 100644 --- a/internal/admin/repository/eventsourcing/eventstore/org.go +++ b/internal/admin/repository/eventsourcing/eventstore/org.go @@ -2,6 +2,9 @@ package eventstore import ( "context" + "github.com/caos/zitadel/internal/errors" + iam_model "github.com/caos/zitadel/internal/iam/model" + iam_view "github.com/caos/zitadel/internal/iam/repository/view/model" "github.com/caos/logging" admin_model "github.com/caos/zitadel/internal/admin/model" @@ -10,11 +13,10 @@ import ( "github.com/caos/zitadel/internal/eventstore" es_models "github.com/caos/zitadel/internal/eventstore/models" "github.com/caos/zitadel/internal/eventstore/sdk" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/view/model" org_model "github.com/caos/zitadel/internal/org/model" org_es "github.com/caos/zitadel/internal/org/repository/eventsourcing" "github.com/caos/zitadel/internal/org/repository/view/model" - policy_model "github.com/caos/zitadel/internal/policy/model" - policy_es "github.com/caos/zitadel/internal/policy/repository/eventsourcing" usr_es "github.com/caos/zitadel/internal/user/repository/eventsourcing" ) @@ -23,10 +25,9 @@ const ( ) type OrgRepo struct { - Eventstore eventstore.Eventstore - OrgEventstore *org_es.OrgEventstore - UserEventstore *usr_es.UserEventstore - PolicyEventstore *policy_es.PolicyEventstore + Eventstore eventstore.Eventstore + OrgEventstore *org_es.OrgEventstore + UserEventstore *usr_es.UserEventstore View *admin_view.View @@ -35,11 +36,12 @@ type OrgRepo struct { } func (repo *OrgRepo) SetUpOrg(ctx context.Context, setUp *admin_model.SetupOrg) (*admin_model.SetupOrg, error) { - pwPolicy, err := repo.PolicyEventstore.GetPasswordComplexityPolicy(ctx, policy_model.DefaultPolicy) + pwPolicy, err := repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) if err != nil { return nil, err } - orgPolicy, err := repo.OrgEventstore.GetOrgIAMPolicy(ctx, policy_model.DefaultPolicy) + pwPolicyView := iam_view.PasswordComplexityViewToModel(pwPolicy) + orgPolicy, err := repo.GetDefaultOrgIAMPolicy(ctx) if err != nil { return nil, err } @@ -54,7 +56,7 @@ func (repo *OrgRepo) SetUpOrg(ctx context.Context, setUp *admin_model.SetupOrg) if err != nil { return nil, err } - user, userAggregates, err := repo.UserEventstore.PrepareCreateUser(ctx, setUp.User, pwPolicy, orgPolicy, org.AggregateID) + user, userAggregates, err := repo.UserEventstore.PrepareCreateUser(ctx, setUp.User, pwPolicyView, orgPolicy, org.AggregateID) if err != nil { return nil, err } @@ -92,7 +94,7 @@ func (repo *OrgRepo) SearchOrgs(ctx context.Context, query *org_model.OrgSearchR result := &org_model.OrgSearchResult{ Offset: query.Offset, Limit: query.Limit, - TotalResult: uint64(count), + TotalResult: count, Result: model.OrgsToModel(orgs), } if err == nil { @@ -106,18 +108,34 @@ func (repo *OrgRepo) IsOrgUnique(ctx context.Context, name, domain string) (isUn return repo.OrgEventstore.IsOrgUnique(ctx, name, domain) } -func (repo *OrgRepo) GetOrgIamPolicyByID(ctx context.Context, id string) (*org_model.OrgIAMPolicy, error) { - return repo.OrgEventstore.GetOrgIAMPolicy(ctx, id) +func (repo *OrgRepo) GetOrgIAMPolicyByID(ctx context.Context, id string) (*iam_model.OrgIAMPolicyView, error) { + policy, err := repo.View.OrgIAMPolicyByAggregateID(id) + if errors.IsNotFound(err) { + return repo.GetDefaultOrgIAMPolicy(ctx) + } + if err != nil { + return nil, err + } + return iam_es_model.OrgIAMViewToModel(policy), err } -func (repo *OrgRepo) CreateOrgIamPolicy(ctx context.Context, policy *org_model.OrgIAMPolicy) (*org_model.OrgIAMPolicy, error) { +func (repo *OrgRepo) GetDefaultOrgIAMPolicy(ctx context.Context) (*iam_model.OrgIAMPolicyView, error) { + policy, err := repo.View.OrgIAMPolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } + policy.Default = true + return iam_es_model.OrgIAMViewToModel(policy), err +} + +func (repo *OrgRepo) CreateOrgIAMPolicy(ctx context.Context, policy *iam_model.OrgIAMPolicy) (*iam_model.OrgIAMPolicy, error) { return repo.OrgEventstore.AddOrgIAMPolicy(ctx, policy) } -func (repo *OrgRepo) ChangeOrgIamPolicy(ctx context.Context, policy *org_model.OrgIAMPolicy) (*org_model.OrgIAMPolicy, error) { +func (repo *OrgRepo) ChangeOrgIAMPolicy(ctx context.Context, policy *iam_model.OrgIAMPolicy) (*iam_model.OrgIAMPolicy, error) { return repo.OrgEventstore.ChangeOrgIAMPolicy(ctx, policy) } -func (repo *OrgRepo) RemoveOrgIamPolicy(ctx context.Context, id string) error { +func (repo *OrgRepo) RemoveOrgIAMPolicy(ctx context.Context, id string) error { return repo.OrgEventstore.RemoveOrgIAMPolicy(ctx, id) } diff --git a/internal/admin/repository/eventsourcing/eventstore/user.go b/internal/admin/repository/eventsourcing/eventstore/user.go index 6fd87412a0..b465ef091b 100644 --- a/internal/admin/repository/eventsourcing/eventstore/user.go +++ b/internal/admin/repository/eventsourcing/eventstore/user.go @@ -2,18 +2,22 @@ package eventstore import ( "context" + admin_view "github.com/caos/zitadel/internal/admin/repository/eventsourcing/view" + "github.com/caos/zitadel/internal/config/systemdefaults" + caos_errs "github.com/caos/zitadel/internal/errors" + iam_view "github.com/caos/zitadel/internal/iam/repository/view/model" "github.com/caos/zitadel/internal/api/authz" org_event "github.com/caos/zitadel/internal/org/repository/eventsourcing" - policy_event "github.com/caos/zitadel/internal/policy/repository/eventsourcing" usr_model "github.com/caos/zitadel/internal/user/model" usr_event "github.com/caos/zitadel/internal/user/repository/eventsourcing" ) type UserRepo struct { - UserEvents *usr_event.UserEventstore - PolicyEvents *policy_event.PolicyEventstore - OrgEvents *org_event.OrgEventstore + UserEvents *usr_event.UserEventstore + OrgEvents *org_event.OrgEventstore + View *admin_view.View + SystemDefaults systemdefaults.SystemDefaults } func (repo *UserRepo) UserByID(ctx context.Context, id string) (project *usr_model.User, err error) { @@ -21,15 +25,23 @@ func (repo *UserRepo) UserByID(ctx context.Context, id string) (project *usr_mod } func (repo *UserRepo) CreateUser(ctx context.Context, user *usr_model.User) (*usr_model.User, error) { - pwPolicy, err := repo.PolicyEvents.GetPasswordComplexityPolicy(ctx, authz.GetCtxData(ctx).OrgID) + pwPolicy, err := repo.View.PasswordComplexityPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if caos_errs.IsNotFound(err) { + pwPolicy, err = repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return nil, err } - orgPolicy, err := repo.OrgEvents.GetOrgIAMPolicy(ctx, authz.GetCtxData(ctx).OrgID) - if err != nil { - return nil, err + pwPolicyView := iam_view.PasswordComplexityViewToModel(pwPolicy) + orgPolicy, err := repo.View.OrgIAMPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if err != nil && caos_errs.IsNotFound(err) { + orgPolicy, err = repo.View.OrgIAMPolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } } - return repo.UserEvents.CreateUser(ctx, user, pwPolicy, orgPolicy) + orgPolicyView := iam_view.OrgIAMViewToModel(orgPolicy) + return repo.UserEvents.CreateUser(ctx, user, pwPolicyView, orgPolicyView) } func (repo *UserRepo) RegisterUser(ctx context.Context, user *usr_model.User, resourceOwner string) (*usr_model.User, error) { @@ -37,13 +49,22 @@ func (repo *UserRepo) RegisterUser(ctx context.Context, user *usr_model.User, re if resourceOwner != "" { policyResourceOwner = resourceOwner } - pwPolicy, err := repo.PolicyEvents.GetPasswordComplexityPolicy(ctx, policyResourceOwner) + pwPolicy, err := repo.View.PasswordComplexityPolicyByAggregateID(policyResourceOwner) + if caos_errs.IsNotFound(err) { + pwPolicy, err = repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return nil, err } - orgPolicy, err := repo.OrgEvents.GetOrgIAMPolicy(ctx, policyResourceOwner) + pwPolicyView := iam_view.PasswordComplexityViewToModel(pwPolicy) + + orgPolicy, err := repo.View.OrgIAMPolicyByAggregateID(policyResourceOwner) + if caos_errs.IsNotFound(err) { + orgPolicy, err = repo.View.OrgIAMPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return nil, err } - return repo.UserEvents.RegisterUser(ctx, user, pwPolicy, orgPolicy, resourceOwner) + orgPolicyView := iam_view.OrgIAMViewToModel(orgPolicy) + return repo.UserEvents.RegisterUser(ctx, user, pwPolicyView, orgPolicyView, resourceOwner) } diff --git a/internal/admin/repository/eventsourcing/handler/handler.go b/internal/admin/repository/eventsourcing/handler/handler.go index 2b77263ef4..bf32438ad2 100644 --- a/internal/admin/repository/eventsourcing/handler/handler.go +++ b/internal/admin/repository/eventsourcing/handler/handler.go @@ -42,7 +42,11 @@ func Register(configs Configs, bulkLimit, errorCount uint64, view *view.View, ev &IDPProvider{handler: handler{view, bulkLimit, configs.cycleDuration("LoginPolicy"), errorCount}, systemDefaults: defaults, iamEvents: repos.IamEvents, orgEvents: repos.OrgEvents}, &User{handler: handler{view, bulkLimit, configs.cycleDuration("User"), errorCount}, - eventstore: eventstore, orgEvents: repos.OrgEvents}, + eventstore: eventstore, orgEvents: repos.OrgEvents, iamEvents: repos.IamEvents, systemDefaults: defaults}, + &PasswordComplexityPolicy{handler: handler{view, bulkLimit, configs.cycleDuration("PasswordComplexityPolicy"), errorCount}}, + &PasswordAgePolicy{handler: handler{view, bulkLimit, configs.cycleDuration("PasswordAgePolicy"), errorCount}}, + &PasswordLockoutPolicy{handler: handler{view, bulkLimit, configs.cycleDuration("PasswordLockoutPolicy"), errorCount}}, + &OrgIAMPolicy{handler: handler{view, bulkLimit, configs.cycleDuration("OrgIAMPolicy"), errorCount}}, &ExternalIDP{handler: handler{view, bulkLimit, configs.cycleDuration("User"), errorCount}, orgEvents: repos.OrgEvents, iamEvents: repos.IamEvents, systemDefaults: defaults}, } diff --git a/internal/admin/repository/eventsourcing/handler/org_iam_policy.go b/internal/admin/repository/eventsourcing/handler/org_iam_policy.go new file mode 100644 index 0000000000..cb49e33efb --- /dev/null +++ b/internal/admin/repository/eventsourcing/handler/org_iam_policy.go @@ -0,0 +1,69 @@ +package handler + +import ( + "github.com/caos/logging" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + + "github.com/caos/zitadel/internal/eventstore/models" + es_models "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/eventstore/spooler" + iam_model "github.com/caos/zitadel/internal/iam/repository/view/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" +) + +type OrgIAMPolicy struct { + handler +} + +const ( + orgIAMPolicyTable = "adminapi.org_iam_policies" +) + +func (m *OrgIAMPolicy) ViewModel() string { + return orgIAMPolicyTable +} + +func (m *OrgIAMPolicy) EventQuery() (*models.SearchQuery, error) { + sequence, err := m.view.GetLatestOrgIAMPolicySequence() + if err != nil { + return nil, err + } + return es_models.NewSearchQuery(). + AggregateTypeFilter(model.OrgAggregate, iam_es_model.IAMAggregate). + LatestSequenceFilter(sequence.CurrentSequence), nil +} + +func (m *OrgIAMPolicy) Reduce(event *models.Event) (err error) { + switch event.AggregateType { + case model.OrgAggregate, iam_es_model.IAMAggregate: + err = m.processOrgIAMPolicy(event) + } + return err +} + +func (m *OrgIAMPolicy) processOrgIAMPolicy(event *models.Event) (err error) { + policy := new(iam_model.OrgIAMPolicyView) + switch event.Type { + case iam_es_model.OrgIAMPolicyAdded, model.OrgIAMPolicyAdded: + err = policy.AppendEvent(event) + case iam_es_model.OrgIAMPolicyChanged, model.OrgIAMPolicyChanged: + policy, err = m.view.OrgIAMPolicyByAggregateID(event.AggregateID) + if err != nil { + return err + } + err = policy.AppendEvent(event) + case model.OrgIAMPolicyRemoved: + return m.view.DeleteOrgIAMPolicy(event.AggregateID, event.Sequence) + default: + return m.view.ProcessedOrgIAMPolicySequence(event.Sequence) + } + if err != nil { + return err + } + return m.view.PutOrgIAMPolicy(policy, policy.Sequence) +} + +func (m *OrgIAMPolicy) OnError(event *models.Event, err error) error { + logging.LogWithFields("SPOOL-Wm8fs", "id", event.AggregateID).WithError(err).Warn("something went wrong in orgIAM policy handler") + return spooler.HandleError(event, err, m.view.GetLatestOrgIAMPolicyFailedEvent, m.view.ProcessedOrgIAMPolicyFailedEvent, m.view.ProcessedOrgIAMPolicySequence, m.errorCountUntilSkip) +} diff --git a/internal/admin/repository/eventsourcing/handler/password_age_policy.go b/internal/admin/repository/eventsourcing/handler/password_age_policy.go new file mode 100644 index 0000000000..bf56af86ef --- /dev/null +++ b/internal/admin/repository/eventsourcing/handler/password_age_policy.go @@ -0,0 +1,69 @@ +package handler + +import ( + "github.com/caos/logging" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + + "github.com/caos/zitadel/internal/eventstore/models" + es_models "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/eventstore/spooler" + iam_model "github.com/caos/zitadel/internal/iam/repository/view/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" +) + +type PasswordAgePolicy struct { + handler +} + +const ( + passwordAgePolicyTable = "adminapi.password_age_policies" +) + +func (m *PasswordAgePolicy) ViewModel() string { + return passwordAgePolicyTable +} + +func (m *PasswordAgePolicy) EventQuery() (*models.SearchQuery, error) { + sequence, err := m.view.GetLatestPasswordAgePolicySequence() + if err != nil { + return nil, err + } + return es_models.NewSearchQuery(). + AggregateTypeFilter(model.OrgAggregate, iam_es_model.IAMAggregate). + LatestSequenceFilter(sequence.CurrentSequence), nil +} + +func (m *PasswordAgePolicy) Reduce(event *models.Event) (err error) { + switch event.AggregateType { + case model.OrgAggregate, iam_es_model.IAMAggregate: + err = m.processPasswordAgePolicy(event) + } + return err +} + +func (m *PasswordAgePolicy) processPasswordAgePolicy(event *models.Event) (err error) { + policy := new(iam_model.PasswordAgePolicyView) + switch event.Type { + case iam_es_model.PasswordAgePolicyAdded, model.PasswordAgePolicyAdded: + err = policy.AppendEvent(event) + case iam_es_model.PasswordAgePolicyChanged, model.PasswordAgePolicyChanged: + policy, err = m.view.PasswordAgePolicyByAggregateID(event.AggregateID) + if err != nil { + return err + } + err = policy.AppendEvent(event) + case model.PasswordAgePolicyRemoved: + return m.view.DeletePasswordAgePolicy(event.AggregateID, event.Sequence) + default: + return m.view.ProcessedPasswordAgePolicySequence(event.Sequence) + } + if err != nil { + return err + } + return m.view.PutPasswordAgePolicy(policy, policy.Sequence) +} + +func (m *PasswordAgePolicy) OnError(event *models.Event, err error) error { + logging.LogWithFields("SPOOL-nD8sie", "id", event.AggregateID).WithError(err).Warn("something went wrong in passwordAge policy handler") + return spooler.HandleError(event, err, m.view.GetLatestPasswordAgePolicyFailedEvent, m.view.ProcessedPasswordAgePolicyFailedEvent, m.view.ProcessedPasswordAgePolicySequence, m.errorCountUntilSkip) +} diff --git a/internal/admin/repository/eventsourcing/handler/password_complexity_policy.go b/internal/admin/repository/eventsourcing/handler/password_complexity_policy.go new file mode 100644 index 0000000000..2eeb6cf759 --- /dev/null +++ b/internal/admin/repository/eventsourcing/handler/password_complexity_policy.go @@ -0,0 +1,69 @@ +package handler + +import ( + "github.com/caos/logging" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + + "github.com/caos/zitadel/internal/eventstore/models" + es_models "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/eventstore/spooler" + iam_model "github.com/caos/zitadel/internal/iam/repository/view/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" +) + +type PasswordComplexityPolicy struct { + handler +} + +const ( + passwordComplexityPolicyTable = "adminapi.password_complexity_policies" +) + +func (m *PasswordComplexityPolicy) ViewModel() string { + return passwordComplexityPolicyTable +} + +func (m *PasswordComplexityPolicy) EventQuery() (*models.SearchQuery, error) { + sequence, err := m.view.GetLatestPasswordComplexityPolicySequence() + if err != nil { + return nil, err + } + return es_models.NewSearchQuery(). + AggregateTypeFilter(model.OrgAggregate, iam_es_model.IAMAggregate). + LatestSequenceFilter(sequence.CurrentSequence), nil +} + +func (m *PasswordComplexityPolicy) Reduce(event *models.Event) (err error) { + switch event.AggregateType { + case model.OrgAggregate, iam_es_model.IAMAggregate: + err = m.processPasswordComplexityPolicy(event) + } + return err +} + +func (m *PasswordComplexityPolicy) processPasswordComplexityPolicy(event *models.Event) (err error) { + policy := new(iam_model.PasswordComplexityPolicyView) + switch event.Type { + case iam_es_model.PasswordComplexityPolicyAdded, model.PasswordComplexityPolicyAdded: + err = policy.AppendEvent(event) + case iam_es_model.PasswordComplexityPolicyChanged, model.PasswordComplexityPolicyChanged: + policy, err = m.view.PasswordComplexityPolicyByAggregateID(event.AggregateID) + if err != nil { + return err + } + err = policy.AppendEvent(event) + case model.PasswordComplexityPolicyRemoved: + return m.view.DeletePasswordComplexityPolicy(event.AggregateID, event.Sequence) + default: + return m.view.ProcessedPasswordComplexityPolicySequence(event.Sequence) + } + if err != nil { + return err + } + return m.view.PutPasswordComplexityPolicy(policy, policy.Sequence) +} + +func (m *PasswordComplexityPolicy) OnError(event *models.Event, err error) error { + logging.LogWithFields("SPOOL-Wm8fs", "id", event.AggregateID).WithError(err).Warn("something went wrong in passwordComplexity policy handler") + return spooler.HandleError(event, err, m.view.GetLatestPasswordComplexityPolicyFailedEvent, m.view.ProcessedPasswordComplexityPolicyFailedEvent, m.view.ProcessedPasswordComplexityPolicySequence, m.errorCountUntilSkip) +} diff --git a/internal/admin/repository/eventsourcing/handler/password_lockout_policy.go b/internal/admin/repository/eventsourcing/handler/password_lockout_policy.go new file mode 100644 index 0000000000..bd71ab054d --- /dev/null +++ b/internal/admin/repository/eventsourcing/handler/password_lockout_policy.go @@ -0,0 +1,69 @@ +package handler + +import ( + "github.com/caos/logging" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + + "github.com/caos/zitadel/internal/eventstore/models" + es_models "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/eventstore/spooler" + iam_model "github.com/caos/zitadel/internal/iam/repository/view/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" +) + +type PasswordLockoutPolicy struct { + handler +} + +const ( + passwordLockoutPolicyTable = "adminapi.password_lockout_policies" +) + +func (m *PasswordLockoutPolicy) ViewModel() string { + return passwordLockoutPolicyTable +} + +func (m *PasswordLockoutPolicy) EventQuery() (*models.SearchQuery, error) { + sequence, err := m.view.GetLatestPasswordLockoutPolicySequence() + if err != nil { + return nil, err + } + return es_models.NewSearchQuery(). + AggregateTypeFilter(model.OrgAggregate, iam_es_model.IAMAggregate). + LatestSequenceFilter(sequence.CurrentSequence), nil +} + +func (m *PasswordLockoutPolicy) Reduce(event *models.Event) (err error) { + switch event.AggregateType { + case model.OrgAggregate, iam_es_model.IAMAggregate: + err = m.processPasswordLockoutPolicy(event) + } + return err +} + +func (m *PasswordLockoutPolicy) processPasswordLockoutPolicy(event *models.Event) (err error) { + policy := new(iam_model.PasswordLockoutPolicyView) + switch event.Type { + case iam_es_model.PasswordLockoutPolicyAdded, model.PasswordLockoutPolicyAdded: + err = policy.AppendEvent(event) + case iam_es_model.PasswordLockoutPolicyChanged, model.PasswordLockoutPolicyChanged: + policy, err = m.view.PasswordLockoutPolicyByAggregateID(event.AggregateID) + if err != nil { + return err + } + err = policy.AppendEvent(event) + case model.PasswordLockoutPolicyRemoved: + return m.view.DeletePasswordLockoutPolicy(event.AggregateID, event.Sequence) + default: + return m.view.ProcessedPasswordLockoutPolicySequence(event.Sequence) + } + if err != nil { + return err + } + return m.view.PutPasswordLockoutPolicy(policy, policy.Sequence) +} + +func (m *PasswordLockoutPolicy) OnError(event *models.Event, err error) error { + logging.LogWithFields("SPOOL-nD8sie", "id", event.AggregateID).WithError(err).Warn("something went wrong in passwordLockout policy handler") + return spooler.HandleError(event, err, m.view.GetLatestPasswordLockoutPolicyFailedEvent, m.view.ProcessedPasswordLockoutPolicyFailedEvent, m.view.ProcessedPasswordLockoutPolicySequence, m.errorCountUntilSkip) +} diff --git a/internal/admin/repository/eventsourcing/handler/user.go b/internal/admin/repository/eventsourcing/handler/user.go index 3d77f972ea..8a4105d131 100644 --- a/internal/admin/repository/eventsourcing/handler/user.go +++ b/internal/admin/repository/eventsourcing/handler/user.go @@ -2,6 +2,8 @@ package handler import ( "context" + "github.com/caos/zitadel/internal/config/systemdefaults" + iam_es "github.com/caos/zitadel/internal/iam/repository/eventsourcing" "github.com/caos/logging" @@ -18,8 +20,10 @@ import ( type User struct { handler - eventstore eventstore.Eventstore - orgEvents *org_events.OrgEventstore + eventstore eventstore.Eventstore + orgEvents *org_events.OrgEventstore + iamEvents *iam_es.IAMEventstore + systemDefaults systemdefaults.SystemDefaults } const ( @@ -136,9 +140,12 @@ func (u *User) fillLoginNamesOnOrgUsers(event *models.Event) error { if err != nil { return err } - policy, err := u.orgEvents.GetOrgIAMPolicy(context.Background(), event.ResourceOwner) - if err != nil { - return err + policy := org.OrgIamPolicy + if policy == nil { + policy, err = u.iamEvents.GetOrgIAMPolicy(context.Background(), u.systemDefaults.IamID) + if err != nil { + return err + } } users, err := u.view.UsersByOrgID(event.AggregateID) if err != nil { @@ -155,9 +162,12 @@ func (u *User) fillPreferredLoginNamesOnOrgUsers(event *models.Event) error { if err != nil { return err } - policy, err := u.orgEvents.GetOrgIAMPolicy(context.Background(), event.ResourceOwner) - if err != nil { - return err + policy := org.OrgIamPolicy + if policy == nil { + policy, err = u.iamEvents.GetOrgIAMPolicy(context.Background(), u.systemDefaults.IamID) + if err != nil { + return err + } } if !policy.UserLoginMustBeDomain { return nil @@ -177,9 +187,12 @@ func (u *User) fillLoginNames(user *view_model.UserView) (err error) { if err != nil { return err } - policy, err := u.orgEvents.GetOrgIAMPolicy(context.Background(), user.ResourceOwner) - if err != nil { - return err + policy := org.OrgIamPolicy + if policy == nil { + policy, err = u.iamEvents.GetOrgIAMPolicy(context.Background(), u.systemDefaults.IamID) + if err != nil { + return err + } } user.SetLoginNames(policy, org.Domains) user.PreferredLoginName = user.GenerateLoginName(org.GetPrimaryDomain().Domain, policy.UserLoginMustBeDomain) diff --git a/internal/admin/repository/eventsourcing/repository.go b/internal/admin/repository/eventsourcing/repository.go index 28eb20f654..a7b8a98f25 100644 --- a/internal/admin/repository/eventsourcing/repository.go +++ b/internal/admin/repository/eventsourcing/repository.go @@ -13,7 +13,6 @@ import ( es_spol "github.com/caos/zitadel/internal/eventstore/spooler" es_iam "github.com/caos/zitadel/internal/iam/repository/eventsourcing" es_org "github.com/caos/zitadel/internal/org/repository/eventsourcing" - es_policy "github.com/caos/zitadel/internal/policy/repository/eventsourcing" es_usr "github.com/caos/zitadel/internal/user/repository/eventsourcing" ) @@ -30,6 +29,7 @@ type EsRepository struct { eventstore.OrgRepo eventstore.IAMRepository eventstore.AdministratorRepo + eventstore.UserRepo } func Start(ctx context.Context, conf Config, systemDefaults sd.SystemDefaults, roles []string) (*EsRepository, error) { @@ -55,13 +55,6 @@ func Start(ctx context.Context, conf Config, systemDefaults sd.SystemDefaults, r if err != nil { return nil, err } - policy, err := es_policy.StartPolicy(es_policy.PolicyConfig{ - Eventstore: es, - Cache: conf.Eventstore.Cache, - }, systemDefaults) - if err != nil { - return nil, err - } sqlClient, err := conf.View.Start() if err != nil { return nil, err @@ -76,13 +69,12 @@ func Start(ctx context.Context, conf Config, systemDefaults sd.SystemDefaults, r return &EsRepository{ spooler: spool, OrgRepo: eventstore.OrgRepo{ - Eventstore: es, - OrgEventstore: org, - UserEventstore: user, - PolicyEventstore: policy, - View: view, - SearchLimit: conf.SearchLimit, - SystemDefaults: systemDefaults, + Eventstore: es, + OrgEventstore: org, + UserEventstore: user, + View: view, + SearchLimit: conf.SearchLimit, + SystemDefaults: systemDefaults, }, IAMRepository: eventstore.IAMRepository{ IAMEventstore: iam, @@ -96,6 +88,12 @@ func Start(ctx context.Context, conf Config, systemDefaults sd.SystemDefaults, r AdministratorRepo: eventstore.AdministratorRepo{ View: view, }, + UserRepo: eventstore.UserRepo{ + UserEvents: user, + OrgEvents: org, + View: view, + SystemDefaults: systemDefaults, + }, }, nil } diff --git a/internal/admin/repository/eventsourcing/view/org_iam_policy.go b/internal/admin/repository/eventsourcing/view/org_iam_policy.go new file mode 100644 index 0000000000..57196f7eaf --- /dev/null +++ b/internal/admin/repository/eventsourcing/view/org_iam_policy.go @@ -0,0 +1,48 @@ +package view + +import ( + "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/iam/repository/view" + "github.com/caos/zitadel/internal/iam/repository/view/model" + global_view "github.com/caos/zitadel/internal/view/repository" +) + +const ( + orgIAMPolicyTable = "adminapi.org_iam_policies" +) + +func (v *View) OrgIAMPolicyByAggregateID(aggregateID string) (*model.OrgIAMPolicyView, error) { + return view.GetOrgIAMPolicyByAggregateID(v.Db, orgIAMPolicyTable, aggregateID) +} + +func (v *View) PutOrgIAMPolicy(policy *model.OrgIAMPolicyView, sequence uint64) error { + err := view.PutOrgIAMPolicy(v.Db, orgIAMPolicyTable, policy) + if err != nil { + return err + } + return v.ProcessedOrgIAMPolicySequence(sequence) +} + +func (v *View) DeleteOrgIAMPolicy(aggregateID string, eventSequence uint64) error { + err := view.DeleteOrgIAMPolicy(v.Db, orgIAMPolicyTable, aggregateID) + if err != nil && !errors.IsNotFound(err) { + return err + } + return v.ProcessedOrgIAMPolicySequence(eventSequence) +} + +func (v *View) GetLatestOrgIAMPolicySequence() (*global_view.CurrentSequence, error) { + return v.latestSequence(orgIAMPolicyTable) +} + +func (v *View) ProcessedOrgIAMPolicySequence(eventSequence uint64) error { + return v.saveCurrentSequence(orgIAMPolicyTable, eventSequence) +} + +func (v *View) GetLatestOrgIAMPolicyFailedEvent(sequence uint64) (*global_view.FailedEvent, error) { + return v.latestFailedEvent(orgIAMPolicyTable, sequence) +} + +func (v *View) ProcessedOrgIAMPolicyFailedEvent(failedEvent *global_view.FailedEvent) error { + return v.saveFailedEvent(failedEvent) +} diff --git a/internal/admin/repository/eventsourcing/view/password_age_policy.go b/internal/admin/repository/eventsourcing/view/password_age_policy.go new file mode 100644 index 0000000000..915f2cb50d --- /dev/null +++ b/internal/admin/repository/eventsourcing/view/password_age_policy.go @@ -0,0 +1,48 @@ +package view + +import ( + "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/iam/repository/view" + "github.com/caos/zitadel/internal/iam/repository/view/model" + global_view "github.com/caos/zitadel/internal/view/repository" +) + +const ( + passwordAgePolicyTable = "adminapi.password_age_policies" +) + +func (v *View) PasswordAgePolicyByAggregateID(aggregateID string) (*model.PasswordAgePolicyView, error) { + return view.GetPasswordAgePolicyByAggregateID(v.Db, passwordAgePolicyTable, aggregateID) +} + +func (v *View) PutPasswordAgePolicy(policy *model.PasswordAgePolicyView, sequence uint64) error { + err := view.PutPasswordAgePolicy(v.Db, passwordAgePolicyTable, policy) + if err != nil { + return err + } + return v.ProcessedPasswordAgePolicySequence(sequence) +} + +func (v *View) DeletePasswordAgePolicy(aggregateID string, eventSequence uint64) error { + err := view.DeletePasswordAgePolicy(v.Db, passwordAgePolicyTable, aggregateID) + if err != nil && !errors.IsNotFound(err) { + return err + } + return v.ProcessedPasswordAgePolicySequence(eventSequence) +} + +func (v *View) GetLatestPasswordAgePolicySequence() (*global_view.CurrentSequence, error) { + return v.latestSequence(passwordAgePolicyTable) +} + +func (v *View) ProcessedPasswordAgePolicySequence(eventSequence uint64) error { + return v.saveCurrentSequence(passwordAgePolicyTable, eventSequence) +} + +func (v *View) GetLatestPasswordAgePolicyFailedEvent(sequence uint64) (*global_view.FailedEvent, error) { + return v.latestFailedEvent(passwordAgePolicyTable, sequence) +} + +func (v *View) ProcessedPasswordAgePolicyFailedEvent(failedEvent *global_view.FailedEvent) error { + return v.saveFailedEvent(failedEvent) +} diff --git a/internal/admin/repository/eventsourcing/view/password_complexity_policy.go b/internal/admin/repository/eventsourcing/view/password_complexity_policy.go new file mode 100644 index 0000000000..554a32ca0d --- /dev/null +++ b/internal/admin/repository/eventsourcing/view/password_complexity_policy.go @@ -0,0 +1,48 @@ +package view + +import ( + "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/iam/repository/view" + "github.com/caos/zitadel/internal/iam/repository/view/model" + global_view "github.com/caos/zitadel/internal/view/repository" +) + +const ( + passwordComplexityPolicyTable = "adminapi.password_complexity_policies" +) + +func (v *View) PasswordComplexityPolicyByAggregateID(aggregateID string) (*model.PasswordComplexityPolicyView, error) { + return view.GetPasswordComplexityPolicyByAggregateID(v.Db, passwordComplexityPolicyTable, aggregateID) +} + +func (v *View) PutPasswordComplexityPolicy(policy *model.PasswordComplexityPolicyView, sequence uint64) error { + err := view.PutPasswordComplexityPolicy(v.Db, passwordComplexityPolicyTable, policy) + if err != nil { + return err + } + return v.ProcessedPasswordComplexityPolicySequence(sequence) +} + +func (v *View) DeletePasswordComplexityPolicy(aggregateID string, eventSequence uint64) error { + err := view.DeletePasswordComplexityPolicy(v.Db, passwordComplexityPolicyTable, aggregateID) + if err != nil && !errors.IsNotFound(err) { + return err + } + return v.ProcessedPasswordComplexityPolicySequence(eventSequence) +} + +func (v *View) GetLatestPasswordComplexityPolicySequence() (*global_view.CurrentSequence, error) { + return v.latestSequence(passwordComplexityPolicyTable) +} + +func (v *View) ProcessedPasswordComplexityPolicySequence(eventSequence uint64) error { + return v.saveCurrentSequence(passwordComplexityPolicyTable, eventSequence) +} + +func (v *View) GetLatestPasswordComplexityPolicyFailedEvent(sequence uint64) (*global_view.FailedEvent, error) { + return v.latestFailedEvent(passwordComplexityPolicyTable, sequence) +} + +func (v *View) ProcessedPasswordComplexityPolicyFailedEvent(failedEvent *global_view.FailedEvent) error { + return v.saveFailedEvent(failedEvent) +} diff --git a/internal/admin/repository/eventsourcing/view/password_lockout_policy.go b/internal/admin/repository/eventsourcing/view/password_lockout_policy.go new file mode 100644 index 0000000000..4ee6d38623 --- /dev/null +++ b/internal/admin/repository/eventsourcing/view/password_lockout_policy.go @@ -0,0 +1,48 @@ +package view + +import ( + "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/iam/repository/view" + "github.com/caos/zitadel/internal/iam/repository/view/model" + global_view "github.com/caos/zitadel/internal/view/repository" +) + +const ( + passwordLockoutPolicyTable = "adminapi.password_lockout_policies" +) + +func (v *View) PasswordLockoutPolicyByAggregateID(aggregateID string) (*model.PasswordLockoutPolicyView, error) { + return view.GetPasswordLockoutPolicyByAggregateID(v.Db, passwordLockoutPolicyTable, aggregateID) +} + +func (v *View) PutPasswordLockoutPolicy(policy *model.PasswordLockoutPolicyView, sequence uint64) error { + err := view.PutPasswordLockoutPolicy(v.Db, passwordLockoutPolicyTable, policy) + if err != nil { + return err + } + return v.ProcessedPasswordLockoutPolicySequence(sequence) +} + +func (v *View) DeletePasswordLockoutPolicy(aggregateID string, eventSequence uint64) error { + err := view.DeletePasswordLockoutPolicy(v.Db, passwordLockoutPolicyTable, aggregateID) + if err != nil && !errors.IsNotFound(err) { + return err + } + return v.ProcessedPasswordLockoutPolicySequence(eventSequence) +} + +func (v *View) GetLatestPasswordLockoutPolicySequence() (*global_view.CurrentSequence, error) { + return v.latestSequence(passwordLockoutPolicyTable) +} + +func (v *View) ProcessedPasswordLockoutPolicySequence(eventSequence uint64) error { + return v.saveCurrentSequence(passwordLockoutPolicyTable, eventSequence) +} + +func (v *View) GetLatestPasswordLockoutPolicyFailedEvent(sequence uint64) (*global_view.FailedEvent, error) { + return v.latestFailedEvent(passwordLockoutPolicyTable, sequence) +} + +func (v *View) ProcessedPasswordLockoutPolicyFailedEvent(failedEvent *global_view.FailedEvent) error { + return v.saveFailedEvent(failedEvent) +} diff --git a/internal/admin/repository/iam.go b/internal/admin/repository/iam.go index c01c2d0fd9..c75a683812 100644 --- a/internal/admin/repository/iam.go +++ b/internal/admin/repository/iam.go @@ -28,4 +28,20 @@ type IAMRepository interface { SearchDefaultIDPProviders(ctx context.Context, request *iam_model.IDPProviderSearchRequest) (*iam_model.IDPProviderSearchResponse, error) AddIDPProviderToLoginPolicy(ctx context.Context, provider *iam_model.IDPProvider) (*iam_model.IDPProvider, error) RemoveIDPProviderFromLoginPolicy(ctx context.Context, provider *iam_model.IDPProvider) error + + GetDefaultPasswordComplexityPolicy(ctx context.Context) (*iam_model.PasswordComplexityPolicyView, error) + AddDefaultPasswordComplexityPolicy(ctx context.Context, policy *iam_model.PasswordComplexityPolicy) (*iam_model.PasswordComplexityPolicy, error) + ChangeDefaultPasswordComplexityPolicy(ctx context.Context, policy *iam_model.PasswordComplexityPolicy) (*iam_model.PasswordComplexityPolicy, error) + + GetDefaultPasswordAgePolicy(ctx context.Context) (*iam_model.PasswordAgePolicyView, error) + AddDefaultPasswordAgePolicy(ctx context.Context, policy *iam_model.PasswordAgePolicy) (*iam_model.PasswordAgePolicy, error) + ChangeDefaultPasswordAgePolicy(ctx context.Context, policy *iam_model.PasswordAgePolicy) (*iam_model.PasswordAgePolicy, error) + + GetDefaultPasswordLockoutPolicy(ctx context.Context) (*iam_model.PasswordLockoutPolicyView, error) + AddDefaultPasswordLockoutPolicy(ctx context.Context, policy *iam_model.PasswordLockoutPolicy) (*iam_model.PasswordLockoutPolicy, error) + ChangeDefaultPasswordLockoutPolicy(ctx context.Context, policy *iam_model.PasswordLockoutPolicy) (*iam_model.PasswordLockoutPolicy, error) + + GetDefaultOrgIAMPolicy(ctx context.Context) (*iam_model.OrgIAMPolicyView, error) + AddDefaultOrgIAMPolicy(ctx context.Context, policy *iam_model.OrgIAMPolicy) (*iam_model.OrgIAMPolicy, error) + ChangeDefaultOrgIAMPolicy(ctx context.Context, policy *iam_model.OrgIAMPolicy) (*iam_model.OrgIAMPolicy, error) } diff --git a/internal/admin/repository/org.go b/internal/admin/repository/org.go index 8849d2b03b..e41038dd1b 100644 --- a/internal/admin/repository/org.go +++ b/internal/admin/repository/org.go @@ -2,6 +2,7 @@ package repository import ( "context" + iam_model "github.com/caos/zitadel/internal/iam/model" admin_model "github.com/caos/zitadel/internal/admin/model" org_model "github.com/caos/zitadel/internal/org/model" @@ -13,8 +14,9 @@ type OrgRepository interface { OrgByID(ctx context.Context, id string) (*org_model.Org, error) SearchOrgs(ctx context.Context, query *org_model.OrgSearchRequest) (*org_model.OrgSearchResult, error) - GetOrgIamPolicyByID(ctx context.Context, id string) (*org_model.OrgIAMPolicy, error) - CreateOrgIamPolicy(ctx context.Context, policy *org_model.OrgIAMPolicy) (*org_model.OrgIAMPolicy, error) - ChangeOrgIamPolicy(ctx context.Context, policy *org_model.OrgIAMPolicy) (*org_model.OrgIAMPolicy, error) - RemoveOrgIamPolicy(ctx context.Context, id string) error + GetOrgIAMPolicyByID(ctx context.Context, id string) (*iam_model.OrgIAMPolicyView, error) + GetDefaultOrgIAMPolicy(ctx context.Context) (*iam_model.OrgIAMPolicyView, error) + CreateOrgIAMPolicy(ctx context.Context, policy *iam_model.OrgIAMPolicy) (*iam_model.OrgIAMPolicy, error) + ChangeOrgIAMPolicy(ctx context.Context, policy *iam_model.OrgIAMPolicy) (*iam_model.OrgIAMPolicy, error) + RemoveOrgIAMPolicy(ctx context.Context, id string) error } diff --git a/internal/api/api.go b/internal/api/api.go index 52152b604a..715d54d83f 100644 --- a/internal/api/api.go +++ b/internal/api/api.go @@ -103,20 +103,20 @@ func handleReadiness(checks []ValidationFunction) func(w http.ResponseWriter, r return func(w http.ResponseWriter, r *http.Request) { err := validate(r.Context(), checks) if err == nil { - http_util.MarshalJSON(w, "ok") + http_util.MarshalJSON(w, "ok", nil, http.StatusOK) return } - http_util.MarshalJSON(w, err) + http_util.MarshalJSON(w, nil, err, http.StatusPreconditionFailed) } } func (a *API) handleClientID(w http.ResponseWriter, r *http.Request) { id, err := a.health.VerifierClientID(r.Context(), "Zitadel Console") if err != nil { - http_util.MarshalJSON(w, err) + http_util.MarshalJSON(w, nil, err, http.StatusPreconditionFailed) return } - http_util.MarshalJSON(w, id) + http_util.MarshalJSON(w, id, nil, http.StatusOK) } type ValidationFunction func(ctx context.Context) error diff --git a/internal/api/grpc/admin/login_policy.go b/internal/api/grpc/admin/login_policy.go index e75ef530d7..e8de00b935 100644 --- a/internal/api/grpc/admin/login_policy.go +++ b/internal/api/grpc/admin/login_policy.go @@ -14,7 +14,7 @@ func (s *Server) GetDefaultLoginPolicy(ctx context.Context, _ *empty.Empty) (*ad return loginPolicyViewFromModel(result), nil } -func (s *Server) UpdateDefaultLoginPolicy(ctx context.Context, policy *admin.DefaultLoginPolicy) (*admin.DefaultLoginPolicy, error) { +func (s *Server) UpdateDefaultLoginPolicy(ctx context.Context, policy *admin.DefaultLoginPolicyRequest) (*admin.DefaultLoginPolicy, error) { result, err := s.iam.ChangeDefaultLoginPolicy(ctx, loginPolicyToModel(policy)) if err != nil { return nil, err diff --git a/internal/api/grpc/admin/login_policy_converter.go b/internal/api/grpc/admin/login_policy_converter.go index aba3ce1f07..1027cebefb 100644 --- a/internal/api/grpc/admin/login_policy_converter.go +++ b/internal/api/grpc/admin/login_policy_converter.go @@ -1,11 +1,13 @@ package admin import ( + "github.com/caos/logging" iam_model "github.com/caos/zitadel/internal/iam/model" "github.com/caos/zitadel/pkg/grpc/admin" + "github.com/golang/protobuf/ptypes" ) -func loginPolicyToModel(policy *admin.DefaultLoginPolicy) *iam_model.LoginPolicy { +func loginPolicyToModel(policy *admin.DefaultLoginPolicyRequest) *iam_model.LoginPolicy { return &iam_model.LoginPolicy{ AllowUsernamePassword: policy.AllowUsernamePassword, AllowExternalIdp: policy.AllowExternalIdp, @@ -14,18 +16,34 @@ func loginPolicyToModel(policy *admin.DefaultLoginPolicy) *iam_model.LoginPolicy } func loginPolicyFromModel(policy *iam_model.LoginPolicy) *admin.DefaultLoginPolicy { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-3Fsm9").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-5Gsko").OnError(err).Debug("date parse failed") + return &admin.DefaultLoginPolicy{ AllowUsernamePassword: policy.AllowUsernamePassword, AllowExternalIdp: policy.AllowExternalIdp, AllowRegister: policy.AllowRegister, + CreationDate: creationDate, + ChangeDate: changeDate, } } func loginPolicyViewFromModel(policy *iam_model.LoginPolicyView) *admin.DefaultLoginPolicyView { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-3Gk9s").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-6Jlos").OnError(err).Debug("date parse failed") + return &admin.DefaultLoginPolicyView{ AllowUsernamePassword: policy.AllowUsernamePassword, AllowExternalIdp: policy.AllowExternalIDP, AllowRegister: policy.AllowRegister, + CreationDate: creationDate, + ChangeDate: changeDate, } } diff --git a/internal/api/grpc/admin/org.go b/internal/api/grpc/admin/org.go index ce2ea1b2c8..936cec13a7 100644 --- a/internal/api/grpc/admin/org.go +++ b/internal/api/grpc/admin/org.go @@ -38,31 +38,47 @@ func (s *Server) SetUpOrg(ctx context.Context, orgSetUp *admin.OrgSetUpRequest) return setUpOrgResponseFromModel(setUp), err } -func (s *Server) GetOrgIamPolicy(ctx context.Context, in *admin.OrgIamPolicyID) (_ *admin.OrgIamPolicy, err error) { - policy, err := s.org.GetOrgIamPolicyByID(ctx, in.OrgId) +func (s *Server) GetDefaultOrgIamPolicy(ctx context.Context, _ *empty.Empty) (_ *admin.OrgIamPolicyView, err error) { + policy, err := s.iam.GetDefaultOrgIAMPolicy(ctx) if err != nil { return nil, err } - return orgIamPolicyFromModel(policy), err + return orgIAMPolicyViewFromModel(policy), err +} + +func (s *Server) UpdateDefaultOrgIamPolicy(ctx context.Context, in *admin.OrgIamPolicyRequest) (_ *admin.OrgIamPolicy, err error) { + policy, err := s.iam.ChangeDefaultOrgIAMPolicy(ctx, orgIAMPolicyRequestToModel(in)) + if err != nil { + return nil, err + } + return orgIAMPolicyFromModel(policy), err +} + +func (s *Server) GetOrgIamPolicy(ctx context.Context, in *admin.OrgIamPolicyID) (_ *admin.OrgIamPolicyView, err error) { + policy, err := s.org.GetOrgIAMPolicyByID(ctx, in.OrgId) + if err != nil { + return nil, err + } + return orgIAMPolicyViewFromModel(policy), err } func (s *Server) CreateOrgIamPolicy(ctx context.Context, in *admin.OrgIamPolicyRequest) (_ *admin.OrgIamPolicy, err error) { - policy, err := s.org.CreateOrgIamPolicy(ctx, orgIamPolicyRequestToModel(in)) + policy, err := s.org.CreateOrgIAMPolicy(ctx, orgIAMPolicyRequestToModel(in)) if err != nil { return nil, err } - return orgIamPolicyFromModel(policy), err + return orgIAMPolicyFromModel(policy), err } func (s *Server) UpdateOrgIamPolicy(ctx context.Context, in *admin.OrgIamPolicyRequest) (_ *admin.OrgIamPolicy, err error) { - policy, err := s.org.ChangeOrgIamPolicy(ctx, orgIamPolicyRequestToModel(in)) + policy, err := s.org.ChangeOrgIAMPolicy(ctx, orgIAMPolicyRequestToModel(in)) if err != nil { return nil, err } - return orgIamPolicyFromModel(policy), err + return orgIAMPolicyFromModel(policy), err } -func (s *Server) DeleteOrgIamPolicy(ctx context.Context, in *admin.OrgIamPolicyID) (_ *empty.Empty, err error) { - err = s.org.RemoveOrgIamPolicy(ctx, in.OrgId) +func (s *Server) RemoveOrgIamPolicy(ctx context.Context, in *admin.OrgIamPolicyID) (_ *empty.Empty, err error) { + err = s.org.RemoveOrgIAMPolicy(ctx, in.OrgId) return &empty.Empty{}, err } diff --git a/internal/api/grpc/admin/org_converter.go b/internal/api/grpc/admin/org_converter.go index 7b88bf1d1f..9d157227b9 100644 --- a/internal/api/grpc/admin/org_converter.go +++ b/internal/api/grpc/admin/org_converter.go @@ -2,6 +2,7 @@ package admin import ( "github.com/caos/logging" + iam_model "github.com/caos/zitadel/internal/iam/model" "github.com/golang/protobuf/ptypes" admin_model "github.com/caos/zitadel/internal/admin/model" @@ -196,7 +197,7 @@ func orgQueryMethodToModel(method admin.OrgSearchMethod) model.SearchMethod { } } -func orgIamPolicyFromModel(policy *org_model.OrgIAMPolicy) *admin.OrgIamPolicy { +func orgIAMPolicyFromModel(policy *iam_model.OrgIAMPolicy) *admin.OrgIamPolicy { creationDate, err := ptypes.TimestampProto(policy.CreationDate) logging.Log("GRPC-ush36").OnError(err).Debug("unable to get timestamp from time") @@ -205,20 +206,32 @@ func orgIamPolicyFromModel(policy *org_model.OrgIAMPolicy) *admin.OrgIamPolicy { return &admin.OrgIamPolicy{ OrgId: policy.AggregateID, - Description: policy.Description, UserLoginMustBeDomain: policy.UserLoginMustBeDomain, - Default: policy.Default, CreationDate: creationDate, ChangeDate: changeDate, } } -func orgIamPolicyRequestToModel(policy *admin.OrgIamPolicyRequest) *org_model.OrgIAMPolicy { - return &org_model.OrgIAMPolicy{ +func orgIAMPolicyViewFromModel(policy *iam_model.OrgIAMPolicyView) *admin.OrgIamPolicyView { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-ush36").OnError(err).Debug("unable to get timestamp from time") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-Ps9fW").OnError(err).Debug("unable to get timestamp from time") + + return &admin.OrgIamPolicyView{ + OrgId: policy.AggregateID, + UserLoginMustBeDomain: policy.UserLoginMustBeDomain, + CreationDate: creationDate, + ChangeDate: changeDate, + } +} + +func orgIAMPolicyRequestToModel(policy *admin.OrgIamPolicyRequest) *iam_model.OrgIAMPolicy { + return &iam_model.OrgIAMPolicy{ ObjectRoot: models.ObjectRoot{ AggregateID: policy.OrgId, }, - Description: policy.Description, UserLoginMustBeDomain: policy.UserLoginMustBeDomain, } } diff --git a/internal/api/grpc/admin/password_age_policy.go b/internal/api/grpc/admin/password_age_policy.go new file mode 100644 index 0000000000..1656b0f27a --- /dev/null +++ b/internal/api/grpc/admin/password_age_policy.go @@ -0,0 +1,23 @@ +package admin + +import ( + "context" + "github.com/caos/zitadel/pkg/grpc/admin" + "github.com/golang/protobuf/ptypes/empty" +) + +func (s *Server) GetDefaultPasswordAgePolicy(ctx context.Context, _ *empty.Empty) (*admin.DefaultPasswordAgePolicyView, error) { + result, err := s.iam.GetDefaultPasswordAgePolicy(ctx) + if err != nil { + return nil, err + } + return passwordAgePolicyViewFromModel(result), nil +} + +func (s *Server) UpdateDefaultPasswordAgePolicy(ctx context.Context, policy *admin.DefaultPasswordAgePolicyRequest) (*admin.DefaultPasswordAgePolicy, error) { + result, err := s.iam.ChangeDefaultPasswordAgePolicy(ctx, passwordAgePolicyToModel(policy)) + if err != nil { + return nil, err + } + return passwordAgePolicyFromModel(result), nil +} diff --git a/internal/api/grpc/admin/password_age_policy_converter.go b/internal/api/grpc/admin/password_age_policy_converter.go new file mode 100644 index 0000000000..44e413b25e --- /dev/null +++ b/internal/api/grpc/admin/password_age_policy_converter.go @@ -0,0 +1,45 @@ +package admin + +import ( + "github.com/caos/logging" + iam_model "github.com/caos/zitadel/internal/iam/model" + "github.com/caos/zitadel/pkg/grpc/admin" + "github.com/golang/protobuf/ptypes" +) + +func passwordAgePolicyToModel(policy *admin.DefaultPasswordAgePolicyRequest) *iam_model.PasswordAgePolicy { + return &iam_model.PasswordAgePolicy{ + MaxAgeDays: policy.MaxAgeDays, + ExpireWarnDays: policy.ExpireWarnDays, + } +} + +func passwordAgePolicyFromModel(policy *iam_model.PasswordAgePolicy) *admin.DefaultPasswordAgePolicy { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-mH9os").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-3tGs9").OnError(err).Debug("date parse failed") + + return &admin.DefaultPasswordAgePolicy{ + MaxAgeDays: policy.MaxAgeDays, + ExpireWarnDays: policy.ExpireWarnDays, + CreationDate: creationDate, + ChangeDate: changeDate, + } +} + +func passwordAgePolicyViewFromModel(policy *iam_model.PasswordAgePolicyView) *admin.DefaultPasswordAgePolicyView { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-2Gs9o").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-8Hjss").OnError(err).Debug("date parse failed") + + return &admin.DefaultPasswordAgePolicyView{ + MaxAgeDays: policy.MaxAgeDays, + ExpireWarnDays: policy.ExpireWarnDays, + CreationDate: creationDate, + ChangeDate: changeDate, + } +} diff --git a/internal/api/grpc/admin/password_complexity_policy.go b/internal/api/grpc/admin/password_complexity_policy.go new file mode 100644 index 0000000000..7b4bb8901e --- /dev/null +++ b/internal/api/grpc/admin/password_complexity_policy.go @@ -0,0 +1,23 @@ +package admin + +import ( + "context" + "github.com/caos/zitadel/pkg/grpc/admin" + "github.com/golang/protobuf/ptypes/empty" +) + +func (s *Server) GetDefaultPasswordComplexityPolicy(ctx context.Context, _ *empty.Empty) (*admin.DefaultPasswordComplexityPolicyView, error) { + result, err := s.iam.GetDefaultPasswordComplexityPolicy(ctx) + if err != nil { + return nil, err + } + return passwordComplexityPolicyViewFromModel(result), nil +} + +func (s *Server) UpdateDefaultPasswordComplexityPolicy(ctx context.Context, policy *admin.DefaultPasswordComplexityPolicyRequest) (*admin.DefaultPasswordComplexityPolicy, error) { + result, err := s.iam.ChangeDefaultPasswordComplexityPolicy(ctx, passwordComplexityPolicyToModel(policy)) + if err != nil { + return nil, err + } + return passwordComplexityPolicyFromModel(result), nil +} diff --git a/internal/api/grpc/admin/password_complexity_policy_converter.go b/internal/api/grpc/admin/password_complexity_policy_converter.go new file mode 100644 index 0000000000..7cf538af85 --- /dev/null +++ b/internal/api/grpc/admin/password_complexity_policy_converter.go @@ -0,0 +1,54 @@ +package admin + +import ( + "github.com/caos/logging" + iam_model "github.com/caos/zitadel/internal/iam/model" + "github.com/caos/zitadel/pkg/grpc/admin" + "github.com/golang/protobuf/ptypes" +) + +func passwordComplexityPolicyToModel(policy *admin.DefaultPasswordComplexityPolicyRequest) *iam_model.PasswordComplexityPolicy { + return &iam_model.PasswordComplexityPolicy{ + MinLength: policy.MinLength, + HasUppercase: policy.HasUppercase, + HasLowercase: policy.HasLowercase, + HasNumber: policy.HasNumber, + HasSymbol: policy.HasSymbol, + } +} + +func passwordComplexityPolicyFromModel(policy *iam_model.PasswordComplexityPolicy) *admin.DefaultPasswordComplexityPolicy { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-6Zhs9").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-bMso0").OnError(err).Debug("date parse failed") + + return &admin.DefaultPasswordComplexityPolicy{ + MinLength: policy.MinLength, + HasUppercase: policy.HasUppercase, + HasLowercase: policy.HasLowercase, + HasNumber: policy.HasNumber, + HasSymbol: policy.HasSymbol, + CreationDate: creationDate, + ChangeDate: changeDate, + } +} + +func passwordComplexityPolicyViewFromModel(policy *iam_model.PasswordComplexityPolicyView) *admin.DefaultPasswordComplexityPolicyView { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-rTs9f").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-ks9Zt").OnError(err).Debug("date parse failed") + + return &admin.DefaultPasswordComplexityPolicyView{ + MinLength: policy.MinLength, + HasUppercase: policy.HasUppercase, + HasLowercase: policy.HasLowercase, + HasNumber: policy.HasNumber, + HasSymbol: policy.HasSymbol, + CreationDate: creationDate, + ChangeDate: changeDate, + } +} diff --git a/internal/api/grpc/admin/password_lockout_policy.go b/internal/api/grpc/admin/password_lockout_policy.go new file mode 100644 index 0000000000..6bffb269ea --- /dev/null +++ b/internal/api/grpc/admin/password_lockout_policy.go @@ -0,0 +1,23 @@ +package admin + +import ( + "context" + "github.com/caos/zitadel/pkg/grpc/admin" + "github.com/golang/protobuf/ptypes/empty" +) + +func (s *Server) GetDefaultPasswordLockoutPolicy(ctx context.Context, _ *empty.Empty) (*admin.DefaultPasswordLockoutPolicyView, error) { + result, err := s.iam.GetDefaultPasswordLockoutPolicy(ctx) + if err != nil { + return nil, err + } + return passwordLockoutPolicyViewFromModel(result), nil +} + +func (s *Server) UpdateDefaultPasswordLockoutPolicy(ctx context.Context, policy *admin.DefaultPasswordLockoutPolicyRequest) (*admin.DefaultPasswordLockoutPolicy, error) { + result, err := s.iam.ChangeDefaultPasswordLockoutPolicy(ctx, passwordLockoutPolicyToModel(policy)) + if err != nil { + return nil, err + } + return passwordLockoutPolicyFromModel(result), nil +} diff --git a/internal/api/grpc/admin/password_lockout_policy_converter.go b/internal/api/grpc/admin/password_lockout_policy_converter.go new file mode 100644 index 0000000000..ad0cb7fb97 --- /dev/null +++ b/internal/api/grpc/admin/password_lockout_policy_converter.go @@ -0,0 +1,45 @@ +package admin + +import ( + "github.com/caos/logging" + iam_model "github.com/caos/zitadel/internal/iam/model" + "github.com/caos/zitadel/pkg/grpc/admin" + "github.com/golang/protobuf/ptypes" +) + +func passwordLockoutPolicyToModel(policy *admin.DefaultPasswordLockoutPolicyRequest) *iam_model.PasswordLockoutPolicy { + return &iam_model.PasswordLockoutPolicy{ + MaxAttempts: policy.MaxAttempts, + ShowLockOutFailures: policy.ShowLockoutFailure, + } +} + +func passwordLockoutPolicyFromModel(policy *iam_model.PasswordLockoutPolicy) *admin.DefaultPasswordLockoutPolicy { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-4Gsm9f").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-3Gms9").OnError(err).Debug("date parse failed") + + return &admin.DefaultPasswordLockoutPolicy{ + MaxAttempts: policy.MaxAttempts, + ShowLockoutFailure: policy.ShowLockOutFailures, + CreationDate: creationDate, + ChangeDate: changeDate, + } +} + +func passwordLockoutPolicyViewFromModel(policy *iam_model.PasswordLockoutPolicyView) *admin.DefaultPasswordLockoutPolicyView { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-7Hmlo").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-0oLgs").OnError(err).Debug("date parse failed") + + return &admin.DefaultPasswordLockoutPolicyView{ + MaxAttempts: policy.MaxAttempts, + ShowLockoutFailure: policy.ShowLockOutFailures, + CreationDate: creationDate, + ChangeDate: changeDate, + } +} diff --git a/internal/api/grpc/auth/policy_complexity_converter.go b/internal/api/grpc/auth/policy_complexity_converter.go index 60881e0de5..875f506872 100644 --- a/internal/api/grpc/auth/policy_complexity_converter.go +++ b/internal/api/grpc/auth/policy_complexity_converter.go @@ -2,13 +2,13 @@ package auth import ( "github.com/caos/logging" + iam_model "github.com/caos/zitadel/internal/iam/model" "github.com/golang/protobuf/ptypes" - "github.com/caos/zitadel/internal/policy/model" "github.com/caos/zitadel/pkg/grpc/auth" ) -func passwordComplexityPolicyFromModel(policy *model.PasswordComplexityPolicy) *auth.PasswordComplexityPolicy { +func passwordComplexityPolicyFromModel(policy *iam_model.PasswordComplexityPolicyView) *auth.PasswordComplexityPolicy { creationDate, err := ptypes.TimestampProto(policy.CreationDate) logging.Log("GRPC-Lsi3d").OnError(err).Debug("unable to parse timestamp") @@ -19,7 +19,6 @@ func passwordComplexityPolicyFromModel(policy *model.PasswordComplexityPolicy) * Id: policy.AggregateID, CreationDate: creationDate, ChangeDate: changeDate, - Description: policy.Description, Sequence: policy.Sequence, MinLength: policy.MinLength, HasLowercase: policy.HasLowercase, diff --git a/internal/api/grpc/management/login_policy.go b/internal/api/grpc/management/login_policy.go index 159580b469..f097805a16 100644 --- a/internal/api/grpc/management/login_policy.go +++ b/internal/api/grpc/management/login_policy.go @@ -14,16 +14,24 @@ func (s *Server) GetLoginPolicy(ctx context.Context, _ *empty.Empty) (*managemen return loginPolicyViewFromModel(result), nil } -func (s *Server) CreateLoginPolicy(ctx context.Context, policy *management.LoginPolicyAdd) (*management.LoginPolicy, error) { - result, err := s.org.AddLoginPolicy(ctx, loginPolicyAddToModel(policy)) +func (s *Server) GetDefaultLoginPolicy(ctx context.Context, _ *empty.Empty) (*management.LoginPolicyView, error) { + result, err := s.org.GetDefaultLoginPolicy(ctx) + if err != nil { + return nil, err + } + return loginPolicyViewFromModel(result), nil +} + +func (s *Server) CreateLoginPolicy(ctx context.Context, policy *management.LoginPolicyRequest) (*management.LoginPolicy, error) { + result, err := s.org.AddLoginPolicy(ctx, loginPolicyRequestToModel(policy)) if err != nil { return nil, err } return loginPolicyFromModel(result), nil } -func (s *Server) UpdateLoginPolicy(ctx context.Context, policy *management.LoginPolicy) (*management.LoginPolicy, error) { - result, err := s.org.ChangeLoginPolicy(ctx, loginPolicyToModel(policy)) +func (s *Server) UpdateLoginPolicy(ctx context.Context, policy *management.LoginPolicyRequest) (*management.LoginPolicy, error) { + result, err := s.org.ChangeLoginPolicy(ctx, loginPolicyRequestToModel(policy)) if err != nil { return nil, err } diff --git a/internal/api/grpc/management/login_policy_converter.go b/internal/api/grpc/management/login_policy_converter.go index 8bff228724..f11f2fd766 100644 --- a/internal/api/grpc/management/login_policy_converter.go +++ b/internal/api/grpc/management/login_policy_converter.go @@ -1,18 +1,13 @@ package management import ( + "github.com/caos/logging" iam_model "github.com/caos/zitadel/internal/iam/model" "github.com/caos/zitadel/pkg/grpc/management" + "github.com/golang/protobuf/ptypes" ) -func loginPolicyAddToModel(policy *management.LoginPolicyAdd) *iam_model.LoginPolicy { - return &iam_model.LoginPolicy{ - AllowUsernamePassword: policy.AllowUsernamePassword, - AllowExternalIdp: policy.AllowExternalIdp, - AllowRegister: policy.AllowRegister, - } -} -func loginPolicyToModel(policy *management.LoginPolicy) *iam_model.LoginPolicy { +func loginPolicyRequestToModel(policy *management.LoginPolicyRequest) *iam_model.LoginPolicy { return &iam_model.LoginPolicy{ AllowUsernamePassword: policy.AllowUsernamePassword, AllowExternalIdp: policy.AllowExternalIdp, @@ -21,19 +16,35 @@ func loginPolicyToModel(policy *management.LoginPolicy) *iam_model.LoginPolicy { } func loginPolicyFromModel(policy *iam_model.LoginPolicy) *management.LoginPolicy { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-2Fsm8").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-3Flo0").OnError(err).Debug("date parse failed") + return &management.LoginPolicy{ AllowUsernamePassword: policy.AllowUsernamePassword, AllowExternalIdp: policy.AllowExternalIdp, AllowRegister: policy.AllowRegister, + CreationDate: creationDate, + ChangeDate: changeDate, } } func loginPolicyViewFromModel(policy *iam_model.LoginPolicyView) *management.LoginPolicyView { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-5Tsm8").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-8dJgs").OnError(err).Debug("date parse failed") + return &management.LoginPolicyView{ Default: policy.Default, AllowUsernamePassword: policy.AllowUsernamePassword, AllowExternalIdp: policy.AllowExternalIDP, AllowRegister: policy.AllowRegister, + CreationDate: creationDate, + ChangeDate: changeDate, } } diff --git a/internal/api/grpc/management/org.go b/internal/api/grpc/management/org.go index 83c049c3d5..f05578def8 100644 --- a/internal/api/grpc/management/org.go +++ b/internal/api/grpc/management/org.go @@ -98,10 +98,10 @@ func (s *Server) OrgChanges(ctx context.Context, changesRequest *management.Chan return orgChangesToResponse(response, changesRequest.GetSequenceOffset(), changesRequest.GetLimit()), nil } -func (s *Server) GetMyOrgIamPolicy(ctx context.Context, _ *empty.Empty) (_ *management.OrgIamPolicy, err error) { +func (s *Server) GetMyOrgIamPolicy(ctx context.Context, _ *empty.Empty) (_ *management.OrgIamPolicyView, err error) { policy, err := s.org.GetMyOrgIamPolicy(ctx) if err != nil { return nil, err } - return orgIamPolicyFromModel(policy), err + return orgIamPolicyViewFromModel(policy), err } diff --git a/internal/api/grpc/management/org_converter.go b/internal/api/grpc/management/org_converter.go index d9b903ba8c..97cbb6bf02 100644 --- a/internal/api/grpc/management/org_converter.go +++ b/internal/api/grpc/management/org_converter.go @@ -2,6 +2,7 @@ package management import ( "encoding/json" + iam_model "github.com/caos/zitadel/internal/iam/model" "github.com/caos/logging" "github.com/golang/protobuf/ptypes" @@ -227,10 +228,8 @@ func orgChangesToMgtAPI(changes *org_model.OrgChanges) (_ []*management.Change) return result } -func orgIamPolicyFromModel(policy *org_model.OrgIAMPolicy) *management.OrgIamPolicy { - return &management.OrgIamPolicy{ - OrgId: policy.AggregateID, - Description: policy.Description, +func orgIamPolicyViewFromModel(policy *iam_model.OrgIAMPolicyView) *management.OrgIamPolicyView { + return &management.OrgIamPolicyView{ UserLoginMustBeDomain: policy.UserLoginMustBeDomain, Default: policy.Default, } diff --git a/internal/api/grpc/management/password_age_policy.go b/internal/api/grpc/management/password_age_policy.go new file mode 100644 index 0000000000..20cae2d2c4 --- /dev/null +++ b/internal/api/grpc/management/password_age_policy.go @@ -0,0 +1,44 @@ +package management + +import ( + "context" + "github.com/caos/zitadel/pkg/grpc/management" + "github.com/golang/protobuf/ptypes/empty" +) + +func (s *Server) GetPasswordAgePolicy(ctx context.Context, _ *empty.Empty) (*management.PasswordAgePolicyView, error) { + result, err := s.org.GetPasswordAgePolicy(ctx) + if err != nil { + return nil, err + } + return passwordAgePolicyViewFromModel(result), nil +} + +func (s *Server) GetDefaultPasswordAgePolicy(ctx context.Context, _ *empty.Empty) (*management.PasswordAgePolicyView, error) { + result, err := s.org.GetDefaultPasswordAgePolicy(ctx) + if err != nil { + return nil, err + } + return passwordAgePolicyViewFromModel(result), nil +} + +func (s *Server) CreatePasswordAgePolicy(ctx context.Context, policy *management.PasswordAgePolicyRequest) (*management.PasswordAgePolicy, error) { + result, err := s.org.AddPasswordAgePolicy(ctx, passwordAgePolicyRequestToModel(policy)) + if err != nil { + return nil, err + } + return passwordAgePolicyFromModel(result), nil +} + +func (s *Server) UpdatePasswordAgePolicy(ctx context.Context, policy *management.PasswordAgePolicyRequest) (*management.PasswordAgePolicy, error) { + result, err := s.org.ChangePasswordAgePolicy(ctx, passwordAgePolicyRequestToModel(policy)) + if err != nil { + return nil, err + } + return passwordAgePolicyFromModel(result), nil +} + +func (s *Server) RemovePasswordAgePolicy(ctx context.Context, _ *empty.Empty) (*empty.Empty, error) { + err := s.org.RemovePasswordAgePolicy(ctx) + return &empty.Empty{}, err +} diff --git a/internal/api/grpc/management/password_age_policy_converter.go b/internal/api/grpc/management/password_age_policy_converter.go new file mode 100644 index 0000000000..df655c5458 --- /dev/null +++ b/internal/api/grpc/management/password_age_policy_converter.go @@ -0,0 +1,46 @@ +package management + +import ( + "github.com/caos/logging" + iam_model "github.com/caos/zitadel/internal/iam/model" + "github.com/caos/zitadel/pkg/grpc/management" + "github.com/golang/protobuf/ptypes" +) + +func passwordAgePolicyRequestToModel(policy *management.PasswordAgePolicyRequest) *iam_model.PasswordAgePolicy { + return &iam_model.PasswordAgePolicy{ + MaxAgeDays: policy.MaxAgeDays, + ExpireWarnDays: policy.ExpireWarnDays, + } +} + +func passwordAgePolicyFromModel(policy *iam_model.PasswordAgePolicy) *management.PasswordAgePolicy { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-bMd9o").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-jFs89").OnError(err).Debug("date parse failed") + + return &management.PasswordAgePolicy{ + MaxAgeDays: policy.MaxAgeDays, + ExpireWarnDays: policy.ExpireWarnDays, + CreationDate: changeDate, + ChangeDate: creationDate, + } +} + +func passwordAgePolicyViewFromModel(policy *iam_model.PasswordAgePolicyView) *management.PasswordAgePolicyView { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-4Bms9").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-6Hmlo").OnError(err).Debug("date parse failed") + + return &management.PasswordAgePolicyView{ + Default: policy.Default, + MaxAgeDays: policy.MaxAgeDays, + ExpireWarnDays: policy.ExpireWarnDays, + ChangeDate: changeDate, + CreationDate: creationDate, + } +} diff --git a/internal/api/grpc/management/password_complexity_policy.go b/internal/api/grpc/management/password_complexity_policy.go new file mode 100644 index 0000000000..87fa957351 --- /dev/null +++ b/internal/api/grpc/management/password_complexity_policy.go @@ -0,0 +1,44 @@ +package management + +import ( + "context" + "github.com/caos/zitadel/pkg/grpc/management" + "github.com/golang/protobuf/ptypes/empty" +) + +func (s *Server) GetPasswordComplexityPolicy(ctx context.Context, _ *empty.Empty) (*management.PasswordComplexityPolicyView, error) { + result, err := s.org.GetPasswordComplexityPolicy(ctx) + if err != nil { + return nil, err + } + return passwordComplexityPolicyViewFromModel(result), nil +} + +func (s *Server) GetDefaultPasswordComplexityPolicy(ctx context.Context, _ *empty.Empty) (*management.PasswordComplexityPolicyView, error) { + result, err := s.org.GetDefaultPasswordComplexityPolicy(ctx) + if err != nil { + return nil, err + } + return passwordComplexityPolicyViewFromModel(result), nil +} + +func (s *Server) CreatePasswordComplexityPolicy(ctx context.Context, policy *management.PasswordComplexityPolicyRequest) (*management.PasswordComplexityPolicy, error) { + result, err := s.org.AddPasswordComplexityPolicy(ctx, passwordComplexityPolicyRequestToModel(policy)) + if err != nil { + return nil, err + } + return passwordComplexityPolicyFromModel(result), nil +} + +func (s *Server) UpdatePasswordComplexityPolicy(ctx context.Context, policy *management.PasswordComplexityPolicyRequest) (*management.PasswordComplexityPolicy, error) { + result, err := s.org.ChangePasswordComplexityPolicy(ctx, passwordComplexityPolicyRequestToModel(policy)) + if err != nil { + return nil, err + } + return passwordComplexityPolicyFromModel(result), nil +} + +func (s *Server) RemovePasswordComplexityPolicy(ctx context.Context, _ *empty.Empty) (*empty.Empty, error) { + err := s.org.RemovePasswordComplexityPolicy(ctx) + return &empty.Empty{}, err +} diff --git a/internal/api/grpc/management/password_complexity_policy_converter.go b/internal/api/grpc/management/password_complexity_policy_converter.go new file mode 100644 index 0000000000..9a674115d0 --- /dev/null +++ b/internal/api/grpc/management/password_complexity_policy_converter.go @@ -0,0 +1,55 @@ +package management + +import ( + "github.com/caos/logging" + iam_model "github.com/caos/zitadel/internal/iam/model" + "github.com/caos/zitadel/pkg/grpc/management" + "github.com/golang/protobuf/ptypes" +) + +func passwordComplexityPolicyRequestToModel(policy *management.PasswordComplexityPolicyRequest) *iam_model.PasswordComplexityPolicy { + return &iam_model.PasswordComplexityPolicy{ + MinLength: policy.MinLength, + HasLowercase: policy.HasLowercase, + HasUppercase: policy.HasUppercase, + HasSymbol: policy.HasSymbol, + HasNumber: policy.HasNumber, + } +} + +func passwordComplexityPolicyFromModel(policy *iam_model.PasswordComplexityPolicy) *management.PasswordComplexityPolicy { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-5Gslo").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-Bmd9e").OnError(err).Debug("date parse failed") + + return &management.PasswordComplexityPolicy{ + MinLength: policy.MinLength, + HasLowercase: policy.HasLowercase, + HasUppercase: policy.HasUppercase, + HasSymbol: policy.HasSymbol, + HasNumber: policy.HasNumber, + CreationDate: changeDate, + ChangeDate: creationDate, + } +} + +func passwordComplexityPolicyViewFromModel(policy *iam_model.PasswordComplexityPolicyView) *management.PasswordComplexityPolicyView { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-wmi8f").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-dmOp0").OnError(err).Debug("date parse failed") + + return &management.PasswordComplexityPolicyView{ + Default: policy.Default, + MinLength: policy.MinLength, + HasLowercase: policy.HasLowercase, + HasUppercase: policy.HasUppercase, + HasSymbol: policy.HasSymbol, + HasNumber: policy.HasNumber, + CreationDate: changeDate, + ChangeDate: creationDate, + } +} diff --git a/internal/api/grpc/management/password_lockout_policy.go b/internal/api/grpc/management/password_lockout_policy.go new file mode 100644 index 0000000000..9468454a86 --- /dev/null +++ b/internal/api/grpc/management/password_lockout_policy.go @@ -0,0 +1,44 @@ +package management + +import ( + "context" + "github.com/caos/zitadel/pkg/grpc/management" + "github.com/golang/protobuf/ptypes/empty" +) + +func (s *Server) GetPasswordLockoutPolicy(ctx context.Context, _ *empty.Empty) (*management.PasswordLockoutPolicyView, error) { + result, err := s.org.GetPasswordLockoutPolicy(ctx) + if err != nil { + return nil, err + } + return passwordLockoutPolicyViewFromModel(result), nil +} + +func (s *Server) GetDefaultPasswordLockoutPolicy(ctx context.Context, _ *empty.Empty) (*management.PasswordLockoutPolicyView, error) { + result, err := s.org.GetDefaultPasswordLockoutPolicy(ctx) + if err != nil { + return nil, err + } + return passwordLockoutPolicyViewFromModel(result), nil +} + +func (s *Server) CreatePasswordLockoutPolicy(ctx context.Context, policy *management.PasswordLockoutPolicyRequest) (*management.PasswordLockoutPolicy, error) { + result, err := s.org.AddPasswordLockoutPolicy(ctx, passwordLockoutPolicyRequestToModel(policy)) + if err != nil { + return nil, err + } + return passwordLockoutPolicyFromModel(result), nil +} + +func (s *Server) UpdatePasswordLockoutPolicy(ctx context.Context, policy *management.PasswordLockoutPolicyRequest) (*management.PasswordLockoutPolicy, error) { + result, err := s.org.ChangePasswordLockoutPolicy(ctx, passwordLockoutPolicyRequestToModel(policy)) + if err != nil { + return nil, err + } + return passwordLockoutPolicyFromModel(result), nil +} + +func (s *Server) RemovePasswordLockoutPolicy(ctx context.Context, _ *empty.Empty) (*empty.Empty, error) { + err := s.org.RemovePasswordLockoutPolicy(ctx) + return &empty.Empty{}, err +} diff --git a/internal/api/grpc/management/password_lockout_policy_converter.go b/internal/api/grpc/management/password_lockout_policy_converter.go new file mode 100644 index 0000000000..3bbaf2f89f --- /dev/null +++ b/internal/api/grpc/management/password_lockout_policy_converter.go @@ -0,0 +1,46 @@ +package management + +import ( + "github.com/caos/logging" + iam_model "github.com/caos/zitadel/internal/iam/model" + "github.com/caos/zitadel/pkg/grpc/management" + "github.com/golang/protobuf/ptypes" +) + +func passwordLockoutPolicyRequestToModel(policy *management.PasswordLockoutPolicyRequest) *iam_model.PasswordLockoutPolicy { + return &iam_model.PasswordLockoutPolicy{ + MaxAttempts: policy.MaxAttempts, + ShowLockOutFailures: policy.ShowLockoutFailure, + } +} + +func passwordLockoutPolicyFromModel(policy *iam_model.PasswordLockoutPolicy) *management.PasswordLockoutPolicy { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-bMd9o").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-jFs89").OnError(err).Debug("date parse failed") + + return &management.PasswordLockoutPolicy{ + MaxAttempts: policy.MaxAttempts, + ShowLockoutFailure: policy.ShowLockOutFailures, + CreationDate: changeDate, + ChangeDate: creationDate, + } +} + +func passwordLockoutPolicyViewFromModel(policy *iam_model.PasswordLockoutPolicyView) *management.PasswordLockoutPolicyView { + creationDate, err := ptypes.TimestampProto(policy.CreationDate) + logging.Log("GRPC-4Bms9").OnError(err).Debug("date parse failed") + + changeDate, err := ptypes.TimestampProto(policy.ChangeDate) + logging.Log("GRPC-6Hmlo").OnError(err).Debug("date parse failed") + + return &management.PasswordLockoutPolicyView{ + Default: policy.Default, + MaxAttempts: policy.MaxAttempts, + ShowLockoutFailure: policy.ShowLockOutFailures, + ChangeDate: changeDate, + CreationDate: creationDate, + } +} diff --git a/internal/api/grpc/management/policy.go b/internal/api/grpc/management/policy.go deleted file mode 100644 index b194dacd2e..0000000000 --- a/internal/api/grpc/management/policy.go +++ /dev/null @@ -1,112 +0,0 @@ -package management - -import ( - "context" - - "github.com/golang/protobuf/ptypes/empty" - - "github.com/caos/zitadel/internal/errors" - "github.com/caos/zitadel/pkg/grpc/management" -) - -func (s *Server) CreatePasswordComplexityPolicy(ctx context.Context, policy *management.PasswordComplexityPolicyCreate) (*management.PasswordComplexityPolicy, error) { - policyresp, err := s.policy.CreatePasswordComplexityPolicy(ctx, passwordComplexityPolicyCreateToModel(policy)) - if err != nil { - return nil, err - } - - return passwordComplexityPolicyFromModel(policyresp), nil -} - -func (s *Server) GetPasswordComplexityPolicy(ctx context.Context, _ *empty.Empty) (*management.PasswordComplexityPolicy, error) { - policy, err := s.policy.GetPasswordComplexityPolicy(ctx) - if err != nil { - return nil, err - } - - return passwordComplexityPolicyFromModel(policy), nil -} - -func (s *Server) GetDefaultPasswordComplexityPolicy(ctx context.Context, _ *empty.Empty) (*management.PasswordComplexityPolicy, error) { - policy, err := s.policy.GetDefaultPasswordComplexityPolicy(ctx) - if err != nil { - return nil, err - } - - return passwordComplexityPolicyFromModel(policy), nil -} - -func (s *Server) UpdatePasswordComplexityPolicy(ctx context.Context, policy *management.PasswordComplexityPolicyUpdate) (*management.PasswordComplexityPolicy, error) { - policyresp, err := s.policy.UpdatePasswordComplexityPolicy(ctx, passwordComplexityPolicyUpdateToModel(policy)) - if err != nil { - return nil, err - } - - return passwordComplexityPolicyFromModel(policyresp), nil -} - -func (s *Server) DeletePasswordComplexityPolicy(ctx context.Context, ID *management.PasswordComplexityPolicyID) (*empty.Empty, error) { - return nil, errors.ThrowUnimplemented(nil, "GRPC-skw3f", "Not implemented") -} - -func (s *Server) CreatePasswordAgePolicy(ctx context.Context, policy *management.PasswordAgePolicyCreate) (*management.PasswordAgePolicy, error) { - policyresp, err := s.policy.CreatePasswordAgePolicy(ctx, passwordAgePolicyCreateToModel(policy)) - if err != nil { - return nil, err - } - - return passwordAgePolicyFromModel(policyresp), nil -} - -func (s *Server) GetPasswordAgePolicy(ctx context.Context, _ *empty.Empty) (*management.PasswordAgePolicy, error) { - policy, err := s.policy.GetPasswordAgePolicy(ctx) - if err != nil { - return nil, err - } - - return passwordAgePolicyFromModel(policy), nil -} - -func (s *Server) UpdatePasswordAgePolicy(ctx context.Context, policy *management.PasswordAgePolicyUpdate) (*management.PasswordAgePolicy, error) { - policyresp, err := s.policy.UpdatePasswordAgePolicy(ctx, passwordAgePolicyUpdateToModel(policy)) - if err != nil { - return nil, err - } - - return passwordAgePolicyFromModel(policyresp), nil -} - -func (s *Server) DeletePasswordAgePolicy(ctx context.Context, ID *management.PasswordAgePolicyID) (*empty.Empty, error) { - return nil, errors.ThrowUnimplemented(nil, "GRPC-plo67", "Not implemented") -} - -func (s *Server) CreatePasswordLockoutPolicy(ctx context.Context, policy *management.PasswordLockoutPolicyCreate) (*management.PasswordLockoutPolicy, error) { - policyresp, err := s.policy.CreatePasswordLockoutPolicy(ctx, passwordLockoutPolicyCreateToModel(policy)) - if err != nil { - return nil, err - } - - return passwordLockoutPolicyFromModel(policyresp), nil -} - -func (s *Server) GetPasswordLockoutPolicy(ctx context.Context, _ *empty.Empty) (*management.PasswordLockoutPolicy, error) { - policy, err := s.policy.GetPasswordLockoutPolicy(ctx) - if err != nil { - return nil, err - } - - return passwordLockoutPolicyFromModel(policy), nil -} - -func (s *Server) UpdatePasswordLockoutPolicy(ctx context.Context, policy *management.PasswordLockoutPolicyUpdate) (*management.PasswordLockoutPolicy, error) { - policyresp, err := s.policy.UpdatePasswordLockoutPolicy(ctx, passwordLockoutPolicyUpdateToModel(policy)) - if err != nil { - return nil, err - } - - return passwordLockoutPolicyFromModel(policyresp), nil -} - -func (s *Server) DeletePasswordLockoutPolicy(ctx context.Context, ID *management.PasswordLockoutPolicyID) (*empty.Empty, error) { - return nil, errors.ThrowUnimplemented(nil, "GRPC-GHkd9", "Not implemented") -} diff --git a/internal/api/grpc/management/policy_age_converter.go b/internal/api/grpc/management/policy_age_converter.go deleted file mode 100644 index 3ee08f07df..0000000000 --- a/internal/api/grpc/management/policy_age_converter.go +++ /dev/null @@ -1,68 +0,0 @@ -package management - -import ( - "github.com/caos/logging" - "github.com/golang/protobuf/ptypes" - - "github.com/caos/zitadel/internal/eventstore/models" - "github.com/caos/zitadel/internal/policy/model" - "github.com/caos/zitadel/pkg/grpc/management" -) - -func passwordAgePolicyFromModel(policy *model.PasswordAgePolicy) *management.PasswordAgePolicy { - creationDate, err := ptypes.TimestampProto(policy.CreationDate) - logging.Log("GRPC-6ILdB").OnError(err).Debug("unable to parse timestamp") - - changeDate, err := ptypes.TimestampProto(policy.ChangeDate) - logging.Log("GRPC-ngUzJ").OnError(err).Debug("unable to parse timestamp") - - return &management.PasswordAgePolicy{ - Id: policy.AggregateID, - CreationDate: creationDate, - ChangeDate: changeDate, - Sequence: policy.Sequence, - Description: policy.Description, - ExpireWarnDays: policy.ExpireWarnDays, - MaxAgeDays: policy.MaxAgeDays, - IsDefault: policy.AggregateID == "", - } -} - -func passwordAgePolicyToModel(policy *management.PasswordAgePolicy) *model.PasswordAgePolicy { - creationDate, err := ptypes.Timestamp(policy.CreationDate) - logging.Log("GRPC-2QSfU").OnError(err).Debug("unable to parse timestamp") - - changeDate, err := ptypes.Timestamp(policy.ChangeDate) - logging.Log("GRPC-LdU91").OnError(err).Debug("unable to parse timestamp") - - return &model.PasswordAgePolicy{ - ObjectRoot: models.ObjectRoot{ - AggregateID: policy.Id, - CreationDate: creationDate, - ChangeDate: changeDate, - Sequence: policy.Sequence, - }, - Description: policy.Description, - ExpireWarnDays: policy.ExpireWarnDays, - MaxAgeDays: policy.MaxAgeDays, - } -} - -func passwordAgePolicyCreateToModel(policy *management.PasswordAgePolicyCreate) *model.PasswordAgePolicy { - return &model.PasswordAgePolicy{ - Description: policy.Description, - ExpireWarnDays: policy.ExpireWarnDays, - MaxAgeDays: policy.MaxAgeDays, - } -} - -func passwordAgePolicyUpdateToModel(policy *management.PasswordAgePolicyUpdate) *model.PasswordAgePolicy { - return &model.PasswordAgePolicy{ - ObjectRoot: models.ObjectRoot{ - AggregateID: policy.Id, - }, - Description: policy.Description, - ExpireWarnDays: policy.ExpireWarnDays, - MaxAgeDays: policy.MaxAgeDays, - } -} diff --git a/internal/api/grpc/management/policy_complexity_converter.go b/internal/api/grpc/management/policy_complexity_converter.go deleted file mode 100644 index 60d7339a44..0000000000 --- a/internal/api/grpc/management/policy_complexity_converter.go +++ /dev/null @@ -1,81 +0,0 @@ -package management - -import ( - "github.com/caos/logging" - - "github.com/golang/protobuf/ptypes" - - "github.com/caos/zitadel/internal/eventstore/models" - "github.com/caos/zitadel/internal/policy/model" - "github.com/caos/zitadel/pkg/grpc/management" -) - -func passwordComplexityPolicyFromModel(policy *model.PasswordComplexityPolicy) *management.PasswordComplexityPolicy { - creationDate, err := ptypes.TimestampProto(policy.CreationDate) - logging.Log("GRPC-cQRHE").OnError(err).Debug("unable to parse timestamp") - - changeDate, err := ptypes.TimestampProto(policy.ChangeDate) - logging.Log("GRPC-PVA1c").OnError(err).Debug("unable to parse timestamp") - - return &management.PasswordComplexityPolicy{ - Id: policy.AggregateID, - CreationDate: creationDate, - ChangeDate: changeDate, - Description: policy.Description, - Sequence: policy.Sequence, - MinLength: policy.MinLength, - HasLowercase: policy.HasLowercase, - HasUppercase: policy.HasUppercase, - HasNumber: policy.HasNumber, - HasSymbol: policy.HasSymbol, - IsDefault: policy.AggregateID == "", - } -} - -func passwordComplexityPolicyToModel(policy *management.PasswordComplexityPolicy) *model.PasswordComplexityPolicy { - creationDate, err := ptypes.Timestamp(policy.CreationDate) - logging.Log("GRPC-asmEZ").OnError(err).Debug("unable to parse timestamp") - - changeDate, err := ptypes.Timestamp(policy.ChangeDate) - logging.Log("GRPC-MCE4o").OnError(err).Debug("unable to parse timestamp") - - return &model.PasswordComplexityPolicy{ - ObjectRoot: models.ObjectRoot{ - AggregateID: policy.Id, - CreationDate: creationDate, - ChangeDate: changeDate, - Sequence: policy.Sequence, - }, - Description: policy.Description, - MinLength: policy.MinLength, - HasLowercase: policy.HasLowercase, - HasUppercase: policy.HasUppercase, - HasNumber: policy.HasNumber, - HasSymbol: policy.HasSymbol, - } -} - -func passwordComplexityPolicyCreateToModel(policy *management.PasswordComplexityPolicyCreate) *model.PasswordComplexityPolicy { - return &model.PasswordComplexityPolicy{ - Description: policy.Description, - MinLength: policy.MinLength, - HasLowercase: policy.HasLowercase, - HasUppercase: policy.HasUppercase, - HasNumber: policy.HasNumber, - HasSymbol: policy.HasSymbol, - } -} - -func passwordComplexityPolicyUpdateToModel(policy *management.PasswordComplexityPolicyUpdate) *model.PasswordComplexityPolicy { - return &model.PasswordComplexityPolicy{ - ObjectRoot: models.ObjectRoot{ - AggregateID: policy.Id, - }, - Description: policy.Description, - MinLength: policy.MinLength, - HasLowercase: policy.HasLowercase, - HasUppercase: policy.HasUppercase, - HasNumber: policy.HasNumber, - HasSymbol: policy.HasSymbol, - } -} diff --git a/internal/api/grpc/management/policy_lockout_converter.go b/internal/api/grpc/management/policy_lockout_converter.go deleted file mode 100644 index 0c44ff1350..0000000000 --- a/internal/api/grpc/management/policy_lockout_converter.go +++ /dev/null @@ -1,70 +0,0 @@ -package management - -import ( - "github.com/caos/logging" - - "github.com/golang/protobuf/ptypes" - - "github.com/caos/zitadel/internal/eventstore/models" - "github.com/caos/zitadel/internal/policy/model" - "github.com/caos/zitadel/pkg/grpc/management" -) - -func passwordLockoutPolicyFromModel(policy *model.PasswordLockoutPolicy) *management.PasswordLockoutPolicy { - creationDate, err := ptypes.TimestampProto(policy.CreationDate) - logging.Log("GRPC-JRSbT").OnError(err).Debug("unable to parse timestamp") - - changeDate, err := ptypes.TimestampProto(policy.ChangeDate) - logging.Log("GRPC-1sizr").OnError(err).Debug("unable to parse timestamp") - - return &management.PasswordLockoutPolicy{ - Id: policy.AggregateID, - CreationDate: creationDate, - ChangeDate: changeDate, - Sequence: policy.Sequence, - Description: policy.Description, - MaxAttempts: policy.MaxAttempts, - ShowLockOutFailures: policy.ShowLockOutFailures, - IsDefault: policy.AggregateID == "", - } -} - -func passwordLockoutPolicyToModel(policy *management.PasswordLockoutPolicy) *model.PasswordLockoutPolicy { - creationDate, err := ptypes.Timestamp(policy.CreationDate) - logging.Log("GRPC-8a511").OnError(err).Debug("unable to parse timestamp") - - changeDate, err := ptypes.Timestamp(policy.ChangeDate) - logging.Log("GRPC-2rdGv").OnError(err).Debug("unable to parse timestamp") - - return &model.PasswordLockoutPolicy{ - ObjectRoot: models.ObjectRoot{ - AggregateID: policy.Id, - CreationDate: creationDate, - ChangeDate: changeDate, - Sequence: policy.Sequence, - }, - Description: policy.Description, - - MaxAttempts: policy.MaxAttempts, - ShowLockOutFailures: policy.ShowLockOutFailures, - } -} - -func passwordLockoutPolicyCreateToModel(policy *management.PasswordLockoutPolicyCreate) *model.PasswordLockoutPolicy { - return &model.PasswordLockoutPolicy{ - Description: policy.Description, - MaxAttempts: policy.MaxAttempts, - ShowLockOutFailures: policy.ShowLockOutFailures, - } -} - -func passwordLockoutPolicyUpdateToModel(policy *management.PasswordLockoutPolicyUpdate) *model.PasswordLockoutPolicy { - return &model.PasswordLockoutPolicy{ - ObjectRoot: models.ObjectRoot{ - AggregateID: policy.Id, - }, - Description: policy.Description, - MaxAttempts: policy.MaxAttempts, - ShowLockOutFailures: policy.ShowLockOutFailures, - } -} diff --git a/internal/api/grpc/management/server.go b/internal/api/grpc/management/server.go index dcf2339c70..ec446f7732 100644 --- a/internal/api/grpc/management/server.go +++ b/internal/api/grpc/management/server.go @@ -19,7 +19,6 @@ var _ management.ManagementServiceServer = (*Server)(nil) type Server struct { project repository.ProjectRepository - policy repository.PolicyRepository org repository.OrgRepository user repository.UserRepository usergrant repository.UserGrantRepository @@ -35,7 +34,6 @@ type Config struct { func CreateServer(repo repository.Repository, sd systemdefaults.SystemDefaults) *Server { return &Server{ project: repo, - policy: repo, org: repo, user: repo, usergrant: repo, diff --git a/internal/api/http/marshal.go b/internal/api/http/marshal.go index 10df5c8475..47ac18452f 100644 --- a/internal/api/http/marshal.go +++ b/internal/api/http/marshal.go @@ -7,7 +7,11 @@ import ( "github.com/caos/logging" ) -func MarshalJSON(w http.ResponseWriter, i interface{}) { +func MarshalJSON(w http.ResponseWriter, i interface{}, err error, statusCode int) { + if err != nil { + http.Error(w, err.Error(), statusCode) + return + } b, err := json.Marshal(i) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) diff --git a/internal/auth/repository/eventsourcing/eventstore/auth_request.go b/internal/auth/repository/eventsourcing/eventstore/auth_request.go index a0be3e59ce..a5a969ce37 100644 --- a/internal/auth/repository/eventsourcing/eventstore/auth_request.go +++ b/internal/auth/repository/eventsourcing/eventstore/auth_request.go @@ -7,7 +7,6 @@ import ( iam_model "github.com/caos/zitadel/internal/iam/model" iam_es_model "github.com/caos/zitadel/internal/iam/repository/view/model" org_event "github.com/caos/zitadel/internal/org/repository/eventsourcing" - policy_event "github.com/caos/zitadel/internal/policy/repository/eventsourcing" "time" "github.com/caos/logging" @@ -30,7 +29,6 @@ import ( type AuthRequestRepo struct { UserEvents *user_event.UserEventstore OrgEvents *org_event.OrgEventstore - PolicyEvents *policy_event.PolicyEventstore AuthRequests cache.AuthRequestCache View *view.View @@ -264,15 +262,23 @@ func (repo *AuthRequestRepo) AutoRegisterExternalUser(ctx context.Context, regis if resourceOwner != "" { policyResourceOwner = resourceOwner } - pwPolicy, err := repo.PolicyEvents.GetPasswordComplexityPolicy(ctx, policyResourceOwner) + pwPolicy, err := repo.View.PasswordComplexityPolicyByAggregateID(policyResourceOwner) + if errors.IsNotFound(err) { + pwPolicy, err = repo.View.PasswordComplexityPolicyByAggregateID(repo.IAMID) + } if err != nil { return err } - orgPolicy, err := repo.OrgEvents.GetOrgIAMPolicy(ctx, policyResourceOwner) + pwPolicyView := iam_es_model.PasswordComplexityViewToModel(pwPolicy) + orgPolicy, err := repo.View.OrgIAMPolicyByAggregateID(policyResourceOwner) + if errors.IsNotFound(err) { + orgPolicy, err = repo.View.OrgIAMPolicyByAggregateID(repo.IAMID) + } if err != nil { return err } - user, aggregates, err := repo.UserEvents.PrepareRegisterUser(ctx, registerUser, externalIDP, pwPolicy, orgPolicy, resourceOwner) + orgPolicyView := iam_es_model.OrgIAMViewToModel(orgPolicy) + user, aggregates, err := repo.UserEvents.PrepareRegisterUser(ctx, registerUser, externalIDP, pwPolicyView, orgPolicyView, resourceOwner) if err != nil { return err } diff --git a/internal/auth/repository/eventsourcing/eventstore/org.go b/internal/auth/repository/eventsourcing/eventstore/org.go index fb4f46c7c4..05f06889fc 100644 --- a/internal/auth/repository/eventsourcing/eventstore/org.go +++ b/internal/auth/repository/eventsourcing/eventstore/org.go @@ -3,6 +3,9 @@ package eventstore import ( "context" "github.com/caos/logging" + "github.com/caos/zitadel/internal/api/authz" + "github.com/caos/zitadel/internal/config/systemdefaults" + "github.com/caos/zitadel/internal/errors" iam_model "github.com/caos/zitadel/internal/iam/model" iam_view_model "github.com/caos/zitadel/internal/iam/repository/view/model" @@ -13,8 +16,6 @@ import ( org_model "github.com/caos/zitadel/internal/org/model" org_es "github.com/caos/zitadel/internal/org/repository/eventsourcing" "github.com/caos/zitadel/internal/org/repository/view/model" - policy_model "github.com/caos/zitadel/internal/policy/model" - policy_es "github.com/caos/zitadel/internal/policy/repository/eventsourcing" usr_es "github.com/caos/zitadel/internal/user/repository/eventsourcing" ) @@ -23,12 +24,12 @@ const ( ) type OrgRepository struct { - SearchLimit uint64 - OrgEventstore *org_es.OrgEventstore - UserEventstore *usr_es.UserEventstore - PolicyEventstore *policy_es.PolicyEventstore + SearchLimit uint64 + OrgEventstore *org_es.OrgEventstore + UserEventstore *usr_es.UserEventstore - View *auth_view.View + View *auth_view.View + SystemDefaults systemdefaults.SystemDefaults } func (repo *OrgRepository) SearchOrgs(ctx context.Context, request *org_model.OrgSearchRequest) (*org_model.OrgSearchResult, error) { @@ -53,14 +54,16 @@ func (repo *OrgRepository) SearchOrgs(ctx context.Context, request *org_model.Or } func (repo *OrgRepository) RegisterOrg(ctx context.Context, register *auth_model.RegisterOrg) (*auth_model.RegisterOrg, error) { - pwPolicy, err := repo.PolicyEventstore.GetPasswordComplexityPolicy(ctx, policy_model.DefaultPolicy) + pwPolicy, err := repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) if err != nil { return nil, err } - orgPolicy, err := repo.OrgEventstore.GetOrgIAMPolicy(ctx, policy_model.DefaultPolicy) + pwPolicyView := iam_view_model.PasswordComplexityViewToModel(pwPolicy) + orgPolicy, err := repo.View.OrgIAMPolicyByAggregateID(repo.SystemDefaults.IamID) if err != nil { return nil, err } + orgPolicyView := iam_view_model.OrgIAMViewToModel(orgPolicy) users := func(ctx context.Context, domain string) ([]*es_models.Aggregate, error) { userIDs, err := repo.View.UserIDsByDomain(domain) if err != nil { @@ -72,7 +75,7 @@ func (repo *OrgRepository) RegisterOrg(ctx context.Context, register *auth_model if err != nil { return nil, err } - user, userAggregates, err := repo.UserEventstore.PrepareRegisterUser(ctx, register.User, nil, pwPolicy, orgPolicy, org.AggregateID) + user, userAggregates, err := repo.UserEventstore.PrepareRegisterUser(ctx, register.User, nil, pwPolicyView, orgPolicyView, org.AggregateID) if err != nil { return nil, err } @@ -95,12 +98,25 @@ func (repo *OrgRepository) RegisterOrg(ctx context.Context, register *auth_model return RegisterToModel(registerModel), nil } -func (repo *OrgRepository) GetDefaultOrgIamPolicy(ctx context.Context) *org_model.OrgIAMPolicy { - return repo.OrgEventstore.GetDefaultOrgIAMPolicy(ctx) +func (repo *OrgRepository) GetDefaultOrgIAMPolicy(ctx context.Context) (*iam_model.OrgIAMPolicyView, error) { + orgPolicy, err := repo.View.OrgIAMPolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } + policy := iam_view_model.OrgIAMViewToModel(orgPolicy) + policy.IAMDomain = repo.SystemDefaults.Domain + return policy, err } -func (repo *OrgRepository) GetOrgIamPolicy(ctx context.Context, orgID string) (*org_model.OrgIAMPolicy, error) { - return repo.OrgEventstore.GetOrgIAMPolicy(ctx, orgID) +func (repo *OrgRepository) GetOrgIAMPolicy(ctx context.Context, orgID string) (*iam_model.OrgIAMPolicyView, error) { + orgPolicy, err := repo.View.OrgIAMPolicyByAggregateID(orgID) + if errors.IsNotFound(err) { + orgPolicy, err = repo.View.OrgIAMPolicyByAggregateID(repo.SystemDefaults.IamID) + } + if err != nil { + return nil, err + } + return iam_view_model.OrgIAMViewToModel(orgPolicy), nil } func (repo *OrgRepository) GetIDPConfigByID(ctx context.Context, idpConfigID string) (*iam_model.IDPConfigView, error) { @@ -110,3 +126,18 @@ func (repo *OrgRepository) GetIDPConfigByID(ctx context.Context, idpConfigID str } return iam_view_model.IDPConfigViewToModel(idpConfig), nil } + +func (repo *OrgRepository) GetMyPasswordComplexityPolicy(ctx context.Context) (*iam_model.PasswordComplexityPolicyView, error) { + policy, err := repo.View.PasswordComplexityPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if errors.IsNotFound(err) { + policy, err = repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } + policy.Default = true + } + if err != nil { + return nil, err + } + return iam_view_model.PasswordComplexityViewToModel(policy), err +} diff --git a/internal/auth/repository/eventsourcing/eventstore/policy.go b/internal/auth/repository/eventsourcing/eventstore/policy.go deleted file mode 100644 index 317909fd99..0000000000 --- a/internal/auth/repository/eventsourcing/eventstore/policy.go +++ /dev/null @@ -1,18 +0,0 @@ -package eventstore - -import ( - "context" - - "github.com/caos/zitadel/internal/api/authz" - pol_model "github.com/caos/zitadel/internal/policy/model" - pol_event "github.com/caos/zitadel/internal/policy/repository/eventsourcing" -) - -type PolicyRepo struct { - PolicyEvents *pol_event.PolicyEventstore -} - -func (repo *PolicyRepo) GetMyPasswordComplexityPolicy(ctx context.Context) (*pol_model.PasswordComplexityPolicy, error) { - ctxData := authz.GetCtxData(ctx) - return repo.PolicyEvents.GetPasswordComplexityPolicy(ctx, ctxData.OrgID) -} diff --git a/internal/auth/repository/eventsourcing/eventstore/user.go b/internal/auth/repository/eventsourcing/eventstore/user.go index e9d754f1ef..471b00a007 100644 --- a/internal/auth/repository/eventsourcing/eventstore/user.go +++ b/internal/auth/repository/eventsourcing/eventstore/user.go @@ -2,6 +2,8 @@ package eventstore import ( "context" + "github.com/caos/zitadel/internal/config/systemdefaults" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/view/model" "github.com/caos/logging" @@ -13,7 +15,6 @@ import ( "github.com/caos/zitadel/internal/eventstore/sdk" org_model "github.com/caos/zitadel/internal/org/model" org_event "github.com/caos/zitadel/internal/org/repository/eventsourcing" - policy_event "github.com/caos/zitadel/internal/policy/repository/eventsourcing" "github.com/caos/zitadel/internal/user/model" user_event "github.com/caos/zitadel/internal/user/repository/eventsourcing" usr_model "github.com/caos/zitadel/internal/user/repository/eventsourcing/model" @@ -21,12 +22,12 @@ import ( ) type UserRepo struct { - SearchLimit uint64 - Eventstore eventstore.Eventstore - UserEvents *user_event.UserEventstore - OrgEvents *org_event.OrgEventstore - PolicyEvents *policy_event.PolicyEventstore - View *view.View + SearchLimit uint64 + Eventstore eventstore.Eventstore + UserEvents *user_event.UserEventstore + OrgEvents *org_event.OrgEventstore + View *view.View + SystemDefaults systemdefaults.SystemDefaults } func (repo *UserRepo) Health(ctx context.Context) error { @@ -46,15 +47,23 @@ func (repo *UserRepo) registerUser(ctx context.Context, registerUser *model.User if resourceOwner != "" { policyResourceOwner = resourceOwner } - pwPolicy, err := repo.PolicyEvents.GetPasswordComplexityPolicy(ctx, policyResourceOwner) + pwPolicy, err := repo.View.PasswordComplexityPolicyByAggregateID(policyResourceOwner) + if errors.IsNotFound(err) { + pwPolicy, err = repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return nil, err } - orgPolicy, err := repo.OrgEvents.GetOrgIAMPolicy(ctx, policyResourceOwner) + pwPolicyView := iam_es_model.PasswordComplexityViewToModel(pwPolicy) + orgPolicy, err := repo.View.OrgIAMPolicyByAggregateID(policyResourceOwner) + if errors.IsNotFound(err) { + orgPolicy, err = repo.View.OrgIAMPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return nil, err } - user, aggregates, err := repo.UserEvents.PrepareRegisterUser(ctx, registerUser, externalIDP, pwPolicy, orgPolicy, resourceOwner) + orgPolicyView := iam_es_model.OrgIAMViewToModel(orgPolicy) + user, aggregates, err := repo.UserEvents.PrepareRegisterUser(ctx, registerUser, externalIDP, pwPolicyView, orgPolicyView, resourceOwner) if err != nil { return nil, err } @@ -215,20 +224,28 @@ func (repo *UserRepo) ChangeMyAddress(ctx context.Context, address *model.Addres } func (repo *UserRepo) ChangeMyPassword(ctx context.Context, old, new string) error { - policy, err := repo.PolicyEvents.GetPasswordComplexityPolicy(ctx, authz.GetCtxData(ctx).OrgID) + policy, err := repo.View.PasswordComplexityPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if errors.IsNotFound(err) { + policy, err = repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return err } - _, err = repo.UserEvents.ChangePassword(ctx, policy, authz.GetCtxData(ctx).UserID, old, new) + pwPolicyView := iam_es_model.PasswordComplexityViewToModel(policy) + _, err = repo.UserEvents.ChangePassword(ctx, pwPolicyView, authz.GetCtxData(ctx).UserID, old, new) return err } func (repo *UserRepo) ChangePassword(ctx context.Context, userID, old, new string) error { - policy, err := repo.PolicyEvents.GetPasswordComplexityPolicy(ctx, authz.GetCtxData(ctx).OrgID) + policy, err := repo.View.PasswordComplexityPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if errors.IsNotFound(err) { + policy, err = repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return err } - _, err = repo.UserEvents.ChangePassword(ctx, policy, userID, old, new) + pwPolicyView := iam_es_model.PasswordComplexityViewToModel(policy) + _, err = repo.UserEvents.ChangePassword(ctx, pwPolicyView, userID, old, new) return err } @@ -279,11 +296,15 @@ func (repo *UserRepo) RemoveMyMfaOTP(ctx context.Context) error { func (repo *UserRepo) ChangeMyUsername(ctx context.Context, username string) error { ctxData := authz.GetCtxData(ctx) - orgPolicy, err := repo.OrgEvents.GetOrgIAMPolicy(ctx, ctxData.OrgID) + orgPolicy, err := repo.View.OrgIAMPolicyByAggregateID(ctxData.OrgID) + if errors.IsNotFound(err) { + orgPolicy, err = repo.View.OrgIAMPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return err } - return repo.UserEvents.ChangeUsername(ctx, ctxData.UserID, username, orgPolicy) + orgPolicyView := iam_es_model.OrgIAMViewToModel(orgPolicy) + return repo.UserEvents.ChangeUsername(ctx, ctxData.UserID, username, orgPolicyView) } func (repo *UserRepo) ResendInitVerificationMail(ctx context.Context, userID string) error { _, err := repo.UserEvents.CreateInitializeUserCodeByID(ctx, userID) @@ -291,11 +312,15 @@ func (repo *UserRepo) ResendInitVerificationMail(ctx context.Context, userID str } func (repo *UserRepo) VerifyInitCode(ctx context.Context, userID, code, password string) error { - policy, err := repo.PolicyEvents.GetPasswordComplexityPolicy(ctx, authz.GetCtxData(ctx).OrgID) + policy, err := repo.View.PasswordComplexityPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if errors.IsNotFound(err) { + policy, err = repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return err } - return repo.UserEvents.VerifyInitCode(ctx, policy, userID, code, password) + pwPolicyView := iam_es_model.PasswordComplexityViewToModel(policy) + return repo.UserEvents.VerifyInitCode(ctx, pwPolicyView, userID, code, password) } func (repo *UserRepo) SkipMfaInit(ctx context.Context, userID string) error { @@ -311,11 +336,15 @@ func (repo *UserRepo) RequestPasswordReset(ctx context.Context, loginname string } func (repo *UserRepo) SetPassword(ctx context.Context, userID, code, password string) error { - policy, err := repo.PolicyEvents.GetPasswordComplexityPolicy(ctx, authz.GetCtxData(ctx).OrgID) + policy, err := repo.View.PasswordComplexityPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if errors.IsNotFound(err) { + policy, err = repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return err } - return repo.UserEvents.SetPassword(ctx, policy, userID, code, password) + pwPolicyView := iam_es_model.PasswordComplexityViewToModel(policy) + return repo.UserEvents.SetPassword(ctx, pwPolicyView, userID, code, password) } func (repo *UserRepo) SignOut(ctx context.Context, agentID string) error { @@ -369,11 +398,15 @@ func (repo *UserRepo) MyUserChanges(ctx context.Context, lastSequence uint64, li func (repo *UserRepo) ChangeUsername(ctx context.Context, userID, username string) error { policyResourceOwner := authz.GetCtxData(ctx).OrgID - orgPolicy, err := repo.OrgEvents.GetOrgIAMPolicy(ctx, policyResourceOwner) + orgPolicy, err := repo.View.OrgIAMPolicyByAggregateID(policyResourceOwner) + if errors.IsNotFound(err) { + orgPolicy, err = repo.View.OrgIAMPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return err } - return repo.UserEvents.ChangeUsername(ctx, userID, username, orgPolicy) + orgPolicyView := iam_es_model.OrgIAMViewToModel(orgPolicy) + return repo.UserEvents.ChangeUsername(ctx, userID, username, orgPolicyView) } func checkIDs(ctx context.Context, obj es_models.ObjectRoot) error { diff --git a/internal/auth/repository/eventsourcing/handler/handler.go b/internal/auth/repository/eventsourcing/handler/handler.go index 52f078cced..608fca028a 100644 --- a/internal/auth/repository/eventsourcing/handler/handler.go +++ b/internal/auth/repository/eventsourcing/handler/handler.go @@ -37,7 +37,8 @@ type EventstoreRepos struct { func Register(configs Configs, bulkLimit, errorCount uint64, view *view.View, eventstore eventstore.Eventstore, repos EventstoreRepos, systemDefaults sd.SystemDefaults) []query.Handler { return []query.Handler{ - &User{handler: handler{view, bulkLimit, configs.cycleDuration("User"), errorCount}, orgEvents: repos.OrgEvents}, + &User{handler: handler{view, bulkLimit, configs.cycleDuration("User"), errorCount}, + orgEvents: repos.OrgEvents, iamEvents: repos.IamEvents, iamID: systemDefaults.IamID}, &UserSession{handler: handler{view, bulkLimit, configs.cycleDuration("UserSession"), errorCount}, userEvents: repos.UserEvents}, &UserMembership{handler: handler{view, bulkLimit, configs.cycleDuration("UserMembership"), errorCount}, orgEvents: repos.OrgEvents, projectEvents: repos.ProjectEvents}, &Token{handler: handler{view, bulkLimit, configs.cycleDuration("Token"), errorCount}, ProjectEvents: repos.ProjectEvents}, @@ -57,6 +58,8 @@ func Register(configs Configs, bulkLimit, errorCount uint64, view *view.View, ev &IDPConfig{handler: handler{view, bulkLimit, configs.cycleDuration("IDPConfig"), errorCount}}, &IDPProvider{handler: handler{view, bulkLimit, configs.cycleDuration("IDPProvider"), errorCount}, systemDefaults: systemDefaults, orgEvents: repos.OrgEvents, iamEvents: repos.IamEvents}, &ExternalIDP{handler: handler{view, bulkLimit, configs.cycleDuration("ExternalIDP"), errorCount}, systemDefaults: systemDefaults, orgEvents: repos.OrgEvents, iamEvents: repos.IamEvents}, + &PasswordComplexityPolicy{handler: handler{view, bulkLimit, configs.cycleDuration("PasswordComplexityPolicy"), errorCount}}, + &OrgIAMPolicy{handler: handler{view, bulkLimit, configs.cycleDuration("OrgIAMPolicy"), errorCount}}, } } diff --git a/internal/auth/repository/eventsourcing/handler/org_iam_policy.go b/internal/auth/repository/eventsourcing/handler/org_iam_policy.go new file mode 100644 index 0000000000..55f72f74d7 --- /dev/null +++ b/internal/auth/repository/eventsourcing/handler/org_iam_policy.go @@ -0,0 +1,69 @@ +package handler + +import ( + "github.com/caos/logging" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + + "github.com/caos/zitadel/internal/eventstore/models" + es_models "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/eventstore/spooler" + iam_model "github.com/caos/zitadel/internal/iam/repository/view/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" +) + +type OrgIAMPolicy struct { + handler +} + +const ( + orgIAMPolicyTable = "auth.org_iam_policies" +) + +func (m *OrgIAMPolicy) ViewModel() string { + return orgIAMPolicyTable +} + +func (m *OrgIAMPolicy) EventQuery() (*models.SearchQuery, error) { + sequence, err := m.view.GetLatestOrgIAMPolicySequence() + if err != nil { + return nil, err + } + return es_models.NewSearchQuery(). + AggregateTypeFilter(model.OrgAggregate, iam_es_model.IAMAggregate). + LatestSequenceFilter(sequence.CurrentSequence), nil +} + +func (m *OrgIAMPolicy) Reduce(event *models.Event) (err error) { + switch event.AggregateType { + case model.OrgAggregate, iam_es_model.IAMAggregate: + err = m.processOrgIAMPolicy(event) + } + return err +} + +func (m *OrgIAMPolicy) processOrgIAMPolicy(event *models.Event) (err error) { + policy := new(iam_model.OrgIAMPolicyView) + switch event.Type { + case iam_es_model.OrgIAMPolicyAdded, model.OrgIAMPolicyAdded: + err = policy.AppendEvent(event) + case iam_es_model.OrgIAMPolicyChanged, model.OrgIAMPolicyChanged: + policy, err = m.view.OrgIAMPolicyByAggregateID(event.AggregateID) + if err != nil { + return err + } + err = policy.AppendEvent(event) + case model.OrgIAMPolicyRemoved: + return m.view.DeleteOrgIAMPolicy(event.AggregateID, event.Sequence) + default: + return m.view.ProcessedOrgIAMPolicySequence(event.Sequence) + } + if err != nil { + return err + } + return m.view.PutOrgIAMPolicy(policy, policy.Sequence) +} + +func (m *OrgIAMPolicy) OnError(event *models.Event, err error) error { + logging.LogWithFields("SPOOL-3Gj8s", "id", event.AggregateID).WithError(err).Warn("something went wrong in orgIAM policy handler") + return spooler.HandleError(event, err, m.view.GetLatestOrgIAMPolicyFailedEvent, m.view.ProcessedOrgIAMPolicyFailedEvent, m.view.ProcessedOrgIAMPolicySequence, m.errorCountUntilSkip) +} diff --git a/internal/auth/repository/eventsourcing/handler/password_complexity_policy.go b/internal/auth/repository/eventsourcing/handler/password_complexity_policy.go new file mode 100644 index 0000000000..c280615988 --- /dev/null +++ b/internal/auth/repository/eventsourcing/handler/password_complexity_policy.go @@ -0,0 +1,69 @@ +package handler + +import ( + "github.com/caos/logging" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + + "github.com/caos/zitadel/internal/eventstore/models" + es_models "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/eventstore/spooler" + iam_model "github.com/caos/zitadel/internal/iam/repository/view/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" +) + +type PasswordComplexityPolicy struct { + handler +} + +const ( + passwordComplexityPolicyTable = "auth.password_complexity_policies" +) + +func (m *PasswordComplexityPolicy) ViewModel() string { + return passwordComplexityPolicyTable +} + +func (m *PasswordComplexityPolicy) EventQuery() (*models.SearchQuery, error) { + sequence, err := m.view.GetLatestPasswordComplexityPolicySequence() + if err != nil { + return nil, err + } + return es_models.NewSearchQuery(). + AggregateTypeFilter(model.OrgAggregate, iam_es_model.IAMAggregate). + LatestSequenceFilter(sequence.CurrentSequence), nil +} + +func (m *PasswordComplexityPolicy) Reduce(event *models.Event) (err error) { + switch event.AggregateType { + case model.OrgAggregate, iam_es_model.IAMAggregate: + err = m.processPasswordComplexityPolicy(event) + } + return err +} + +func (m *PasswordComplexityPolicy) processPasswordComplexityPolicy(event *models.Event) (err error) { + policy := new(iam_model.PasswordComplexityPolicyView) + switch event.Type { + case iam_es_model.PasswordComplexityPolicyAdded, model.PasswordComplexityPolicyAdded: + err = policy.AppendEvent(event) + case iam_es_model.PasswordComplexityPolicyChanged, model.PasswordComplexityPolicyChanged: + policy, err = m.view.PasswordComplexityPolicyByAggregateID(event.AggregateID) + if err != nil { + return err + } + err = policy.AppendEvent(event) + case model.PasswordComplexityPolicyRemoved: + return m.view.DeletePasswordComplexityPolicy(event.AggregateID, event.Sequence) + default: + return m.view.ProcessedPasswordComplexityPolicySequence(event.Sequence) + } + if err != nil { + return err + } + return m.view.PutPasswordComplexityPolicy(policy, policy.Sequence) +} + +func (m *PasswordComplexityPolicy) OnError(event *models.Event, err error) error { + logging.LogWithFields("SPOOL-4Djo9", "id", event.AggregateID).WithError(err).Warn("something went wrong in passwordComplexity policy handler") + return spooler.HandleError(event, err, m.view.GetLatestPasswordComplexityPolicyFailedEvent, m.view.ProcessedPasswordComplexityPolicyFailedEvent, m.view.ProcessedPasswordComplexityPolicySequence, m.errorCountUntilSkip) +} diff --git a/internal/auth/repository/eventsourcing/handler/user.go b/internal/auth/repository/eventsourcing/handler/user.go index 1663a1b921..c05c2f0f73 100644 --- a/internal/auth/repository/eventsourcing/handler/user.go +++ b/internal/auth/repository/eventsourcing/handler/user.go @@ -2,6 +2,7 @@ package handler import ( "context" + iam_es "github.com/caos/zitadel/internal/iam/repository/eventsourcing" es_models "github.com/caos/zitadel/internal/eventstore/models" org_model "github.com/caos/zitadel/internal/org/model" @@ -21,6 +22,8 @@ type User struct { handler eventstore eventstore.Eventstore orgEvents *org_events.OrgEventstore + iamEvents *iam_es.IAMEventstore + iamID string } const ( @@ -126,9 +129,12 @@ func (u *User) fillLoginNames(user *view_model.UserView) (err error) { if err != nil { return err } - policy, err := u.orgEvents.GetOrgIAMPolicy(context.Background(), user.ResourceOwner) - if err != nil { - return err + policy := org.OrgIamPolicy + if policy == nil { + policy, err = u.iamEvents.GetOrgIAMPolicy(context.Background(), u.iamID) + if err != nil { + return err + } } user.SetLoginNames(policy, org.Domains) user.PreferredLoginName = user.GenerateLoginName(org.GetPrimaryDomain().Domain, policy.UserLoginMustBeDomain) @@ -155,9 +161,12 @@ func (u *User) fillLoginNamesOnOrgUsers(event *models.Event) error { if err != nil { return err } - policy, err := u.orgEvents.GetOrgIAMPolicy(context.Background(), event.ResourceOwner) - if err != nil { - return err + policy := org.OrgIamPolicy + if policy == nil { + policy, err = u.iamEvents.GetOrgIAMPolicy(context.Background(), u.iamID) + if err != nil { + return err + } } users, err := u.view.UsersByOrgID(event.AggregateID) if err != nil { @@ -174,9 +183,12 @@ func (u *User) fillPreferredLoginNamesOnOrgUsers(event *models.Event) error { if err != nil { return err } - policy, err := u.orgEvents.GetOrgIAMPolicy(context.Background(), event.ResourceOwner) - if err != nil { - return err + policy := org.OrgIamPolicy + if policy == nil { + policy, err = u.iamEvents.GetOrgIAMPolicy(context.Background(), u.iamID) + if err != nil { + return err + } } if !policy.UserLoginMustBeDomain { return nil diff --git a/internal/auth/repository/eventsourcing/repository.go b/internal/auth/repository/eventsourcing/repository.go index c4217d5458..b889cbcd68 100644 --- a/internal/auth/repository/eventsourcing/repository.go +++ b/internal/auth/repository/eventsourcing/repository.go @@ -19,7 +19,6 @@ import ( "github.com/caos/zitadel/internal/id" es_key "github.com/caos/zitadel/internal/key/repository/eventsourcing" es_org "github.com/caos/zitadel/internal/org/repository/eventsourcing" - es_policy "github.com/caos/zitadel/internal/policy/repository/eventsourcing" es_proj "github.com/caos/zitadel/internal/project/repository/eventsourcing" es_user "github.com/caos/zitadel/internal/user/repository/eventsourcing" ) @@ -45,7 +44,6 @@ type EsRepository struct { eventstore.UserGrantRepo eventstore.OrgRepository eventstore.IAMRepository - eventstore.PolicyRepo } func Start(conf Config, authZ authz.Config, systemDefaults sd.SystemDefaults, authZRepo *authz_repo.EsRepository) (*EsRepository, error) { @@ -69,16 +67,7 @@ func Start(conf Config, authZ authz.Config, systemDefaults sd.SystemDefaults, au if err != nil { return nil, err } - policy, err := es_policy.StartPolicy( - es_policy.PolicyConfig{ - Eventstore: es, - Cache: conf.Eventstore.Cache, - }, - systemDefaults, - ) - if err != nil { - return nil, err - } + user, err := es_user.StartUser( es_user.UserConfig{ Eventstore: es, @@ -128,17 +117,16 @@ func Start(conf Config, authZ authz.Config, systemDefaults sd.SystemDefaults, au return &EsRepository{ spool, eventstore.UserRepo{ - SearchLimit: conf.SearchLimit, - Eventstore: es, - UserEvents: user, - OrgEvents: org, - PolicyEvents: policy, - View: view, + SearchLimit: conf.SearchLimit, + Eventstore: es, + UserEvents: user, + OrgEvents: org, + View: view, + SystemDefaults: systemDefaults, }, eventstore.AuthRequestRepo{ UserEvents: user, OrgEvents: org, - PolicyEvents: policy, AuthRequests: authReq, View: view, UserSessionViewProvider: view, @@ -176,19 +164,16 @@ func Start(conf Config, authZ authz.Config, systemDefaults sd.SystemDefaults, au AuthZRepo: authZRepo, }, eventstore.OrgRepository{ - SearchLimit: conf.SearchLimit, - View: view, - OrgEventstore: org, - PolicyEventstore: policy, - UserEventstore: user, + SearchLimit: conf.SearchLimit, + View: view, + OrgEventstore: org, + UserEventstore: user, + SystemDefaults: systemDefaults, }, eventstore.IAMRepository{ IAMEvents: iam, IAMID: systemDefaults.IamID, }, - eventstore.PolicyRepo{ - PolicyEvents: policy, - }, }, nil } diff --git a/internal/auth/repository/eventsourcing/view/org_iam_policy.go b/internal/auth/repository/eventsourcing/view/org_iam_policy.go new file mode 100644 index 0000000000..2d43efc80e --- /dev/null +++ b/internal/auth/repository/eventsourcing/view/org_iam_policy.go @@ -0,0 +1,48 @@ +package view + +import ( + "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/iam/repository/view" + "github.com/caos/zitadel/internal/iam/repository/view/model" + global_view "github.com/caos/zitadel/internal/view/repository" +) + +const ( + orgIAMPolicyTable = "auth.org_iam_policies" +) + +func (v *View) OrgIAMPolicyByAggregateID(aggregateID string) (*model.OrgIAMPolicyView, error) { + return view.GetOrgIAMPolicyByAggregateID(v.Db, orgIAMPolicyTable, aggregateID) +} + +func (v *View) PutOrgIAMPolicy(policy *model.OrgIAMPolicyView, sequence uint64) error { + err := view.PutOrgIAMPolicy(v.Db, orgIAMPolicyTable, policy) + if err != nil { + return err + } + return v.ProcessedOrgIAMPolicySequence(sequence) +} + +func (v *View) DeleteOrgIAMPolicy(aggregateID string, eventSequence uint64) error { + err := view.DeleteOrgIAMPolicy(v.Db, orgIAMPolicyTable, aggregateID) + if err != nil && !errors.IsNotFound(err) { + return err + } + return v.ProcessedOrgIAMPolicySequence(eventSequence) +} + +func (v *View) GetLatestOrgIAMPolicySequence() (*global_view.CurrentSequence, error) { + return v.latestSequence(orgIAMPolicyTable) +} + +func (v *View) ProcessedOrgIAMPolicySequence(eventSequence uint64) error { + return v.saveCurrentSequence(orgIAMPolicyTable, eventSequence) +} + +func (v *View) GetLatestOrgIAMPolicyFailedEvent(sequence uint64) (*global_view.FailedEvent, error) { + return v.latestFailedEvent(orgIAMPolicyTable, sequence) +} + +func (v *View) ProcessedOrgIAMPolicyFailedEvent(failedEvent *global_view.FailedEvent) error { + return v.saveFailedEvent(failedEvent) +} diff --git a/internal/auth/repository/eventsourcing/view/password_complexity_policy.go b/internal/auth/repository/eventsourcing/view/password_complexity_policy.go new file mode 100644 index 0000000000..93e28e1eb6 --- /dev/null +++ b/internal/auth/repository/eventsourcing/view/password_complexity_policy.go @@ -0,0 +1,48 @@ +package view + +import ( + "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/iam/repository/view" + "github.com/caos/zitadel/internal/iam/repository/view/model" + global_view "github.com/caos/zitadel/internal/view/repository" +) + +const ( + passwordComplexityPolicyTable = "auth.password_complexity_policies" +) + +func (v *View) PasswordComplexityPolicyByAggregateID(aggregateID string) (*model.PasswordComplexityPolicyView, error) { + return view.GetPasswordComplexityPolicyByAggregateID(v.Db, passwordComplexityPolicyTable, aggregateID) +} + +func (v *View) PutPasswordComplexityPolicy(policy *model.PasswordComplexityPolicyView, sequence uint64) error { + err := view.PutPasswordComplexityPolicy(v.Db, passwordComplexityPolicyTable, policy) + if err != nil { + return err + } + return v.ProcessedPasswordComplexityPolicySequence(sequence) +} + +func (v *View) DeletePasswordComplexityPolicy(aggregateID string, eventSequence uint64) error { + err := view.DeletePasswordComplexityPolicy(v.Db, passwordComplexityPolicyTable, aggregateID) + if err != nil && !errors.IsNotFound(err) { + return err + } + return v.ProcessedPasswordComplexityPolicySequence(eventSequence) +} + +func (v *View) GetLatestPasswordComplexityPolicySequence() (*global_view.CurrentSequence, error) { + return v.latestSequence(passwordComplexityPolicyTable) +} + +func (v *View) ProcessedPasswordComplexityPolicySequence(eventSequence uint64) error { + return v.saveCurrentSequence(passwordComplexityPolicyTable, eventSequence) +} + +func (v *View) GetLatestPasswordComplexityPolicyFailedEvent(sequence uint64) (*global_view.FailedEvent, error) { + return v.latestFailedEvent(passwordComplexityPolicyTable, sequence) +} + +func (v *View) ProcessedPasswordComplexityPolicyFailedEvent(failedEvent *global_view.FailedEvent) error { + return v.saveFailedEvent(failedEvent) +} diff --git a/internal/auth/repository/org.go b/internal/auth/repository/org.go index 54b75b2643..2139987a18 100644 --- a/internal/auth/repository/org.go +++ b/internal/auth/repository/org.go @@ -4,12 +4,12 @@ import ( "context" auth_model "github.com/caos/zitadel/internal/auth/model" iam_model "github.com/caos/zitadel/internal/iam/model" - org_model "github.com/caos/zitadel/internal/org/model" ) type OrgRepository interface { RegisterOrg(context.Context, *auth_model.RegisterOrg) (*auth_model.RegisterOrg, error) - GetOrgIamPolicy(ctx context.Context, orgID string) (*org_model.OrgIAMPolicy, error) - GetDefaultOrgIamPolicy(ctx context.Context) *org_model.OrgIAMPolicy + GetOrgIAMPolicy(ctx context.Context, orgID string) (*iam_model.OrgIAMPolicyView, error) + GetDefaultOrgIAMPolicy(ctx context.Context) (*iam_model.OrgIAMPolicyView, error) GetIDPConfigByID(ctx context.Context, idpConfigID string) (*iam_model.IDPConfigView, error) + GetMyPasswordComplexityPolicy(ctx context.Context) (*iam_model.PasswordComplexityPolicyView, error) } diff --git a/internal/auth/repository/policy.go b/internal/auth/repository/policy.go deleted file mode 100644 index e689f2ce0c..0000000000 --- a/internal/auth/repository/policy.go +++ /dev/null @@ -1,10 +0,0 @@ -package repository - -import ( - "context" - "github.com/caos/zitadel/internal/policy/model" -) - -type PolicyRepository interface { - GetMyPasswordComplexityPolicy(ctx context.Context) (*model.PasswordComplexityPolicy, error) -} diff --git a/internal/auth/repository/repository.go b/internal/auth/repository/repository.go index abc0b88329..5e2b632445 100644 --- a/internal/auth/repository/repository.go +++ b/internal/auth/repository/repository.go @@ -13,7 +13,6 @@ type Repository interface { KeyRepository UserSessionRepository UserGrantRepository - PolicyRepository OrgRepository IAMRepository } diff --git a/internal/config/systemdefaults/system_defaults.go b/internal/config/systemdefaults/system_defaults.go index ae6697c27b..502badee6e 100644 --- a/internal/config/systemdefaults/system_defaults.go +++ b/internal/config/systemdefaults/system_defaults.go @@ -9,8 +9,6 @@ import ( "github.com/caos/zitadel/internal/notification/providers/email" "github.com/caos/zitadel/internal/notification/providers/twilio" "github.com/caos/zitadel/internal/notification/templates" - org_model "github.com/caos/zitadel/internal/org/model" - pol "github.com/caos/zitadel/internal/policy" ) type SystemDefaults struct { @@ -22,7 +20,6 @@ type SystemDefaults struct { IDPConfigVerificationKey *crypto.KeyConfig Multifactors MultifactorConfig VerificationLifetimes VerificationLifetimes - DefaultPolicies DefaultPolicies DomainVerification DomainVerification IamID string Notifications Notifications @@ -60,13 +57,6 @@ type VerificationLifetimes struct { MfaHardwareCheck types.Duration } -type DefaultPolicies struct { - Age pol.PasswordAgePolicyDefault - Complexity pol.PasswordComplexityPolicyDefault - Lockout pol.PasswordLockoutPolicyDefault - OrgIam org_model.OrgIAMPolicy -} - type DomainVerification struct { VerificationKey *crypto.KeyConfig VerificationGenerator crypto.GeneratorConfig diff --git a/internal/iam/model/iam.go b/internal/iam/model/iam.go index 872c680938..894f00f350 100644 --- a/internal/iam/model/iam.go +++ b/internal/iam/model/iam.go @@ -8,21 +8,27 @@ type Step int const ( Step1 Step = iota + 1 - //TODO: label policy - // Step2 + Step2 + Step3 + Step4 + Step5 //StepCount marks the the length of possible steps (StepCount-1 == last possible step) StepCount ) type IAM struct { es_models.ObjectRoot - GlobalOrgID string - IAMProjectID string - SetUpDone Step - SetUpStarted Step - Members []*IAMMember - IDPs []*IDPConfig - DefaultLoginPolicy *LoginPolicy + GlobalOrgID string + IAMProjectID string + SetUpDone Step + SetUpStarted Step + Members []*IAMMember + IDPs []*IDPConfig + DefaultLoginPolicy *LoginPolicy + DefaultOrgIAMPolicy *OrgIAMPolicy + DefaultPasswordComplexityPolicy *PasswordComplexityPolicy + DefaultPasswordAgePolicy *PasswordAgePolicy + DefaultPasswordLockoutPolicy *PasswordLockoutPolicy } func (iam *IAM) GetMember(userID string) (int, *IAMMember) { diff --git a/internal/org/model/org_iam_policy.go b/internal/iam/model/org_iam_policy.go similarity index 59% rename from internal/org/model/org_iam_policy.go rename to internal/iam/model/org_iam_policy.go index 20ee51f958..2bbf876660 100644 --- a/internal/org/model/org_iam_policy.go +++ b/internal/iam/model/org_iam_policy.go @@ -7,16 +7,7 @@ import ( type OrgIAMPolicy struct { models.ObjectRoot - Description string State PolicyState UserLoginMustBeDomain bool Default bool - IamDomain string } - -type PolicyState int32 - -const ( - PolicyStateActive PolicyState = iota - PolicyStateRemoved -) diff --git a/internal/iam/model/org_iam_policy_view.go b/internal/iam/model/org_iam_policy_view.go new file mode 100644 index 0000000000..e311aaecec --- /dev/null +++ b/internal/iam/model/org_iam_policy_view.go @@ -0,0 +1,47 @@ +package model + +import ( + "github.com/caos/zitadel/internal/model" + "time" +) + +type OrgIAMPolicyView struct { + AggregateID string + UserLoginMustBeDomain bool + IAMDomain string + Default bool + + CreationDate time.Time + ChangeDate time.Time + Sequence uint64 +} + +type OrgIAMPolicySearchRequest struct { + Offset uint64 + Limit uint64 + SortingColumn OrgIAMPolicySearchKey + Asc bool + Queries []*OrgIAMPolicySearchQuery +} + +type OrgIAMPolicySearchKey int32 + +const ( + OrgIAMPolicySearchKeyUnspecified OrgIAMPolicySearchKey = iota + OrgIAMPolicySearchKeyAggregateID +) + +type OrgIAMPolicySearchQuery struct { + Key OrgIAMPolicySearchKey + Method model.SearchMethod + Value interface{} +} + +type OrgIAMPolicySearchResponse struct { + Offset uint64 + Limit uint64 + TotalResult uint64 + Result []*OrgIAMPolicyView + Sequence uint64 + Timestamp time.Time +} diff --git a/internal/policy/model/policy_age.go b/internal/iam/model/password_age_policy.go similarity index 90% rename from internal/policy/model/policy_age.go rename to internal/iam/model/password_age_policy.go index aba6096393..e3eed17d48 100644 --- a/internal/policy/model/policy_age.go +++ b/internal/iam/model/password_age_policy.go @@ -7,7 +7,6 @@ import ( type PasswordAgePolicy struct { models.ObjectRoot - Description string State PolicyState MaxAgeDays uint64 ExpireWarnDays uint64 diff --git a/internal/iam/model/password_age_policy_view.go b/internal/iam/model/password_age_policy_view.go new file mode 100644 index 0000000000..5e94dd07df --- /dev/null +++ b/internal/iam/model/password_age_policy_view.go @@ -0,0 +1,47 @@ +package model + +import ( + "github.com/caos/zitadel/internal/model" + "time" +) + +type PasswordAgePolicyView struct { + AggregateID string + MaxAgeDays uint64 + ExpireWarnDays uint64 + Default bool + + CreationDate time.Time + ChangeDate time.Time + Sequence uint64 +} + +type PasswordAgePolicySearchRequest struct { + Offset uint64 + Limit uint64 + SortingColumn PasswordAgePolicySearchKey + Asc bool + Queries []*PasswordAgePolicySearchQuery +} + +type PasswordAgePolicySearchKey int32 + +const ( + PasswordAgePolicySearchKeyUnspecified PasswordAgePolicySearchKey = iota + PasswordAgePolicySearchKeyAggregateID +) + +type PasswordAgePolicySearchQuery struct { + Key PasswordAgePolicySearchKey + Method model.SearchMethod + Value interface{} +} + +type PasswordAgePolicySearchResponse struct { + Offset uint64 + Limit uint64 + TotalResult uint64 + Result []*PasswordAgePolicyView + Sequence uint64 + Timestamp time.Time +} diff --git a/internal/iam/model/password_complexity_policy.go b/internal/iam/model/password_complexity_policy.go new file mode 100644 index 0000000000..90ee73b4cc --- /dev/null +++ b/internal/iam/model/password_complexity_policy.go @@ -0,0 +1,32 @@ +package model + +import ( + caos_errs "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/eventstore/models" + "regexp" +) + +var ( + hasStringLowerCase = regexp.MustCompile(`[a-z]`).MatchString + hasStringUpperCase = regexp.MustCompile(`[A-Z]`).MatchString + hasNumber = regexp.MustCompile(`[0-9]`).MatchString + hasSymbol = regexp.MustCompile(`[^A-Za-z0-9]`).MatchString +) + +type PasswordComplexityPolicy struct { + models.ObjectRoot + + State PolicyState + MinLength uint64 + HasLowercase bool + HasUppercase bool + HasNumber bool + HasSymbol bool +} + +func (p *PasswordComplexityPolicy) IsValid() error { + if p.MinLength == 0 || p.MinLength > 72 { + return caos_errs.ThrowInvalidArgument(nil, "MODEL-Lsp0e", "Errors.User.PasswordComplexityPolicy.MinLengthNotAllowed") + } + return nil +} diff --git a/internal/iam/model/password_complexity_policy_view.go b/internal/iam/model/password_complexity_policy_view.go new file mode 100644 index 0000000000..e206d2238b --- /dev/null +++ b/internal/iam/model/password_complexity_policy_view.go @@ -0,0 +1,74 @@ +package model + +import ( + caos_errs "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/model" + "time" +) + +type PasswordComplexityPolicyView struct { + AggregateID string + MinLength uint64 + HasLowercase bool + HasUppercase bool + HasNumber bool + HasSymbol bool + Default bool + + CreationDate time.Time + ChangeDate time.Time + Sequence uint64 +} + +type PasswordComplexityPolicySearchRequest struct { + Offset uint64 + Limit uint64 + SortingColumn PasswordComplexityPolicySearchKey + Asc bool + Queries []*PasswordComplexityPolicySearchQuery +} + +type PasswordComplexityPolicySearchKey int32 + +const ( + PasswordComplexityPolicySearchKeyUnspecified PasswordComplexityPolicySearchKey = iota + PasswordComplexityPolicySearchKeyAggregateID +) + +type PasswordComplexityPolicySearchQuery struct { + Key PasswordComplexityPolicySearchKey + Method model.SearchMethod + Value interface{} +} + +type PasswordComplexityPolicySearchResponse struct { + Offset uint64 + Limit uint64 + TotalResult uint64 + Result []*PasswordComplexityPolicyView + Sequence uint64 + Timestamp time.Time +} + +func (p *PasswordComplexityPolicyView) Check(password string) error { + if p.MinLength != 0 && uint64(len(password)) < p.MinLength { + return caos_errs.ThrowInvalidArgument(nil, "MODEL-HuJf6", "Errors.User.PasswordComplexityPolicy.MinLength") + } + + if p.HasLowercase && !hasStringLowerCase(password) { + return caos_errs.ThrowInvalidArgument(nil, "MODEL-co3Xw", "Errors.User.PasswordComplexityPolicy.HasLower") + } + + if p.HasUppercase && !hasStringUpperCase(password) { + return caos_errs.ThrowInvalidArgument(nil, "MODEL-VoaRj", "Errors.User.PasswordComplexityPolicy.HasUpper") + } + + if p.HasNumber && !hasNumber(password) { + return caos_errs.ThrowInvalidArgument(nil, "MODEL-ZBv4H", "Errors.User.PasswordComplexityPolicy.HasNumber") + } + + if p.HasSymbol && !hasSymbol(password) { + return caos_errs.ThrowInvalidArgument(nil, "MODEL-ZDLwA", "Errors.User.PasswordComplexityPolicy.HasSymbol") + } + return nil +} diff --git a/internal/policy/model/policy_complecity_test.go b/internal/iam/model/password_complexity_policy_view_test.go similarity index 85% rename from internal/policy/model/policy_complecity_test.go rename to internal/iam/model/password_complexity_policy_view_test.go index 4efea96d62..a614db0fb9 100644 --- a/internal/policy/model/policy_complecity_test.go +++ b/internal/iam/model/password_complexity_policy_view_test.go @@ -6,7 +6,7 @@ import ( func TestCheckPasswordComplexityPolicy(t *testing.T) { type args struct { - policy *PasswordComplexityPolicy + policy *PasswordComplexityPolicyView password string } tests := []struct { @@ -17,7 +17,7 @@ func TestCheckPasswordComplexityPolicy(t *testing.T) { { name: "has minlength ok", args: args{ - policy: &PasswordComplexityPolicy{ + policy: &PasswordComplexityPolicyView{ HasLowercase: false, HasUppercase: false, HasSymbol: false, @@ -31,7 +31,7 @@ func TestCheckPasswordComplexityPolicy(t *testing.T) { { name: "has minlength not ok", args: args{ - policy: &PasswordComplexityPolicy{ + policy: &PasswordComplexityPolicyView{ HasLowercase: false, HasUppercase: false, HasSymbol: false, @@ -45,7 +45,7 @@ func TestCheckPasswordComplexityPolicy(t *testing.T) { { name: "has lowercase ok", args: args{ - policy: &PasswordComplexityPolicy{ + policy: &PasswordComplexityPolicyView{ HasLowercase: true, HasUppercase: false, HasSymbol: false, @@ -59,7 +59,7 @@ func TestCheckPasswordComplexityPolicy(t *testing.T) { { name: "has lowercase not ok", args: args{ - policy: &PasswordComplexityPolicy{ + policy: &PasswordComplexityPolicyView{ HasLowercase: true, HasUppercase: false, HasSymbol: false, @@ -73,7 +73,7 @@ func TestCheckPasswordComplexityPolicy(t *testing.T) { { name: "has uppercase ok", args: args{ - policy: &PasswordComplexityPolicy{ + policy: &PasswordComplexityPolicyView{ HasLowercase: false, HasUppercase: true, HasSymbol: false, @@ -87,7 +87,7 @@ func TestCheckPasswordComplexityPolicy(t *testing.T) { { name: "has uppercase not ok", args: args{ - policy: &PasswordComplexityPolicy{ + policy: &PasswordComplexityPolicyView{ HasLowercase: false, HasUppercase: true, HasSymbol: false, @@ -101,7 +101,7 @@ func TestCheckPasswordComplexityPolicy(t *testing.T) { { name: "has symbol ok", args: args{ - policy: &PasswordComplexityPolicy{ + policy: &PasswordComplexityPolicyView{ HasLowercase: false, HasUppercase: false, HasSymbol: true, @@ -115,7 +115,7 @@ func TestCheckPasswordComplexityPolicy(t *testing.T) { { name: "has symbol not ok", args: args{ - policy: &PasswordComplexityPolicy{ + policy: &PasswordComplexityPolicyView{ HasLowercase: false, HasUppercase: false, HasSymbol: true, @@ -129,7 +129,7 @@ func TestCheckPasswordComplexityPolicy(t *testing.T) { { name: "has number ok", args: args{ - policy: &PasswordComplexityPolicy{ + policy: &PasswordComplexityPolicyView{ HasLowercase: false, HasUppercase: false, HasSymbol: false, @@ -143,7 +143,7 @@ func TestCheckPasswordComplexityPolicy(t *testing.T) { { name: "has number not ok", args: args{ - policy: &PasswordComplexityPolicy{ + policy: &PasswordComplexityPolicyView{ HasLowercase: false, HasUppercase: false, HasSymbol: false, @@ -157,7 +157,7 @@ func TestCheckPasswordComplexityPolicy(t *testing.T) { { name: "has everything ok", args: args{ - policy: &PasswordComplexityPolicy{ + policy: &PasswordComplexityPolicyView{ HasLowercase: true, HasUppercase: true, HasSymbol: true, @@ -171,7 +171,7 @@ func TestCheckPasswordComplexityPolicy(t *testing.T) { { name: "has everything not ok", args: args{ - policy: &PasswordComplexityPolicy{ + policy: &PasswordComplexityPolicyView{ HasLowercase: true, HasUppercase: true, HasSymbol: true, diff --git a/internal/policy/model/policy_lockout.go b/internal/iam/model/password_lockout_policy.go similarity index 64% rename from internal/policy/model/policy_lockout.go rename to internal/iam/model/password_lockout_policy.go index b3e5b19881..7cee02a14e 100644 --- a/internal/policy/model/policy_lockout.go +++ b/internal/iam/model/password_lockout_policy.go @@ -1,11 +1,12 @@ package model -import "github.com/caos/zitadel/internal/eventstore/models" +import ( + "github.com/caos/zitadel/internal/eventstore/models" +) type PasswordLockoutPolicy struct { models.ObjectRoot - Description string State PolicyState MaxAttempts uint64 ShowLockOutFailures bool diff --git a/internal/iam/model/password_lockout_policy_view.go b/internal/iam/model/password_lockout_policy_view.go new file mode 100644 index 0000000000..cf32e9a6e3 --- /dev/null +++ b/internal/iam/model/password_lockout_policy_view.go @@ -0,0 +1,47 @@ +package model + +import ( + "github.com/caos/zitadel/internal/model" + "time" +) + +type PasswordLockoutPolicyView struct { + AggregateID string + MaxAttempts uint64 + ShowLockOutFailures bool + Default bool + + CreationDate time.Time + ChangeDate time.Time + Sequence uint64 +} + +type PasswordLockoutPolicySearchRequest struct { + Offset uint64 + Limit uint64 + SortingColumn PasswordLockoutPolicySearchKey + Asc bool + Queries []*PasswordLockoutPolicySearchQuery +} + +type PasswordLockoutPolicySearchKey int32 + +const ( + PasswordLockoutPolicySearchKeyUnspecified PasswordLockoutPolicySearchKey = iota + PasswordLockoutPolicySearchKeyAggregateID +) + +type PasswordLockoutPolicySearchQuery struct { + Key PasswordLockoutPolicySearchKey + Method model.SearchMethod + Value interface{} +} + +type PasswordLockoutPolicySearchResponse struct { + Offset uint64 + Limit uint64 + TotalResult uint64 + Result []*PasswordLockoutPolicyView + Sequence uint64 + Timestamp time.Time +} diff --git a/internal/iam/repository/eventsourcing/eventstore.go b/internal/iam/repository/eventsourcing/eventstore.go index 8ddbfa387b..c1c08f0258 100644 --- a/internal/iam/repository/eventsourcing/eventstore.go +++ b/internal/iam/repository/eventsourcing/eventstore.go @@ -2,7 +2,6 @@ package eventsourcing import ( "context" - "github.com/caos/zitadel/internal/cache/config" sd "github.com/caos/zitadel/internal/config/systemdefaults" "github.com/caos/zitadel/internal/crypto" @@ -102,6 +101,15 @@ func (es *IAMEventstore) SetupDone(ctx context.Context, iamID string, step iam_m return model.IAMToModel(repoIam), nil } +func (es *IAMEventstore) PrepareSetupDone(ctx context.Context, iam *model.IAM, aggregate *models.Aggregate, step iam_model.Step) (*model.IAM, *models.Aggregate, func(ctx context.Context, aggregates ...*models.Aggregate) error, error) { + iam.SetUpDone = model.Step(step) + agg, err := IAMSetupDoneEvent(ctx, aggregate, iam) + if err != nil { + return nil, nil, nil, err + } + return iam, agg, es.PushAggregates, nil +} + func (es *IAMEventstore) SetGlobalOrg(ctx context.Context, iamID, globalOrg string) (*iam_model.IAM, error) { iam, err := es.IAMByID(ctx, iamID) if err != nil { @@ -407,20 +415,31 @@ func (es *IAMEventstore) ChangeIDPOIDCConfig(ctx context.Context, config *iam_mo return nil, caos_errs.ThrowInternal(nil, "EVENT-Sldk8", "Errors.Internal") } -func (es *IAMEventstore) AddLoginPolicy(ctx context.Context, policy *iam_model.LoginPolicy) (*iam_model.LoginPolicy, error) { +func (es *IAMEventstore) PrepareAddLoginPolicy(ctx context.Context, policy *iam_model.LoginPolicy) (*model.IAM, *models.Aggregate, error) { if policy == nil || !policy.IsValid() { - return nil, caos_errs.ThrowPreconditionFailed(nil, "EVENT-Lso02", "Errors.IAM.LoginPolicyInvalid") + return nil, nil, caos_errs.ThrowPreconditionFailed(nil, "EVENT-Lso02", "Errors.IAM.LoginPolicyInvalid") } iam, err := es.IAMByID(ctx, policy.AggregateID) if err != nil { - return nil, err + return nil, nil, err } repoIam := model.IAMFromModel(iam) repoLoginPolicy := model.LoginPolicyFromModel(policy) - addAggregate := LoginPolicyAddedAggregate(es.Eventstore.AggregateCreator(), repoIam, repoLoginPolicy) - err = es_sdk.Push(ctx, es.PushAggregates, repoIam.AppendEvents, addAggregate) + addAggregate, err := LoginPolicyAddedAggregate(ctx, es.Eventstore.AggregateCreator(), repoIam, repoLoginPolicy) + if err != nil { + return nil, nil, err + } + return repoIam, addAggregate, nil +} + +func (es *IAMEventstore) AddLoginPolicy(ctx context.Context, policy *iam_model.LoginPolicy) (*iam_model.LoginPolicy, error) { + repoIam, addAggregate, err := es.PrepareAddLoginPolicy(ctx, policy) + if err != nil { + return nil, err + } + err = es_sdk.PushAggregates(ctx, es.PushAggregates, repoIam.AppendEvents, addAggregate) if err != nil { return nil, err } @@ -506,3 +525,232 @@ func (es *IAMEventstore) RemoveIDPProviderFromLoginPolicy(ctx context.Context, p es.iamCache.cacheIAM(repoIam) return nil } + +func (es *IAMEventstore) PrepareAddPasswordComplexityPolicy(ctx context.Context, policy *iam_model.PasswordComplexityPolicy) (*model.IAM, *models.Aggregate, error) { + if policy == nil { + return nil, nil, caos_errs.ThrowPreconditionFailed(nil, "EVENT-Lso02", "Errors.IAM.PasswordComplexityPolicy.Empty") + } + if err := policy.IsValid(); err != nil { + return nil, nil, err + } + iam, err := es.IAMByID(ctx, policy.AggregateID) + if err != nil { + return nil, nil, err + } + + repoIam := model.IAMFromModel(iam) + repoPasswordComplexityPolicy := model.PasswordComplexityPolicyFromModel(policy) + + addAggregate, err := PasswordComplexityPolicyAddedAggregate(ctx, es.Eventstore.AggregateCreator(), repoIam, repoPasswordComplexityPolicy) + if err != nil { + return nil, nil, err + } + return repoIam, addAggregate, nil +} + +func (es *IAMEventstore) AddPasswordComplexityPolicy(ctx context.Context, policy *iam_model.PasswordComplexityPolicy) (*iam_model.PasswordComplexityPolicy, error) { + repoIam, addAggregate, err := es.PrepareAddPasswordComplexityPolicy(ctx, policy) + if err != nil { + return nil, err + } + err = es_sdk.PushAggregates(ctx, es.PushAggregates, repoIam.AppendEvents, addAggregate) + if err != nil { + return nil, err + } + es.iamCache.cacheIAM(repoIam) + return model.PasswordComplexityPolicyToModel(repoIam.DefaultPasswordComplexityPolicy), nil +} + +func (es *IAMEventstore) ChangePasswordComplexityPolicy(ctx context.Context, policy *iam_model.PasswordComplexityPolicy) (*iam_model.PasswordComplexityPolicy, error) { + if policy == nil { + return nil, caos_errs.ThrowPreconditionFailed(nil, "EVENT-Lso02", "Errors.IAM.PasswordComplexityPolicy.Empty") + } + if err := policy.IsValid(); err != nil { + return nil, err + } + iam, err := es.IAMByID(ctx, policy.AggregateID) + if err != nil { + return nil, err + } + + repoIam := model.IAMFromModel(iam) + repoPasswordComplexityPolicy := model.PasswordComplexityPolicyFromModel(policy) + + addAggregate := PasswordComplexityPolicyChangedAggregate(es.Eventstore.AggregateCreator(), repoIam, repoPasswordComplexityPolicy) + err = es_sdk.Push(ctx, es.PushAggregates, repoIam.AppendEvents, addAggregate) + if err != nil { + return nil, err + } + es.iamCache.cacheIAM(repoIam) + return model.PasswordComplexityPolicyToModel(repoIam.DefaultPasswordComplexityPolicy), nil +} + +func (es *IAMEventstore) PrepareAddPasswordAgePolicy(ctx context.Context, policy *iam_model.PasswordAgePolicy) (*model.IAM, *models.Aggregate, error) { + if policy == nil || policy.AggregateID == "" { + return nil, nil, caos_errs.ThrowPreconditionFailed(nil, "EVENT-2dGt6", "Errors.IAM.PasswordAgePolicy.Empty") + } + iam, err := es.IAMByID(ctx, policy.AggregateID) + if err != nil { + return nil, nil, err + } + + repoIam := model.IAMFromModel(iam) + repoPasswordAgePolicy := model.PasswordAgePolicyFromModel(policy) + + addAggregate, err := PasswordAgePolicyAddedAggregate(ctx, es.Eventstore.AggregateCreator(), repoIam, repoPasswordAgePolicy) + if err != nil { + return nil, nil, err + } + return repoIam, addAggregate, nil +} + +func (es *IAMEventstore) AddPasswordAgePolicy(ctx context.Context, policy *iam_model.PasswordAgePolicy) (*iam_model.PasswordAgePolicy, error) { + repoIam, addAggregate, err := es.PrepareAddPasswordAgePolicy(ctx, policy) + if err != nil { + return nil, err + } + err = es_sdk.PushAggregates(ctx, es.PushAggregates, repoIam.AppendEvents, addAggregate) + if err != nil { + return nil, err + } + es.iamCache.cacheIAM(repoIam) + return model.PasswordAgePolicyToModel(repoIam.DefaultPasswordAgePolicy), nil +} + +func (es *IAMEventstore) ChangePasswordAgePolicy(ctx context.Context, policy *iam_model.PasswordAgePolicy) (*iam_model.PasswordAgePolicy, error) { + if policy == nil || policy.AggregateID == "" { + return nil, caos_errs.ThrowPreconditionFailed(nil, "EVENT-2Fgt6", "Errors.IAM.PasswordAgePolicy.Empty") + } + iam, err := es.IAMByID(ctx, policy.AggregateID) + if err != nil { + return nil, err + } + + repoIam := model.IAMFromModel(iam) + repoPasswordAgePolicy := model.PasswordAgePolicyFromModel(policy) + + addAggregate := PasswordAgePolicyChangedAggregate(es.Eventstore.AggregateCreator(), repoIam, repoPasswordAgePolicy) + err = es_sdk.Push(ctx, es.PushAggregates, repoIam.AppendEvents, addAggregate) + if err != nil { + return nil, err + } + es.iamCache.cacheIAM(repoIam) + return model.PasswordAgePolicyToModel(repoIam.DefaultPasswordAgePolicy), nil +} + +func (es *IAMEventstore) PrepareAddPasswordLockoutPolicy(ctx context.Context, policy *iam_model.PasswordLockoutPolicy) (*model.IAM, *models.Aggregate, error) { + if policy == nil || policy.AggregateID == "" { + return nil, nil, caos_errs.ThrowPreconditionFailed(nil, "EVENT-3R56z", "Errors.IAM.PasswordLockoutPolicy.Empty") + } + iam, err := es.IAMByID(ctx, policy.AggregateID) + if err != nil { + return nil, nil, err + } + + repoIam := model.IAMFromModel(iam) + repoPasswordLockoutPolicy := model.PasswordLockoutPolicyFromModel(policy) + + addAggregate, err := PasswordLockoutPolicyAddedAggregate(ctx, es.Eventstore.AggregateCreator(), repoIam, repoPasswordLockoutPolicy) + if err != nil { + return nil, nil, err + } + return repoIam, addAggregate, nil +} + +func (es *IAMEventstore) AddPasswordLockoutPolicy(ctx context.Context, policy *iam_model.PasswordLockoutPolicy) (*iam_model.PasswordLockoutPolicy, error) { + repoIam, addAggregate, err := es.PrepareAddPasswordLockoutPolicy(ctx, policy) + if err != nil { + return nil, err + } + err = es_sdk.PushAggregates(ctx, es.PushAggregates, repoIam.AppendEvents, addAggregate) + if err != nil { + return nil, err + } + es.iamCache.cacheIAM(repoIam) + return model.PasswordLockoutPolicyToModel(repoIam.DefaultPasswordLockoutPolicy), nil +} + +func (es *IAMEventstore) ChangePasswordLockoutPolicy(ctx context.Context, policy *iam_model.PasswordLockoutPolicy) (*iam_model.PasswordLockoutPolicy, error) { + if policy == nil || policy.AggregateID == "" { + return nil, caos_errs.ThrowPreconditionFailed(nil, "EVENT-6Zsj9", "Errors.IAM.PasswordLockoutPolicy.Empty") + } + iam, err := es.IAMByID(ctx, policy.AggregateID) + if err != nil { + return nil, err + } + + repoIam := model.IAMFromModel(iam) + repoPasswordLockoutPolicy := model.PasswordLockoutPolicyFromModel(policy) + + addAggregate := PasswordLockoutPolicyChangedAggregate(es.Eventstore.AggregateCreator(), repoIam, repoPasswordLockoutPolicy) + err = es_sdk.Push(ctx, es.PushAggregates, repoIam.AppendEvents, addAggregate) + if err != nil { + return nil, err + } + es.iamCache.cacheIAM(repoIam) + return model.PasswordLockoutPolicyToModel(repoIam.DefaultPasswordLockoutPolicy), nil +} + +func (es *IAMEventstore) GetOrgIAMPolicy(ctx context.Context, iamID string) (*iam_model.OrgIAMPolicy, error) { + existingIAM, err := es.IAMByID(ctx, iamID) + if err != nil { + return nil, err + } + if existingIAM.DefaultOrgIAMPolicy == nil { + return nil, caos_errs.ThrowNotFound(nil, "EVENT-2Fj8s", "Errors.IAM.OrgIAM.NotExisting") + } + return existingIAM.DefaultOrgIAMPolicy, nil +} + +func (es *IAMEventstore) PrepareAddOrgIAMPolicy(ctx context.Context, policy *iam_model.OrgIAMPolicy) (*model.IAM, *models.Aggregate, error) { + if policy == nil || policy.AggregateID == "" { + return nil, nil, caos_errs.ThrowPreconditionFailed(nil, "EVENT-3R56z", "Errors.IAM.OrgIAMPolicy.Empty") + } + iam, err := es.IAMByID(ctx, policy.AggregateID) + if err != nil { + return nil, nil, err + } + + repoIam := model.IAMFromModel(iam) + repoOrgIAMPolicy := model.OrgIAMPolicyFromModel(policy) + + addAggregate, err := OrgIAMPolicyAddedAggregate(ctx, es.Eventstore.AggregateCreator(), repoIam, repoOrgIAMPolicy) + if err != nil { + return nil, nil, err + } + return repoIam, addAggregate, nil +} + +func (es *IAMEventstore) AddOrgIAMPolicy(ctx context.Context, policy *iam_model.OrgIAMPolicy) (*iam_model.OrgIAMPolicy, error) { + repoIam, addAggregate, err := es.PrepareAddOrgIAMPolicy(ctx, policy) + if err != nil { + return nil, err + } + err = es_sdk.PushAggregates(ctx, es.PushAggregates, repoIam.AppendEvents, addAggregate) + if err != nil { + return nil, err + } + es.iamCache.cacheIAM(repoIam) + return model.OrgIAMPolicyToModel(repoIam.DefaultOrgIAMPolicy), nil +} + +func (es *IAMEventstore) ChangeOrgIAMPolicy(ctx context.Context, policy *iam_model.OrgIAMPolicy) (*iam_model.OrgIAMPolicy, error) { + if policy == nil || policy.AggregateID == "" { + return nil, caos_errs.ThrowPreconditionFailed(nil, "EVENT-6Zsj9", "Errors.IAM.OrgIAMPolicy.Empty") + } + iam, err := es.IAMByID(ctx, policy.AggregateID) + if err != nil { + return nil, err + } + + repoIam := model.IAMFromModel(iam) + repoOrgIAMPolicy := model.OrgIAMPolicyFromModel(policy) + + addAggregate := OrgIAMPolicyChangedAggregate(es.Eventstore.AggregateCreator(), repoIam, repoOrgIAMPolicy) + err = es_sdk.Push(ctx, es.PushAggregates, repoIam.AppendEvents, addAggregate) + if err != nil { + return nil, err + } + es.iamCache.cacheIAM(repoIam) + return model.OrgIAMPolicyToModel(repoIam.DefaultOrgIAMPolicy), nil +} diff --git a/internal/iam/repository/eventsourcing/eventstore_mock_test.go b/internal/iam/repository/eventsourcing/eventstore_mock_test.go index 021a37ded7..cb5a6b36c5 100644 --- a/internal/iam/repository/eventsourcing/eventstore_mock_test.go +++ b/internal/iam/repository/eventsourcing/eventstore_mock_test.go @@ -39,11 +39,11 @@ func GetSonyFlacke() id.Generator { return id.SonyFlakeGenerator } -func GetMockIamByIDOK(ctrl *gomock.Controller) *IAMEventstore { +func GetMockIAMByIDOK(ctrl *gomock.Controller) *IAMEventstore { data, _ := json.Marshal(model.IAM{GlobalOrgID: "GlobalOrgID"}) events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.GlobalOrgSet, Data: data}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.GlobalOrgSet, Data: data}, } mockEs := mock.NewMockEventstore(ctrl) mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) @@ -57,9 +57,9 @@ func GetMockIamByIDNoEvents(ctrl *gomock.Controller) *IAMEventstore { return GetMockedEventstore(ctrl, mockEs) } -func GetMockManipulateIam(ctrl *gomock.Controller) *IAMEventstore { +func GetMockManipulateIAM(ctrl *gomock.Controller) *IAMEventstore { events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, } mockEs := mock.NewMockEventstore(ctrl) mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) @@ -68,9 +68,9 @@ func GetMockManipulateIam(ctrl *gomock.Controller) *IAMEventstore { return GetMockedEventstore(ctrl, mockEs) } -func GetMockManipulateIamWithCrypto(ctrl *gomock.Controller) *IAMEventstore { +func GetMockManipulateIAMWithCrypto(ctrl *gomock.Controller) *IAMEventstore { events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, } mockEs := mock.NewMockEventstore(ctrl) mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) @@ -79,11 +79,11 @@ func GetMockManipulateIamWithCrypto(ctrl *gomock.Controller) *IAMEventstore { return GetMockedEventstoreWithCrypto(ctrl, mockEs) } -func GetMockManipulateIamWithMember(ctrl *gomock.Controller) *IAMEventstore { +func GetMockManipulateIAMWithMember(ctrl *gomock.Controller) *IAMEventstore { memberData, _ := json.Marshal(model.IAMMember{UserID: "UserID", Roles: []string{"Role"}}) events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.IAMMemberAdded, Data: memberData}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.IAMMemberAdded, Data: memberData}, } mockEs := mock.NewMockEventstore(ctrl) mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) @@ -92,13 +92,13 @@ func GetMockManipulateIamWithMember(ctrl *gomock.Controller) *IAMEventstore { return GetMockedEventstore(ctrl, mockEs) } -func GetMockManipulateIamWithOIDCIdp(ctrl *gomock.Controller) *IAMEventstore { +func GetMockManipulateIAMWithOIDCIdp(ctrl *gomock.Controller) *IAMEventstore { idpData, _ := json.Marshal(model.IDPConfig{IDPConfigID: "IDPConfigID", Name: "Name"}) oidcData, _ := json.Marshal(model.OIDCIDPConfig{IDPConfigID: "IDPConfigID", ClientID: "ClientID"}) events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.IDPConfigAdded, Data: idpData}, - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.OIDCIDPConfigAdded, Data: oidcData}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.IDPConfigAdded, Data: idpData}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.OIDCIDPConfigAdded, Data: oidcData}, } mockEs := mock.NewMockEventstore(ctrl) mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) @@ -107,13 +107,13 @@ func GetMockManipulateIamWithOIDCIdp(ctrl *gomock.Controller) *IAMEventstore { return GetMockedEventstore(ctrl, mockEs) } -func GetMockManipulateIamWithLoginPolicy(ctrl *gomock.Controller) *IAMEventstore { +func GetMockManipulateIAMWithLoginPolicy(ctrl *gomock.Controller) *IAMEventstore { policyData, _ := json.Marshal(model.LoginPolicy{AllowRegister: true, AllowUsernamePassword: true, AllowExternalIdp: true}) idpProviderData, _ := json.Marshal(model.IDPProvider{IDPConfigID: "IDPConfigID", Type: 1}) events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.LoginPolicyAdded, Data: policyData}, - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.LoginPolicyIDPProviderAdded, Data: idpProviderData}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.LoginPolicyAdded, Data: policyData}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.LoginPolicyIDPProviderAdded, Data: idpProviderData}, } mockEs := mock.NewMockEventstore(ctrl) mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) @@ -122,7 +122,59 @@ func GetMockManipulateIamWithLoginPolicy(ctrl *gomock.Controller) *IAMEventstore return GetMockedEventstore(ctrl, mockEs) } -func GetMockManipulateIamNotExisting(ctrl *gomock.Controller) *IAMEventstore { +func GetMockManipulateIAMWithPasswodComplexityPolicy(ctrl *gomock.Controller) *IAMEventstore { + policyData, _ := json.Marshal(model.PasswordComplexityPolicy{MinLength: 10}) + events := []*es_models.Event{ + {AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.PasswordComplexityPolicyAdded, Data: policyData}, + } + mockEs := mock.NewMockEventstore(ctrl) + mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) + mockEs.EXPECT().AggregateCreator().Return(es_models.NewAggregateCreator("TEST")) + mockEs.EXPECT().PushAggregates(gomock.Any(), gomock.Any()).Return(nil) + return GetMockedEventstore(ctrl, mockEs) +} + +func GetMockManipulateIAMWithPasswordAgePolicy(ctrl *gomock.Controller) *IAMEventstore { + policyData, _ := json.Marshal(model.PasswordAgePolicy{MaxAgeDays: 10, ExpireWarnDays: 10}) + events := []*es_models.Event{ + {AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.PasswordAgePolicyAdded, Data: policyData}, + } + mockEs := mock.NewMockEventstore(ctrl) + mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) + mockEs.EXPECT().AggregateCreator().Return(es_models.NewAggregateCreator("TEST")) + mockEs.EXPECT().PushAggregates(gomock.Any(), gomock.Any()).Return(nil) + return GetMockedEventstore(ctrl, mockEs) +} + +func GetMockManipulateIAMWithPasswordLockoutPolicy(ctrl *gomock.Controller) *IAMEventstore { + policyData, _ := json.Marshal(model.PasswordLockoutPolicy{MaxAttempts: 10, ShowLockOutFailures: true}) + events := []*es_models.Event{ + {AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.PasswordLockoutPolicyAdded, Data: policyData}, + } + mockEs := mock.NewMockEventstore(ctrl) + mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) + mockEs.EXPECT().AggregateCreator().Return(es_models.NewAggregateCreator("TEST")) + mockEs.EXPECT().PushAggregates(gomock.Any(), gomock.Any()).Return(nil) + return GetMockedEventstore(ctrl, mockEs) +} + +func GetMockManipulateIAMWithOrgIAMPolicy(ctrl *gomock.Controller) *IAMEventstore { + policyData, _ := json.Marshal(model.OrgIAMPolicy{UserLoginMustBeDomain: true}) + events := []*es_models.Event{ + {AggregateID: "AggregateID", Sequence: 1, Type: model.IAMSetupStarted}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.OrgIAMPolicyAdded, Data: policyData}, + } + mockEs := mock.NewMockEventstore(ctrl) + mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) + mockEs.EXPECT().AggregateCreator().Return(es_models.NewAggregateCreator("TEST")) + mockEs.EXPECT().PushAggregates(gomock.Any(), gomock.Any()).Return(nil) + return GetMockedEventstore(ctrl, mockEs) +} + +func GetMockManipulateIAMNotExisting(ctrl *gomock.Controller) *IAMEventstore { events := []*es_models.Event{} mockEs := mock.NewMockEventstore(ctrl) mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) diff --git a/internal/iam/repository/eventsourcing/eventstore_test.go b/internal/iam/repository/eventsourcing/eventstore_test.go index 17eb29a352..b81dc608cb 100644 --- a/internal/iam/repository/eventsourcing/eventstore_test.go +++ b/internal/iam/repository/eventsourcing/eventstore_test.go @@ -31,7 +31,7 @@ func TestIamByID(t *testing.T) { { name: "iam from events, ok", args: args{ - es: GetMockIamByIDOK(ctrl), + es: GetMockIAMByIDOK(ctrl), iam: &model.IAM{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}}, }, res: res{ @@ -62,12 +62,15 @@ func TestIamByID(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.IAMByID(nil, tt.args.iam.AggregateID) - - if tt.res.errFunc == nil && result.AggregateID != tt.res.iam.AggregateID { - t.Errorf("got wrong result name: expected: %v, actual: %v ", tt.res.iam.AggregateID, result.AggregateID) - } - if tt.res.errFunc != nil && !tt.res.errFunc(err) { + if (tt.res.errFunc != nil && !tt.res.errFunc(err)) || (err != nil && tt.res.errFunc == nil) { t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.errFunc != nil && tt.res.errFunc(err) { + return + } + if result.AggregateID != tt.res.iam.AggregateID { + t.Errorf("got wrong result name: expected: %v, actual: %v ", tt.res.iam.AggregateID, result.AggregateID) } }) } @@ -93,7 +96,7 @@ func TestSetUpStarted(t *testing.T) { { name: "setup started iam, ok", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), iamID: "iamID", step: iam_model.Step1, @@ -105,7 +108,7 @@ func TestSetUpStarted(t *testing.T) { { name: "setup already started", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), iamID: "iamID", step: iam_model.Step1, @@ -117,7 +120,7 @@ func TestSetUpStarted(t *testing.T) { { name: "setup iam no id", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), step: iam_model.Step1, }, @@ -129,16 +132,19 @@ func TestSetUpStarted(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.StartSetup(tt.args.ctx, tt.args.iamID, tt.args.step) - - if tt.res.errFunc == nil && result.AggregateID == "" { + if (tt.res.errFunc != nil && !tt.res.errFunc(err)) || (err != nil && tt.res.errFunc == nil) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.errFunc != nil && tt.res.errFunc(err) { + return + } + if result.AggregateID == "" { t.Errorf("result has no id") } - if tt.res.errFunc == nil && result.SetUpStarted != tt.res.iam.SetUpStarted { + if result.SetUpStarted != tt.res.iam.SetUpStarted { t.Errorf("got wrong result setupStarted: expected: %v, actual: %v ", tt.res.iam.SetUpStarted, result.SetUpStarted) } - if tt.res.errFunc != nil && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -163,7 +169,7 @@ func TestSetUpDone(t *testing.T) { { name: "setup done iam, ok", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), iamID: "iamID", step: iam_model.Step1, @@ -175,7 +181,7 @@ func TestSetUpDone(t *testing.T) { { name: "setup iam no id", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), step: iam_model.Step1, }, @@ -186,7 +192,7 @@ func TestSetUpDone(t *testing.T) { { name: "iam not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), iamID: "iamID", step: iam_model.Step1, @@ -199,16 +205,19 @@ func TestSetUpDone(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.SetupDone(tt.args.ctx, tt.args.iamID, tt.args.step) - - if tt.res.errFunc == nil && result.AggregateID == "" { + if (tt.res.errFunc != nil && !tt.res.errFunc(err)) || (err != nil && tt.res.errFunc == nil) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.errFunc != nil && tt.res.errFunc(err) { + return + } + if result.AggregateID == "" { t.Errorf("result has no id") } - if tt.res.errFunc == nil && result.SetUpDone != tt.res.iam.SetUpDone { + if result.SetUpDone != tt.res.iam.SetUpDone { t.Errorf("got wrong result SetUpDone: expected: %v, actual: %v ", tt.res.iam.SetUpDone, result.SetUpDone) } - if tt.res.errFunc != nil && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -233,7 +242,7 @@ func TestSetGlobalOrg(t *testing.T) { { name: "global org set, ok", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), iamID: "iamID", globalOrg: "globalOrg", @@ -245,7 +254,7 @@ func TestSetGlobalOrg(t *testing.T) { { name: "no iam id", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), globalOrg: "", }, @@ -256,7 +265,7 @@ func TestSetGlobalOrg(t *testing.T) { { name: "no global org", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), iamID: "iamID", }, @@ -267,7 +276,7 @@ func TestSetGlobalOrg(t *testing.T) { { name: "iam not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), iamID: "iamID", globalOrg: "globalOrg", @@ -280,16 +289,19 @@ func TestSetGlobalOrg(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.SetGlobalOrg(tt.args.ctx, tt.args.iamID, tt.args.globalOrg) - - if tt.res.errFunc == nil && result.AggregateID == "" { + if (tt.res.errFunc != nil && !tt.res.errFunc(err)) || (err != nil && tt.res.errFunc == nil) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.errFunc != nil && tt.res.errFunc(err) { + return + } + if result.AggregateID == "" { t.Errorf("result has no id") } - if tt.res.errFunc == nil && result.GlobalOrgID != tt.res.iam.GlobalOrgID { + if result.GlobalOrgID != tt.res.iam.GlobalOrgID { t.Errorf("got wrong result GlobalOrgID: expected: %v, actual: %v ", tt.res.iam.GlobalOrgID, result.GlobalOrgID) } - if tt.res.errFunc != nil && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -314,7 +326,7 @@ func TestSetIamProjectID(t *testing.T) { { name: "iam project set, ok", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), iamID: "iamID", iamProjectID: "iamProjectID", @@ -326,7 +338,7 @@ func TestSetIamProjectID(t *testing.T) { { name: "no iam id", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), iamProjectID: "", }, @@ -337,7 +349,7 @@ func TestSetIamProjectID(t *testing.T) { { name: "no global org", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), iamID: "iamID", }, @@ -348,7 +360,7 @@ func TestSetIamProjectID(t *testing.T) { { name: "iam not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), iamID: "iamID", iamProjectID: "iamProjectID", @@ -361,16 +373,19 @@ func TestSetIamProjectID(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.SetIAMProject(tt.args.ctx, tt.args.iamID, tt.args.iamProjectID) - - if tt.res.errFunc == nil && result.AggregateID == "" { + if (tt.res.errFunc != nil && !tt.res.errFunc(err)) || (err != nil && tt.res.errFunc == nil) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.errFunc != nil && tt.res.errFunc(err) { + return + } + if result.AggregateID == "" { t.Errorf("result has no id") } - if tt.res.errFunc == nil && result.IAMProjectID != tt.res.iam.IAMProjectID { + if result.IAMProjectID != tt.res.iam.IAMProjectID { t.Errorf("got wrong result IAMProjectID: expected: %v, actual: %v ", tt.res.iam.IAMProjectID, result.IAMProjectID) } - if tt.res.errFunc != nil && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -394,7 +409,7 @@ func TestAddIamMember(t *testing.T) { { name: "add iam member, ok", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), member: &iam_model.IAMMember{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, UserID: "UserID", Roles: []string{"Roles"}}, }, @@ -405,7 +420,7 @@ func TestAddIamMember(t *testing.T) { { name: "no userid", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), member: &iam_model.IAMMember{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Roles: []string{"Roles"}}, }, @@ -416,7 +431,7 @@ func TestAddIamMember(t *testing.T) { { name: "no roles", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), member: &iam_model.IAMMember{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, UserID: "UserID"}, }, @@ -427,7 +442,7 @@ func TestAddIamMember(t *testing.T) { { name: "member already existing", args: args{ - es: GetMockManipulateIamWithMember(ctrl), + es: GetMockManipulateIAMWithMember(ctrl), ctx: authz.NewMockContext("orgID", "userID"), member: &iam_model.IAMMember{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, UserID: "UserID", Roles: []string{"Roles"}}, }, @@ -438,7 +453,7 @@ func TestAddIamMember(t *testing.T) { { name: "existing iam not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), member: &iam_model.IAMMember{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, UserID: "UserID", Roles: []string{"Roles"}}, }, @@ -450,19 +465,22 @@ func TestAddIamMember(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.AddIAMMember(tt.args.ctx, tt.args.member) - - if tt.res.errFunc == nil && result.AggregateID == "" { + if (tt.res.errFunc != nil && !tt.res.errFunc(err)) || (err != nil && tt.res.errFunc == nil) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.errFunc != nil && tt.res.errFunc(err) { + return + } + if result.AggregateID == "" { t.Errorf("result has no id") } - if tt.res.errFunc == nil && result.UserID != tt.res.result.UserID { + if result.UserID != tt.res.result.UserID { t.Errorf("got wrong result userid: expected: %v, actual: %v ", tt.res.result.UserID, result.UserID) } - if tt.res.errFunc == nil && len(result.Roles) != len(tt.res.result.Roles) { + if len(result.Roles) != len(tt.res.result.Roles) { t.Errorf("got wrong result roles: expected: %v, actual: %v ", tt.res.result.Roles, result.Roles) } - if tt.res.errFunc != nil && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -486,7 +504,7 @@ func TestChangeIamMember(t *testing.T) { { name: "add iam member, ok", args: args{ - es: GetMockManipulateIamWithMember(ctrl), + es: GetMockManipulateIAMWithMember(ctrl), ctx: authz.NewMockContext("orgID", "userID"), member: &iam_model.IAMMember{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, UserID: "UserID", Roles: []string{"ChangeRoles"}}, }, @@ -497,7 +515,7 @@ func TestChangeIamMember(t *testing.T) { { name: "no userid", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), member: &iam_model.IAMMember{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Roles: []string{"ChangeRoles"}}, }, @@ -508,7 +526,7 @@ func TestChangeIamMember(t *testing.T) { { name: "no roles", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), member: &iam_model.IAMMember{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, UserID: "UserID"}, }, @@ -519,7 +537,7 @@ func TestChangeIamMember(t *testing.T) { { name: "member not existing", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), member: &iam_model.IAMMember{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, UserID: "UserID", Roles: []string{"Roles"}}, }, @@ -530,7 +548,7 @@ func TestChangeIamMember(t *testing.T) { { name: "existing not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), member: &iam_model.IAMMember{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, UserID: "UserID", Roles: []string{"ChangeRoles"}}, }, @@ -542,19 +560,22 @@ func TestChangeIamMember(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.ChangeIAMMember(tt.args.ctx, tt.args.member) - - if tt.res.errFunc == nil && result.AggregateID == "" { + if (tt.res.errFunc != nil && !tt.res.errFunc(err)) || (err != nil && tt.res.errFunc == nil) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.errFunc != nil && tt.res.errFunc(err) { + return + } + if result.AggregateID == "" { t.Errorf("result has no id") } - if tt.res.errFunc == nil && result.UserID != tt.res.result.UserID { + if result.UserID != tt.res.result.UserID { t.Errorf("got wrong result userid: expected: %v, actual: %v ", tt.res.result.UserID, result.UserID) } - if tt.res.errFunc == nil && len(result.Roles) != len(tt.res.result.Roles) { + if len(result.Roles) != len(tt.res.result.Roles) { t.Errorf("got wrong result roles: expected: %v, actual: %v ", tt.res.result.Roles, result.Roles) } - if tt.res.errFunc != nil && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -579,7 +600,7 @@ func TestRemoveIamMember(t *testing.T) { { name: "remove iam member, ok", args: args{ - es: GetMockManipulateIamWithMember(ctrl), + es: GetMockManipulateIAMWithMember(ctrl), ctx: authz.NewMockContext("orgID", "userID"), existingIAM: &model.IAM{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, @@ -594,7 +615,7 @@ func TestRemoveIamMember(t *testing.T) { { name: "no userid", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), existingIAM: &model.IAM{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, @@ -609,7 +630,7 @@ func TestRemoveIamMember(t *testing.T) { { name: "member not existing", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), existingIAM: &model.IAM{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, @@ -623,7 +644,7 @@ func TestRemoveIamMember(t *testing.T) { { name: "existing not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), member: &iam_model.IAMMember{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, UserID: "UserID", Roles: []string{"ChangeRoles"}}, }, @@ -666,7 +687,7 @@ func TestAddIdpConfiguration(t *testing.T) { { name: "add idp, ok", args: args{ - es: GetMockManipulateIamWithCrypto(ctrl), + es: GetMockManipulateIAMWithCrypto(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, IDPConfigID: "IDPConfigID", @@ -695,7 +716,7 @@ func TestAddIdpConfiguration(t *testing.T) { { name: "invalid idp config", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}}, }, @@ -707,7 +728,7 @@ func TestAddIdpConfiguration(t *testing.T) { { name: "existing iam not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, IDPConfigID: "IDPConfigID", @@ -729,25 +750,28 @@ func TestAddIdpConfiguration(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.AddIDPConfig(tt.args.ctx, tt.args.idp) - - if !tt.res.wantErr && result.IDPConfigID == "" { + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.IDPConfigID == "" { t.Errorf("result has no id") } - if !tt.res.wantErr && result.OIDCConfig.IDPConfigID == "" { + if result.OIDCConfig.IDPConfigID == "" { t.Errorf("result has no id") } - if !tt.res.wantErr && result.OIDCConfig == nil && result.OIDCConfig.ClientSecret == nil { + if result.OIDCConfig == nil && result.OIDCConfig.ClientSecret == nil { t.Errorf("result has no client secret") } - if !tt.res.wantErr && result.Name != tt.res.result.Name { + if result.Name != tt.res.result.Name { t.Errorf("got wrong result key: expected: %v, actual: %v ", tt.res.result.Name, result.Name) } - if !tt.res.wantErr && result.OIDCConfig.ClientID != tt.res.result.OIDCConfig.ClientID { + if result.OIDCConfig.ClientID != tt.res.result.OIDCConfig.ClientID { t.Errorf("got wrong result key: expected: %v, actual: %v ", tt.res.result.OIDCConfig.ClientID, result.OIDCConfig.ClientID) } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -772,7 +796,7 @@ func TestChangeIdpConfiguration(t *testing.T) { { name: "change idp, ok", args: args{ - es: GetMockManipulateIamWithOIDCIdp(ctrl), + es: GetMockManipulateIAMWithOIDCIdp(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, IDPConfigID: "IDPConfigID", @@ -792,7 +816,7 @@ func TestChangeIdpConfiguration(t *testing.T) { { name: "invalid idp", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, IDPConfigID: "IDPConfigID", @@ -806,7 +830,7 @@ func TestChangeIdpConfiguration(t *testing.T) { { name: "idp not existing", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, IDPConfigID: "IDPConfigID", @@ -824,7 +848,7 @@ func TestChangeIdpConfiguration(t *testing.T) { { name: "existing project not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, IDPConfigID: "IDPConfigID", @@ -843,19 +867,22 @@ func TestChangeIdpConfiguration(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.ChangeIDPConfig(tt.args.ctx, tt.args.idp) - + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } if !tt.res.wantErr && result.AggregateID == "" { t.Errorf("result has no id") } - if !tt.res.wantErr && result.IDPConfigID != tt.res.result.IDPConfigID { + if result.IDPConfigID != tt.res.result.IDPConfigID { t.Errorf("got wrong result AppID: expected: %v, actual: %v ", tt.res.result.IDPConfigID, result.IDPConfigID) } - if !tt.res.wantErr && result.Name != tt.res.result.Name { + if result.Name != tt.res.result.Name { t.Errorf("got wrong result name: expected: %v, actual: %v ", tt.res.result.Name, result.Name) } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -879,7 +906,7 @@ func TestRemoveIdpConfiguration(t *testing.T) { { name: "remove idp, ok", args: args{ - es: GetMockManipulateIamWithOIDCIdp(ctrl), + es: GetMockManipulateIAMWithOIDCIdp(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, IDPConfigID: "IDPConfigID", @@ -889,7 +916,7 @@ func TestRemoveIdpConfiguration(t *testing.T) { { name: "no IDPConfigID", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}}, }, @@ -901,7 +928,7 @@ func TestRemoveIdpConfiguration(t *testing.T) { { name: "idp not existing", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, IDPConfigID: "IDPConfigID", @@ -915,7 +942,7 @@ func TestRemoveIdpConfiguration(t *testing.T) { { name: "existing idp not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, IDPConfigID: "IDPConfigID", @@ -960,7 +987,7 @@ func TestDeactivateIdpConfiguration(t *testing.T) { { name: "deactivate, ok", args: args{ - es: GetMockManipulateIamWithOIDCIdp(ctrl), + es: GetMockManipulateIAMWithOIDCIdp(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, IDPConfigID: "IDPConfigID", @@ -981,7 +1008,7 @@ func TestDeactivateIdpConfiguration(t *testing.T) { { name: "no idp id", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}}, }, @@ -993,7 +1020,7 @@ func TestDeactivateIdpConfiguration(t *testing.T) { { name: "idp not existing", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, IDPConfigID: "IDPConfigID", @@ -1011,7 +1038,7 @@ func TestDeactivateIdpConfiguration(t *testing.T) { { name: "existing iam not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, IDPConfigID: "IDPConfigID", @@ -1030,19 +1057,22 @@ func TestDeactivateIdpConfiguration(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.DeactivateIDPConfig(tt.args.ctx, tt.args.idp.AggregateID, tt.args.idp.IDPConfigID) - + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } if !tt.res.wantErr && result.AggregateID == "" { t.Errorf("result has no id") } - if !tt.res.wantErr && result.IDPConfigID != tt.res.result.IDPConfigID { + if result.IDPConfigID != tt.res.result.IDPConfigID { t.Errorf("got wrong result IDPConfigID: expected: %v, actual: %v ", tt.res.result.IDPConfigID, result.IDPConfigID) } - if !tt.res.wantErr && result.State != tt.res.result.State { + if result.State != tt.res.result.State { t.Errorf("got wrong result state: expected: %v, actual: %v ", tt.res.result.State, result.State) } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -1067,7 +1097,7 @@ func TestReactivateIdpConfiguration(t *testing.T) { { name: "reactivate, ok", args: args{ - es: GetMockManipulateIamWithOIDCIdp(ctrl), + es: GetMockManipulateIAMWithOIDCIdp(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, IDPConfigID: "IDPConfigID", @@ -1088,7 +1118,7 @@ func TestReactivateIdpConfiguration(t *testing.T) { { name: "no idp id", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}}, }, @@ -1100,7 +1130,7 @@ func TestReactivateIdpConfiguration(t *testing.T) { { name: "idp not existing", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, IDPConfigID: "IDPConfigID", @@ -1118,7 +1148,7 @@ func TestReactivateIdpConfiguration(t *testing.T) { { name: "existing iam not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), idp: &iam_model.IDPConfig{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, IDPConfigID: "IDPConfigID", @@ -1137,19 +1167,22 @@ func TestReactivateIdpConfiguration(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.ReactivateIDPConfig(tt.args.ctx, tt.args.idp.AggregateID, tt.args.idp.IDPConfigID) - + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } if !tt.res.wantErr && result.AggregateID == "" { t.Errorf("result has no id") } - if !tt.res.wantErr && result.IDPConfigID != tt.res.result.IDPConfigID { + if result.IDPConfigID != tt.res.result.IDPConfigID { t.Errorf("got wrong result IDPConfigID: expected: %v, actual: %v ", tt.res.result.IDPConfigID, result.IDPConfigID) } - if !tt.res.wantErr && result.State != tt.res.result.State { + if result.State != tt.res.result.State { t.Errorf("got wrong result state: expected: %v, actual: %v ", tt.res.result.State, result.State) } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -1174,7 +1207,7 @@ func TestChangeOIDCIDPConfig(t *testing.T) { { name: "change oidc config, ok", args: args{ - es: GetMockManipulateIamWithOIDCIdp(ctrl), + es: GetMockManipulateIAMWithOIDCIdp(ctrl), ctx: authz.NewMockContext("orgID", "userID"), config: &iam_model.OIDCIDPConfig{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1195,7 +1228,7 @@ func TestChangeOIDCIDPConfig(t *testing.T) { { name: "invalid config", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), config: &iam_model.OIDCIDPConfig{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1210,7 +1243,7 @@ func TestChangeOIDCIDPConfig(t *testing.T) { { name: "idp not existing", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), config: &iam_model.OIDCIDPConfig{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1228,7 +1261,7 @@ func TestChangeOIDCIDPConfig(t *testing.T) { { name: "existing iam not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), config: &iam_model.OIDCIDPConfig{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1247,19 +1280,22 @@ func TestChangeOIDCIDPConfig(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.ChangeIDPOIDCConfig(tt.args.ctx, tt.args.config) - - if !tt.res.wantErr && result.AggregateID == "" { + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.AggregateID == "" { t.Errorf("result has no id") } - if !tt.res.wantErr && result.IDPConfigID != tt.res.result.IDPConfigID { + if result.IDPConfigID != tt.res.result.IDPConfigID { t.Errorf("got wrong result AppID: expected: %v, actual: %v ", tt.res.result.IDPConfigID, result.IDPConfigID) } - if !tt.res.wantErr && result.ClientID != tt.res.result.ClientID { + if result.ClientID != tt.res.result.ClientID { t.Errorf("got wrong result responsetype: expected: %v, actual: %v ", tt.res.result.ClientID, result.ClientID) } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -1284,7 +1320,7 @@ func TestAddLoginPolicy(t *testing.T) { { name: "add login policy, ok", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), policy: &iam_model.LoginPolicy{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1301,7 +1337,7 @@ func TestAddLoginPolicy(t *testing.T) { { name: "invalid policy", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), policy: &iam_model.LoginPolicy{ ObjectRoot: es_models.ObjectRoot{Sequence: 0}, @@ -1315,7 +1351,7 @@ func TestAddLoginPolicy(t *testing.T) { { name: "existing iam not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), policy: &iam_model.LoginPolicy{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1330,12 +1366,15 @@ func TestAddLoginPolicy(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.AddLoginPolicy(tt.args.ctx, tt.args.policy) - - if !tt.res.wantErr && result.AllowRegister != tt.res.result.AllowRegister { - t.Errorf("got wrong result AllowRegister: expected: %v, actual: %v ", tt.res.result.AllowRegister, result.AllowRegister) - } - if tt.res.wantErr && !tt.res.errFunc(err) { + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.AllowRegister != tt.res.result.AllowRegister { + t.Errorf("got wrong result AllowRegister: expected: %v, actual: %v ", tt.res.result.AllowRegister, result.AllowRegister) } }) } @@ -1361,7 +1400,7 @@ func TestChangeLoginPolicy(t *testing.T) { { name: "add login policy, ok", args: args{ - es: GetMockManipulateIamWithLoginPolicy(ctrl), + es: GetMockManipulateIAMWithLoginPolicy(ctrl), ctx: authz.NewMockContext("orgID", "userID"), policy: &iam_model.LoginPolicy{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1382,7 +1421,7 @@ func TestChangeLoginPolicy(t *testing.T) { { name: "invalid policy", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), policy: &iam_model.LoginPolicy{ ObjectRoot: es_models.ObjectRoot{Sequence: 0}, @@ -1396,7 +1435,7 @@ func TestChangeLoginPolicy(t *testing.T) { { name: "existing iam not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), policy: &iam_model.LoginPolicy{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1411,19 +1450,22 @@ func TestChangeLoginPolicy(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.ChangeLoginPolicy(tt.args.ctx, tt.args.policy) - - if !tt.res.wantErr && result.AllowRegister != tt.res.result.AllowRegister { + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.AllowRegister != tt.res.result.AllowRegister { t.Errorf("got wrong result AllowRegister: expected: %v, actual: %v ", tt.res.result.AllowRegister, result.AllowRegister) } - if !tt.res.wantErr && result.AllowUsernamePassword != tt.res.result.AllowUsernamePassword { + if result.AllowUsernamePassword != tt.res.result.AllowUsernamePassword { t.Errorf("got wrong result AllowUsernamePassword: expected: %v, actual: %v ", tt.res.result.AllowUsernamePassword, result.AllowUsernamePassword) } - if !tt.res.wantErr && result.AllowExternalIdp != tt.res.result.AllowExternalIdp { + if result.AllowExternalIdp != tt.res.result.AllowExternalIdp { t.Errorf("got wrong result AllowExternalIDP: expected: %v, actual: %v ", tt.res.result.AllowExternalIdp, result.AllowExternalIdp) } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -1448,7 +1490,7 @@ func TestAddIdpProviderToLoginPolicy(t *testing.T) { { name: "add idp to login policy, ok", args: args{ - es: GetMockManipulateIamWithLoginPolicy(ctrl), + es: GetMockManipulateIAMWithLoginPolicy(ctrl), ctx: authz.NewMockContext("orgID", "userID"), provider: &iam_model.IDPProvider{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1463,7 +1505,7 @@ func TestAddIdpProviderToLoginPolicy(t *testing.T) { { name: "add idp to login policy, already existing", args: args{ - es: GetMockManipulateIamWithLoginPolicy(ctrl), + es: GetMockManipulateIAMWithLoginPolicy(ctrl), ctx: authz.NewMockContext("orgID", "userID"), provider: &iam_model.IDPProvider{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1479,7 +1521,7 @@ func TestAddIdpProviderToLoginPolicy(t *testing.T) { { name: "invalid provider", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), provider: &iam_model.IDPProvider{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1493,7 +1535,7 @@ func TestAddIdpProviderToLoginPolicy(t *testing.T) { { name: "existing iam not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), provider: &iam_model.IDPProvider{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1509,16 +1551,19 @@ func TestAddIdpProviderToLoginPolicy(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.AddIDPProviderToLoginPolicy(tt.args.ctx, tt.args.provider) - - if !tt.res.wantErr && result.IdpConfigID != tt.res.result.IdpConfigID { + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.IdpConfigID != tt.res.result.IdpConfigID { t.Errorf("got wrong result IDPConfigID: expected: %v, actual: %v ", tt.res.result.IdpConfigID, result.IdpConfigID) } - if !tt.res.wantErr && result.Type != tt.res.result.Type { + if result.Type != tt.res.result.Type { t.Errorf("got wrong result Type: expected: %v, actual: %v ", tt.res.result.Type, result.Type) } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -1542,7 +1587,7 @@ func TestRemoveIdpProviderFromLoginPolicy(t *testing.T) { { name: "remove idp to login policy, ok", args: args{ - es: GetMockManipulateIamWithLoginPolicy(ctrl), + es: GetMockManipulateIAMWithLoginPolicy(ctrl), ctx: authz.NewMockContext("orgID", "userID"), provider: &iam_model.IDPProvider{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1555,7 +1600,7 @@ func TestRemoveIdpProviderFromLoginPolicy(t *testing.T) { { name: "remove idp to login policy, not existing", args: args{ - es: GetMockManipulateIamWithLoginPolicy(ctrl), + es: GetMockManipulateIAMWithLoginPolicy(ctrl), ctx: authz.NewMockContext("orgID", "userID"), provider: &iam_model.IDPProvider{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1571,7 +1616,7 @@ func TestRemoveIdpProviderFromLoginPolicy(t *testing.T) { { name: "invalid provider", args: args{ - es: GetMockManipulateIam(ctrl), + es: GetMockManipulateIAM(ctrl), ctx: authz.NewMockContext("orgID", "userID"), provider: &iam_model.IDPProvider{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1585,7 +1630,7 @@ func TestRemoveIdpProviderFromLoginPolicy(t *testing.T) { { name: "existing iam not found", args: args{ - es: GetMockManipulateIamNotExisting(ctrl), + es: GetMockManipulateIAMNotExisting(ctrl), ctx: authz.NewMockContext("orgID", "userID"), provider: &iam_model.IDPProvider{ ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, @@ -1611,3 +1656,664 @@ func TestRemoveIdpProviderFromLoginPolicy(t *testing.T) { }) } } + +func TestAddPasswordComplexityPolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *IAMEventstore + ctx context.Context + policy *iam_model.PasswordComplexityPolicy + } + type res struct { + result *iam_model.PasswordComplexityPolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "add password complexity policy, ok", + args: args{ + es: GetMockManipulateIAM(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MinLength: 10, + }, + }, + res: res{ + result: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MinLength: 10, + }, + }, + }, + { + name: "invalid policy", + args: args{ + es: GetMockManipulateIAM(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{Sequence: 0}, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsErrorInvalidArgument, + }, + }, + { + name: "existing iam not found", + args: args{ + es: GetMockManipulateIAMNotExisting(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MinLength: 10, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := tt.args.es.AddPasswordComplexityPolicy(tt.args.ctx, tt.args.policy) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.MinLength != tt.res.result.MinLength { + t.Errorf("got wrong result MinLength: expected: %v, actual: %v ", tt.res.result.MinLength, result.MinLength) + } + }) + } +} + +func TestChangePasswordComplexityPolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *IAMEventstore + ctx context.Context + policy *iam_model.PasswordComplexityPolicy + } + type res struct { + result *iam_model.PasswordComplexityPolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "change password complexity policy, ok", + args: args{ + es: GetMockManipulateIAMWithPasswodComplexityPolicy(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MinLength: 5, + }, + }, + res: res{ + result: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MinLength: 5, + }, + }, + }, + { + name: "invalid policy", + args: args{ + es: GetMockManipulateIAM(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{Sequence: 0}, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsErrorInvalidArgument, + }, + }, + { + name: "existing iam not found", + args: args{ + es: GetMockManipulateIAMNotExisting(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MinLength: 10, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := tt.args.es.ChangePasswordComplexityPolicy(tt.args.ctx, tt.args.policy) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.MinLength != tt.res.result.MinLength { + t.Errorf("got wrong result MinLength: expected: %v, actual: %v ", tt.res.result.MinLength, result.MinLength) + } + }) + } +} + +func TestAddPasswordAgePolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *IAMEventstore + ctx context.Context + policy *iam_model.PasswordAgePolicy + } + type res struct { + result *iam_model.PasswordAgePolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "add password age policy, ok", + args: args{ + es: GetMockManipulateIAM(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAgeDays: 10, + ExpireWarnDays: 10, + }, + }, + res: res{ + result: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAgeDays: 10, + ExpireWarnDays: 10, + }, + }, + }, + { + name: "empty policy", + args: args{ + es: GetMockManipulateIAM(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: nil, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing iam not found", + args: args{ + es: GetMockManipulateIAMNotExisting(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAgeDays: 10, + ExpireWarnDays: 10, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := tt.args.es.AddPasswordAgePolicy(tt.args.ctx, tt.args.policy) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.MaxAgeDays != tt.res.result.MaxAgeDays { + t.Errorf("got wrong result MaxAgeDays: expected: %v, actual: %v ", tt.res.result.MaxAgeDays, result.MaxAgeDays) + } + + if result.ExpireWarnDays != tt.res.result.ExpireWarnDays { + t.Errorf("got wrong result.ExpireWarnDays: expected: %v, actual: %v ", tt.res.result.ExpireWarnDays, result.ExpireWarnDays) + } + }) + } +} + +func TestChangePasswordAgePolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *IAMEventstore + ctx context.Context + policy *iam_model.PasswordAgePolicy + } + type res struct { + result *iam_model.PasswordAgePolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "change password age policy, ok", + args: args{ + es: GetMockManipulateIAMWithPasswordAgePolicy(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAgeDays: 5, + }, + }, + res: res{ + result: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAgeDays: 5, + }, + }, + }, + { + name: "invalid policy", + args: args{ + es: GetMockManipulateIAM(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: nil, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing iam not found", + args: args{ + es: GetMockManipulateIAMNotExisting(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAgeDays: 10, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := tt.args.es.ChangePasswordAgePolicy(tt.args.ctx, tt.args.policy) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.MaxAgeDays != tt.res.result.MaxAgeDays { + t.Errorf("got wrong result MaxAgeDays: expected: %v, actual: %v ", tt.res.result.MaxAgeDays, result.MaxAgeDays) + } + + if result.ExpireWarnDays != tt.res.result.ExpireWarnDays { + t.Errorf("got wrong result.ExpireWarnDays: expected: %v, actual: %v ", tt.res.result.ExpireWarnDays, result.ExpireWarnDays) + } + }) + } +} + +func TestAddPasswordLockoutPolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *IAMEventstore + ctx context.Context + policy *iam_model.PasswordLockoutPolicy + } + type res struct { + result *iam_model.PasswordLockoutPolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "add password lockout policy, ok", + args: args{ + es: GetMockManipulateIAM(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAttempts: 10, + ShowLockOutFailures: true, + }, + }, + res: res{ + result: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAttempts: 10, + ShowLockOutFailures: true, + }, + }, + }, + { + name: "empty policy", + args: args{ + es: GetMockManipulateIAM(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: nil, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing iam not found", + args: args{ + es: GetMockManipulateIAMNotExisting(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAttempts: 10, + ShowLockOutFailures: true, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := tt.args.es.AddPasswordLockoutPolicy(tt.args.ctx, tt.args.policy) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + + if result.MaxAttempts != tt.res.result.MaxAttempts { + t.Errorf("got wrong result MaxAttempts: expected: %v, actual: %v ", tt.res.result.MaxAttempts, result.MaxAttempts) + } + + if result.ShowLockOutFailures != tt.res.result.ShowLockOutFailures { + t.Errorf("got wrong result.ShowLockOutFailures: expected: %v, actual: %v ", tt.res.result.ShowLockOutFailures, result.ShowLockOutFailures) + } + }) + } +} + +func TestChangePasswordLockoutPolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *IAMEventstore + ctx context.Context + policy *iam_model.PasswordLockoutPolicy + } + type res struct { + result *iam_model.PasswordLockoutPolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "change password lockout policy, ok", + args: args{ + es: GetMockManipulateIAMWithPasswordLockoutPolicy(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAttempts: 5, + }, + }, + res: res{ + result: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAttempts: 5, + }, + }, + }, + { + name: "invalid policy", + args: args{ + es: GetMockManipulateIAM(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: nil, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing iam not found", + args: args{ + es: GetMockManipulateIAMNotExisting(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAttempts: 10, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := tt.args.es.ChangePasswordLockoutPolicy(tt.args.ctx, tt.args.policy) + + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.MaxAttempts != tt.res.result.MaxAttempts { + t.Errorf("got wrong result MaxAttempts: expected: %v, actual: %v ", tt.res.result.MaxAttempts, result.MaxAttempts) + } + + if result.ShowLockOutFailures != tt.res.result.ShowLockOutFailures { + t.Errorf("got wrong result.ShowLockOutFailures: expected: %v, actual: %v ", tt.res.result.ShowLockOutFailures, result.ShowLockOutFailures) + } + }) + } +} + +func TestAddOrgIAMPolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *IAMEventstore + ctx context.Context + policy *iam_model.OrgIAMPolicy + } + type res struct { + result *iam_model.OrgIAMPolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "add org iam policy, ok", + args: args{ + es: GetMockManipulateIAM(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.OrgIAMPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + UserLoginMustBeDomain: true, + }, + }, + res: res{ + result: &iam_model.OrgIAMPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + UserLoginMustBeDomain: true, + }, + }, + }, + { + name: "empty policy", + args: args{ + es: GetMockManipulateIAM(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: nil, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing iam not found", + args: args{ + es: GetMockManipulateIAMNotExisting(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.OrgIAMPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + UserLoginMustBeDomain: true, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := tt.args.es.AddOrgIAMPolicy(tt.args.ctx, tt.args.policy) + + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.UserLoginMustBeDomain != tt.res.result.UserLoginMustBeDomain { + t.Errorf("got wrong result UserLoginMustBeDomain: expected: %v, actual: %v ", tt.res.result.UserLoginMustBeDomain, result.UserLoginMustBeDomain) + } + }) + } +} + +func TestChangeOrgIAMPolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *IAMEventstore + ctx context.Context + policy *iam_model.OrgIAMPolicy + } + type res struct { + result *iam_model.OrgIAMPolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "change org iam policy, ok", + args: args{ + es: GetMockManipulateIAMWithOrgIAMPolicy(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.OrgIAMPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + UserLoginMustBeDomain: false, + }, + }, + res: res{ + result: &iam_model.OrgIAMPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + UserLoginMustBeDomain: false, + }, + }, + }, + { + name: "invalid policy", + args: args{ + es: GetMockManipulateIAM(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: nil, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing iam not found", + args: args{ + es: GetMockManipulateIAMNotExisting(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.OrgIAMPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + UserLoginMustBeDomain: true, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := tt.args.es.ChangeOrgIAMPolicy(tt.args.ctx, tt.args.policy) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.UserLoginMustBeDomain != tt.res.result.UserLoginMustBeDomain { + t.Errorf("got wrong result UserLoginMustBeDomain: expected: %v, actual: %v ", tt.res.result.UserLoginMustBeDomain, result.UserLoginMustBeDomain) + } + }) + } +} diff --git a/internal/iam/repository/eventsourcing/iam.go b/internal/iam/repository/eventsourcing/iam.go index 0619c98829..9199ccdcce 100644 --- a/internal/iam/repository/eventsourcing/iam.go +++ b/internal/iam/repository/eventsourcing/iam.go @@ -57,6 +57,10 @@ func IAMSetupDoneAggregate(aggCreator *es_models.AggregateCreator, iam *model.IA } } +func IAMSetupDoneEvent(ctx context.Context, agg *es_models.Aggregate, iam *model.IAM) (*es_models.Aggregate, error) { + return agg.AppendEvent(model.IAMSetupDone, &struct{ Step model.Step }{Step: iam.SetUpDone}) +} + func IAMSetGlobalOrgAggregate(aggCreator *es_models.AggregateCreator, iam *model.IAM, globalOrg string) func(ctx context.Context) (*es_models.Aggregate, error) { return func(ctx context.Context) (*es_models.Aggregate, error) { if globalOrg == "" { @@ -228,24 +232,22 @@ func OIDCIDPConfigChangedAggregate(aggCreator *es_models.AggregateCreator, exist } } -func LoginPolicyAddedAggregate(aggCreator *es_models.AggregateCreator, existing *model.IAM, policy *model.LoginPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { - return func(ctx context.Context) (*es_models.Aggregate, error) { - if policy == nil { - return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Smla8", "Errors.Internal") - } - agg, err := IAMAggregate(ctx, aggCreator, existing) - if err != nil { - return nil, err - } - validationQuery := es_models.NewSearchQuery(). - AggregateTypeFilter(model.IAMAggregate). - EventTypesFilter(model.LoginPolicyAdded). - AggregateIDFilter(existing.AggregateID) - - validation := checkExistingLoginPolicyValidation() - agg.SetPrecondition(validationQuery, validation) - return agg.AppendEvent(model.LoginPolicyAdded, policy) +func LoginPolicyAddedAggregate(ctx context.Context, aggCreator *es_models.AggregateCreator, existing *model.IAM, policy *model.LoginPolicy) (*es_models.Aggregate, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Smla8", "Errors.Internal") } + agg, err := IAMAggregate(ctx, aggCreator, existing) + if err != nil { + return nil, err + } + validationQuery := es_models.NewSearchQuery(). + AggregateTypeFilter(model.IAMAggregate). + EventTypesFilter(model.LoginPolicyAdded). + AggregateIDFilter(existing.AggregateID) + + validation := checkExistingLoginPolicyValidation() + agg.SetPrecondition(validationQuery, validation) + return agg.AppendEvent(model.LoginPolicyAdded, policy) } func LoginPolicyChangedAggregate(aggCreator *es_models.AggregateCreator, existing *model.IAM, policy *model.LoginPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { @@ -295,6 +297,146 @@ func LoginPolicyIDPProviderRemovedAggregate(ctx context.Context, aggCreator *es_ return agg.AppendEvent(model.LoginPolicyIDPProviderRemoved, provider) } +func PasswordComplexityPolicyAddedAggregate(ctx context.Context, aggCreator *es_models.AggregateCreator, existing *model.IAM, policy *model.PasswordComplexityPolicy) (*es_models.Aggregate, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Smla8", "Errors.Internal") + } + agg, err := IAMAggregate(ctx, aggCreator, existing) + if err != nil { + return nil, err + } + validationQuery := es_models.NewSearchQuery(). + AggregateTypeFilter(model.IAMAggregate). + EventTypesFilter(model.PasswordComplexityPolicyAdded). + AggregateIDFilter(existing.AggregateID) + + validation := checkExistingPasswordComplexityPolicyValidation() + agg.SetPrecondition(validationQuery, validation) + return agg.AppendEvent(model.PasswordComplexityPolicyAdded, policy) +} + +func PasswordComplexityPolicyChangedAggregate(aggCreator *es_models.AggregateCreator, existing *model.IAM, policy *model.PasswordComplexityPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { + return func(ctx context.Context) (*es_models.Aggregate, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Mlco9", "Errors.Internal") + } + agg, err := IAMAggregate(ctx, aggCreator, existing) + if err != nil { + return nil, err + } + changes := existing.DefaultPasswordComplexityPolicy.Changes(policy) + if len(changes) == 0 { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Smk8d", "Errors.NoChangesFound") + } + return agg.AppendEvent(model.PasswordComplexityPolicyChanged, changes) + } +} + +func PasswordAgePolicyAddedAggregate(ctx context.Context, aggCreator *es_models.AggregateCreator, existing *model.IAM, policy *model.PasswordAgePolicy) (*es_models.Aggregate, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-T7sui", "Errors.Internal") + } + agg, err := IAMAggregate(ctx, aggCreator, existing) + if err != nil { + return nil, err + } + validationQuery := es_models.NewSearchQuery(). + AggregateTypeFilter(model.IAMAggregate). + EventTypesFilter(model.PasswordAgePolicyAdded). + AggregateIDFilter(existing.AggregateID) + + validation := checkExistingPasswordAgePolicyValidation() + agg.SetPrecondition(validationQuery, validation) + return agg.AppendEvent(model.PasswordAgePolicyAdded, policy) +} + +func PasswordAgePolicyChangedAggregate(aggCreator *es_models.AggregateCreator, existing *model.IAM, policy *model.PasswordAgePolicy) func(ctx context.Context) (*es_models.Aggregate, error) { + return func(ctx context.Context) (*es_models.Aggregate, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-3Gs0o", "Errors.Internal") + } + agg, err := IAMAggregate(ctx, aggCreator, existing) + if err != nil { + return nil, err + } + changes := existing.DefaultPasswordAgePolicy.Changes(policy) + if len(changes) == 0 { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-3Wdos", "Errors.NoChangesFound") + } + return agg.AppendEvent(model.PasswordAgePolicyChanged, changes) + } +} + +func PasswordLockoutPolicyAddedAggregate(ctx context.Context, aggCreator *es_models.AggregateCreator, existing *model.IAM, policy *model.PasswordLockoutPolicy) (*es_models.Aggregate, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-w5Tds", "Errors.Internal") + } + agg, err := IAMAggregate(ctx, aggCreator, existing) + if err != nil { + return nil, err + } + validationQuery := es_models.NewSearchQuery(). + AggregateTypeFilter(model.IAMAggregate). + EventTypesFilter(model.PasswordLockoutPolicyAdded). + AggregateIDFilter(existing.AggregateID) + + validation := checkExistingPasswordLockoutPolicyValidation() + agg.SetPrecondition(validationQuery, validation) + return agg.AppendEvent(model.PasswordLockoutPolicyAdded, policy) +} + +func PasswordLockoutPolicyChangedAggregate(aggCreator *es_models.AggregateCreator, existing *model.IAM, policy *model.PasswordLockoutPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { + return func(ctx context.Context) (*es_models.Aggregate, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-2D0fs", "Errors.Internal") + } + agg, err := IAMAggregate(ctx, aggCreator, existing) + if err != nil { + return nil, err + } + changes := existing.DefaultPasswordLockoutPolicy.Changes(policy) + if len(changes) == 0 { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-7Hsk9", "Errors.NoChangesFound") + } + return agg.AppendEvent(model.PasswordLockoutPolicyChanged, changes) + } +} + +func OrgIAMPolicyAddedAggregate(ctx context.Context, aggCreator *es_models.AggregateCreator, existing *model.IAM, policy *model.OrgIAMPolicy) (*es_models.Aggregate, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-w5Tds", "Errors.Internal") + } + agg, err := IAMAggregate(ctx, aggCreator, existing) + if err != nil { + return nil, err + } + validationQuery := es_models.NewSearchQuery(). + AggregateTypeFilter(model.IAMAggregate). + EventTypesFilter(model.OrgIAMPolicyAdded). + AggregateIDFilter(existing.AggregateID) + + validation := checkExistingOrgIAMPolicyValidation() + agg.SetPrecondition(validationQuery, validation) + return agg.AppendEvent(model.OrgIAMPolicyAdded, policy) +} + +func OrgIAMPolicyChangedAggregate(aggCreator *es_models.AggregateCreator, existing *model.IAM, policy *model.OrgIAMPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { + return func(ctx context.Context) (*es_models.Aggregate, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-2D0fs", "Errors.Internal") + } + agg, err := IAMAggregate(ctx, aggCreator, existing) + if err != nil { + return nil, err + } + changes := existing.DefaultOrgIAMPolicy.Changes(policy) + if len(changes) == 0 { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-7Hsk9", "Errors.NoChangesFound") + } + return agg.AppendEvent(model.OrgIAMPolicyChanged, changes) + } +} + func checkExistingLoginPolicyValidation() func(...*es_models.Event) error { return func(events ...*es_models.Event) error { for _, event := range events { @@ -307,6 +449,54 @@ func checkExistingLoginPolicyValidation() func(...*es_models.Event) error { } } +func checkExistingPasswordComplexityPolicyValidation() func(...*es_models.Event) error { + return func(events ...*es_models.Event) error { + for _, event := range events { + switch event.Type { + case model.PasswordComplexityPolicyAdded: + return errors.ThrowPreconditionFailed(nil, "EVENT-Ski9d", "Errors.IAM.PasswordComplexityPolicy.AlreadyExists") + } + } + return nil + } +} + +func checkExistingPasswordAgePolicyValidation() func(...*es_models.Event) error { + return func(events ...*es_models.Event) error { + for _, event := range events { + switch event.Type { + case model.PasswordAgePolicyAdded: + return errors.ThrowPreconditionFailed(nil, "EVENT-Ski9d", "Errors.IAM.PasswordAgePolicy.AlreadyExists") + } + } + return nil + } +} + +func checkExistingPasswordLockoutPolicyValidation() func(...*es_models.Event) error { + return func(events ...*es_models.Event) error { + for _, event := range events { + switch event.Type { + case model.PasswordLockoutPolicyAdded: + return errors.ThrowPreconditionFailed(nil, "EVENT-Ski9d", "Errors.IAM.PasswordLockoutPolicy.AlreadyExists") + } + } + return nil + } +} + +func checkExistingOrgIAMPolicyValidation() func(...*es_models.Event) error { + return func(events ...*es_models.Event) error { + for _, event := range events { + switch event.Type { + case model.OrgIAMPolicyAdded: + return errors.ThrowPreconditionFailed(nil, "EVENT-bSm8f", "Errors.IAM.OrgIAMPolicy.AlreadyExists") + } + } + return nil + } +} + func checkExistingLoginPolicyIDPProviderValidation(idpConfigID string) func(...*es_models.Event) error { return func(events ...*es_models.Event) error { idpConfigs := make([]*model.IDPConfig, 0) diff --git a/internal/iam/repository/eventsourcing/iam_test.go b/internal/iam/repository/eventsourcing/iam_test.go index 4f48f5edf0..bfdb0287b8 100644 --- a/internal/iam/repository/eventsourcing/iam_test.go +++ b/internal/iam/repository/eventsourcing/iam_test.go @@ -1158,7 +1158,7 @@ func TestLoginPolicyAddedAggregate(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - agg, err := LoginPolicyAddedAggregate(tt.args.aggCreator, tt.args.existingIAM, tt.args.newPolicy)(tt.args.ctx) + agg, err := LoginPolicyAddedAggregate(tt.args.ctx, tt.args.aggCreator, tt.args.existingIAM, tt.args.newPolicy) if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) @@ -1467,3 +1467,779 @@ func TestLoginPolicyIdpProviderRemovedAggregate(t *testing.T) { }) } } + +func TestPasswordComplexityPolicyAddedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existingIAM *model.IAM + newPolicy *model.PasswordComplexityPolicy + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "add password complexity policy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + IAMProjectID: "IAMProjectID"}, + newPolicy: &model.PasswordComplexityPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + MinLength: 10, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.PasswordComplexityPolicyAdded}, + }, + }, + { + name: "existing iam nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "complexity policy config nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, IAMProjectID: "IAMProjectID"}, + newPolicy: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := PasswordComplexityPolicyAddedAggregate(tt.args.ctx, tt.args.aggCreator, tt.args.existingIAM, tt.args.newPolicy) + + if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if !tt.res.wantErr && agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + if !tt.res.wantErr && agg.Events[i].Data == nil { + t.Errorf("should have data in event") + } + } + + if tt.res.wantErr && !tt.res.errFunc(err) { + t.Errorf("got wrong err: %v ", err) + } + }) + } +} + +func TestPasswordComplexityPolicyChangedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existingIAM *model.IAM + newPolicy *model.PasswordComplexityPolicy + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "change password complexity policy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + IAMProjectID: "IAMProjectID", + DefaultPasswordComplexityPolicy: &model.PasswordComplexityPolicy{ + MinLength: 10, + }}, + newPolicy: &model.PasswordComplexityPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + MinLength: 5, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.PasswordComplexityPolicyChanged}, + }, + }, + { + name: "no changes", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + IAMProjectID: "IAMProjectID", + DefaultPasswordComplexityPolicy: &model.PasswordComplexityPolicy{ + MinLength: 10, + }}, + newPolicy: &model.PasswordComplexityPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + MinLength: 10, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing iam nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "complexity policy config nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, IAMProjectID: "IAMProjectID"}, + newPolicy: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := PasswordComplexityPolicyChangedAggregate(tt.args.aggCreator, tt.args.existingIAM, tt.args.newPolicy)(tt.args.ctx) + + if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if !tt.res.wantErr && agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + if !tt.res.wantErr && agg.Events[i].Data == nil { + t.Errorf("should have data in event") + } + } + + if tt.res.wantErr && !tt.res.errFunc(err) { + t.Errorf("got wrong err: %v ", err) + } + }) + } +} + +func TestPasswordAgePolicyAddedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existingIAM *model.IAM + newPolicy *model.PasswordAgePolicy + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "add password age policy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + IAMProjectID: "IAMProjectID"}, + newPolicy: &model.PasswordAgePolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + MaxAgeDays: 10, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.PasswordAgePolicyAdded}, + }, + }, + { + name: "existing iam nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "age policy config nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, IAMProjectID: "IAMProjectID"}, + newPolicy: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := PasswordAgePolicyAddedAggregate(tt.args.ctx, tt.args.aggCreator, tt.args.existingIAM, tt.args.newPolicy) + + if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if !tt.res.wantErr && agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + if !tt.res.wantErr && agg.Events[i].Data == nil { + t.Errorf("should have data in event") + } + } + + if tt.res.wantErr && !tt.res.errFunc(err) { + t.Errorf("got wrong err: %v ", err) + } + }) + } +} + +func TestPasswordAgePolicyChangedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existingIAM *model.IAM + newPolicy *model.PasswordAgePolicy + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "change password age policy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + IAMProjectID: "IAMProjectID", + DefaultPasswordAgePolicy: &model.PasswordAgePolicy{ + MaxAgeDays: 10, + }}, + newPolicy: &model.PasswordAgePolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + MaxAgeDays: 5, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.PasswordAgePolicyChanged}, + }, + }, + { + name: "no changes", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + IAMProjectID: "IAMProjectID", + DefaultPasswordAgePolicy: &model.PasswordAgePolicy{ + MaxAgeDays: 10, + }}, + newPolicy: &model.PasswordAgePolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + MaxAgeDays: 10, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing iam nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "age policy config nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, IAMProjectID: "IAMProjectID"}, + newPolicy: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := PasswordAgePolicyChangedAggregate(tt.args.aggCreator, tt.args.existingIAM, tt.args.newPolicy)(tt.args.ctx) + + if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if !tt.res.wantErr && agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + if !tt.res.wantErr && agg.Events[i].Data == nil { + t.Errorf("should have data in event") + } + } + + if tt.res.wantErr && !tt.res.errFunc(err) { + t.Errorf("got wrong err: %v ", err) + } + }) + } +} + +func TestPasswordLockoutPolicyAddedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existingIAM *model.IAM + newPolicy *model.PasswordLockoutPolicy + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "add password lockout policy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + IAMProjectID: "IAMProjectID"}, + newPolicy: &model.PasswordLockoutPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + MaxAttempts: 10, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.PasswordLockoutPolicyAdded}, + }, + }, + { + name: "existing iam nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "lockout policy config nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, IAMProjectID: "IAMProjectID"}, + newPolicy: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := PasswordLockoutPolicyAddedAggregate(tt.args.ctx, tt.args.aggCreator, tt.args.existingIAM, tt.args.newPolicy) + + if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if !tt.res.wantErr && agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + if !tt.res.wantErr && agg.Events[i].Data == nil { + t.Errorf("should have data in event") + } + } + + if tt.res.wantErr && !tt.res.errFunc(err) { + t.Errorf("got wrong err: %v ", err) + } + }) + } +} + +func TestPasswordLockoutPolicyChangedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existingIAM *model.IAM + newPolicy *model.PasswordLockoutPolicy + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "change password lockout policy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + IAMProjectID: "IAMProjectID", + DefaultPasswordLockoutPolicy: &model.PasswordLockoutPolicy{ + MaxAttempts: 10, + }}, + newPolicy: &model.PasswordLockoutPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + MaxAttempts: 5, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.PasswordLockoutPolicyChanged}, + }, + }, + { + name: "no changes", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + IAMProjectID: "IAMProjectID", + DefaultPasswordLockoutPolicy: &model.PasswordLockoutPolicy{ + MaxAttempts: 10, + }}, + newPolicy: &model.PasswordLockoutPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + MaxAttempts: 10, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing iam nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "lockout policy config nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, IAMProjectID: "IAMProjectID"}, + newPolicy: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := PasswordLockoutPolicyChangedAggregate(tt.args.aggCreator, tt.args.existingIAM, tt.args.newPolicy)(tt.args.ctx) + + if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if !tt.res.wantErr && agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + if !tt.res.wantErr && agg.Events[i].Data == nil { + t.Errorf("should have data in event") + } + } + + if tt.res.wantErr && !tt.res.errFunc(err) { + t.Errorf("got wrong err: %v ", err) + } + }) + } +} + +func TestOrgIAMPolicyAddedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existingIAM *model.IAM + newPolicy *model.OrgIAMPolicy + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "add org iam policy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + IAMProjectID: "IAMProjectID"}, + newPolicy: &model.OrgIAMPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + UserLoginMustBeDomain: true, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.OrgIAMPolicyAdded}, + }, + }, + { + name: "existing iam nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "lockout policy config nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, IAMProjectID: "IAMProjectID"}, + newPolicy: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := OrgIAMPolicyAddedAggregate(tt.args.ctx, tt.args.aggCreator, tt.args.existingIAM, tt.args.newPolicy) + + if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if !tt.res.wantErr && agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + if !tt.res.wantErr && agg.Events[i].Data == nil { + t.Errorf("should have data in event") + } + } + + if tt.res.wantErr && !tt.res.errFunc(err) { + t.Errorf("got wrong err: %v ", err) + } + }) + } +} + +func TestOrgIAMPolicyChangedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existingIAM *model.IAM + newPolicy *model.OrgIAMPolicy + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "change org iam policy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + IAMProjectID: "IAMProjectID", + DefaultOrgIAMPolicy: &model.OrgIAMPolicy{ + UserLoginMustBeDomain: true, + }}, + newPolicy: &model.OrgIAMPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + UserLoginMustBeDomain: false, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.OrgIAMPolicyChanged}, + }, + }, + { + name: "no changes", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + IAMProjectID: "IAMProjectID", + DefaultOrgIAMPolicy: &model.OrgIAMPolicy{ + UserLoginMustBeDomain: true, + }}, + newPolicy: &model.OrgIAMPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + UserLoginMustBeDomain: true, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing iam nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "org iam policy config nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existingIAM: &model.IAM{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, IAMProjectID: "IAMProjectID"}, + newPolicy: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := OrgIAMPolicyChangedAggregate(tt.args.aggCreator, tt.args.existingIAM, tt.args.newPolicy)(tt.args.ctx) + + if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if !tt.res.wantErr && agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + if !tt.res.wantErr && agg.Events[i].Data == nil { + t.Errorf("should have data in event") + } + } + + if tt.res.wantErr && !tt.res.errFunc(err) { + t.Errorf("got wrong err: %v ", err) + } + }) + } +} diff --git a/internal/iam/repository/eventsourcing/model/iam.go b/internal/iam/repository/eventsourcing/model/iam.go index 1f54d2c347..da626b4f57 100644 --- a/internal/iam/repository/eventsourcing/model/iam.go +++ b/internal/iam/repository/eventsourcing/model/iam.go @@ -16,21 +16,24 @@ const ( type Step int const ( - Step1 = Step(model.Step1) - //TODO: label policy - // Step2 = Step(model.Step2) + Step1 = Step(model.Step1) + Step2 = Step(model.Step2) StepCount = Step(model.StepCount) ) type IAM struct { es_models.ObjectRoot - SetUpStarted Step `json:"-"` - SetUpDone Step `json:"-"` - GlobalOrgID string `json:"globalOrgId,omitempty"` - IAMProjectID string `json:"iamProjectId,omitempty"` - Members []*IAMMember `json:"-"` - IDPs []*IDPConfig `json:"-"` - DefaultLoginPolicy *LoginPolicy `json:"-"` + SetUpStarted Step `json:"-"` + SetUpDone Step `json:"-"` + GlobalOrgID string `json:"globalOrgId,omitempty"` + IAMProjectID string `json:"iamProjectId,omitempty"` + Members []*IAMMember `json:"-"` + IDPs []*IDPConfig `json:"-"` + DefaultLoginPolicy *LoginPolicy `json:"-"` + DefaultOrgIAMPolicy *OrgIAMPolicy `json:"-"` + DefaultPasswordComplexityPolicy *PasswordComplexityPolicy `json:"-"` + DefaultPasswordAgePolicy *PasswordAgePolicy `json:"-"` + DefaultPasswordLockoutPolicy *PasswordLockoutPolicy `json:"-"` } func IAMFromModel(iam *model.IAM) *IAM { @@ -48,6 +51,18 @@ func IAMFromModel(iam *model.IAM) *IAM { if iam.DefaultLoginPolicy != nil { converted.DefaultLoginPolicy = LoginPolicyFromModel(iam.DefaultLoginPolicy) } + if iam.DefaultPasswordComplexityPolicy != nil { + converted.DefaultPasswordComplexityPolicy = PasswordComplexityPolicyFromModel(iam.DefaultPasswordComplexityPolicy) + } + if iam.DefaultPasswordAgePolicy != nil { + converted.DefaultPasswordAgePolicy = PasswordAgePolicyFromModel(iam.DefaultPasswordAgePolicy) + } + if iam.DefaultPasswordLockoutPolicy != nil { + converted.DefaultPasswordLockoutPolicy = PasswordLockoutPolicyFromModel(iam.DefaultPasswordLockoutPolicy) + } + if iam.DefaultOrgIAMPolicy != nil { + converted.DefaultOrgIAMPolicy = OrgIAMPolicyFromModel(iam.DefaultOrgIAMPolicy) + } return converted } @@ -66,6 +81,18 @@ func IAMToModel(iam *IAM) *model.IAM { if iam.DefaultLoginPolicy != nil { converted.DefaultLoginPolicy = LoginPolicyToModel(iam.DefaultLoginPolicy) } + if iam.DefaultPasswordComplexityPolicy != nil { + converted.DefaultPasswordComplexityPolicy = PasswordComplexityPolicyToModel(iam.DefaultPasswordComplexityPolicy) + } + if iam.DefaultPasswordAgePolicy != nil { + converted.DefaultPasswordAgePolicy = PasswordAgePolicyToModel(iam.DefaultPasswordAgePolicy) + } + if iam.DefaultPasswordLockoutPolicy != nil { + converted.DefaultPasswordLockoutPolicy = PasswordLockoutPolicyToModel(iam.DefaultPasswordLockoutPolicy) + } + if iam.DefaultOrgIAMPolicy != nil { + converted.DefaultOrgIAMPolicy = OrgIAMPolicyToModel(iam.DefaultOrgIAMPolicy) + } return converted } @@ -134,6 +161,22 @@ func (i *IAM) AppendEvent(event *es_models.Event) (err error) { return i.appendAddIDPProviderToLoginPolicyEvent(event) case LoginPolicyIDPProviderRemoved: return i.appendRemoveIDPProviderFromLoginPolicyEvent(event) + case PasswordComplexityPolicyAdded: + return i.appendAddPasswordComplexityPolicyEvent(event) + case PasswordComplexityPolicyChanged: + return i.appendChangePasswordComplexityPolicyEvent(event) + case PasswordAgePolicyAdded: + return i.appendAddPasswordAgePolicyEvent(event) + case PasswordAgePolicyChanged: + return i.appendChangePasswordAgePolicyEvent(event) + case PasswordLockoutPolicyAdded: + return i.appendAddPasswordLockoutPolicyEvent(event) + case PasswordLockoutPolicyChanged: + return i.appendChangePasswordLockoutPolicyEvent(event) + case OrgIAMPolicyAdded: + return i.appendAddOrgIAMPolicyEvent(event) + case OrgIAMPolicyChanged: + return i.appendChangeOrgIAMPolicyEvent(event) } return err diff --git a/internal/iam/repository/eventsourcing/model/org_iam_policy.go b/internal/iam/repository/eventsourcing/model/org_iam_policy.go new file mode 100644 index 0000000000..3056750803 --- /dev/null +++ b/internal/iam/repository/eventsourcing/model/org_iam_policy.go @@ -0,0 +1,63 @@ +package model + +import ( + "encoding/json" + "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/eventstore/models" + es_models "github.com/caos/zitadel/internal/eventstore/models" + iam_model "github.com/caos/zitadel/internal/iam/model" +) + +type OrgIAMPolicy struct { + models.ObjectRoot + + State int32 `json:"-"` + UserLoginMustBeDomain bool `json:"userLoginMustBeDomain"` +} + +func OrgIAMPolicyFromModel(policy *iam_model.OrgIAMPolicy) *OrgIAMPolicy { + return &OrgIAMPolicy{ + ObjectRoot: policy.ObjectRoot, + State: int32(policy.State), + UserLoginMustBeDomain: policy.UserLoginMustBeDomain, + } +} + +func OrgIAMPolicyToModel(policy *OrgIAMPolicy) *iam_model.OrgIAMPolicy { + return &iam_model.OrgIAMPolicy{ + ObjectRoot: policy.ObjectRoot, + State: iam_model.PolicyState(policy.State), + UserLoginMustBeDomain: policy.UserLoginMustBeDomain, + } +} + +func (p *OrgIAMPolicy) Changes(changed *OrgIAMPolicy) map[string]interface{} { + changes := make(map[string]interface{}, 1) + + if p.UserLoginMustBeDomain != changed.UserLoginMustBeDomain { + changes["userLoginMustBeDomain"] = changed.UserLoginMustBeDomain + } + return changes +} + +func (i *IAM) appendAddOrgIAMPolicyEvent(event *es_models.Event) error { + i.DefaultOrgIAMPolicy = new(OrgIAMPolicy) + err := i.DefaultOrgIAMPolicy.SetData(event) + if err != nil { + return err + } + i.DefaultOrgIAMPolicy.ObjectRoot.CreationDate = event.CreationDate + return nil +} + +func (i *IAM) appendChangeOrgIAMPolicyEvent(event *es_models.Event) error { + return i.DefaultOrgIAMPolicy.SetData(event) +} + +func (p *OrgIAMPolicy) SetData(event *es_models.Event) error { + err := json.Unmarshal(event.Data, p) + if err != nil { + return errors.ThrowInternal(err, "EVENT-7JS9d", "unable to unmarshal data") + } + return nil +} diff --git a/internal/iam/repository/eventsourcing/model/org_iam_policy_test.go b/internal/iam/repository/eventsourcing/model/org_iam_policy_test.go new file mode 100644 index 0000000000..555c620b4c --- /dev/null +++ b/internal/iam/repository/eventsourcing/model/org_iam_policy_test.go @@ -0,0 +1,125 @@ +package model + +import ( + "encoding/json" + es_models "github.com/caos/zitadel/internal/eventstore/models" + "testing" +) + +func TestOrgIAMPolicyChanges(t *testing.T) { + type args struct { + existing *OrgIAMPolicy + new *OrgIAMPolicy + } + type res struct { + changesLen int + } + tests := []struct { + name string + args args + res res + }{ + { + name: "org iam policy all attributes change", + args: args{ + existing: &OrgIAMPolicy{UserLoginMustBeDomain: true}, + new: &OrgIAMPolicy{UserLoginMustBeDomain: false}, + }, + res: res{ + changesLen: 1, + }, + }, + { + name: "no changes", + args: args{ + existing: &OrgIAMPolicy{UserLoginMustBeDomain: true}, + new: &OrgIAMPolicy{UserLoginMustBeDomain: true}, + }, + res: res{ + changesLen: 0, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + changes := tt.args.existing.Changes(tt.args.new) + if len(changes) != tt.res.changesLen { + t.Errorf("got wrong changes len: expected: %v, actual: %v ", tt.res.changesLen, len(changes)) + } + }) + } +} + +func TestAppendAddOrgIAMPolicyEvent(t *testing.T) { + type args struct { + iam *IAM + policy *OrgIAMPolicy + event *es_models.Event + } + tests := []struct { + name string + args args + result *IAM + }{ + { + name: "append add org iam policy event", + args: args{ + iam: new(IAM), + policy: &OrgIAMPolicy{UserLoginMustBeDomain: true}, + event: new(es_models.Event), + }, + result: &IAM{DefaultOrgIAMPolicy: &OrgIAMPolicy{UserLoginMustBeDomain: true}}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.args.policy != nil { + data, _ := json.Marshal(tt.args.policy) + tt.args.event.Data = data + } + tt.args.iam.appendAddOrgIAMPolicyEvent(tt.args.event) + if tt.result.DefaultOrgIAMPolicy.UserLoginMustBeDomain != tt.args.iam.DefaultOrgIAMPolicy.UserLoginMustBeDomain { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.DefaultOrgIAMPolicy.UserLoginMustBeDomain, tt.args.iam.DefaultOrgIAMPolicy.UserLoginMustBeDomain) + } + }) + } +} + +func TestAppendChangeOrgIAMPolicyEvent(t *testing.T) { + type args struct { + iam *IAM + policy *OrgIAMPolicy + event *es_models.Event + } + tests := []struct { + name string + args args + result *IAM + }{ + { + name: "append change org iam policy event", + args: args{ + iam: &IAM{DefaultOrgIAMPolicy: &OrgIAMPolicy{ + UserLoginMustBeDomain: true, + }}, + policy: &OrgIAMPolicy{UserLoginMustBeDomain: false}, + event: &es_models.Event{}, + }, + result: &IAM{DefaultOrgIAMPolicy: &OrgIAMPolicy{ + UserLoginMustBeDomain: false, + }}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.args.policy != nil { + data, _ := json.Marshal(tt.args.policy) + tt.args.event.Data = data + } + tt.args.iam.appendChangeOrgIAMPolicyEvent(tt.args.event) + if tt.result.DefaultOrgIAMPolicy.UserLoginMustBeDomain != tt.args.iam.DefaultOrgIAMPolicy.UserLoginMustBeDomain { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.DefaultOrgIAMPolicy.UserLoginMustBeDomain, tt.args.iam.DefaultOrgIAMPolicy.UserLoginMustBeDomain) + } + }) + } +} diff --git a/internal/iam/repository/eventsourcing/model/password_age_policy.go b/internal/iam/repository/eventsourcing/model/password_age_policy.go new file mode 100644 index 0000000000..86c65247d9 --- /dev/null +++ b/internal/iam/repository/eventsourcing/model/password_age_policy.go @@ -0,0 +1,69 @@ +package model + +import ( + "encoding/json" + "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/eventstore/models" + es_models "github.com/caos/zitadel/internal/eventstore/models" + iam_model "github.com/caos/zitadel/internal/iam/model" +) + +type PasswordAgePolicy struct { + models.ObjectRoot + + State int32 `json:"-"` + MaxAgeDays uint64 `json:"maxAgeDays"` + ExpireWarnDays uint64 `json:"expireWarnDays"` +} + +func PasswordAgePolicyFromModel(policy *iam_model.PasswordAgePolicy) *PasswordAgePolicy { + return &PasswordAgePolicy{ + ObjectRoot: policy.ObjectRoot, + State: int32(policy.State), + MaxAgeDays: policy.MaxAgeDays, + ExpireWarnDays: policy.ExpireWarnDays, + } +} + +func PasswordAgePolicyToModel(policy *PasswordAgePolicy) *iam_model.PasswordAgePolicy { + return &iam_model.PasswordAgePolicy{ + ObjectRoot: policy.ObjectRoot, + State: iam_model.PolicyState(policy.State), + MaxAgeDays: policy.MaxAgeDays, + ExpireWarnDays: policy.ExpireWarnDays, + } +} + +func (p *PasswordAgePolicy) Changes(changed *PasswordAgePolicy) map[string]interface{} { + changes := make(map[string]interface{}, 1) + + if p.MaxAgeDays != changed.MaxAgeDays { + changes["maxAgeDays"] = changed.MaxAgeDays + } + if p.ExpireWarnDays != changed.ExpireWarnDays { + changes["expireWarnDays"] = changed.ExpireWarnDays + } + return changes +} + +func (i *IAM) appendAddPasswordAgePolicyEvent(event *es_models.Event) error { + i.DefaultPasswordAgePolicy = new(PasswordAgePolicy) + err := i.DefaultPasswordAgePolicy.SetData(event) + if err != nil { + return err + } + i.DefaultPasswordAgePolicy.ObjectRoot.CreationDate = event.CreationDate + return nil +} + +func (i *IAM) appendChangePasswordAgePolicyEvent(event *es_models.Event) error { + return i.DefaultPasswordAgePolicy.SetData(event) +} + +func (p *PasswordAgePolicy) SetData(event *es_models.Event) error { + err := json.Unmarshal(event.Data, p) + if err != nil { + return errors.ThrowInternal(err, "EVENT-7JS9d", "unable to unmarshal data") + } + return nil +} diff --git a/internal/iam/repository/eventsourcing/model/password_age_policy_test.go b/internal/iam/repository/eventsourcing/model/password_age_policy_test.go new file mode 100644 index 0000000000..6e3b9132b3 --- /dev/null +++ b/internal/iam/repository/eventsourcing/model/password_age_policy_test.go @@ -0,0 +1,128 @@ +package model + +import ( + "encoding/json" + es_models "github.com/caos/zitadel/internal/eventstore/models" + "testing" +) + +func TestPasswordAgePolicyChanges(t *testing.T) { + type args struct { + existing *PasswordAgePolicy + new *PasswordAgePolicy + } + type res struct { + changesLen int + } + tests := []struct { + name string + args args + res res + }{ + { + name: "age policy all attributes change", + args: args{ + existing: &PasswordAgePolicy{MaxAgeDays: 365, ExpireWarnDays: 5}, + new: &PasswordAgePolicy{MaxAgeDays: 730, ExpireWarnDays: 10}, + }, + res: res{ + changesLen: 2, + }, + }, + { + name: "no changes", + args: args{ + existing: &PasswordAgePolicy{MaxAgeDays: 10, ExpireWarnDays: 10}, + new: &PasswordAgePolicy{MaxAgeDays: 10, ExpireWarnDays: 10}, + }, + res: res{ + changesLen: 0, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + changes := tt.args.existing.Changes(tt.args.new) + if len(changes) != tt.res.changesLen { + t.Errorf("got wrong changes len: expected: %v, actual: %v ", tt.res.changesLen, len(changes)) + } + }) + } +} + +func TestAppendAddPasswordAgePolicyEvent(t *testing.T) { + type args struct { + iam *IAM + policy *PasswordAgePolicy + event *es_models.Event + } + tests := []struct { + name string + args args + result *IAM + }{ + { + name: "append add password age policy event", + args: args{ + iam: new(IAM), + policy: &PasswordAgePolicy{MaxAgeDays: 10, ExpireWarnDays: 10}, + event: new(es_models.Event), + }, + result: &IAM{DefaultPasswordAgePolicy: &PasswordAgePolicy{MaxAgeDays: 10, ExpireWarnDays: 10}}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.args.policy != nil { + data, _ := json.Marshal(tt.args.policy) + tt.args.event.Data = data + } + tt.args.iam.appendAddPasswordAgePolicyEvent(tt.args.event) + if tt.result.DefaultPasswordAgePolicy.MaxAgeDays != tt.args.iam.DefaultPasswordAgePolicy.MaxAgeDays { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.DefaultPasswordAgePolicy.MaxAgeDays, tt.args.iam.DefaultPasswordAgePolicy.MaxAgeDays) + } + if tt.result.DefaultPasswordAgePolicy.ExpireWarnDays != tt.args.iam.DefaultPasswordAgePolicy.ExpireWarnDays { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.DefaultPasswordAgePolicy.ExpireWarnDays, tt.args.iam.DefaultPasswordAgePolicy.ExpireWarnDays) + } + }) + } +} + +func TestAppendChangePasswordAgePolicyEvent(t *testing.T) { + type args struct { + iam *IAM + policy *PasswordAgePolicy + event *es_models.Event + } + tests := []struct { + name string + args args + result *IAM + }{ + { + name: "append change password age policy event", + args: args{ + iam: &IAM{DefaultPasswordAgePolicy: &PasswordAgePolicy{ + MaxAgeDays: 10, + }}, + policy: &PasswordAgePolicy{MaxAgeDays: 5}, + event: &es_models.Event{}, + }, + result: &IAM{DefaultPasswordAgePolicy: &PasswordAgePolicy{ + MaxAgeDays: 5, + }}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.args.policy != nil { + data, _ := json.Marshal(tt.args.policy) + tt.args.event.Data = data + } + tt.args.iam.appendChangePasswordAgePolicyEvent(tt.args.event) + if tt.result.DefaultPasswordAgePolicy.MaxAgeDays != tt.args.iam.DefaultPasswordAgePolicy.MaxAgeDays { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.DefaultPasswordAgePolicy.MaxAgeDays, tt.args.iam.DefaultPasswordAgePolicy.MaxAgeDays) + } + }) + } +} diff --git a/internal/policy/repository/eventsourcing/model_complexity.go b/internal/iam/repository/eventsourcing/model/password_complexity_policy.go similarity index 54% rename from internal/policy/repository/eventsourcing/model_complexity.go rename to internal/iam/repository/eventsourcing/model/password_complexity_policy.go index 0c49a1c8e8..37dc2db784 100644 --- a/internal/policy/repository/eventsourcing/model_complexity.go +++ b/internal/iam/repository/eventsourcing/model/password_complexity_policy.go @@ -1,22 +1,16 @@ -package eventsourcing +package model import ( "encoding/json" - - "github.com/caos/logging" + "github.com/caos/zitadel/internal/errors" "github.com/caos/zitadel/internal/eventstore/models" es_models "github.com/caos/zitadel/internal/eventstore/models" - "github.com/caos/zitadel/internal/policy/model" -) - -const ( - policyComplexityVersion = "v1" + iam_model "github.com/caos/zitadel/internal/iam/model" ) type PasswordComplexityPolicy struct { models.ObjectRoot - Description string `json:"description,omitempty"` State int32 `json:"-"` MinLength uint64 `json:"minLength"` HasLowercase bool `json:"hasLowercase"` @@ -25,11 +19,33 @@ type PasswordComplexityPolicy struct { HasSymbol bool `json:"hasSymbol"` } -func (p *PasswordComplexityPolicy) ComplexityChanges(changed *PasswordComplexityPolicy) map[string]interface{} { - changes := make(map[string]interface{}, 1) - if changed.Description != "" && p.Description != changed.Description { - changes["description"] = changed.Description +func PasswordComplexityPolicyFromModel(policy *iam_model.PasswordComplexityPolicy) *PasswordComplexityPolicy { + return &PasswordComplexityPolicy{ + ObjectRoot: policy.ObjectRoot, + State: int32(policy.State), + MinLength: policy.MinLength, + HasLowercase: policy.HasLowercase, + HasUppercase: policy.HasUppercase, + HasNumber: policy.HasNumber, + HasSymbol: policy.HasSymbol, } +} + +func PasswordComplexityPolicyToModel(policy *PasswordComplexityPolicy) *iam_model.PasswordComplexityPolicy { + return &iam_model.PasswordComplexityPolicy{ + ObjectRoot: policy.ObjectRoot, + State: iam_model.PolicyState(policy.State), + MinLength: policy.MinLength, + HasLowercase: policy.HasLowercase, + HasUppercase: policy.HasUppercase, + HasNumber: policy.HasNumber, + HasSymbol: policy.HasSymbol, + } +} + +func (p *PasswordComplexityPolicy) Changes(changed *PasswordComplexityPolicy) map[string]interface{} { + changes := make(map[string]interface{}, 1) + if p.MinLength != changed.MinLength { changes["minLength"] = changed.MinLength } @@ -48,51 +64,24 @@ func (p *PasswordComplexityPolicy) ComplexityChanges(changed *PasswordComplexity return changes } -func PasswordComplexityPolicyFromModel(policy *model.PasswordComplexityPolicy) *PasswordComplexityPolicy { - return &PasswordComplexityPolicy{ - ObjectRoot: policy.ObjectRoot, - Description: policy.Description, - State: int32(policy.State), - MinLength: policy.MinLength, - HasLowercase: policy.HasLowercase, - HasUppercase: policy.HasUppercase, - HasNumber: policy.HasNumber, - HasSymbol: policy.HasSymbol, - } -} - -func PasswordComplexityPolicyToModel(policy *PasswordComplexityPolicy) *model.PasswordComplexityPolicy { - return &model.PasswordComplexityPolicy{ - ObjectRoot: policy.ObjectRoot, - Description: policy.Description, - State: model.PolicyState(policy.State), - MinLength: policy.MinLength, - HasLowercase: policy.HasLowercase, - HasUppercase: policy.HasUppercase, - HasNumber: policy.HasNumber, - HasSymbol: policy.HasSymbol, - } -} - -func (p *PasswordComplexityPolicy) AppendEvents(events ...*es_models.Event) error { - for _, event := range events { - if err := p.AppendEvent(event); err != nil { - return err - } +func (i *IAM) appendAddPasswordComplexityPolicyEvent(event *es_models.Event) error { + i.DefaultPasswordComplexityPolicy = new(PasswordComplexityPolicy) + err := i.DefaultPasswordComplexityPolicy.SetData(event) + if err != nil { + return err } + i.DefaultPasswordComplexityPolicy.ObjectRoot.CreationDate = event.CreationDate return nil } -func (p *PasswordComplexityPolicy) AppendEvent(event *es_models.Event) error { - p.ObjectRoot.AppendEvent(event) +func (i *IAM) appendChangePasswordComplexityPolicyEvent(event *es_models.Event) error { + return i.DefaultPasswordComplexityPolicy.SetData(event) +} - switch event.Type { - case model.PasswordComplexityPolicyAdded, model.PasswordComplexityPolicyChanged: - if err := json.Unmarshal(event.Data, p); err != nil { - logging.Log("EVEN-idl93").WithError(err).Error("could not unmarshal event data") - return err - } - return nil +func (p *PasswordComplexityPolicy) SetData(event *es_models.Event) error { + err := json.Unmarshal(event.Data, p) + if err != nil { + return errors.ThrowInternal(err, "EVENT-7JS9d", "unable to unmarshal data") } return nil } diff --git a/internal/iam/repository/eventsourcing/model/password_complexity_policy_test.go b/internal/iam/repository/eventsourcing/model/password_complexity_policy_test.go new file mode 100644 index 0000000000..7ea90dc279 --- /dev/null +++ b/internal/iam/repository/eventsourcing/model/password_complexity_policy_test.go @@ -0,0 +1,137 @@ +package model + +import ( + "encoding/json" + es_models "github.com/caos/zitadel/internal/eventstore/models" + "testing" +) + +func TestPasswordComplexityPolicyChanges(t *testing.T) { + type args struct { + existing *PasswordComplexityPolicy + new *PasswordComplexityPolicy + } + type res struct { + changesLen int + } + tests := []struct { + name string + args args + res res + }{ + { + name: "loginpolicy all attributes change", + args: args{ + existing: &PasswordComplexityPolicy{MinLength: 10, HasUppercase: true, HasLowercase: true, HasNumber: true, HasSymbol: true}, + new: &PasswordComplexityPolicy{MinLength: 5, HasUppercase: false, HasLowercase: false, HasNumber: false, HasSymbol: false}, + }, + res: res{ + changesLen: 5, + }, + }, + { + name: "no changes", + args: args{ + existing: &PasswordComplexityPolicy{MinLength: 10, HasUppercase: true, HasLowercase: true, HasNumber: true, HasSymbol: true}, + new: &PasswordComplexityPolicy{MinLength: 10, HasUppercase: true, HasLowercase: true, HasNumber: true, HasSymbol: true}, + }, + res: res{ + changesLen: 0, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + changes := tt.args.existing.Changes(tt.args.new) + if len(changes) != tt.res.changesLen { + t.Errorf("got wrong changes len: expected: %v, actual: %v ", tt.res.changesLen, len(changes)) + } + }) + } +} + +func TestAppendAddPasswordComplexityPolicyEvent(t *testing.T) { + type args struct { + iam *IAM + policy *PasswordComplexityPolicy + event *es_models.Event + } + tests := []struct { + name string + args args + result *IAM + }{ + { + name: "append add password complexity policy event", + args: args{ + iam: new(IAM), + policy: &PasswordComplexityPolicy{MinLength: 10, HasUppercase: true, HasLowercase: true, HasNumber: true, HasSymbol: true}, + event: new(es_models.Event), + }, + result: &IAM{DefaultPasswordComplexityPolicy: &PasswordComplexityPolicy{MinLength: 10, HasUppercase: true, HasLowercase: true, HasNumber: true, HasSymbol: true}}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.args.policy != nil { + data, _ := json.Marshal(tt.args.policy) + tt.args.event.Data = data + } + tt.args.iam.appendAddPasswordComplexityPolicyEvent(tt.args.event) + if tt.result.DefaultPasswordComplexityPolicy.MinLength != tt.args.iam.DefaultPasswordComplexityPolicy.MinLength { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.DefaultPasswordComplexityPolicy.MinLength, tt.args.iam.DefaultPasswordComplexityPolicy.MinLength) + } + if tt.result.DefaultPasswordComplexityPolicy.HasUppercase != tt.args.iam.DefaultPasswordComplexityPolicy.HasUppercase { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.DefaultPasswordComplexityPolicy.HasUppercase, tt.args.iam.DefaultPasswordComplexityPolicy.HasUppercase) + } + if tt.result.DefaultPasswordComplexityPolicy.HasLowercase != tt.args.iam.DefaultPasswordComplexityPolicy.HasLowercase { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.DefaultPasswordComplexityPolicy.HasLowercase, tt.args.iam.DefaultPasswordComplexityPolicy.HasLowercase) + } + if tt.result.DefaultPasswordComplexityPolicy.HasNumber != tt.args.iam.DefaultPasswordComplexityPolicy.HasNumber { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.DefaultPasswordComplexityPolicy.HasNumber, tt.args.iam.DefaultPasswordComplexityPolicy.HasNumber) + } + if tt.result.DefaultPasswordComplexityPolicy.HasSymbol != tt.args.iam.DefaultPasswordComplexityPolicy.HasSymbol { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.DefaultPasswordComplexityPolicy.HasSymbol, tt.args.iam.DefaultPasswordComplexityPolicy.HasSymbol) + } + }) + } +} + +func TestAppendChangePasswordComplexityPolicyEvent(t *testing.T) { + type args struct { + iam *IAM + policy *PasswordComplexityPolicy + event *es_models.Event + } + tests := []struct { + name string + args args + result *IAM + }{ + { + name: "append change password complexity policy event", + args: args{ + iam: &IAM{DefaultPasswordComplexityPolicy: &PasswordComplexityPolicy{ + MinLength: 10, + }}, + policy: &PasswordComplexityPolicy{MinLength: 5}, + event: &es_models.Event{}, + }, + result: &IAM{DefaultPasswordComplexityPolicy: &PasswordComplexityPolicy{ + MinLength: 5, + }}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.args.policy != nil { + data, _ := json.Marshal(tt.args.policy) + tt.args.event.Data = data + } + tt.args.iam.appendChangePasswordComplexityPolicyEvent(tt.args.event) + if tt.result.DefaultPasswordComplexityPolicy.MinLength != tt.args.iam.DefaultPasswordComplexityPolicy.MinLength { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.DefaultPasswordComplexityPolicy.MinLength, tt.args.iam.DefaultPasswordComplexityPolicy.MinLength) + } + }) + } +} diff --git a/internal/iam/repository/eventsourcing/model/password_lockout_policy.go b/internal/iam/repository/eventsourcing/model/password_lockout_policy.go new file mode 100644 index 0000000000..e4878c82f9 --- /dev/null +++ b/internal/iam/repository/eventsourcing/model/password_lockout_policy.go @@ -0,0 +1,69 @@ +package model + +import ( + "encoding/json" + "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/eventstore/models" + es_models "github.com/caos/zitadel/internal/eventstore/models" + iam_model "github.com/caos/zitadel/internal/iam/model" +) + +type PasswordLockoutPolicy struct { + models.ObjectRoot + + State int32 `json:"-"` + MaxAttempts uint64 `json:"maxAttempts"` + ShowLockOutFailures bool `json:"showLockOutFailures"` +} + +func PasswordLockoutPolicyFromModel(policy *iam_model.PasswordLockoutPolicy) *PasswordLockoutPolicy { + return &PasswordLockoutPolicy{ + ObjectRoot: policy.ObjectRoot, + State: int32(policy.State), + MaxAttempts: policy.MaxAttempts, + ShowLockOutFailures: policy.ShowLockOutFailures, + } +} + +func PasswordLockoutPolicyToModel(policy *PasswordLockoutPolicy) *iam_model.PasswordLockoutPolicy { + return &iam_model.PasswordLockoutPolicy{ + ObjectRoot: policy.ObjectRoot, + State: iam_model.PolicyState(policy.State), + MaxAttempts: policy.MaxAttempts, + ShowLockOutFailures: policy.ShowLockOutFailures, + } +} + +func (p *PasswordLockoutPolicy) Changes(changed *PasswordLockoutPolicy) map[string]interface{} { + changes := make(map[string]interface{}, 2) + + if p.MaxAttempts != changed.MaxAttempts { + changes["maxAttempts"] = changed.MaxAttempts + } + if p.ShowLockOutFailures != changed.ShowLockOutFailures { + changes["showLockOutFailures"] = changed.ShowLockOutFailures + } + return changes +} + +func (i *IAM) appendAddPasswordLockoutPolicyEvent(event *es_models.Event) error { + i.DefaultPasswordLockoutPolicy = new(PasswordLockoutPolicy) + err := i.DefaultPasswordLockoutPolicy.SetData(event) + if err != nil { + return err + } + i.DefaultPasswordLockoutPolicy.ObjectRoot.CreationDate = event.CreationDate + return nil +} + +func (i *IAM) appendChangePasswordLockoutPolicyEvent(event *es_models.Event) error { + return i.DefaultPasswordLockoutPolicy.SetData(event) +} + +func (p *PasswordLockoutPolicy) SetData(event *es_models.Event) error { + err := json.Unmarshal(event.Data, p) + if err != nil { + return errors.ThrowInternal(err, "EVENT-7JS9d", "unable to unmarshal data") + } + return nil +} diff --git a/internal/iam/repository/eventsourcing/model/password_lockout_policy_test.go b/internal/iam/repository/eventsourcing/model/password_lockout_policy_test.go new file mode 100644 index 0000000000..78e499da38 --- /dev/null +++ b/internal/iam/repository/eventsourcing/model/password_lockout_policy_test.go @@ -0,0 +1,128 @@ +package model + +import ( + "encoding/json" + es_models "github.com/caos/zitadel/internal/eventstore/models" + "testing" +) + +func TestPasswordLockoutPolicyChanges(t *testing.T) { + type args struct { + existing *PasswordLockoutPolicy + new *PasswordLockoutPolicy + } + type res struct { + changesLen int + } + tests := []struct { + name string + args args + res res + }{ + { + name: "lockout policy all attributes change", + args: args{ + existing: &PasswordLockoutPolicy{MaxAttempts: 365, ShowLockOutFailures: true}, + new: &PasswordLockoutPolicy{MaxAttempts: 730, ShowLockOutFailures: false}, + }, + res: res{ + changesLen: 2, + }, + }, + { + name: "no changes", + args: args{ + existing: &PasswordLockoutPolicy{MaxAttempts: 10, ShowLockOutFailures: true}, + new: &PasswordLockoutPolicy{MaxAttempts: 10, ShowLockOutFailures: true}, + }, + res: res{ + changesLen: 0, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + changes := tt.args.existing.Changes(tt.args.new) + if len(changes) != tt.res.changesLen { + t.Errorf("got wrong changes len: expected: %v, actual: %v ", tt.res.changesLen, len(changes)) + } + }) + } +} + +func TestAppendAddPasswordLockoutPolicyEvent(t *testing.T) { + type args struct { + iam *IAM + policy *PasswordLockoutPolicy + event *es_models.Event + } + tests := []struct { + name string + args args + result *IAM + }{ + { + name: "append add password lockout policy event", + args: args{ + iam: new(IAM), + policy: &PasswordLockoutPolicy{MaxAttempts: 10, ShowLockOutFailures: true}, + event: new(es_models.Event), + }, + result: &IAM{DefaultPasswordLockoutPolicy: &PasswordLockoutPolicy{MaxAttempts: 10, ShowLockOutFailures: true}}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.args.policy != nil { + data, _ := json.Marshal(tt.args.policy) + tt.args.event.Data = data + } + tt.args.iam.appendAddPasswordLockoutPolicyEvent(tt.args.event) + if tt.result.DefaultPasswordLockoutPolicy.MaxAttempts != tt.args.iam.DefaultPasswordLockoutPolicy.MaxAttempts { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.DefaultPasswordLockoutPolicy.MaxAttempts, tt.args.iam.DefaultPasswordLockoutPolicy.MaxAttempts) + } + if tt.result.DefaultPasswordLockoutPolicy.ShowLockOutFailures != tt.args.iam.DefaultPasswordLockoutPolicy.ShowLockOutFailures { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.DefaultPasswordLockoutPolicy.ShowLockOutFailures, tt.args.iam.DefaultPasswordLockoutPolicy.ShowLockOutFailures) + } + }) + } +} + +func TestAppendChangePasswordLockoutPolicyEvent(t *testing.T) { + type args struct { + iam *IAM + policy *PasswordLockoutPolicy + event *es_models.Event + } + tests := []struct { + name string + args args + result *IAM + }{ + { + name: "append change password lockout policy event", + args: args{ + iam: &IAM{DefaultPasswordLockoutPolicy: &PasswordLockoutPolicy{ + MaxAttempts: 10, + }}, + policy: &PasswordLockoutPolicy{MaxAttempts: 5}, + event: &es_models.Event{}, + }, + result: &IAM{DefaultPasswordLockoutPolicy: &PasswordLockoutPolicy{ + MaxAttempts: 5, + }}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.args.policy != nil { + data, _ := json.Marshal(tt.args.policy) + tt.args.event.Data = data + } + tt.args.iam.appendChangePasswordLockoutPolicyEvent(tt.args.event) + if tt.result.DefaultPasswordLockoutPolicy.MaxAttempts != tt.args.iam.DefaultPasswordLockoutPolicy.MaxAttempts { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.DefaultPasswordLockoutPolicy.MaxAttempts, tt.args.iam.DefaultPasswordLockoutPolicy.MaxAttempts) + } + }) + } +} diff --git a/internal/iam/repository/eventsourcing/model/types.go b/internal/iam/repository/eventsourcing/model/types.go index 94a26b417b..71b1fbe0b4 100644 --- a/internal/iam/repository/eventsourcing/model/types.go +++ b/internal/iam/repository/eventsourcing/model/types.go @@ -30,4 +30,16 @@ const ( LoginPolicyIDPProviderAdded models.EventType = "iam.policy.login.idpprovider.added" LoginPolicyIDPProviderRemoved models.EventType = "iam.policy.login.idpprovider.removed" LoginPolicyIDPProviderCascadeRemoved models.EventType = "iam.policy.login.idpprovider.cascade.removed" + + PasswordComplexityPolicyAdded models.EventType = "iam.policy.password.complexity.added" + PasswordComplexityPolicyChanged models.EventType = "iam.policy.password.complexity.changed" + + PasswordAgePolicyAdded models.EventType = "iam.policy.password.age.added" + PasswordAgePolicyChanged models.EventType = "iam.policy.password.age.changed" + + PasswordLockoutPolicyAdded models.EventType = "iam.policy.password.lockout.added" + PasswordLockoutPolicyChanged models.EventType = "iam.policy.password.lockout.changed" + + OrgIAMPolicyAdded models.EventType = "iam.policy.org.iam.added" + OrgIAMPolicyChanged models.EventType = "iam.policy.org.iam.changed" ) diff --git a/internal/iam/repository/view/model/org_iam_policy.go b/internal/iam/repository/view/model/org_iam_policy.go new file mode 100644 index 0000000000..ca2aca0910 --- /dev/null +++ b/internal/iam/repository/view/model/org_iam_policy.go @@ -0,0 +1,78 @@ +package model + +import ( + "encoding/json" + org_es_model "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" + "time" + + es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + + "github.com/caos/logging" + caos_errs "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/iam/model" +) + +const ( + OrgIAMPolicyKeyAggregateID = "aggregate_id" +) + +type OrgIAMPolicyView struct { + AggregateID string `json:"-" gorm:"column:aggregate_id;primary_key"` + CreationDate time.Time `json:"-" gorm:"column:creation_date"` + ChangeDate time.Time `json:"-" gorm:"column:change_date"` + State int32 `json:"-" gorm:"column:org_iam_policy_state"` + + UserLoginMustBeDomain bool `json:"userLoginMustBeDomain" gorm:"column:user_login_must_be_domain"` + Default bool `json:"-" gorm:"-"` + + Sequence uint64 `json:"-" gorm:"column:sequence"` +} + +func OrgIAMViewFromModel(policy *model.OrgIAMPolicyView) *OrgIAMPolicyView { + return &OrgIAMPolicyView{ + AggregateID: policy.AggregateID, + Sequence: policy.Sequence, + CreationDate: policy.CreationDate, + ChangeDate: policy.ChangeDate, + Default: policy.Default, + UserLoginMustBeDomain: policy.UserLoginMustBeDomain, + } +} + +func OrgIAMViewToModel(policy *OrgIAMPolicyView) *model.OrgIAMPolicyView { + return &model.OrgIAMPolicyView{ + AggregateID: policy.AggregateID, + Sequence: policy.Sequence, + CreationDate: policy.CreationDate, + ChangeDate: policy.ChangeDate, + UserLoginMustBeDomain: policy.UserLoginMustBeDomain, + Default: policy.Default, + } +} + +func (i *OrgIAMPolicyView) AppendEvent(event *models.Event) (err error) { + i.Sequence = event.Sequence + i.ChangeDate = event.CreationDate + switch event.Type { + case es_model.OrgIAMPolicyAdded, org_es_model.OrgIAMPolicyAdded: + i.setRootData(event) + i.CreationDate = event.CreationDate + err = i.SetData(event) + case es_model.OrgIAMPolicyChanged, org_es_model.OrgIAMPolicyChanged: + err = i.SetData(event) + } + return err +} + +func (r *OrgIAMPolicyView) setRootData(event *models.Event) { + r.AggregateID = event.AggregateID +} + +func (r *OrgIAMPolicyView) SetData(event *models.Event) error { + if err := json.Unmarshal(event.Data, r); err != nil { + logging.Log("EVEN-Dmi9g").WithError(err).Error("could not unmarshal event data") + return caos_errs.ThrowInternal(err, "MODEL-Hs8uf", "Could not unmarshal data") + } + return nil +} diff --git a/internal/iam/repository/view/model/org_iam_policy_query.go b/internal/iam/repository/view/model/org_iam_policy_query.go new file mode 100644 index 0000000000..da2f508dbb --- /dev/null +++ b/internal/iam/repository/view/model/org_iam_policy_query.go @@ -0,0 +1,59 @@ +package model + +import ( + iam_model "github.com/caos/zitadel/internal/iam/model" + global_model "github.com/caos/zitadel/internal/model" + "github.com/caos/zitadel/internal/view/repository" +) + +type OrgIAMPolicySearchRequest iam_model.OrgIAMPolicySearchRequest +type OrgIAMPolicySearchQuery iam_model.OrgIAMPolicySearchQuery +type OrgIAMPolicySearchKey iam_model.OrgIAMPolicySearchKey + +func (req OrgIAMPolicySearchRequest) GetLimit() uint64 { + return req.Limit +} + +func (req OrgIAMPolicySearchRequest) GetOffset() uint64 { + return req.Offset +} + +func (req OrgIAMPolicySearchRequest) GetSortingColumn() repository.ColumnKey { + if req.SortingColumn == iam_model.OrgIAMPolicySearchKeyUnspecified { + return nil + } + return OrgIAMPolicySearchKey(req.SortingColumn) +} + +func (req OrgIAMPolicySearchRequest) GetAsc() bool { + return req.Asc +} + +func (req OrgIAMPolicySearchRequest) GetQueries() []repository.SearchQuery { + result := make([]repository.SearchQuery, len(req.Queries)) + for i, q := range req.Queries { + result[i] = OrgIAMPolicySearchQuery{Key: q.Key, Value: q.Value, Method: q.Method} + } + return result +} + +func (req OrgIAMPolicySearchQuery) GetKey() repository.ColumnKey { + return OrgIAMPolicySearchKey(req.Key) +} + +func (req OrgIAMPolicySearchQuery) GetMethod() global_model.SearchMethod { + return req.Method +} + +func (req OrgIAMPolicySearchQuery) GetValue() interface{} { + return req.Value +} + +func (key OrgIAMPolicySearchKey) ToColumnName() string { + switch iam_model.OrgIAMPolicySearchKey(key) { + case iam_model.OrgIAMPolicySearchKeyAggregateID: + return OrgIAMPolicyKeyAggregateID + default: + return "" + } +} diff --git a/internal/iam/repository/view/model/password_age_policy.go b/internal/iam/repository/view/model/password_age_policy.go new file mode 100644 index 0000000000..99a8bafa7e --- /dev/null +++ b/internal/iam/repository/view/model/password_age_policy.go @@ -0,0 +1,81 @@ +package model + +import ( + "encoding/json" + org_es_model "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" + "time" + + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + + "github.com/caos/logging" + caos_errs "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/iam/model" +) + +const ( + PasswordAgeKeyAggregateID = "aggregate_id" +) + +type PasswordAgePolicyView struct { + AggregateID string `json:"-" gorm:"column:aggregate_id;primary_key"` + CreationDate time.Time `json:"-" gorm:"column:creation_date"` + ChangeDate time.Time `json:"-" gorm:"column:change_date"` + State int32 `json:"-" gorm:"column:age_policy_state"` + + MaxAgeDays uint64 `json:"maxAgeDays" gorm:"column:max_age_days"` + ExpireWarnDays uint64 `json:"expireWarnDays" gorm:"column:expire_warn_days"` + Default bool `json:"-" gorm:"-"` + + Sequence uint64 `json:"-" gorm:"column:sequence"` +} + +func PasswordAgeViewFromModel(policy *model.PasswordAgePolicyView) *PasswordAgePolicyView { + return &PasswordAgePolicyView{ + AggregateID: policy.AggregateID, + Sequence: policy.Sequence, + CreationDate: policy.CreationDate, + ChangeDate: policy.ChangeDate, + MaxAgeDays: policy.MaxAgeDays, + ExpireWarnDays: policy.ExpireWarnDays, + Default: policy.Default, + } +} + +func PasswordAgeViewToModel(policy *PasswordAgePolicyView) *model.PasswordAgePolicyView { + return &model.PasswordAgePolicyView{ + AggregateID: policy.AggregateID, + Sequence: policy.Sequence, + CreationDate: policy.CreationDate, + ChangeDate: policy.ChangeDate, + MaxAgeDays: policy.MaxAgeDays, + ExpireWarnDays: policy.ExpireWarnDays, + Default: policy.Default, + } +} + +func (i *PasswordAgePolicyView) AppendEvent(event *models.Event) (err error) { + i.Sequence = event.Sequence + i.ChangeDate = event.CreationDate + switch event.Type { + case iam_es_model.PasswordAgePolicyAdded, org_es_model.PasswordAgePolicyAdded: + i.setRootData(event) + i.CreationDate = event.CreationDate + err = i.SetData(event) + case iam_es_model.PasswordAgePolicyChanged, org_es_model.PasswordAgePolicyChanged: + err = i.SetData(event) + } + return err +} + +func (r *PasswordAgePolicyView) setRootData(event *models.Event) { + r.AggregateID = event.AggregateID +} + +func (r *PasswordAgePolicyView) SetData(event *models.Event) error { + if err := json.Unmarshal(event.Data, r); err != nil { + logging.Log("EVEN-gH9os").WithError(err).Error("could not unmarshal event data") + return caos_errs.ThrowInternal(err, "MODEL-Hs8uf", "Could not unmarshal data") + } + return nil +} diff --git a/internal/iam/repository/view/model/password_age_policy_query.go b/internal/iam/repository/view/model/password_age_policy_query.go new file mode 100644 index 0000000000..41b160bab3 --- /dev/null +++ b/internal/iam/repository/view/model/password_age_policy_query.go @@ -0,0 +1,59 @@ +package model + +import ( + iam_model "github.com/caos/zitadel/internal/iam/model" + global_model "github.com/caos/zitadel/internal/model" + "github.com/caos/zitadel/internal/view/repository" +) + +type PasswordAgePolicySearchRequest iam_model.PasswordAgePolicySearchRequest +type PasswordAgePolicySearchQuery iam_model.PasswordAgePolicySearchQuery +type PasswordAgePolicySearchKey iam_model.PasswordAgePolicySearchKey + +func (req PasswordAgePolicySearchRequest) GetLimit() uint64 { + return req.Limit +} + +func (req PasswordAgePolicySearchRequest) GetOffset() uint64 { + return req.Offset +} + +func (req PasswordAgePolicySearchRequest) GetSortingColumn() repository.ColumnKey { + if req.SortingColumn == iam_model.PasswordAgePolicySearchKeyUnspecified { + return nil + } + return PasswordAgePolicySearchKey(req.SortingColumn) +} + +func (req PasswordAgePolicySearchRequest) GetAsc() bool { + return req.Asc +} + +func (req PasswordAgePolicySearchRequest) GetQueries() []repository.SearchQuery { + result := make([]repository.SearchQuery, len(req.Queries)) + for i, q := range req.Queries { + result[i] = PasswordAgePolicySearchQuery{Key: q.Key, Value: q.Value, Method: q.Method} + } + return result +} + +func (req PasswordAgePolicySearchQuery) GetKey() repository.ColumnKey { + return PasswordAgePolicySearchKey(req.Key) +} + +func (req PasswordAgePolicySearchQuery) GetMethod() global_model.SearchMethod { + return req.Method +} + +func (req PasswordAgePolicySearchQuery) GetValue() interface{} { + return req.Value +} + +func (key PasswordAgePolicySearchKey) ToColumnName() string { + switch iam_model.PasswordAgePolicySearchKey(key) { + case iam_model.PasswordAgePolicySearchKeyAggregateID: + return PasswordAgeKeyAggregateID + default: + return "" + } +} diff --git a/internal/iam/repository/view/model/password_complexity_policy.go b/internal/iam/repository/view/model/password_complexity_policy.go new file mode 100644 index 0000000000..dd52e57657 --- /dev/null +++ b/internal/iam/repository/view/model/password_complexity_policy.go @@ -0,0 +1,90 @@ +package model + +import ( + "encoding/json" + org_es_model "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" + "time" + + es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + + "github.com/caos/logging" + caos_errs "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/iam/model" +) + +const ( + PasswordComplexityKeyAggregateID = "aggregate_id" +) + +type PasswordComplexityPolicyView struct { + AggregateID string `json:"-" gorm:"column:aggregate_id;primary_key"` + CreationDate time.Time `json:"-" gorm:"column:creation_date"` + ChangeDate time.Time `json:"-" gorm:"column:change_date"` + State int32 `json:"-" gorm:"column:complexity_policy_state"` + + MinLength uint64 `json:"minLength" gorm:"column:min_length"` + HasLowercase bool `json:"hasLowercase" gorm:"column:has_lowercase"` + HasUppercase bool `json:"hasUppercase" gorm:"column:has_uppercase"` + HasSymbol bool `json:"hasSymbol" gorm:"column:has_symbol"` + HasNumber bool `json:"hasNumber" gorm:"column:has_number"` + Default bool `json:"-" gorm:"-"` + + Sequence uint64 `json:"-" gorm:"column:sequence"` +} + +func PasswordComplexityViewFromModel(policy *model.PasswordComplexityPolicyView) *PasswordComplexityPolicyView { + return &PasswordComplexityPolicyView{ + AggregateID: policy.AggregateID, + Sequence: policy.Sequence, + CreationDate: policy.CreationDate, + ChangeDate: policy.ChangeDate, + MinLength: policy.MinLength, + HasLowercase: policy.HasLowercase, + HasUppercase: policy.HasUppercase, + HasSymbol: policy.HasSymbol, + HasNumber: policy.HasNumber, + Default: policy.Default, + } +} + +func PasswordComplexityViewToModel(policy *PasswordComplexityPolicyView) *model.PasswordComplexityPolicyView { + return &model.PasswordComplexityPolicyView{ + AggregateID: policy.AggregateID, + Sequence: policy.Sequence, + CreationDate: policy.CreationDate, + ChangeDate: policy.ChangeDate, + MinLength: policy.MinLength, + HasLowercase: policy.HasLowercase, + HasUppercase: policy.HasUppercase, + HasSymbol: policy.HasSymbol, + HasNumber: policy.HasNumber, + Default: policy.Default, + } +} + +func (i *PasswordComplexityPolicyView) AppendEvent(event *models.Event) (err error) { + i.Sequence = event.Sequence + i.ChangeDate = event.CreationDate + switch event.Type { + case es_model.PasswordComplexityPolicyAdded, org_es_model.PasswordComplexityPolicyAdded: + i.setRootData(event) + i.CreationDate = event.CreationDate + err = i.SetData(event) + case es_model.PasswordComplexityPolicyChanged, org_es_model.PasswordComplexityPolicyChanged: + err = i.SetData(event) + } + return err +} + +func (r *PasswordComplexityPolicyView) setRootData(event *models.Event) { + r.AggregateID = event.AggregateID +} + +func (r *PasswordComplexityPolicyView) SetData(event *models.Event) error { + if err := json.Unmarshal(event.Data, r); err != nil { + logging.Log("EVEN-Dmi9g").WithError(err).Error("could not unmarshal event data") + return caos_errs.ThrowInternal(err, "MODEL-Hs8uf", "Could not unmarshal data") + } + return nil +} diff --git a/internal/iam/repository/view/model/password_complexity_policy_query.go b/internal/iam/repository/view/model/password_complexity_policy_query.go new file mode 100644 index 0000000000..74b50977d2 --- /dev/null +++ b/internal/iam/repository/view/model/password_complexity_policy_query.go @@ -0,0 +1,59 @@ +package model + +import ( + iam_model "github.com/caos/zitadel/internal/iam/model" + global_model "github.com/caos/zitadel/internal/model" + "github.com/caos/zitadel/internal/view/repository" +) + +type PasswordComplexityPolicySearchRequest iam_model.PasswordComplexityPolicySearchRequest +type PasswordComplexityPolicySearchQuery iam_model.PasswordComplexityPolicySearchQuery +type PasswordComplexityPolicySearchKey iam_model.PasswordComplexityPolicySearchKey + +func (req PasswordComplexityPolicySearchRequest) GetLimit() uint64 { + return req.Limit +} + +func (req PasswordComplexityPolicySearchRequest) GetOffset() uint64 { + return req.Offset +} + +func (req PasswordComplexityPolicySearchRequest) GetSortingColumn() repository.ColumnKey { + if req.SortingColumn == iam_model.PasswordComplexityPolicySearchKeyUnspecified { + return nil + } + return PasswordComplexityPolicySearchKey(req.SortingColumn) +} + +func (req PasswordComplexityPolicySearchRequest) GetAsc() bool { + return req.Asc +} + +func (req PasswordComplexityPolicySearchRequest) GetQueries() []repository.SearchQuery { + result := make([]repository.SearchQuery, len(req.Queries)) + for i, q := range req.Queries { + result[i] = PasswordComplexityPolicySearchQuery{Key: q.Key, Value: q.Value, Method: q.Method} + } + return result +} + +func (req PasswordComplexityPolicySearchQuery) GetKey() repository.ColumnKey { + return PasswordComplexityPolicySearchKey(req.Key) +} + +func (req PasswordComplexityPolicySearchQuery) GetMethod() global_model.SearchMethod { + return req.Method +} + +func (req PasswordComplexityPolicySearchQuery) GetValue() interface{} { + return req.Value +} + +func (key PasswordComplexityPolicySearchKey) ToColumnName() string { + switch iam_model.PasswordComplexityPolicySearchKey(key) { + case iam_model.PasswordComplexityPolicySearchKeyAggregateID: + return PasswordComplexityKeyAggregateID + default: + return "" + } +} diff --git a/internal/iam/repository/view/model/password_lockout_policy.go b/internal/iam/repository/view/model/password_lockout_policy.go new file mode 100644 index 0000000000..6b73692257 --- /dev/null +++ b/internal/iam/repository/view/model/password_lockout_policy.go @@ -0,0 +1,81 @@ +package model + +import ( + "encoding/json" + org_es_model "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" + "time" + + es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + + "github.com/caos/logging" + caos_errs "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/iam/model" +) + +const ( + PasswordLockoutKeyAggregateID = "aggregate_id" +) + +type PasswordLockoutPolicyView struct { + AggregateID string `json:"-" gorm:"column:aggregate_id;primary_key"` + CreationDate time.Time `json:"-" gorm:"column:creation_date"` + ChangeDate time.Time `json:"-" gorm:"column:change_date"` + State int32 `json:"-" gorm:"column:lockout_policy_state"` + + MaxAttempts uint64 `json:"maxAttempts" gorm:"column:max_attempts"` + ShowLockOutFailures bool `json:"showLockOutFailures" gorm:"column:show_lockout_failures"` + Default bool `json:"-" gorm:"-"` + + Sequence uint64 `json:"-" gorm:"column:sequence"` +} + +func PasswordLockoutViewFromModel(policy *model.PasswordLockoutPolicyView) *PasswordLockoutPolicyView { + return &PasswordLockoutPolicyView{ + AggregateID: policy.AggregateID, + Sequence: policy.Sequence, + CreationDate: policy.CreationDate, + ChangeDate: policy.ChangeDate, + MaxAttempts: policy.MaxAttempts, + ShowLockOutFailures: policy.ShowLockOutFailures, + Default: policy.Default, + } +} + +func PasswordLockoutViewToModel(policy *PasswordLockoutPolicyView) *model.PasswordLockoutPolicyView { + return &model.PasswordLockoutPolicyView{ + AggregateID: policy.AggregateID, + Sequence: policy.Sequence, + CreationDate: policy.CreationDate, + ChangeDate: policy.ChangeDate, + MaxAttempts: policy.MaxAttempts, + ShowLockOutFailures: policy.ShowLockOutFailures, + Default: policy.Default, + } +} + +func (i *PasswordLockoutPolicyView) AppendEvent(event *models.Event) (err error) { + i.Sequence = event.Sequence + i.ChangeDate = event.CreationDate + switch event.Type { + case es_model.PasswordLockoutPolicyAdded, org_es_model.PasswordLockoutPolicyAdded: + i.setRootData(event) + i.CreationDate = event.CreationDate + err = i.SetData(event) + case es_model.PasswordLockoutPolicyChanged, org_es_model.PasswordLockoutPolicyChanged: + err = i.SetData(event) + } + return err +} + +func (r *PasswordLockoutPolicyView) setRootData(event *models.Event) { + r.AggregateID = event.AggregateID +} + +func (r *PasswordLockoutPolicyView) SetData(event *models.Event) error { + if err := json.Unmarshal(event.Data, r); err != nil { + logging.Log("EVEN-gHls0").WithError(err).Error("could not unmarshal event data") + return caos_errs.ThrowInternal(err, "MODEL-Hs8uf", "Could not unmarshal data") + } + return nil +} diff --git a/internal/iam/repository/view/model/password_lockout_policy_query.go b/internal/iam/repository/view/model/password_lockout_policy_query.go new file mode 100644 index 0000000000..c0c769de95 --- /dev/null +++ b/internal/iam/repository/view/model/password_lockout_policy_query.go @@ -0,0 +1,59 @@ +package model + +import ( + iam_model "github.com/caos/zitadel/internal/iam/model" + global_model "github.com/caos/zitadel/internal/model" + "github.com/caos/zitadel/internal/view/repository" +) + +type PasswordLockoutPolicySearchRequest iam_model.PasswordLockoutPolicySearchRequest +type PasswordLockoutPolicySearchQuery iam_model.PasswordLockoutPolicySearchQuery +type PasswordLockoutPolicySearchKey iam_model.PasswordLockoutPolicySearchKey + +func (req PasswordLockoutPolicySearchRequest) GetLimit() uint64 { + return req.Limit +} + +func (req PasswordLockoutPolicySearchRequest) GetOffset() uint64 { + return req.Offset +} + +func (req PasswordLockoutPolicySearchRequest) GetSortingColumn() repository.ColumnKey { + if req.SortingColumn == iam_model.PasswordLockoutPolicySearchKeyUnspecified { + return nil + } + return PasswordLockoutPolicySearchKey(req.SortingColumn) +} + +func (req PasswordLockoutPolicySearchRequest) GetAsc() bool { + return req.Asc +} + +func (req PasswordLockoutPolicySearchRequest) GetQueries() []repository.SearchQuery { + result := make([]repository.SearchQuery, len(req.Queries)) + for i, q := range req.Queries { + result[i] = PasswordLockoutPolicySearchQuery{Key: q.Key, Value: q.Value, Method: q.Method} + } + return result +} + +func (req PasswordLockoutPolicySearchQuery) GetKey() repository.ColumnKey { + return PasswordLockoutPolicySearchKey(req.Key) +} + +func (req PasswordLockoutPolicySearchQuery) GetMethod() global_model.SearchMethod { + return req.Method +} + +func (req PasswordLockoutPolicySearchQuery) GetValue() interface{} { + return req.Value +} + +func (key PasswordLockoutPolicySearchKey) ToColumnName() string { + switch iam_model.PasswordLockoutPolicySearchKey(key) { + case iam_model.PasswordLockoutPolicySearchKeyAggregateID: + return PasswordLockoutKeyAggregateID + default: + return "" + } +} diff --git a/internal/iam/repository/view/org_iam_policy_view.go b/internal/iam/repository/view/org_iam_policy_view.go new file mode 100644 index 0000000000..322697ec2f --- /dev/null +++ b/internal/iam/repository/view/org_iam_policy_view.go @@ -0,0 +1,32 @@ +package view + +import ( + caos_errs "github.com/caos/zitadel/internal/errors" + iam_model "github.com/caos/zitadel/internal/iam/model" + "github.com/caos/zitadel/internal/iam/repository/view/model" + global_model "github.com/caos/zitadel/internal/model" + "github.com/caos/zitadel/internal/view/repository" + "github.com/jinzhu/gorm" +) + +func GetOrgIAMPolicyByAggregateID(db *gorm.DB, table, aggregateID string) (*model.OrgIAMPolicyView, error) { + policy := new(model.OrgIAMPolicyView) + userIDQuery := &model.OrgIAMPolicySearchQuery{Key: iam_model.OrgIAMPolicySearchKeyAggregateID, Value: aggregateID, Method: global_model.SearchMethodEquals} + query := repository.PrepareGetByQuery(table, userIDQuery) + err := query(db, policy) + if caos_errs.IsNotFound(err) { + return nil, caos_errs.ThrowNotFound(nil, "VIEW-5fi9s", "Errors.IAM.OrgIAMPolicy.NotExisting") + } + return policy, err +} + +func PutOrgIAMPolicy(db *gorm.DB, table string, policy *model.OrgIAMPolicyView) error { + save := repository.PrepareSave(table) + return save(db, policy) +} + +func DeleteOrgIAMPolicy(db *gorm.DB, table, aggregateID string) error { + delete := repository.PrepareDeleteByKey(table, model.OrgIAMPolicySearchKey(iam_model.OrgIAMPolicySearchKeyAggregateID), aggregateID) + + return delete(db) +} diff --git a/internal/iam/repository/view/password_age_policy_view.go b/internal/iam/repository/view/password_age_policy_view.go new file mode 100644 index 0000000000..1fbd8c0ca1 --- /dev/null +++ b/internal/iam/repository/view/password_age_policy_view.go @@ -0,0 +1,32 @@ +package view + +import ( + caos_errs "github.com/caos/zitadel/internal/errors" + iam_model "github.com/caos/zitadel/internal/iam/model" + "github.com/caos/zitadel/internal/iam/repository/view/model" + global_model "github.com/caos/zitadel/internal/model" + "github.com/caos/zitadel/internal/view/repository" + "github.com/jinzhu/gorm" +) + +func GetPasswordAgePolicyByAggregateID(db *gorm.DB, table, aggregateID string) (*model.PasswordAgePolicyView, error) { + policy := new(model.PasswordAgePolicyView) + userIDQuery := &model.PasswordAgePolicySearchQuery{Key: iam_model.PasswordAgePolicySearchKeyAggregateID, Value: aggregateID, Method: global_model.SearchMethodEquals} + query := repository.PrepareGetByQuery(table, userIDQuery) + err := query(db, policy) + if caos_errs.IsNotFound(err) { + return nil, caos_errs.ThrowNotFound(nil, "VIEW-Lso0cs", "Errors.IAM.PasswordAgePolicy.NotExisting") + } + return policy, err +} + +func PutPasswordAgePolicy(db *gorm.DB, table string, policy *model.PasswordAgePolicyView) error { + save := repository.PrepareSave(table) + return save(db, policy) +} + +func DeletePasswordAgePolicy(db *gorm.DB, table, aggregateID string) error { + delete := repository.PrepareDeleteByKey(table, model.PasswordAgePolicySearchKey(iam_model.PasswordAgePolicySearchKeyAggregateID), aggregateID) + + return delete(db) +} diff --git a/internal/iam/repository/view/password_complexity_policy_view.go b/internal/iam/repository/view/password_complexity_policy_view.go new file mode 100644 index 0000000000..938c73ff75 --- /dev/null +++ b/internal/iam/repository/view/password_complexity_policy_view.go @@ -0,0 +1,32 @@ +package view + +import ( + caos_errs "github.com/caos/zitadel/internal/errors" + iam_model "github.com/caos/zitadel/internal/iam/model" + "github.com/caos/zitadel/internal/iam/repository/view/model" + global_model "github.com/caos/zitadel/internal/model" + "github.com/caos/zitadel/internal/view/repository" + "github.com/jinzhu/gorm" +) + +func GetPasswordComplexityPolicyByAggregateID(db *gorm.DB, table, aggregateID string) (*model.PasswordComplexityPolicyView, error) { + policy := new(model.PasswordComplexityPolicyView) + userIDQuery := &model.PasswordComplexityPolicySearchQuery{Key: iam_model.PasswordComplexityPolicySearchKeyAggregateID, Value: aggregateID, Method: global_model.SearchMethodEquals} + query := repository.PrepareGetByQuery(table, userIDQuery) + err := query(db, policy) + if caos_errs.IsNotFound(err) { + return nil, caos_errs.ThrowNotFound(nil, "VIEW-Lso0cs", "Errors.IAM.PasswordComplexityPolicy.NotExisting") + } + return policy, err +} + +func PutPasswordComplexityPolicy(db *gorm.DB, table string, policy *model.PasswordComplexityPolicyView) error { + save := repository.PrepareSave(table) + return save(db, policy) +} + +func DeletePasswordComplexityPolicy(db *gorm.DB, table, aggregateID string) error { + delete := repository.PrepareDeleteByKey(table, model.PasswordComplexityPolicySearchKey(iam_model.PasswordComplexityPolicySearchKeyAggregateID), aggregateID) + + return delete(db) +} diff --git a/internal/iam/repository/view/password_lockout_policy_view.go b/internal/iam/repository/view/password_lockout_policy_view.go new file mode 100644 index 0000000000..74f95204c8 --- /dev/null +++ b/internal/iam/repository/view/password_lockout_policy_view.go @@ -0,0 +1,32 @@ +package view + +import ( + caos_errs "github.com/caos/zitadel/internal/errors" + iam_model "github.com/caos/zitadel/internal/iam/model" + "github.com/caos/zitadel/internal/iam/repository/view/model" + global_model "github.com/caos/zitadel/internal/model" + "github.com/caos/zitadel/internal/view/repository" + "github.com/jinzhu/gorm" +) + +func GetPasswordLockoutPolicyByAggregateID(db *gorm.DB, table, aggregateID string) (*model.PasswordLockoutPolicyView, error) { + policy := new(model.PasswordLockoutPolicyView) + userIDQuery := &model.PasswordLockoutPolicySearchQuery{Key: iam_model.PasswordLockoutPolicySearchKeyAggregateID, Value: aggregateID, Method: global_model.SearchMethodEquals} + query := repository.PrepareGetByQuery(table, userIDQuery) + err := query(db, policy) + if caos_errs.IsNotFound(err) { + return nil, caos_errs.ThrowNotFound(nil, "VIEW-Lso0cs", "Errors.IAM.PasswordLockoutPolicy.NotExisting") + } + return policy, err +} + +func PutPasswordLockoutPolicy(db *gorm.DB, table string, policy *model.PasswordLockoutPolicyView) error { + save := repository.PrepareSave(table) + return save(db, policy) +} + +func DeletePasswordLockoutPolicy(db *gorm.DB, table, aggregateID string) error { + delete := repository.PrepareDeleteByKey(table, model.PasswordLockoutPolicySearchKey(iam_model.PasswordLockoutPolicySearchKeyAggregateID), aggregateID) + + return delete(db) +} diff --git a/internal/management/repository/eventsourcing/eventstore/org.go b/internal/management/repository/eventsourcing/eventstore/org.go index 2108fabedf..f098ac780b 100644 --- a/internal/management/repository/eventsourcing/eventstore/org.go +++ b/internal/management/repository/eventsourcing/eventstore/org.go @@ -86,8 +86,19 @@ func (repo *OrgRepository) ReactivateOrg(ctx context.Context, id string) (*org_m return repo.OrgEventstore.ReactivateOrg(ctx, id) } -func (repo *OrgRepository) GetMyOrgIamPolicy(ctx context.Context) (*org_model.OrgIAMPolicy, error) { - return repo.OrgEventstore.GetOrgIAMPolicy(ctx, authz.GetCtxData(ctx).OrgID) +func (repo *OrgRepository) GetMyOrgIamPolicy(ctx context.Context) (*iam_model.OrgIAMPolicyView, error) { + policy, err := repo.View.OrgIAMPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if errors.IsNotFound(err) { + policy, err = repo.View.OrgIAMPolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } + policy.Default = true + } + if err != nil { + return nil, err + } + return iam_es_model.OrgIAMViewToModel(policy), err } func (repo *OrgRepository) SearchMyOrgDomains(ctx context.Context, request *org_model.OrgDomainSearchRequest) (*org_model.OrgDomainSearchResponse, error) { @@ -306,6 +317,15 @@ func (repo *OrgRepository) GetLoginPolicy(ctx context.Context) (*iam_model.Login return iam_es_model.LoginPolicyViewToModel(policy), err } +func (repo *OrgRepository) GetDefaultLoginPolicy(ctx context.Context) (*iam_model.LoginPolicyView, error) { + policy, err := repo.View.LoginPolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } + policy.Default = true + return iam_es_model.LoginPolicyViewToModel(policy), err +} + func (repo *OrgRepository) AddLoginPolicy(ctx context.Context, policy *iam_model.LoginPolicy) (*iam_model.LoginPolicy, error) { policy.AggregateID = authz.GetCtxData(ctx).OrgID return repo.OrgEventstore.AddLoginPolicy(ctx, policy) @@ -380,3 +400,126 @@ func (repo *OrgRepository) RemoveIDPProviderFromIdpProvider(ctx context.Context, } return sdk.PushAggregates(ctx, repo.Eventstore.PushAggregates, nil, aggregates...) } + +func (repo *OrgRepository) GetPasswordComplexityPolicy(ctx context.Context) (*iam_model.PasswordComplexityPolicyView, error) { + policy, err := repo.View.PasswordComplexityPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if errors.IsNotFound(err) { + policy, err = repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } + policy.Default = true + } + if err != nil { + return nil, err + } + return iam_es_model.PasswordComplexityViewToModel(policy), err +} + +func (repo *OrgRepository) GetDefaultPasswordComplexityPolicy(ctx context.Context) (*iam_model.PasswordComplexityPolicyView, error) { + policy, err := repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } + policy.Default = true + return iam_es_model.PasswordComplexityViewToModel(policy), err +} + +func (repo *OrgRepository) AddPasswordComplexityPolicy(ctx context.Context, policy *iam_model.PasswordComplexityPolicy) (*iam_model.PasswordComplexityPolicy, error) { + policy.AggregateID = authz.GetCtxData(ctx).OrgID + return repo.OrgEventstore.AddPasswordComplexityPolicy(ctx, policy) +} + +func (repo *OrgRepository) ChangePasswordComplexityPolicy(ctx context.Context, policy *iam_model.PasswordComplexityPolicy) (*iam_model.PasswordComplexityPolicy, error) { + policy.AggregateID = authz.GetCtxData(ctx).OrgID + return repo.OrgEventstore.ChangePasswordComplexityPolicy(ctx, policy) +} + +func (repo *OrgRepository) RemovePasswordComplexityPolicy(ctx context.Context) error { + policy := &iam_model.PasswordComplexityPolicy{ObjectRoot: models.ObjectRoot{ + AggregateID: authz.GetCtxData(ctx).OrgID, + }} + return repo.OrgEventstore.RemovePasswordComplexityPolicy(ctx, policy) +} + +func (repo *OrgRepository) GetPasswordAgePolicy(ctx context.Context) (*iam_model.PasswordAgePolicyView, error) { + policy, err := repo.View.PasswordAgePolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if errors.IsNotFound(err) { + policy, err = repo.View.PasswordAgePolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } + policy.Default = true + } + if err != nil { + return nil, err + } + return iam_es_model.PasswordAgeViewToModel(policy), err +} + +func (repo *OrgRepository) GetDefaultPasswordAgePolicy(ctx context.Context) (*iam_model.PasswordAgePolicyView, error) { + policy, err := repo.View.PasswordAgePolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } + policy.Default = true + return iam_es_model.PasswordAgeViewToModel(policy), err +} + +func (repo *OrgRepository) AddPasswordAgePolicy(ctx context.Context, policy *iam_model.PasswordAgePolicy) (*iam_model.PasswordAgePolicy, error) { + policy.AggregateID = authz.GetCtxData(ctx).OrgID + return repo.OrgEventstore.AddPasswordAgePolicy(ctx, policy) +} + +func (repo *OrgRepository) ChangePasswordAgePolicy(ctx context.Context, policy *iam_model.PasswordAgePolicy) (*iam_model.PasswordAgePolicy, error) { + policy.AggregateID = authz.GetCtxData(ctx).OrgID + return repo.OrgEventstore.ChangePasswordAgePolicy(ctx, policy) +} + +func (repo *OrgRepository) RemovePasswordAgePolicy(ctx context.Context) error { + policy := &iam_model.PasswordAgePolicy{ObjectRoot: models.ObjectRoot{ + AggregateID: authz.GetCtxData(ctx).OrgID, + }} + return repo.OrgEventstore.RemovePasswordAgePolicy(ctx, policy) +} + +func (repo *OrgRepository) GetPasswordLockoutPolicy(ctx context.Context) (*iam_model.PasswordLockoutPolicyView, error) { + policy, err := repo.View.PasswordLockoutPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if errors.IsNotFound(err) { + policy, err = repo.View.PasswordLockoutPolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } + policy.Default = true + } + if err != nil { + return nil, err + } + return iam_es_model.PasswordLockoutViewToModel(policy), err +} + +func (repo *OrgRepository) GetDefaultPasswordLockoutPolicy(ctx context.Context) (*iam_model.PasswordLockoutPolicyView, error) { + policy, err := repo.View.PasswordLockoutPolicyByAggregateID(repo.SystemDefaults.IamID) + if err != nil { + return nil, err + } + policy.Default = true + return iam_es_model.PasswordLockoutViewToModel(policy), err +} + +func (repo *OrgRepository) AddPasswordLockoutPolicy(ctx context.Context, policy *iam_model.PasswordLockoutPolicy) (*iam_model.PasswordLockoutPolicy, error) { + policy.AggregateID = authz.GetCtxData(ctx).OrgID + return repo.OrgEventstore.AddPasswordLockoutPolicy(ctx, policy) +} + +func (repo *OrgRepository) ChangePasswordLockoutPolicy(ctx context.Context, policy *iam_model.PasswordLockoutPolicy) (*iam_model.PasswordLockoutPolicy, error) { + policy.AggregateID = authz.GetCtxData(ctx).OrgID + return repo.OrgEventstore.ChangePasswordLockoutPolicy(ctx, policy) +} + +func (repo *OrgRepository) RemovePasswordLockoutPolicy(ctx context.Context) error { + policy := &iam_model.PasswordLockoutPolicy{ObjectRoot: models.ObjectRoot{ + AggregateID: authz.GetCtxData(ctx).OrgID, + }} + return repo.OrgEventstore.RemovePasswordLockoutPolicy(ctx, policy) +} diff --git a/internal/management/repository/eventsourcing/eventstore/policy.go b/internal/management/repository/eventsourcing/eventstore/policy.go deleted file mode 100644 index dee516fe59..0000000000 --- a/internal/management/repository/eventsourcing/eventstore/policy.go +++ /dev/null @@ -1,48 +0,0 @@ -package eventstore - -import ( - "context" - - "github.com/caos/zitadel/internal/api/authz" - pol_model "github.com/caos/zitadel/internal/policy/model" - pol_event "github.com/caos/zitadel/internal/policy/repository/eventsourcing" -) - -type PolicyRepo struct { - PolicyEvents *pol_event.PolicyEventstore - //view *view.View -} - -func (repo *PolicyRepo) CreatePasswordComplexityPolicy(ctx context.Context, policy *pol_model.PasswordComplexityPolicy) (*pol_model.PasswordComplexityPolicy, error) { - return repo.PolicyEvents.CreatePasswordComplexityPolicy(ctx, policy) -} -func (repo *PolicyRepo) GetPasswordComplexityPolicy(ctx context.Context) (*pol_model.PasswordComplexityPolicy, error) { - ctxData := authz.GetCtxData(ctx) - return repo.PolicyEvents.GetPasswordComplexityPolicy(ctx, ctxData.OrgID) -} -func (repo *PolicyRepo) GetDefaultPasswordComplexityPolicy(ctx context.Context) (*pol_model.PasswordComplexityPolicy, error) { - return repo.PolicyEvents.GetPasswordComplexityPolicy(ctx, "0") -} -func (repo *PolicyRepo) UpdatePasswordComplexityPolicy(ctx context.Context, policy *pol_model.PasswordComplexityPolicy) (*pol_model.PasswordComplexityPolicy, error) { - return repo.PolicyEvents.UpdatePasswordComplexityPolicy(ctx, policy) -} -func (repo *PolicyRepo) CreatePasswordAgePolicy(ctx context.Context, policy *pol_model.PasswordAgePolicy) (*pol_model.PasswordAgePolicy, error) { - return repo.PolicyEvents.CreatePasswordAgePolicy(ctx, policy) -} -func (repo *PolicyRepo) GetPasswordAgePolicy(ctx context.Context) (*pol_model.PasswordAgePolicy, error) { - ctxData := authz.GetCtxData(ctx) - return repo.PolicyEvents.GetPasswordAgePolicy(ctx, ctxData.OrgID) -} -func (repo *PolicyRepo) UpdatePasswordAgePolicy(ctx context.Context, policy *pol_model.PasswordAgePolicy) (*pol_model.PasswordAgePolicy, error) { - return repo.PolicyEvents.UpdatePasswordAgePolicy(ctx, policy) -} -func (repo *PolicyRepo) CreatePasswordLockoutPolicy(ctx context.Context, policy *pol_model.PasswordLockoutPolicy) (*pol_model.PasswordLockoutPolicy, error) { - return repo.PolicyEvents.CreatePasswordLockoutPolicy(ctx, policy) -} -func (repo *PolicyRepo) GetPasswordLockoutPolicy(ctx context.Context) (*pol_model.PasswordLockoutPolicy, error) { - ctxData := authz.GetCtxData(ctx) - return repo.PolicyEvents.GetPasswordLockoutPolicy(ctx, ctxData.OrgID) -} -func (repo *PolicyRepo) UpdatePasswordLockoutPolicy(ctx context.Context, policy *pol_model.PasswordLockoutPolicy) (*pol_model.PasswordLockoutPolicy, error) { - return repo.PolicyEvents.UpdatePasswordLockoutPolicy(ctx, policy) -} diff --git a/internal/management/repository/eventsourcing/eventstore/user.go b/internal/management/repository/eventsourcing/eventstore/user.go index 82934740dd..335b8ab02f 100644 --- a/internal/management/repository/eventsourcing/eventstore/user.go +++ b/internal/management/repository/eventsourcing/eventstore/user.go @@ -5,6 +5,7 @@ import ( es_int "github.com/caos/zitadel/internal/eventstore" es_models "github.com/caos/zitadel/internal/eventstore/models" es_sdk "github.com/caos/zitadel/internal/eventstore/sdk" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/view/model" usr_grant_event "github.com/caos/zitadel/internal/usergrant/repository/eventsourcing" "github.com/caos/logging" @@ -15,7 +16,6 @@ import ( "github.com/caos/zitadel/internal/management/repository/eventsourcing/view" global_model "github.com/caos/zitadel/internal/model" org_event "github.com/caos/zitadel/internal/org/repository/eventsourcing" - policy_event "github.com/caos/zitadel/internal/policy/repository/eventsourcing" usr_model "github.com/caos/zitadel/internal/user/model" usr_event "github.com/caos/zitadel/internal/user/repository/eventsourcing" "github.com/caos/zitadel/internal/user/repository/view/model" @@ -26,7 +26,6 @@ type UserRepo struct { es_int.Eventstore SearchLimit uint64 UserEvents *usr_event.UserEventstore - PolicyEvents *policy_event.PolicyEventstore OrgEvents *org_event.OrgEventstore UserGrantEvents *usr_grant_event.UserGrantEventStore View *view.View @@ -62,15 +61,23 @@ func (repo *UserRepo) UserByID(ctx context.Context, id string) (*usr_model.UserV } func (repo *UserRepo) CreateUser(ctx context.Context, user *usr_model.User) (*usr_model.User, error) { - pwPolicy, err := repo.PolicyEvents.GetPasswordComplexityPolicy(ctx, authz.GetCtxData(ctx).OrgID) + pwPolicy, err := repo.View.PasswordComplexityPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if err != nil && caos_errs.IsNotFound(err) { + pwPolicy, err = repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return nil, err } - orgPolicy, err := repo.OrgEvents.GetOrgIAMPolicy(ctx, authz.GetCtxData(ctx).OrgID) + pwPolicyView := iam_es_model.PasswordComplexityViewToModel(pwPolicy) + orgPolicy, err := repo.View.OrgIAMPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if err != nil && errors.IsNotFound(err) { + orgPolicy, err = repo.View.OrgIAMPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return nil, err } - return repo.UserEvents.CreateUser(ctx, user, pwPolicy, orgPolicy) + orgPolicyView := iam_es_model.OrgIAMViewToModel(orgPolicy) + return repo.UserEvents.CreateUser(ctx, user, pwPolicyView, orgPolicyView) } func (repo *UserRepo) RegisterUser(ctx context.Context, user *usr_model.User, resourceOwner string) (*usr_model.User, error) { @@ -78,15 +85,23 @@ func (repo *UserRepo) RegisterUser(ctx context.Context, user *usr_model.User, re if resourceOwner != "" { policyResourceOwner = resourceOwner } - pwPolicy, err := repo.PolicyEvents.GetPasswordComplexityPolicy(ctx, policyResourceOwner) + pwPolicy, err := repo.View.PasswordComplexityPolicyByAggregateID(policyResourceOwner) + if err != nil && caos_errs.IsNotFound(err) { + pwPolicy, err = repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return nil, err } - orgPolicy, err := repo.OrgEvents.GetOrgIAMPolicy(ctx, authz.GetCtxData(ctx).OrgID) + pwPolicyView := iam_es_model.PasswordComplexityViewToModel(pwPolicy) + orgPolicy, err := repo.View.OrgIAMPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if err != nil && errors.IsNotFound(err) { + orgPolicy, err = repo.View.OrgIAMPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return nil, err } - return repo.UserEvents.RegisterUser(ctx, user, pwPolicy, orgPolicy, resourceOwner) + orgPolicyView := iam_es_model.OrgIAMViewToModel(orgPolicy) + return repo.UserEvents.RegisterUser(ctx, user, pwPolicyView, orgPolicyView, resourceOwner) } func (repo *UserRepo) DeactivateUser(ctx context.Context, id string) (*usr_model.User, error) { @@ -107,11 +122,15 @@ func (repo *UserRepo) UnlockUser(ctx context.Context, id string) (*usr_model.Use func (repo *UserRepo) RemoveUser(ctx context.Context, id string) error { aggregates := make([]*es_models.Aggregate, 0) - orgPolicy, err := repo.OrgEvents.GetOrgIAMPolicy(ctx, authz.GetCtxData(ctx).OrgID) + orgPolicy, err := repo.View.OrgIAMPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if err != nil && errors.IsNotFound(err) { + orgPolicy, err = repo.View.OrgIAMPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return err } - user, agg, err := repo.UserEvents.PrepareRemoveUser(ctx, id, orgPolicy) + orgPolicyView := iam_es_model.OrgIAMViewToModel(orgPolicy) + user, agg, err := repo.UserEvents.PrepareRemoveUser(ctx, id, orgPolicyView) if err != nil { return err } @@ -198,11 +217,15 @@ func (repo *UserRepo) UserMfas(ctx context.Context, userID string) ([]*usr_model } func (repo *UserRepo) SetOneTimePassword(ctx context.Context, password *usr_model.Password) (*usr_model.Password, error) { - policy, err := repo.PolicyEvents.GetPasswordComplexityPolicy(ctx, authz.GetCtxData(ctx).OrgID) + policy, err := repo.View.PasswordComplexityPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if err != nil && caos_errs.IsNotFound(err) { + policy, err = repo.View.PasswordComplexityPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return nil, err } - return repo.UserEvents.SetOneTimePassword(ctx, policy, password) + pwPolicyView := iam_es_model.PasswordComplexityViewToModel(policy) + return repo.UserEvents.SetOneTimePassword(ctx, pwPolicyView, password) } func (repo *UserRepo) RequestSetPassword(ctx context.Context, id string, notifyType usr_model.NotificationType) error { @@ -291,11 +314,15 @@ func (repo *UserRepo) ChangeProfile(ctx context.Context, profile *usr_model.Prof } func (repo *UserRepo) ChangeUsername(ctx context.Context, userID, userName string) error { - orgPolicy, err := repo.OrgEvents.GetOrgIAMPolicy(ctx, authz.GetCtxData(ctx).OrgID) + orgPolicy, err := repo.View.OrgIAMPolicyByAggregateID(authz.GetCtxData(ctx).OrgID) + if err != nil && errors.IsNotFound(err) { + orgPolicy, err = repo.View.OrgIAMPolicyByAggregateID(repo.SystemDefaults.IamID) + } if err != nil { return err } - return repo.UserEvents.ChangeUsername(ctx, userID, userName, orgPolicy) + orgPolicyView := iam_es_model.OrgIAMViewToModel(orgPolicy) + return repo.UserEvents.ChangeUsername(ctx, userID, userName, orgPolicyView) } func (repo *UserRepo) EmailByID(ctx context.Context, userID string) (*usr_model.Email, error) { diff --git a/internal/management/repository/eventsourcing/handler/handler.go b/internal/management/repository/eventsourcing/handler/handler.go index 8b34cfe490..fecff808b7 100644 --- a/internal/management/repository/eventsourcing/handler/handler.go +++ b/internal/management/repository/eventsourcing/handler/handler.go @@ -36,23 +36,39 @@ type EventstoreRepos struct { func Register(configs Configs, bulkLimit, errorCount uint64, view *view.View, eventstore eventstore.Eventstore, repos EventstoreRepos, defaults systemdefaults.SystemDefaults) []query.Handler { return []query.Handler{ - &Project{handler: handler{view, bulkLimit, configs.cycleDuration("Project"), errorCount}, eventstore: eventstore}, - &ProjectGrant{handler: handler{view, bulkLimit, configs.cycleDuration("ProjectGrant"), errorCount}, eventstore: eventstore, projectEvents: repos.ProjectEvents, orgEvents: repos.OrgEvents}, - &ProjectRole{handler: handler{view, bulkLimit, configs.cycleDuration("ProjectRole"), errorCount}, projectEvents: repos.ProjectEvents}, - &ProjectMember{handler: handler{view, bulkLimit, configs.cycleDuration("ProjectMember"), errorCount}, userEvents: repos.UserEvents}, - &ProjectGrantMember{handler: handler{view, bulkLimit, configs.cycleDuration("ProjectGrantMember"), errorCount}, userEvents: repos.UserEvents}, - &Application{handler: handler{view, bulkLimit, configs.cycleDuration("Application"), errorCount}, projectEvents: repos.ProjectEvents}, - &User{handler: handler{view, bulkLimit, configs.cycleDuration("User"), errorCount}, eventstore: eventstore, orgEvents: repos.OrgEvents}, - &UserGrant{handler: handler{view, bulkLimit, configs.cycleDuration("UserGrant"), errorCount}, projectEvents: repos.ProjectEvents, userEvents: repos.UserEvents, orgEvents: repos.OrgEvents}, + &Project{handler: handler{view, bulkLimit, configs.cycleDuration("Project"), errorCount}, + eventstore: eventstore}, + &ProjectGrant{handler: handler{view, bulkLimit, configs.cycleDuration("ProjectGrant"), errorCount}, + eventstore: eventstore, projectEvents: repos.ProjectEvents, orgEvents: repos.OrgEvents}, + &ProjectRole{handler: handler{view, bulkLimit, configs.cycleDuration("ProjectRole"), errorCount}, + projectEvents: repos.ProjectEvents}, + &ProjectMember{handler: handler{view, bulkLimit, configs.cycleDuration("ProjectMember"), errorCount}, + userEvents: repos.UserEvents}, + &ProjectGrantMember{handler: handler{view, bulkLimit, configs.cycleDuration("ProjectGrantMember"), errorCount}, + userEvents: repos.UserEvents}, + &Application{handler: handler{view, bulkLimit, configs.cycleDuration("Application"), errorCount}, + projectEvents: repos.ProjectEvents}, + &User{handler: handler{view, bulkLimit, configs.cycleDuration("User"), errorCount}, + eventstore: eventstore, orgEvents: repos.OrgEvents, iamEvents: repos.IamEvents, iamID: defaults.IamID}, + &UserGrant{handler: handler{view, bulkLimit, configs.cycleDuration("UserGrant"), errorCount}, + projectEvents: repos.ProjectEvents, userEvents: repos.UserEvents, orgEvents: repos.OrgEvents}, &Org{handler: handler{view, bulkLimit, configs.cycleDuration("Org"), errorCount}}, - &OrgMember{handler: handler{view, bulkLimit, configs.cycleDuration("OrgMember"), errorCount}, userEvents: repos.UserEvents}, + &OrgMember{handler: handler{view, bulkLimit, configs.cycleDuration("OrgMember"), errorCount}, + userEvents: repos.UserEvents}, &OrgDomain{handler: handler{view, bulkLimit, configs.cycleDuration("OrgDomain"), errorCount}}, - &UserMembership{handler: handler{view, bulkLimit, configs.cycleDuration("UserMembership"), errorCount}, orgEvents: repos.OrgEvents, projectEvents: repos.ProjectEvents}, + &UserMembership{handler: handler{view, bulkLimit, configs.cycleDuration("UserMembership"), errorCount}, + orgEvents: repos.OrgEvents, projectEvents: repos.ProjectEvents}, &MachineKeys{handler: handler{view, bulkLimit, configs.cycleDuration("MachineKeys"), errorCount}}, &IDPConfig{handler: handler{view, bulkLimit, configs.cycleDuration("IDPConfig"), errorCount}}, &LoginPolicy{handler: handler{view, bulkLimit, configs.cycleDuration("LoginPolicy"), errorCount}}, - &IDPProvider{handler: handler{view, bulkLimit, configs.cycleDuration("IDPProvider"), errorCount}, systemDefaults: defaults, iamEvents: repos.IamEvents, orgEvents: repos.OrgEvents}, - &ExternalIDP{handler: handler{view, bulkLimit, configs.cycleDuration("ExternalIDP"), errorCount}, systemDefaults: defaults, iamEvents: repos.IamEvents, orgEvents: repos.OrgEvents}, + &IDPProvider{handler: handler{view, bulkLimit, configs.cycleDuration("IDPProvider"), errorCount}, + systemDefaults: defaults, iamEvents: repos.IamEvents, orgEvents: repos.OrgEvents}, + &ExternalIDP{handler: handler{view, bulkLimit, configs.cycleDuration("ExternalIDP"), errorCount}, + systemDefaults: defaults, iamEvents: repos.IamEvents, orgEvents: repos.OrgEvents}, + &PasswordComplexityPolicy{handler: handler{view, bulkLimit, configs.cycleDuration("PasswordComplexityPolicy"), errorCount}}, + &PasswordAgePolicy{handler: handler{view, bulkLimit, configs.cycleDuration("PasswordAgePolicy"), errorCount}}, + &PasswordLockoutPolicy{handler: handler{view, bulkLimit, configs.cycleDuration("PasswordLockoutPolicy"), errorCount}}, + &OrgIAMPolicy{handler: handler{view, bulkLimit, configs.cycleDuration("OrgIAMPolicy"), errorCount}}, } } diff --git a/internal/management/repository/eventsourcing/handler/login_policy.go b/internal/management/repository/eventsourcing/handler/login_policy.go index 6a2ae339ed..464a867b2b 100644 --- a/internal/management/repository/eventsourcing/handler/login_policy.go +++ b/internal/management/repository/eventsourcing/handler/login_policy.go @@ -52,6 +52,8 @@ func (m *LoginPolicy) processLoginPolicy(event *models.Event) (err error) { return err } err = policy.AppendEvent(event) + case model.LoginPolicyRemoved: + return m.view.DeleteLoginPolicy(event.AggregateID, event.Sequence) default: return m.view.ProcessedLoginPolicySequence(event.Sequence) } diff --git a/internal/management/repository/eventsourcing/handler/org_iam_policy.go b/internal/management/repository/eventsourcing/handler/org_iam_policy.go new file mode 100644 index 0000000000..7b0b8860ca --- /dev/null +++ b/internal/management/repository/eventsourcing/handler/org_iam_policy.go @@ -0,0 +1,69 @@ +package handler + +import ( + "github.com/caos/logging" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + + "github.com/caos/zitadel/internal/eventstore/models" + es_models "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/eventstore/spooler" + iam_model "github.com/caos/zitadel/internal/iam/repository/view/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" +) + +type OrgIAMPolicy struct { + handler +} + +const ( + orgIAMPolicyTable = "management.org_iam_policies" +) + +func (m *OrgIAMPolicy) ViewModel() string { + return orgIAMPolicyTable +} + +func (m *OrgIAMPolicy) EventQuery() (*models.SearchQuery, error) { + sequence, err := m.view.GetLatestOrgIAMPolicySequence() + if err != nil { + return nil, err + } + return es_models.NewSearchQuery(). + AggregateTypeFilter(model.OrgAggregate, iam_es_model.IAMAggregate). + LatestSequenceFilter(sequence.CurrentSequence), nil +} + +func (m *OrgIAMPolicy) Reduce(event *models.Event) (err error) { + switch event.AggregateType { + case model.OrgAggregate, iam_es_model.IAMAggregate: + err = m.processOrgIAMPolicy(event) + } + return err +} + +func (m *OrgIAMPolicy) processOrgIAMPolicy(event *models.Event) (err error) { + policy := new(iam_model.OrgIAMPolicyView) + switch event.Type { + case iam_es_model.OrgIAMPolicyAdded, model.OrgIAMPolicyAdded: + err = policy.AppendEvent(event) + case iam_es_model.OrgIAMPolicyChanged, model.OrgIAMPolicyChanged: + policy, err = m.view.OrgIAMPolicyByAggregateID(event.AggregateID) + if err != nil { + return err + } + err = policy.AppendEvent(event) + case model.OrgIAMPolicyRemoved: + return m.view.DeleteOrgIAMPolicy(event.AggregateID, event.Sequence) + default: + return m.view.ProcessedOrgIAMPolicySequence(event.Sequence) + } + if err != nil { + return err + } + return m.view.PutOrgIAMPolicy(policy, policy.Sequence) +} + +func (m *OrgIAMPolicy) OnError(event *models.Event, err error) error { + logging.LogWithFields("SPOOL-3Gf9s", "id", event.AggregateID).WithError(err).Warn("something went wrong in orgIAM policy handler") + return spooler.HandleError(event, err, m.view.GetLatestOrgIAMPolicyFailedEvent, m.view.ProcessedOrgIAMPolicyFailedEvent, m.view.ProcessedOrgIAMPolicySequence, m.errorCountUntilSkip) +} diff --git a/internal/management/repository/eventsourcing/handler/password_age_policy.go b/internal/management/repository/eventsourcing/handler/password_age_policy.go new file mode 100644 index 0000000000..ccbb1c85f9 --- /dev/null +++ b/internal/management/repository/eventsourcing/handler/password_age_policy.go @@ -0,0 +1,69 @@ +package handler + +import ( + "github.com/caos/logging" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + + "github.com/caos/zitadel/internal/eventstore/models" + es_models "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/eventstore/spooler" + iam_model "github.com/caos/zitadel/internal/iam/repository/view/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" +) + +type PasswordAgePolicy struct { + handler +} + +const ( + passwordAgePolicyTable = "management.password_age_policies" +) + +func (m *PasswordAgePolicy) ViewModel() string { + return passwordAgePolicyTable +} + +func (m *PasswordAgePolicy) EventQuery() (*models.SearchQuery, error) { + sequence, err := m.view.GetLatestPasswordAgePolicySequence() + if err != nil { + return nil, err + } + return es_models.NewSearchQuery(). + AggregateTypeFilter(model.OrgAggregate, iam_es_model.IAMAggregate). + LatestSequenceFilter(sequence.CurrentSequence), nil +} + +func (m *PasswordAgePolicy) Reduce(event *models.Event) (err error) { + switch event.AggregateType { + case model.OrgAggregate, iam_es_model.IAMAggregate: + err = m.processPasswordAgePolicy(event) + } + return err +} + +func (m *PasswordAgePolicy) processPasswordAgePolicy(event *models.Event) (err error) { + policy := new(iam_model.PasswordAgePolicyView) + switch event.Type { + case iam_es_model.PasswordAgePolicyAdded, model.PasswordAgePolicyAdded: + err = policy.AppendEvent(event) + case iam_es_model.PasswordAgePolicyChanged, model.PasswordAgePolicyChanged: + policy, err = m.view.PasswordAgePolicyByAggregateID(event.AggregateID) + if err != nil { + return err + } + err = policy.AppendEvent(event) + case model.PasswordAgePolicyRemoved: + return m.view.DeletePasswordAgePolicy(event.AggregateID, event.Sequence) + default: + return m.view.ProcessedPasswordAgePolicySequence(event.Sequence) + } + if err != nil { + return err + } + return m.view.PutPasswordAgePolicy(policy, policy.Sequence) +} + +func (m *PasswordAgePolicy) OnError(event *models.Event, err error) error { + logging.LogWithFields("SPOOL-Bs89f", "id", event.AggregateID).WithError(err).Warn("something went wrong in passwordAge policy handler") + return spooler.HandleError(event, err, m.view.GetLatestPasswordAgePolicyFailedEvent, m.view.ProcessedPasswordAgePolicyFailedEvent, m.view.ProcessedPasswordAgePolicySequence, m.errorCountUntilSkip) +} diff --git a/internal/management/repository/eventsourcing/handler/password_complexity_policy.go b/internal/management/repository/eventsourcing/handler/password_complexity_policy.go new file mode 100644 index 0000000000..61020657e4 --- /dev/null +++ b/internal/management/repository/eventsourcing/handler/password_complexity_policy.go @@ -0,0 +1,69 @@ +package handler + +import ( + "github.com/caos/logging" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + + "github.com/caos/zitadel/internal/eventstore/models" + es_models "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/eventstore/spooler" + iam_model "github.com/caos/zitadel/internal/iam/repository/view/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" +) + +type PasswordComplexityPolicy struct { + handler +} + +const ( + passwordComplexityPolicyTable = "management.password_complexity_policies" +) + +func (m *PasswordComplexityPolicy) ViewModel() string { + return passwordComplexityPolicyTable +} + +func (m *PasswordComplexityPolicy) EventQuery() (*models.SearchQuery, error) { + sequence, err := m.view.GetLatestPasswordComplexityPolicySequence() + if err != nil { + return nil, err + } + return es_models.NewSearchQuery(). + AggregateTypeFilter(model.OrgAggregate, iam_es_model.IAMAggregate). + LatestSequenceFilter(sequence.CurrentSequence), nil +} + +func (m *PasswordComplexityPolicy) Reduce(event *models.Event) (err error) { + switch event.AggregateType { + case model.OrgAggregate, iam_es_model.IAMAggregate: + err = m.processPasswordComplexityPolicy(event) + } + return err +} + +func (m *PasswordComplexityPolicy) processPasswordComplexityPolicy(event *models.Event) (err error) { + policy := new(iam_model.PasswordComplexityPolicyView) + switch event.Type { + case iam_es_model.PasswordComplexityPolicyAdded, model.PasswordComplexityPolicyAdded: + err = policy.AppendEvent(event) + case iam_es_model.PasswordComplexityPolicyChanged, model.PasswordComplexityPolicyChanged: + policy, err = m.view.PasswordComplexityPolicyByAggregateID(event.AggregateID) + if err != nil { + return err + } + err = policy.AppendEvent(event) + case model.PasswordComplexityPolicyRemoved: + return m.view.DeletePasswordComplexityPolicy(event.AggregateID, event.Sequence) + default: + return m.view.ProcessedPasswordComplexityPolicySequence(event.Sequence) + } + if err != nil { + return err + } + return m.view.PutPasswordComplexityPolicy(policy, policy.Sequence) +} + +func (m *PasswordComplexityPolicy) OnError(event *models.Event, err error) error { + logging.LogWithFields("SPOOL-4Djo9", "id", event.AggregateID).WithError(err).Warn("something went wrong in passwordComplexity policy handler") + return spooler.HandleError(event, err, m.view.GetLatestPasswordComplexityPolicyFailedEvent, m.view.ProcessedPasswordComplexityPolicyFailedEvent, m.view.ProcessedPasswordComplexityPolicySequence, m.errorCountUntilSkip) +} diff --git a/internal/management/repository/eventsourcing/handler/password_lockout_policy.go b/internal/management/repository/eventsourcing/handler/password_lockout_policy.go new file mode 100644 index 0000000000..0c0f1b93c0 --- /dev/null +++ b/internal/management/repository/eventsourcing/handler/password_lockout_policy.go @@ -0,0 +1,69 @@ +package handler + +import ( + "github.com/caos/logging" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + + "github.com/caos/zitadel/internal/eventstore/models" + es_models "github.com/caos/zitadel/internal/eventstore/models" + "github.com/caos/zitadel/internal/eventstore/spooler" + iam_model "github.com/caos/zitadel/internal/iam/repository/view/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" +) + +type PasswordLockoutPolicy struct { + handler +} + +const ( + passwordLockoutPolicyTable = "management.password_lockout_policies" +) + +func (m *PasswordLockoutPolicy) ViewModel() string { + return passwordLockoutPolicyTable +} + +func (m *PasswordLockoutPolicy) EventQuery() (*models.SearchQuery, error) { + sequence, err := m.view.GetLatestPasswordLockoutPolicySequence() + if err != nil { + return nil, err + } + return es_models.NewSearchQuery(). + AggregateTypeFilter(model.OrgAggregate, iam_es_model.IAMAggregate). + LatestSequenceFilter(sequence.CurrentSequence), nil +} + +func (m *PasswordLockoutPolicy) Reduce(event *models.Event) (err error) { + switch event.AggregateType { + case model.OrgAggregate, iam_es_model.IAMAggregate: + err = m.processPasswordLockoutPolicy(event) + } + return err +} + +func (m *PasswordLockoutPolicy) processPasswordLockoutPolicy(event *models.Event) (err error) { + policy := new(iam_model.PasswordLockoutPolicyView) + switch event.Type { + case iam_es_model.PasswordLockoutPolicyAdded, model.PasswordLockoutPolicyAdded: + err = policy.AppendEvent(event) + case iam_es_model.PasswordLockoutPolicyChanged, model.PasswordLockoutPolicyChanged: + policy, err = m.view.PasswordLockoutPolicyByAggregateID(event.AggregateID) + if err != nil { + return err + } + err = policy.AppendEvent(event) + case model.PasswordLockoutPolicyRemoved: + return m.view.DeletePasswordLockoutPolicy(event.AggregateID, event.Sequence) + default: + return m.view.ProcessedPasswordLockoutPolicySequence(event.Sequence) + } + if err != nil { + return err + } + return m.view.PutPasswordLockoutPolicy(policy, policy.Sequence) +} + +func (m *PasswordLockoutPolicy) OnError(event *models.Event, err error) error { + logging.LogWithFields("SPOOL-Bms8f", "id", event.AggregateID).WithError(err).Warn("something went wrong in passwordLockout policy handler") + return spooler.HandleError(event, err, m.view.GetLatestPasswordLockoutPolicyFailedEvent, m.view.ProcessedPasswordLockoutPolicyFailedEvent, m.view.ProcessedPasswordLockoutPolicySequence, m.errorCountUntilSkip) +} diff --git a/internal/management/repository/eventsourcing/handler/user.go b/internal/management/repository/eventsourcing/handler/user.go index 46eb983cf1..daf07e3f0c 100644 --- a/internal/management/repository/eventsourcing/handler/user.go +++ b/internal/management/repository/eventsourcing/handler/user.go @@ -2,6 +2,7 @@ package handler import ( "context" + iam_es "github.com/caos/zitadel/internal/iam/repository/eventsourcing" "github.com/caos/logging" @@ -20,6 +21,8 @@ type User struct { handler eventstore eventstore.Eventstore orgEvents *org_events.OrgEventstore + iamEvents *iam_es.IAMEventstore + iamID string } const ( @@ -136,9 +139,12 @@ func (u *User) fillLoginNamesOnOrgUsers(event *models.Event) error { if err != nil { return err } - policy, err := u.orgEvents.GetOrgIAMPolicy(context.Background(), event.ResourceOwner) - if err != nil { - return err + policy := org.OrgIamPolicy + if policy == nil { + policy, err = u.iamEvents.GetOrgIAMPolicy(context.Background(), u.iamID) + if err != nil { + return err + } } users, err := u.view.UsersByOrgID(event.AggregateID) if err != nil { @@ -155,9 +161,12 @@ func (u *User) fillPreferredLoginNamesOnOrgUsers(event *models.Event) error { if err != nil { return err } - policy, err := u.orgEvents.GetOrgIAMPolicy(context.Background(), event.ResourceOwner) - if err != nil { - return err + policy := org.OrgIamPolicy + if policy == nil { + policy, err = u.iamEvents.GetOrgIAMPolicy(context.Background(), u.iamID) + if err != nil { + return err + } } if !policy.UserLoginMustBeDomain { return nil @@ -177,9 +186,12 @@ func (u *User) fillLoginNames(user *view_model.UserView) (err error) { if err != nil { return err } - policy, err := u.orgEvents.GetOrgIAMPolicy(context.Background(), user.ResourceOwner) - if err != nil { - return err + policy := org.OrgIamPolicy + if policy == nil { + policy, err = u.iamEvents.GetOrgIAMPolicy(context.Background(), u.iamID) + if err != nil { + return err + } } user.SetLoginNames(policy, org.Domains) user.PreferredLoginName = user.GenerateLoginName(org.GetPrimaryDomain().Domain, policy.UserLoginMustBeDomain) diff --git a/internal/management/repository/eventsourcing/repository.go b/internal/management/repository/eventsourcing/repository.go index 3c0dbf2bd7..37917c0ea1 100644 --- a/internal/management/repository/eventsourcing/repository.go +++ b/internal/management/repository/eventsourcing/repository.go @@ -13,7 +13,6 @@ import ( "github.com/caos/zitadel/internal/management/repository/eventsourcing/spooler" mgmt_view "github.com/caos/zitadel/internal/management/repository/eventsourcing/view" es_org "github.com/caos/zitadel/internal/org/repository/eventsourcing" - es_pol "github.com/caos/zitadel/internal/policy/repository/eventsourcing" es_proj "github.com/caos/zitadel/internal/project/repository/eventsourcing" es_usr "github.com/caos/zitadel/internal/user/repository/eventsourcing" es_grant "github.com/caos/zitadel/internal/usergrant/repository/eventsourcing" @@ -33,7 +32,6 @@ type EsRepository struct { eventstore.ProjectRepo eventstore.UserRepo eventstore.UserGrantRepo - eventstore.PolicyRepo eventstore.IAMRepository } @@ -59,13 +57,6 @@ func Start(conf Config, systemDefaults sd.SystemDefaults, roles []string) (*EsRe if err != nil { return nil, err } - policy, err := es_pol.StartPolicy(es_pol.PolicyConfig{ - Eventstore: es, - Cache: conf.Eventstore.Cache, - }, systemDefaults) - if err != nil { - return nil, err - } user, err := es_usr.StartUser(es_usr.UserConfig{ Eventstore: es, Cache: conf.Eventstore.Cache, @@ -96,9 +87,8 @@ func Start(conf Config, systemDefaults sd.SystemDefaults, roles []string) (*EsRe spooler: spool, OrgRepository: eventstore.OrgRepository{conf.SearchLimit, org, user, view, roles, systemDefaults}, ProjectRepo: eventstore.ProjectRepo{es, conf.SearchLimit, project, usergrant, user, iam, view, roles, systemDefaults.IamID}, - UserRepo: eventstore.UserRepo{es, conf.SearchLimit, user, policy, org, usergrant, view, systemDefaults}, + UserRepo: eventstore.UserRepo{es, conf.SearchLimit, user, org, usergrant, view, systemDefaults}, UserGrantRepo: eventstore.UserGrantRepo{conf.SearchLimit, usergrant, view}, - PolicyRepo: eventstore.PolicyRepo{policy}, IAMRepository: eventstore.IAMRepository{iam}, }, nil } diff --git a/internal/management/repository/eventsourcing/view/org_iam_policy.go b/internal/management/repository/eventsourcing/view/org_iam_policy.go new file mode 100644 index 0000000000..81cb67c4ac --- /dev/null +++ b/internal/management/repository/eventsourcing/view/org_iam_policy.go @@ -0,0 +1,48 @@ +package view + +import ( + "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/iam/repository/view" + "github.com/caos/zitadel/internal/iam/repository/view/model" + global_view "github.com/caos/zitadel/internal/view/repository" +) + +const ( + orgIAMPolicyTable = "management.org_iam_policies" +) + +func (v *View) OrgIAMPolicyByAggregateID(aggregateID string) (*model.OrgIAMPolicyView, error) { + return view.GetOrgIAMPolicyByAggregateID(v.Db, orgIAMPolicyTable, aggregateID) +} + +func (v *View) PutOrgIAMPolicy(policy *model.OrgIAMPolicyView, sequence uint64) error { + err := view.PutOrgIAMPolicy(v.Db, orgIAMPolicyTable, policy) + if err != nil { + return err + } + return v.ProcessedOrgIAMPolicySequence(sequence) +} + +func (v *View) DeleteOrgIAMPolicy(aggregateID string, eventSequence uint64) error { + err := view.DeleteOrgIAMPolicy(v.Db, orgIAMPolicyTable, aggregateID) + if err != nil && !errors.IsNotFound(err) { + return err + } + return v.ProcessedOrgIAMPolicySequence(eventSequence) +} + +func (v *View) GetLatestOrgIAMPolicySequence() (*global_view.CurrentSequence, error) { + return v.latestSequence(orgIAMPolicyTable) +} + +func (v *View) ProcessedOrgIAMPolicySequence(eventSequence uint64) error { + return v.saveCurrentSequence(orgIAMPolicyTable, eventSequence) +} + +func (v *View) GetLatestOrgIAMPolicyFailedEvent(sequence uint64) (*global_view.FailedEvent, error) { + return v.latestFailedEvent(orgIAMPolicyTable, sequence) +} + +func (v *View) ProcessedOrgIAMPolicyFailedEvent(failedEvent *global_view.FailedEvent) error { + return v.saveFailedEvent(failedEvent) +} diff --git a/internal/management/repository/eventsourcing/view/password_age_policy.go b/internal/management/repository/eventsourcing/view/password_age_policy.go new file mode 100644 index 0000000000..3d6caaa8a1 --- /dev/null +++ b/internal/management/repository/eventsourcing/view/password_age_policy.go @@ -0,0 +1,48 @@ +package view + +import ( + "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/iam/repository/view" + "github.com/caos/zitadel/internal/iam/repository/view/model" + global_view "github.com/caos/zitadel/internal/view/repository" +) + +const ( + passwordAgePolicyTable = "management.password_age_policies" +) + +func (v *View) PasswordAgePolicyByAggregateID(aggregateID string) (*model.PasswordAgePolicyView, error) { + return view.GetPasswordAgePolicyByAggregateID(v.Db, passwordAgePolicyTable, aggregateID) +} + +func (v *View) PutPasswordAgePolicy(policy *model.PasswordAgePolicyView, sequence uint64) error { + err := view.PutPasswordAgePolicy(v.Db, passwordAgePolicyTable, policy) + if err != nil { + return err + } + return v.ProcessedPasswordAgePolicySequence(sequence) +} + +func (v *View) DeletePasswordAgePolicy(aggregateID string, eventSequence uint64) error { + err := view.DeletePasswordAgePolicy(v.Db, passwordAgePolicyTable, aggregateID) + if err != nil && !errors.IsNotFound(err) { + return err + } + return v.ProcessedPasswordAgePolicySequence(eventSequence) +} + +func (v *View) GetLatestPasswordAgePolicySequence() (*global_view.CurrentSequence, error) { + return v.latestSequence(passwordAgePolicyTable) +} + +func (v *View) ProcessedPasswordAgePolicySequence(eventSequence uint64) error { + return v.saveCurrentSequence(passwordAgePolicyTable, eventSequence) +} + +func (v *View) GetLatestPasswordAgePolicyFailedEvent(sequence uint64) (*global_view.FailedEvent, error) { + return v.latestFailedEvent(passwordAgePolicyTable, sequence) +} + +func (v *View) ProcessedPasswordAgePolicyFailedEvent(failedEvent *global_view.FailedEvent) error { + return v.saveFailedEvent(failedEvent) +} diff --git a/internal/management/repository/eventsourcing/view/password_complexity_policy.go b/internal/management/repository/eventsourcing/view/password_complexity_policy.go new file mode 100644 index 0000000000..040eb1d596 --- /dev/null +++ b/internal/management/repository/eventsourcing/view/password_complexity_policy.go @@ -0,0 +1,48 @@ +package view + +import ( + "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/iam/repository/view" + "github.com/caos/zitadel/internal/iam/repository/view/model" + global_view "github.com/caos/zitadel/internal/view/repository" +) + +const ( + passwordComplexityPolicyTable = "management.password_complexity_policies" +) + +func (v *View) PasswordComplexityPolicyByAggregateID(aggregateID string) (*model.PasswordComplexityPolicyView, error) { + return view.GetPasswordComplexityPolicyByAggregateID(v.Db, passwordComplexityPolicyTable, aggregateID) +} + +func (v *View) PutPasswordComplexityPolicy(policy *model.PasswordComplexityPolicyView, sequence uint64) error { + err := view.PutPasswordComplexityPolicy(v.Db, passwordComplexityPolicyTable, policy) + if err != nil { + return err + } + return v.ProcessedPasswordComplexityPolicySequence(sequence) +} + +func (v *View) DeletePasswordComplexityPolicy(aggregateID string, eventSequence uint64) error { + err := view.DeletePasswordComplexityPolicy(v.Db, passwordComplexityPolicyTable, aggregateID) + if err != nil && !errors.IsNotFound(err) { + return err + } + return v.ProcessedPasswordComplexityPolicySequence(eventSequence) +} + +func (v *View) GetLatestPasswordComplexityPolicySequence() (*global_view.CurrentSequence, error) { + return v.latestSequence(passwordComplexityPolicyTable) +} + +func (v *View) ProcessedPasswordComplexityPolicySequence(eventSequence uint64) error { + return v.saveCurrentSequence(passwordComplexityPolicyTable, eventSequence) +} + +func (v *View) GetLatestPasswordComplexityPolicyFailedEvent(sequence uint64) (*global_view.FailedEvent, error) { + return v.latestFailedEvent(passwordComplexityPolicyTable, sequence) +} + +func (v *View) ProcessedPasswordComplexityPolicyFailedEvent(failedEvent *global_view.FailedEvent) error { + return v.saveFailedEvent(failedEvent) +} diff --git a/internal/management/repository/eventsourcing/view/password_lockout_policy.go b/internal/management/repository/eventsourcing/view/password_lockout_policy.go new file mode 100644 index 0000000000..099b961f57 --- /dev/null +++ b/internal/management/repository/eventsourcing/view/password_lockout_policy.go @@ -0,0 +1,48 @@ +package view + +import ( + "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/iam/repository/view" + "github.com/caos/zitadel/internal/iam/repository/view/model" + global_view "github.com/caos/zitadel/internal/view/repository" +) + +const ( + passwordLockoutPolicyTable = "management.password_lockout_policies" +) + +func (v *View) PasswordLockoutPolicyByAggregateID(aggregateID string) (*model.PasswordLockoutPolicyView, error) { + return view.GetPasswordLockoutPolicyByAggregateID(v.Db, passwordLockoutPolicyTable, aggregateID) +} + +func (v *View) PutPasswordLockoutPolicy(policy *model.PasswordLockoutPolicyView, sequence uint64) error { + err := view.PutPasswordLockoutPolicy(v.Db, passwordLockoutPolicyTable, policy) + if err != nil { + return err + } + return v.ProcessedPasswordLockoutPolicySequence(sequence) +} + +func (v *View) DeletePasswordLockoutPolicy(aggregateID string, eventSequence uint64) error { + err := view.DeletePasswordLockoutPolicy(v.Db, passwordLockoutPolicyTable, aggregateID) + if err != nil && !errors.IsNotFound(err) { + return err + } + return v.ProcessedPasswordLockoutPolicySequence(eventSequence) +} + +func (v *View) GetLatestPasswordLockoutPolicySequence() (*global_view.CurrentSequence, error) { + return v.latestSequence(passwordLockoutPolicyTable) +} + +func (v *View) ProcessedPasswordLockoutPolicySequence(eventSequence uint64) error { + return v.saveCurrentSequence(passwordLockoutPolicyTable, eventSequence) +} + +func (v *View) GetLatestPasswordLockoutPolicyFailedEvent(sequence uint64) (*global_view.FailedEvent, error) { + return v.latestFailedEvent(passwordLockoutPolicyTable, sequence) +} + +func (v *View) ProcessedPasswordLockoutPolicyFailedEvent(failedEvent *global_view.FailedEvent) error { + return v.saveFailedEvent(failedEvent) +} diff --git a/internal/management/repository/org.go b/internal/management/repository/org.go index e8e8820a72..11b02d14f5 100644 --- a/internal/management/repository/org.go +++ b/internal/management/repository/org.go @@ -30,7 +30,7 @@ type OrgRepository interface { GetOrgMemberRoles() []string - GetMyOrgIamPolicy(ctx context.Context) (*org_model.OrgIAMPolicy, error) + GetMyOrgIamPolicy(ctx context.Context) (*iam_model.OrgIAMPolicyView, error) SearchIDPConfigs(ctx context.Context, request *iam_model.IDPConfigSearchRequest) (*iam_model.IDPConfigSearchResponse, error) IDPConfigByID(ctx context.Context, id string) (*iam_model.IDPConfigView, error) @@ -42,10 +42,29 @@ type OrgRepository interface { ChangeOIDCIDPConfig(ctx context.Context, oidcConfig *iam_model.OIDCIDPConfig) (*iam_model.OIDCIDPConfig, error) GetLoginPolicy(ctx context.Context) (*iam_model.LoginPolicyView, error) + GetDefaultLoginPolicy(ctx context.Context) (*iam_model.LoginPolicyView, error) AddLoginPolicy(ctx context.Context, policy *iam_model.LoginPolicy) (*iam_model.LoginPolicy, error) ChangeLoginPolicy(ctx context.Context, policy *iam_model.LoginPolicy) (*iam_model.LoginPolicy, error) RemoveLoginPolicy(ctx context.Context) error SearchIDPProviders(ctx context.Context, request *iam_model.IDPProviderSearchRequest) (*iam_model.IDPProviderSearchResponse, error) AddIDPProviderToLoginPolicy(ctx context.Context, provider *iam_model.IDPProvider) (*iam_model.IDPProvider, error) RemoveIDPProviderFromLoginPolicy(ctx context.Context, provider *iam_model.IDPProvider) error + + GetPasswordComplexityPolicy(ctx context.Context) (*iam_model.PasswordComplexityPolicyView, error) + GetDefaultPasswordComplexityPolicy(ctx context.Context) (*iam_model.PasswordComplexityPolicyView, error) + AddPasswordComplexityPolicy(ctx context.Context, policy *iam_model.PasswordComplexityPolicy) (*iam_model.PasswordComplexityPolicy, error) + ChangePasswordComplexityPolicy(ctx context.Context, policy *iam_model.PasswordComplexityPolicy) (*iam_model.PasswordComplexityPolicy, error) + RemovePasswordComplexityPolicy(ctx context.Context) error + + GetPasswordAgePolicy(ctx context.Context) (*iam_model.PasswordAgePolicyView, error) + GetDefaultPasswordAgePolicy(ctx context.Context) (*iam_model.PasswordAgePolicyView, error) + AddPasswordAgePolicy(ctx context.Context, policy *iam_model.PasswordAgePolicy) (*iam_model.PasswordAgePolicy, error) + ChangePasswordAgePolicy(ctx context.Context, policy *iam_model.PasswordAgePolicy) (*iam_model.PasswordAgePolicy, error) + RemovePasswordAgePolicy(ctx context.Context) error + + GetPasswordLockoutPolicy(ctx context.Context) (*iam_model.PasswordLockoutPolicyView, error) + GetDefaultPasswordLockoutPolicy(ctx context.Context) (*iam_model.PasswordLockoutPolicyView, error) + AddPasswordLockoutPolicy(ctx context.Context, policy *iam_model.PasswordLockoutPolicy) (*iam_model.PasswordLockoutPolicy, error) + ChangePasswordLockoutPolicy(ctx context.Context, policy *iam_model.PasswordLockoutPolicy) (*iam_model.PasswordLockoutPolicy, error) + RemovePasswordLockoutPolicy(ctx context.Context) error } diff --git a/internal/management/repository/policy.go b/internal/management/repository/policy.go deleted file mode 100644 index 9e4808c579..0000000000 --- a/internal/management/repository/policy.go +++ /dev/null @@ -1,20 +0,0 @@ -package repository - -import ( - "context" - - "github.com/caos/zitadel/internal/policy/model" -) - -type PolicyRepository interface { - CreatePasswordComplexityPolicy(ctx context.Context, policy *model.PasswordComplexityPolicy) (*model.PasswordComplexityPolicy, error) - GetPasswordComplexityPolicy(ctx context.Context) (*model.PasswordComplexityPolicy, error) - GetDefaultPasswordComplexityPolicy(ctx context.Context) (*model.PasswordComplexityPolicy, error) - UpdatePasswordComplexityPolicy(ctx context.Context, policy *model.PasswordComplexityPolicy) (*model.PasswordComplexityPolicy, error) - CreatePasswordAgePolicy(ctx context.Context, policy *model.PasswordAgePolicy) (*model.PasswordAgePolicy, error) - GetPasswordAgePolicy(ctx context.Context) (*model.PasswordAgePolicy, error) - UpdatePasswordAgePolicy(ctx context.Context, policy *model.PasswordAgePolicy) (*model.PasswordAgePolicy, error) - CreatePasswordLockoutPolicy(ctx context.Context, policy *model.PasswordLockoutPolicy) (*model.PasswordLockoutPolicy, error) - GetPasswordLockoutPolicy(ctx context.Context) (*model.PasswordLockoutPolicy, error) - UpdatePasswordLockoutPolicy(ctx context.Context, policy *model.PasswordLockoutPolicy) (*model.PasswordLockoutPolicy, error) -} diff --git a/internal/management/repository/repository.go b/internal/management/repository/repository.go index 7351588889..0ed2044712 100644 --- a/internal/management/repository/repository.go +++ b/internal/management/repository/repository.go @@ -3,7 +3,6 @@ package repository type Repository interface { Health() error ProjectRepository - PolicyRepository OrgRepository UserRepository UserGrantRepository diff --git a/internal/notification/repository/eventsourcing/handler/handler.go b/internal/notification/repository/eventsourcing/handler/handler.go index 029e060349..a6db3edb74 100644 --- a/internal/notification/repository/eventsourcing/handler/handler.go +++ b/internal/notification/repository/eventsourcing/handler/handler.go @@ -8,6 +8,7 @@ import ( "github.com/caos/zitadel/internal/eventstore" "github.com/caos/zitadel/internal/eventstore/query" "github.com/caos/zitadel/internal/i18n" + iam_es "github.com/caos/zitadel/internal/iam/repository/eventsourcing" "github.com/caos/zitadel/internal/notification/repository/eventsourcing/view" org_event "github.com/caos/zitadel/internal/org/repository/eventsourcing" usr_event "github.com/caos/zitadel/internal/user/repository/eventsourcing" @@ -31,6 +32,7 @@ type handler struct { type EventstoreRepos struct { UserEvents *usr_event.UserEventstore OrgEvents *org_event.OrgEventstore + IAMEvents *iam_es.IAMEventstore } func Register(configs Configs, bulkLimit, errorCount uint64, view *view.View, eventstore eventstore.Eventstore, repos EventstoreRepos, systemDefaults sd.SystemDefaults, i18n *i18n.Translator, dir http.FileSystem) []query.Handler { @@ -42,6 +44,8 @@ func Register(configs Configs, bulkLimit, errorCount uint64, view *view.View, ev &NotifyUser{ handler: handler{view, bulkLimit, configs.cycleDuration("User"), errorCount}, orgEvents: repos.OrgEvents, + iamEvents: repos.IAMEvents, + iamID: systemDefaults.IamID, }, &Notification{ handler: handler{view, bulkLimit, configs.cycleDuration("Notification"), errorCount}, diff --git a/internal/notification/repository/eventsourcing/handler/notify_user.go b/internal/notification/repository/eventsourcing/handler/notify_user.go index 7309220ee0..e05e624d39 100644 --- a/internal/notification/repository/eventsourcing/handler/notify_user.go +++ b/internal/notification/repository/eventsourcing/handler/notify_user.go @@ -2,6 +2,7 @@ package handler import ( "context" + iam_es "github.com/caos/zitadel/internal/iam/repository/eventsourcing" "github.com/caos/logging" @@ -20,6 +21,8 @@ type NotifyUser struct { handler eventstore eventstore.Eventstore orgEvents *org_events.OrgEventstore + iamEvents *iam_es.IAMEventstore + iamID string } const ( @@ -120,9 +123,12 @@ func (u *NotifyUser) fillLoginNamesOnOrgUsers(event *models.Event) error { if err != nil { return err } - policy, err := u.orgEvents.GetOrgIAMPolicy(context.Background(), event.ResourceOwner) - if err != nil { - return err + policy := org.OrgIamPolicy + if policy == nil { + policy, err = u.iamEvents.GetOrgIAMPolicy(context.Background(), u.iamID) + if err != nil { + return err + } } users, err := u.view.NotifyUsersByOrgID(event.AggregateID) if err != nil { @@ -143,9 +149,12 @@ func (u *NotifyUser) fillPreferredLoginNamesOnOrgUsers(event *models.Event) erro if err != nil { return err } - policy, err := u.orgEvents.GetOrgIAMPolicy(context.Background(), event.ResourceOwner) - if err != nil { - return err + policy := org.OrgIamPolicy + if policy == nil { + policy, err = u.iamEvents.GetOrgIAMPolicy(context.Background(), u.iamID) + if err != nil { + return err + } } if !policy.UserLoginMustBeDomain { return nil @@ -169,9 +178,12 @@ func (u *NotifyUser) fillLoginNames(user *view_model.NotifyUser) (err error) { if err != nil { return err } - policy, err := u.orgEvents.GetOrgIAMPolicy(context.Background(), user.ResourceOwner) - if err != nil { - return err + policy := org.OrgIamPolicy + if policy == nil { + policy, err = u.iamEvents.GetOrgIAMPolicy(context.Background(), u.iamID) + if err != nil { + return err + } } user.SetLoginNames(policy, org.Domains) user.PreferredLoginName = user.GenerateLoginName(org.GetPrimaryDomain().Domain, policy.UserLoginMustBeDomain) diff --git a/internal/notification/repository/eventsourcing/repository.go b/internal/notification/repository/eventsourcing/repository.go index 2ebebae503..cfdae2787f 100644 --- a/internal/notification/repository/eventsourcing/repository.go +++ b/internal/notification/repository/eventsourcing/repository.go @@ -1,6 +1,7 @@ package eventsourcing import ( + es_iam "github.com/caos/zitadel/internal/iam/repository/eventsourcing" "net/http" sd "github.com/caos/zitadel/internal/config/systemdefaults" @@ -56,7 +57,14 @@ func Start(conf Config, dir http.FileSystem, systemDefaults sd.SystemDefaults) ( if err != nil { return nil, err } - eventstoreRepos := handler.EventstoreRepos{UserEvents: user, OrgEvents: org} + iam, err := es_iam.StartIAM(es_iam.IAMConfig{ + Eventstore: es, + Cache: conf.Eventstore.Cache, + }, systemDefaults) + if err != nil { + return nil, err + } + eventstoreRepos := handler.EventstoreRepos{UserEvents: user, OrgEvents: org, IAMEvents: iam} spool := spooler.StartSpooler(conf.Spooler, es, view, sqlClient, eventstoreRepos, systemDefaults, translator, dir) return &EsRepository{ diff --git a/internal/org/model/org.go b/internal/org/model/org.go index 83f3de8004..de08a14c81 100644 --- a/internal/org/model/org.go +++ b/internal/org/model/org.go @@ -14,9 +14,12 @@ type Org struct { Name string Domains []*OrgDomain - Members []*OrgMember - OrgIamPolicy *OrgIAMPolicy - LoginPolicy *iam_model.LoginPolicy + Members []*OrgMember + OrgIamPolicy *iam_model.OrgIAMPolicy + LoginPolicy *iam_model.LoginPolicy + PasswordComplexityPolicy *iam_model.PasswordComplexityPolicy + PasswordAgePolicy *iam_model.PasswordAgePolicy + PasswordLockoutPolicy *iam_model.PasswordLockoutPolicy IDPs []*iam_model.IDPConfig } diff --git a/internal/org/repository/eventsourcing/eventstore.go b/internal/org/repository/eventsourcing/eventstore.go index 5fa4c44000..494b5595f0 100644 --- a/internal/org/repository/eventsourcing/eventstore.go +++ b/internal/org/repository/eventsourcing/eventstore.go @@ -27,7 +27,6 @@ type OrgEventstore struct { idGenerator id.Generator verificationAlgorithm crypto.EncryptionAlgorithm verificationGenerator crypto.Generator - defaultOrgIamPolicy *org_model.OrgIAMPolicy verificationValidator func(domain string, token string, verifier string, checkType http_utils.CheckType) error secretCrypto crypto.Crypto } @@ -39,9 +38,6 @@ type OrgConfig struct { } func StartOrg(conf OrgConfig, defaults systemdefaults.SystemDefaults) *OrgEventstore { - policy := defaults.DefaultPolicies.OrgIam - policy.Default = true - policy.IamDomain = conf.IAMDomain verificationAlg, err := crypto.NewAESCrypto(defaults.DomainVerification.VerificationKey) logging.Log("EVENT-aZ22d").OnError(err).Panic("cannot create verificationAlgorithm for domain verification") verificationGen := crypto.NewEncryptionGenerator(defaults.DomainVerification.VerificationGenerator, verificationAlg) @@ -57,7 +53,6 @@ func StartOrg(conf OrgConfig, defaults systemdefaults.SystemDefaults) *OrgEvents verificationValidator: http_utils.ValidateDomain, IAMDomain: conf.IAMDomain, IamID: defaults.IamID, - defaultOrgIamPolicy: &policy, secretCrypto: aesCrypto, } } @@ -464,22 +459,18 @@ func (es *OrgEventstore) RemoveOrgMember(ctx context.Context, member *org_model. return es_sdk.Push(ctx, es.PushAggregates, repoMember.AppendEvents, orgAggregate) } -func (es *OrgEventstore) GetDefaultOrgIAMPolicy(ctx context.Context) *org_model.OrgIAMPolicy { - return es.defaultOrgIamPolicy -} - -func (es *OrgEventstore) GetOrgIAMPolicy(ctx context.Context, orgID string) (*org_model.OrgIAMPolicy, error) { +func (es *OrgEventstore) GetOrgIAMPolicy(ctx context.Context, orgID string) (*iam_model.OrgIAMPolicy, error) { existingOrg, err := es.OrgByID(ctx, org_model.NewOrg(orgID)) - if err != nil && !errors.IsNotFound(err) { + if err != nil { return nil, err } - if existingOrg != nil && existingOrg.OrgIamPolicy != nil { - return existingOrg.OrgIamPolicy, nil + if existingOrg.OrgIamPolicy == nil { + return nil, errors.ThrowNotFound(nil, "EVENT-3F9sf", "Errors.Org.OrgIAM.NotExisting") } - return es.defaultOrgIamPolicy, nil + return existingOrg.OrgIamPolicy, nil } -func (es *OrgEventstore) AddOrgIAMPolicy(ctx context.Context, policy *org_model.OrgIAMPolicy) (*org_model.OrgIAMPolicy, error) { +func (es *OrgEventstore) AddOrgIAMPolicy(ctx context.Context, policy *iam_model.OrgIAMPolicy) (*iam_model.OrgIAMPolicy, error) { existingOrg, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) if err != nil { return nil, err @@ -488,7 +479,7 @@ func (es *OrgEventstore) AddOrgIAMPolicy(ctx context.Context, policy *org_model. return nil, errors.ThrowPreconditionFailed(nil, "EVENT-7Usj3", "Errors.Org.PolicyAlreadyExists") } repoOrg := model.OrgFromModel(existingOrg) - repoPolicy := model.OrgIAMPolicyFromModel(policy) + repoPolicy := iam_es_model.OrgIAMPolicyFromModel(policy) orgAggregate := OrgIAMPolicyAddedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoPolicy) if err != nil { return nil, err @@ -498,10 +489,10 @@ func (es *OrgEventstore) AddOrgIAMPolicy(ctx context.Context, policy *org_model. return nil, err } - return model.OrgIAMPolicyToModel(repoOrg.OrgIamPolicy), nil + return iam_es_model.OrgIAMPolicyToModel(repoOrg.OrgIAMPolicy), nil } -func (es *OrgEventstore) ChangeOrgIAMPolicy(ctx context.Context, policy *org_model.OrgIAMPolicy) (*org_model.OrgIAMPolicy, error) { +func (es *OrgEventstore) ChangeOrgIAMPolicy(ctx context.Context, policy *iam_model.OrgIAMPolicy) (*iam_model.OrgIAMPolicy, error) { existingOrg, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) if err != nil { return nil, err @@ -510,7 +501,7 @@ func (es *OrgEventstore) ChangeOrgIAMPolicy(ctx context.Context, policy *org_mod return nil, errors.ThrowPreconditionFailed(nil, "EVENT-8juSd", "Errors.Org.PolicyNotExisting") } repoOrg := model.OrgFromModel(existingOrg) - repoPolicy := model.OrgIAMPolicyFromModel(policy) + repoPolicy := iam_es_model.OrgIAMPolicyFromModel(policy) orgAggregate := OrgIAMPolicyChangedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoPolicy) if err != nil { return nil, err @@ -520,7 +511,7 @@ func (es *OrgEventstore) ChangeOrgIAMPolicy(ctx context.Context, policy *org_mod return nil, err } - return model.OrgIAMPolicyToModel(repoOrg.OrgIamPolicy), nil + return iam_es_model.OrgIAMPolicyToModel(repoOrg.OrgIAMPolicy), nil } func (es *OrgEventstore) RemoveOrgIAMPolicy(ctx context.Context, orgID string) error { @@ -543,7 +534,7 @@ func (es *OrgEventstore) AddIDPConfig(ctx context.Context, idp *iam_model.IDPCon if idp == nil || !idp.IsValid(true) { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Ms89d", "Errors.Org.IdpInvalid") } - existing, err := es.OrgByID(ctx, org_model.NewOrg(idp.AggregateID)) + org, err := es.OrgByID(ctx, org_model.NewOrg(idp.AggregateID)) if err != nil { return nil, err } @@ -557,7 +548,7 @@ func (es *OrgEventstore) AddIDPConfig(ctx context.Context, idp *iam_model.IDPCon idp.OIDCConfig.IDPConfigID = id err = idp.OIDCConfig.CryptSecret(es.secretCrypto) } - repoOrg := model.OrgFromModel(existing) + repoOrg := model.OrgFromModel(org) repoIdp := iam_es_model.IDPConfigFromModel(idp) addAggregate := IDPConfigAddedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoIdp) @@ -575,14 +566,14 @@ func (es *OrgEventstore) ChangeIDPConfig(ctx context.Context, idp *iam_model.IDP if idp == nil || !idp.IsValid(false) { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Mslo9", "Errors.Org.IdpInvalid") } - existing, err := es.OrgByID(ctx, org_model.NewOrg(idp.AggregateID)) + org, err := es.OrgByID(ctx, org_model.NewOrg(idp.AggregateID)) if err != nil { return nil, err } - if _, i := existing.GetIDP(idp.IDPConfigID); i == nil { + if _, i := org.GetIDP(idp.IDPConfigID); i == nil { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Aji8e", "Errors.Org.IdpNotExisting") } - repoOrg := model.OrgFromModel(existing) + repoOrg := model.OrgFromModel(org) repoIdp := iam_es_model.IDPConfigFromModel(idp) iamAggregate := IDPConfigChangedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoIdp) @@ -600,14 +591,14 @@ func (es *OrgEventstore) PrepareRemoveIDPConfig(ctx context.Context, idp *iam_mo if idp.IDPConfigID == "" { return nil, nil, errors.ThrowPreconditionFailed(nil, "EVENT-Wz7sD", "Errors.Org.IDMissing") } - existing, err := es.OrgByID(ctx, org_model.NewOrg(idp.AggregateID)) + org, err := es.OrgByID(ctx, org_model.NewOrg(idp.AggregateID)) if err != nil { return nil, nil, err } - if _, i := existing.GetIDP(idp.IDPConfigID); i == nil { + if _, i := org.GetIDP(idp.IDPConfigID); i == nil { return nil, nil, errors.ThrowPreconditionFailed(nil, "EVENT-Smiu8", "Errors.Org.IdpNotExisting") } - repoOrg := model.OrgFromModel(existing) + repoOrg := model.OrgFromModel(org) repoIdp := iam_es_model.IDPConfigFromModel(idp) provider := new(iam_es_model.IDPProvider) if repoOrg.LoginPolicy != nil { @@ -632,15 +623,15 @@ func (es *OrgEventstore) DeactivateIDPConfig(ctx context.Context, orgID, idpID s if idpID == "" { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Smk8d", "Errors.Org.IDMissing") } - existing, err := es.OrgByID(ctx, org_model.NewOrg(orgID)) + org, err := es.OrgByID(ctx, org_model.NewOrg(orgID)) if err != nil { return nil, err } idp := &iam_model.IDPConfig{IDPConfigID: idpID} - if _, app := existing.GetIDP(idp.IDPConfigID); app == nil { + if _, app := org.GetIDP(idp.IDPConfigID); app == nil { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Amk8d", "Errors.Org.IdpNotExisting") } - repoOrg := model.OrgFromModel(existing) + repoOrg := model.OrgFromModel(org) repoIdp := iam_es_model.IDPConfigFromModel(idp) iamAggregate := IDPConfigDeactivatedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoIdp) @@ -658,15 +649,15 @@ func (es *OrgEventstore) ReactivateIDPConfig(ctx context.Context, orgID, idpID s if idpID == "" { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Xm8df", "Errors.Org.IDMissing") } - existing, err := es.OrgByID(ctx, org_model.NewOrg(orgID)) + org, err := es.OrgByID(ctx, org_model.NewOrg(orgID)) if err != nil { return nil, err } idp := &iam_model.IDPConfig{IDPConfigID: idpID} - if _, i := existing.GetIDP(idp.IDPConfigID); i == nil { + if _, i := org.GetIDP(idp.IDPConfigID); i == nil { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Qls0f", "Errors.Org.IdpNotExisting") } - repoOrg := model.OrgFromModel(existing) + repoOrg := model.OrgFromModel(org) repoIdp := iam_es_model.IDPConfigFromModel(idp) iamAggregate := IDPConfigReactivatedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoIdp) @@ -684,12 +675,12 @@ func (es *OrgEventstore) ChangeIDPOIDCConfig(ctx context.Context, config *iam_mo if config == nil || !config.IsValid(false) { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Qs789", "Errors.Org.OIDCConfigInvalid") } - existing, err := es.OrgByID(ctx, org_model.NewOrg(config.AggregateID)) + org, err := es.OrgByID(ctx, org_model.NewOrg(config.AggregateID)) if err != nil { return nil, err } var idp *iam_model.IDPConfig - if _, idp = existing.GetIDP(config.IDPConfigID); idp == nil { + if _, idp = org.GetIDP(config.IDPConfigID); idp == nil { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-pso0s", "Errors.Org.IdpNoExisting") } if idp.Type != iam_model.IDPConfigTypeOIDC { @@ -700,7 +691,7 @@ func (es *OrgEventstore) ChangeIDPOIDCConfig(ctx context.Context, config *iam_mo } else { config.ClientSecret = nil } - repoOrg := model.OrgFromModel(existing) + repoOrg := model.OrgFromModel(org) repoConfig := iam_es_model.OIDCIDPConfigFromModel(config) iamAggregate := OIDCIDPConfigChangedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoConfig) @@ -718,12 +709,12 @@ func (es *OrgEventstore) AddLoginPolicy(ctx context.Context, policy *iam_model.L if policy == nil || !policy.IsValid() { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Sjkl9", "Errors.Org.LoginPolicy.Invalid") } - existing, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) + org, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) if err != nil { return nil, err } - repoOrg := model.OrgFromModel(existing) + repoOrg := model.OrgFromModel(org) repoLoginPolicy := iam_es_model.LoginPolicyFromModel(policy) addAggregate := LoginPolicyAddedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoLoginPolicy) @@ -738,16 +729,16 @@ func (es *OrgEventstore) ChangeLoginPolicy(ctx context.Context, policy *iam_mode if policy == nil || !policy.IsValid() { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Lso02", "Errors.Org.LoginPolicy.Invalid") } - existing, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) + org, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) if err != nil { return nil, err } - if existing.LoginPolicy == nil { + if org.LoginPolicy == nil { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Lso02", "Errors.Org.LoginPolicy.NotExisting") } - repoOrg := model.OrgFromModel(existing) + repoOrg := model.OrgFromModel(org) repoLoginPolicy := iam_es_model.LoginPolicyFromModel(policy) addAggregate := LoginPolicyChangedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoLoginPolicy) @@ -762,11 +753,11 @@ func (es *OrgEventstore) RemoveLoginPolicy(ctx context.Context, policy *iam_mode if policy == nil || !policy.IsValid() { return errors.ThrowPreconditionFailed(nil, "EVENT-O0s9e", "Errors.Org.LoginPolicy.Invalid") } - existing, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) + org, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) if err != nil { return err } - repoOrg := model.OrgFromModel(existing) + repoOrg := model.OrgFromModel(org) addAggregate := LoginPolicyRemovedAggregate(es.Eventstore.AggregateCreator(), repoOrg) return es_sdk.Push(ctx, es.PushAggregates, repoOrg.AppendEvents, addAggregate) @@ -787,17 +778,17 @@ func (es *OrgEventstore) AddIDPProviderToLoginPolicy(ctx context.Context, provid if provider == nil || !provider.IsValid() { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Sjd8e", "Errors.Org.IdpProviderInvalid") } - existing, err := es.OrgByID(ctx, org_model.NewOrg(provider.AggregateID)) + org, err := es.OrgByID(ctx, org_model.NewOrg(provider.AggregateID)) if err != nil { return nil, err } - if existing.LoginPolicy == nil { + if org.LoginPolicy == nil { return nil, errors.ThrowAlreadyExists(nil, "EVENT-sk9fW", "Errors.Org.LoginPolicy.NotExisting") } - if _, m := existing.LoginPolicy.GetIdpProvider(provider.IdpConfigID); m != nil { + if _, m := org.LoginPolicy.GetIdpProvider(provider.IdpConfigID); m != nil { return nil, errors.ThrowAlreadyExists(nil, "EVENT-Lso9f", "Errors.Org.LoginPolicy.IdpProviderAlreadyExisting") } - repoOrg := model.OrgFromModel(existing) + repoOrg := model.OrgFromModel(org) repoProvider := iam_es_model.IDPProviderFromModel(provider) addAggregate := LoginPolicyIDPProviderAddedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoProvider, es.IamID) @@ -815,14 +806,14 @@ func (es *OrgEventstore) PrepareRemoveIDPProviderFromLoginPolicy(ctx context.Con if provider == nil || !provider.IsValid() { return nil, nil, errors.ThrowPreconditionFailed(nil, "EVENT-Esi8c", "Errors.IdpProviderInvalid") } - existing, err := es.OrgByID(ctx, org_model.NewOrg(provider.AggregateID)) + org, err := es.OrgByID(ctx, org_model.NewOrg(provider.AggregateID)) if err != nil { return nil, nil, err } - if _, m := existing.LoginPolicy.GetIdpProvider(provider.IdpConfigID); m == nil { + if _, m := org.LoginPolicy.GetIdpProvider(provider.IdpConfigID); m == nil { return nil, nil, errors.ThrowPreconditionFailed(nil, "EVENT-29skr", "Errors.IAM.LoginPolicy.IdpProviderNotExisting") } - repoOrg := model.OrgFromModel(existing) + repoOrg := model.OrgFromModel(org) providerID := &iam_es_model.IDPProviderID{provider.IdpConfigID} providerAggregates, err := LoginPolicyIDPProviderRemovedAggregate(ctx, es.Eventstore.AggregateCreator(), repoOrg, providerID, cascade) if err != nil { @@ -838,3 +829,184 @@ func (es *OrgEventstore) RemoveIDPProviderFromLoginPolicy(ctx context.Context, p } return es_sdk.PushAggregates(ctx, es.PushAggregates, repoOrg.AppendEvents, agg) } + +func (es *OrgEventstore) AddPasswordComplexityPolicy(ctx context.Context, policy *iam_model.PasswordComplexityPolicy) (*iam_model.PasswordComplexityPolicy, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Sjkl9", "Errors.Org.PasswordComplexityPolicy.Invalid") + } + + if err := policy.IsValid(); err != nil { + return nil, err + } + org, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) + if err != nil { + return nil, err + } + + repoOrg := model.OrgFromModel(org) + repoPasswordComplexityPolicy := iam_es_model.PasswordComplexityPolicyFromModel(policy) + + addAggregate := PasswordComplexityPolicyAddedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoPasswordComplexityPolicy) + err = es_sdk.Push(ctx, es.PushAggregates, repoOrg.AppendEvents, addAggregate) + if err != nil { + return nil, err + } + return iam_es_model.PasswordComplexityPolicyToModel(repoOrg.PasswordComplexityPolicy), nil +} + +func (es *OrgEventstore) ChangePasswordComplexityPolicy(ctx context.Context, policy *iam_model.PasswordComplexityPolicy) (*iam_model.PasswordComplexityPolicy, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-r5Hd", "Errors.Org.PasswordComplexityPolicy.Empty") + } + if err := policy.IsValid(); err != nil { + return nil, err + } + org, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) + if err != nil { + return nil, err + } + + if org.PasswordComplexityPolicy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-v6Hdr", "Errors.Org.PasswordComplexityPolicy.NotExisting") + } + + repoOrg := model.OrgFromModel(org) + repoPasswordComplexityPolicy := iam_es_model.PasswordComplexityPolicyFromModel(policy) + + addAggregate := PasswordComplexityPolicyChangedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoPasswordComplexityPolicy) + err = es_sdk.Push(ctx, es.PushAggregates, repoOrg.AppendEvents, addAggregate) + if err != nil { + return nil, err + } + return iam_es_model.PasswordComplexityPolicyToModel(repoOrg.PasswordComplexityPolicy), nil +} + +func (es *OrgEventstore) RemovePasswordComplexityPolicy(ctx context.Context, policy *iam_model.PasswordComplexityPolicy) error { + if policy == nil || policy.AggregateID == "" { + return errors.ThrowPreconditionFailed(nil, "EVENT-3Ghs8", "Errors.Org.PasswordComplexityPolicy.Invalid") + } + org, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) + if err != nil { + return err + } + repoOrg := model.OrgFromModel(org) + + addAggregate := PasswordComplexityPolicyRemovedAggregate(es.Eventstore.AggregateCreator(), repoOrg) + return es_sdk.Push(ctx, es.PushAggregates, repoOrg.AppendEvents, addAggregate) +} + +func (es *OrgEventstore) AddPasswordAgePolicy(ctx context.Context, policy *iam_model.PasswordAgePolicy) (*iam_model.PasswordAgePolicy, error) { + if policy == nil || policy.AggregateID == "" { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Sjkl9", "Errors.Org.PasswordAgePolicy.Invalid") + } + org, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) + if err != nil { + return nil, err + } + + repoOrg := model.OrgFromModel(org) + repoPasswordAgePolicy := iam_es_model.PasswordAgePolicyFromModel(policy) + + addAggregate := PasswordAgePolicyAddedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoPasswordAgePolicy) + err = es_sdk.Push(ctx, es.PushAggregates, repoOrg.AppendEvents, addAggregate) + if err != nil { + return nil, err + } + return iam_es_model.PasswordAgePolicyToModel(repoOrg.PasswordAgePolicy), nil +} + +func (es *OrgEventstore) ChangePasswordAgePolicy(ctx context.Context, policy *iam_model.PasswordAgePolicy) (*iam_model.PasswordAgePolicy, error) { + if policy == nil || policy.AggregateID == "" { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-r5Hd", "Errors.Org.PasswordAgePolicy.Empty") + } + org, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) + if err != nil { + return nil, err + } + + if org.PasswordAgePolicy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-v6Hdr", "Errors.Org.PasswordAgePolicy.NotExisting") + } + + repoOrg := model.OrgFromModel(org) + repoPasswordAgePolicy := iam_es_model.PasswordAgePolicyFromModel(policy) + + addAggregate := PasswordAgePolicyChangedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoPasswordAgePolicy) + err = es_sdk.Push(ctx, es.PushAggregates, repoOrg.AppendEvents, addAggregate) + if err != nil { + return nil, err + } + return iam_es_model.PasswordAgePolicyToModel(repoOrg.PasswordAgePolicy), nil +} + +func (es *OrgEventstore) RemovePasswordAgePolicy(ctx context.Context, policy *iam_model.PasswordAgePolicy) error { + if policy == nil || policy.AggregateID == "" { + return errors.ThrowPreconditionFailed(nil, "EVENT-3Ghs8", "Errors.Org.PasswordAgePolicy.Invalid") + } + org, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) + if err != nil { + return err + } + repoOrg := model.OrgFromModel(org) + + addAggregate := PasswordAgePolicyRemovedAggregate(es.Eventstore.AggregateCreator(), repoOrg) + return es_sdk.Push(ctx, es.PushAggregates, repoOrg.AppendEvents, addAggregate) +} + +func (es *OrgEventstore) AddPasswordLockoutPolicy(ctx context.Context, policy *iam_model.PasswordLockoutPolicy) (*iam_model.PasswordLockoutPolicy, error) { + if policy == nil || policy.AggregateID == "" { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-6Zdk9", "Errors.Org.PasswordLockoutPolicy.Invalid") + } + org, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) + if err != nil { + return nil, err + } + + repoOrg := model.OrgFromModel(org) + repoPasswordLockoutPolicy := iam_es_model.PasswordLockoutPolicyFromModel(policy) + + addAggregate := PasswordLockoutPolicyAddedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoPasswordLockoutPolicy) + err = es_sdk.Push(ctx, es.PushAggregates, repoOrg.AppendEvents, addAggregate) + if err != nil { + return nil, err + } + return iam_es_model.PasswordLockoutPolicyToModel(repoOrg.PasswordLockoutPolicy), nil +} + +func (es *OrgEventstore) ChangePasswordLockoutPolicy(ctx context.Context, policy *iam_model.PasswordLockoutPolicy) (*iam_model.PasswordLockoutPolicy, error) { + if policy == nil || policy.AggregateID == "" { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-lp0Sf", "Errors.Org.PasswordLockoutPolicy.Empty") + } + org, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) + if err != nil { + return nil, err + } + + if org.PasswordLockoutPolicy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-3Fks9", "Errors.Org.PasswordLockoutPolicy.NotExisting") + } + + repoOrg := model.OrgFromModel(org) + repoPasswordLockoutPolicy := iam_es_model.PasswordLockoutPolicyFromModel(policy) + + addAggregate := PasswordLockoutPolicyChangedAggregate(es.Eventstore.AggregateCreator(), repoOrg, repoPasswordLockoutPolicy) + err = es_sdk.Push(ctx, es.PushAggregates, repoOrg.AppendEvents, addAggregate) + if err != nil { + return nil, err + } + return iam_es_model.PasswordLockoutPolicyToModel(repoOrg.PasswordLockoutPolicy), nil +} + +func (es *OrgEventstore) RemovePasswordLockoutPolicy(ctx context.Context, policy *iam_model.PasswordLockoutPolicy) error { + if policy == nil || policy.AggregateID == "" { + return errors.ThrowPreconditionFailed(nil, "EVENT-6Hls0", "Errors.Org.PasswordLockoutPolicy.Invalid") + } + org, err := es.OrgByID(ctx, org_model.NewOrg(policy.AggregateID)) + if err != nil { + return err + } + repoOrg := model.OrgFromModel(org) + + addAggregate := PasswordLockoutPolicyRemovedAggregate(es.Eventstore.AggregateCreator(), repoOrg) + return es_sdk.Push(ctx, es.PushAggregates, repoOrg.AppendEvents, addAggregate) +} diff --git a/internal/org/repository/eventsourcing/eventstore_mock_test.go b/internal/org/repository/eventsourcing/eventstore_mock_test.go index a2ab610d10..f5bd7360ff 100644 --- a/internal/org/repository/eventsourcing/eventstore_mock_test.go +++ b/internal/org/repository/eventsourcing/eventstore_mock_test.go @@ -41,7 +41,7 @@ func GetMockChangesOrgOK(ctrl *gomock.Controller) *OrgEventstore { } events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateIDApp", Sequence: 1, AggregateType: repo_model.OrgAggregate, Data: data}, + {AggregateID: "AggregateIDApp", Sequence: 1, AggregateType: repo_model.OrgAggregate, Data: data}, } mockEs := mock.NewMockEventstore(ctrl) mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) @@ -63,7 +63,7 @@ func GetMockChangesOrgWithCrypto(ctrl *gomock.Controller) *OrgEventstore { } data, _ := json.Marshal(org) events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.OrgAdded, Data: data}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.OrgAdded, Data: data}, } mockEs := mock.NewMockEventstore(ctrl) mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) @@ -77,9 +77,9 @@ func GetMockChangesOrgWithOIDCIdp(ctrl *gomock.Controller) *OrgEventstore { idpData, _ := json.Marshal(iam_es_model.IDPConfig{IDPConfigID: "IDPConfigID", Name: "Name"}) oidcData, _ := json.Marshal(iam_es_model.OIDCIDPConfig{IDPConfigID: "IDPConfigID", ClientID: "ClientID"}) events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.OrgAdded, Data: orgData}, - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.IDPConfigAdded, Data: idpData}, - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.OIDCIDPConfigAdded, Data: oidcData}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.OrgAdded, Data: orgData}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.IDPConfigAdded, Data: idpData}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.OIDCIDPConfigAdded, Data: oidcData}, } mockEs := mock.NewMockEventstore(ctrl) mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) @@ -93,9 +93,63 @@ func GetMockChangesOrgWithLoginPolicy(ctrl *gomock.Controller) *OrgEventstore { loginPolicy, _ := json.Marshal(iam_es_model.LoginPolicy{AllowRegister: true, AllowExternalIdp: true, AllowUsernamePassword: true}) idpData, _ := json.Marshal(iam_es_model.IDPProvider{IDPConfigID: "IDPConfigID", Type: int32(iam_model.IDPProviderTypeSystem)}) events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.OrgAdded, Data: orgData}, - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.LoginPolicyAdded, Data: loginPolicy}, - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.LoginPolicyIDPProviderAdded, Data: idpData}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.OrgAdded, Data: orgData}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.LoginPolicyAdded, Data: loginPolicy}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.LoginPolicyIDPProviderAdded, Data: idpData}, + } + mockEs := mock.NewMockEventstore(ctrl) + mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) + mockEs.EXPECT().AggregateCreator().Return(es_models.NewAggregateCreator("TEST")) + mockEs.EXPECT().PushAggregates(gomock.Any(), gomock.Any()).Return(nil) + return GetMockedEventstore(ctrl, mockEs) +} + +func GetMockChangesOrgWithPasswordComplexityPolicy(ctrl *gomock.Controller) *OrgEventstore { + orgData, _ := json.Marshal(model.Org{Name: "MusterOrg"}) + passwordComplexityPolicy, _ := json.Marshal(iam_es_model.PasswordComplexityPolicy{ + MinLength: 10, + HasLowercase: true, + HasUppercase: true, + HasSymbol: true, + HasNumber: true, + }) + events := []*es_models.Event{ + {AggregateID: "AggregateID", Sequence: 1, Type: model.OrgAdded, Data: orgData}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.PasswordComplexityPolicyAdded, Data: passwordComplexityPolicy}, + } + mockEs := mock.NewMockEventstore(ctrl) + mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) + mockEs.EXPECT().AggregateCreator().Return(es_models.NewAggregateCreator("TEST")) + mockEs.EXPECT().PushAggregates(gomock.Any(), gomock.Any()).Return(nil) + return GetMockedEventstore(ctrl, mockEs) +} + +func GetMockChangesOrgWithPasswordLockoutPolicy(ctrl *gomock.Controller) *OrgEventstore { + orgData, _ := json.Marshal(model.Org{Name: "MusterOrg"}) + passwordLockoutPolicy, _ := json.Marshal(iam_es_model.PasswordLockoutPolicy{ + MaxAttempts: 10, + ShowLockOutFailures: true, + }) + events := []*es_models.Event{ + {AggregateID: "AggregateID", Sequence: 1, Type: model.OrgAdded, Data: orgData}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.PasswordLockoutPolicyAdded, Data: passwordLockoutPolicy}, + } + mockEs := mock.NewMockEventstore(ctrl) + mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) + mockEs.EXPECT().AggregateCreator().Return(es_models.NewAggregateCreator("TEST")) + mockEs.EXPECT().PushAggregates(gomock.Any(), gomock.Any()).Return(nil) + return GetMockedEventstore(ctrl, mockEs) +} + +func GetMockChangesOrgWithPasswordAgePolicy(ctrl *gomock.Controller) *OrgEventstore { + orgData, _ := json.Marshal(model.Org{Name: "MusterOrg"}) + passwordAgePolicy, _ := json.Marshal(iam_es_model.PasswordAgePolicy{ + MaxAgeDays: 10, + ExpireWarnDays: 10, + }) + events := []*es_models.Event{ + {AggregateID: "AggregateID", Sequence: 1, Type: model.OrgAdded, Data: orgData}, + {AggregateID: "AggregateID", Sequence: 1, Type: model.PasswordAgePolicyAdded, Data: passwordAgePolicy}, } mockEs := mock.NewMockEventstore(ctrl) mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) diff --git a/internal/org/repository/eventsourcing/eventstore_test.go b/internal/org/repository/eventsourcing/eventstore_test.go index 440d585bdf..dbfceee8e0 100644 --- a/internal/org/repository/eventsourcing/eventstore_test.go +++ b/internal/org/repository/eventsourcing/eventstore_test.go @@ -1656,11 +1656,15 @@ func TestChangesOrg(t *testing.T) { if err != nil { } } - if !tt.res.wantErr && result.LastSequence != tt.res.changes.LastSequence && org.Name != tt.res.org.Name { - t.Errorf("got wrong result name: expected: %v, actual: %v ", tt.res.changes.LastSequence, result.LastSequence) - } - if tt.res.wantErr && !tt.res.errFunc(err) { + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.LastSequence != tt.res.changes.LastSequence && org.Name != tt.res.org.Name { + t.Errorf("got wrong result name: expected: %v, actual: %v ", tt.res.changes.LastSequence, result.LastSequence) } }) } @@ -1749,25 +1753,28 @@ func TestAddIdpConfiguration(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.AddIDPConfig(tt.args.ctx, tt.args.idp) - - if !tt.res.wantErr && result.IDPConfigID == "" { + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.IDPConfigID == "" { t.Errorf("result has no id") } - if !tt.res.wantErr && result.OIDCConfig.IDPConfigID == "" { + if result.OIDCConfig.IDPConfigID == "" { t.Errorf("result has no id") } - if !tt.res.wantErr && result.OIDCConfig == nil && result.OIDCConfig.ClientSecret == nil { + if result.OIDCConfig == nil && result.OIDCConfig.ClientSecret == nil { t.Errorf("result has no client secret") } - if !tt.res.wantErr && result.Name != tt.res.result.Name { + if result.Name != tt.res.result.Name { t.Errorf("got wrong result key: expected: %v, actual: %v ", tt.res.result.Name, result.Name) } - if !tt.res.wantErr && result.OIDCConfig.ClientID != tt.res.result.OIDCConfig.ClientID { + if result.OIDCConfig.ClientID != tt.res.result.OIDCConfig.ClientID { t.Errorf("got wrong result key: expected: %v, actual: %v ", tt.res.result.OIDCConfig.ClientID, result.OIDCConfig.ClientID) } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -1863,19 +1870,22 @@ func TestChangeIdpConfiguration(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.ChangeIDPConfig(tt.args.ctx, tt.args.idp) - - if !tt.res.wantErr && result.AggregateID == "" { + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.AggregateID == "" { t.Errorf("result has no id") } - if !tt.res.wantErr && result.IDPConfigID != tt.res.result.IDPConfigID { + if result.IDPConfigID != tt.res.result.IDPConfigID { t.Errorf("got wrong result IdpConfigID: expected: %v, actual: %v ", tt.res.result.IDPConfigID, result.IDPConfigID) } - if !tt.res.wantErr && result.Name != tt.res.result.Name { + if result.Name != tt.res.result.Name { t.Errorf("got wrong result name: expected: %v, actual: %v ", tt.res.result.Name, result.Name) } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -2050,19 +2060,22 @@ func TestDeactivateIdpConfiguration(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.DeactivateIDPConfig(tt.args.ctx, tt.args.idp.AggregateID, tt.args.idp.IDPConfigID) - - if !tt.res.wantErr && result.AggregateID == "" { + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.AggregateID == "" { t.Errorf("result has no id") } - if !tt.res.wantErr && result.IDPConfigID != tt.res.result.IDPConfigID { + if result.IDPConfigID != tt.res.result.IDPConfigID { t.Errorf("got wrong result IDPConfigID: expected: %v, actual: %v ", tt.res.result.IDPConfigID, result.IDPConfigID) } - if !tt.res.wantErr && result.State != tt.res.result.State { + if result.State != tt.res.result.State { t.Errorf("got wrong result state: expected: %v, actual: %v ", tt.res.result.State, result.State) } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -2157,19 +2170,22 @@ func TestReactivateIdpConfiguration(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.ReactivateIDPConfig(tt.args.ctx, tt.args.idp.AggregateID, tt.args.idp.IDPConfigID) - - if !tt.res.wantErr && result.AggregateID == "" { + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.AggregateID == "" { t.Errorf("result has no id") } - if !tt.res.wantErr && result.IDPConfigID != tt.res.result.IDPConfigID { + if result.IDPConfigID != tt.res.result.IDPConfigID { t.Errorf("got wrong result IDPConfigID: expected: %v, actual: %v ", tt.res.result.IDPConfigID, result.IDPConfigID) } - if !tt.res.wantErr && result.State != tt.res.result.State { + if result.State != tt.res.result.State { t.Errorf("got wrong result state: expected: %v, actual: %v ", tt.res.result.State, result.State) } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -2267,19 +2283,22 @@ func TestChangeOIDCIDPConfig(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.ChangeIDPOIDCConfig(tt.args.ctx, tt.args.config) - - if !tt.res.wantErr && result.AggregateID == "" { + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.AggregateID == "" { t.Errorf("result has no id") } - if !tt.res.wantErr && result.IDPConfigID != tt.res.result.IDPConfigID { + if result.IDPConfigID != tt.res.result.IDPConfigID { t.Errorf("got wrong result AppID: expected: %v, actual: %v ", tt.res.result.IDPConfigID, result.IDPConfigID) } - if !tt.res.wantErr && result.ClientID != tt.res.result.ClientID { + if result.ClientID != tt.res.result.ClientID { t.Errorf("got wrong result responsetype: expected: %v, actual: %v ", tt.res.result.ClientID, result.ClientID) } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -2431,19 +2450,22 @@ func TestChangeLoginPolicy(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.ChangeLoginPolicy(tt.args.ctx, tt.args.policy) - - if !tt.res.wantErr && result.AllowRegister != tt.res.result.AllowRegister { + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.AllowRegister != tt.res.result.AllowRegister { t.Errorf("got wrong result AllowRegister: expected: %v, actual: %v ", tt.res.result.AllowRegister, result.AllowRegister) } - if !tt.res.wantErr && result.AllowUsernamePassword != tt.res.result.AllowUsernamePassword { + if result.AllowUsernamePassword != tt.res.result.AllowUsernamePassword { t.Errorf("got wrong result AllowUsernamePassword: expected: %v, actual: %v ", tt.res.result.AllowUsernamePassword, result.AllowUsernamePassword) } - if !tt.res.wantErr && result.AllowExternalIdp != tt.res.result.AllowExternalIdp { + if result.AllowExternalIdp != tt.res.result.AllowExternalIdp { t.Errorf("got wrong result AllowExternalIDP: expected: %v, actual: %v ", tt.res.result.AllowExternalIdp, result.AllowExternalIdp) } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -2603,16 +2625,19 @@ func TestAddIdpProviderToLoginPolicy(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := tt.args.es.AddIDPProviderToLoginPolicy(tt.args.ctx, tt.args.provider) - - if !tt.res.wantErr && result.IdpConfigID != tt.res.result.IdpConfigID { + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.IdpConfigID != tt.res.result.IdpConfigID { t.Errorf("got wrong result IDPConfigID: expected: %v, actual: %v ", tt.res.result.IdpConfigID, result.IdpConfigID) } - if !tt.res.wantErr && result.Type != tt.res.result.Type { + if result.Type != tt.res.result.Type { t.Errorf("got wrong result Type: expected: %v, actual: %v ", tt.res.result.Type, result.Type) } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } }) } } @@ -2705,3 +2730,766 @@ func TestRemoveIdpProviderFromLoginPolicy(t *testing.T) { }) } } + +func TestAddPasswordComplexityPolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *OrgEventstore + ctx context.Context + policy *iam_model.PasswordComplexityPolicy + } + type res struct { + result *iam_model.PasswordComplexityPolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "add password complexity policy, ok", + args: args{ + es: GetMockChangesOrgOK(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MinLength: 10, + HasLowercase: true, + HasUppercase: true, + HasSymbol: true, + HasNumber: true, + }, + }, + res: res{ + result: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MinLength: 10, + HasLowercase: true, + HasUppercase: true, + HasSymbol: true, + HasNumber: true, + }, + }, + }, + { + name: "invalid policy", + args: args{ + es: GetMockChangesOrgOK(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{Sequence: 0}, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsErrorInvalidArgument, + }, + }, + { + name: "existing org not found", + args: args{ + es: GetMockChangesOrgNoEvents(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MinLength: 10, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := tt.args.es.AddPasswordComplexityPolicy(tt.args.ctx, tt.args.policy) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.MinLength != tt.res.result.MinLength { + t.Errorf("got wrong result MinLength: expected: %v, actual: %v ", tt.res.result.MinLength, result.MinLength) + } + if result.HasLowercase != tt.res.result.HasLowercase { + t.Errorf("got wrong result HasLowercase: expected: %v, actual: %v ", tt.res.result.HasLowercase, result.HasLowercase) + } + if result.HasUppercase != tt.res.result.HasUppercase { + t.Errorf("got wrong result HasUppercase: expected: %v, actual: %v ", tt.res.result.HasUppercase, result.HasUppercase) + } + if result.HasNumber != tt.res.result.HasNumber { + t.Errorf("got wrong result HasNumber: expected: %v, actual: %v ", tt.res.result.HasNumber, result.HasNumber) + } + if result.HasSymbol != tt.res.result.HasSymbol { + t.Errorf("got wrong result HasSymbol: expected: %v, actual: %v ", tt.res.result.HasSymbol, result.HasSymbol) + } + }) + } +} + +func TestChangePasswordComplexityPolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *OrgEventstore + ctx context.Context + policy *iam_model.PasswordComplexityPolicy + } + type res struct { + result *iam_model.PasswordComplexityPolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "change password complexity policy, ok", + args: args{ + es: GetMockChangesOrgWithPasswordComplexityPolicy(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MinLength: 5, + HasLowercase: false, + HasUppercase: false, + HasSymbol: false, + HasNumber: false, + }, + }, + res: res{ + result: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MinLength: 5, + HasLowercase: false, + HasUppercase: false, + HasSymbol: false, + HasNumber: false, + }, + }, + }, + { + name: "invalid policy", + args: args{ + es: GetMockChangesOrgOK(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{Sequence: 0}, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsErrorInvalidArgument, + }, + }, + { + name: "existing iam not found", + args: args{ + es: GetMockChangesOrgNoEvents(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MinLength: 10, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := tt.args.es.ChangePasswordComplexityPolicy(tt.args.ctx, tt.args.policy) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.MinLength != tt.res.result.MinLength { + t.Errorf("got wrong result MinLength: expected: %v, actual: %v ", tt.res.result.MinLength, result.MinLength) + } + if result.HasLowercase != tt.res.result.HasLowercase { + t.Errorf("got wrong result HasLowercase: expected: %v, actual: %v ", tt.res.result.HasLowercase, result.HasLowercase) + } + if result.HasUppercase != tt.res.result.HasUppercase { + t.Errorf("got wrong result HasUppercase: expected: %v, actual: %v ", tt.res.result.HasUppercase, result.HasUppercase) + } + if result.HasNumber != tt.res.result.HasNumber { + t.Errorf("got wrong result HasNumber: expected: %v, actual: %v ", tt.res.result.HasNumber, result.HasNumber) + } + if result.HasSymbol != tt.res.result.HasSymbol { + t.Errorf("got wrong result HasSymbol: expected: %v, actual: %v ", tt.res.result.HasSymbol, result.HasSymbol) + } + }) + } +} + +func TestRemovePasswordComplexityPolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *OrgEventstore + ctx context.Context + policy *iam_model.PasswordComplexityPolicy + } + type res struct { + result *iam_model.PasswordComplexityPolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "remove password compelxity policy, ok", + args: args{ + es: GetMockChangesOrgWithPasswordComplexityPolicy(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + }, + }, + res: res{}, + }, + { + name: "invalid policy", + args: args{ + es: GetMockChangesOrgOK(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{Sequence: 0}, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing iam not found", + args: args{ + es: GetMockChangesOrgNoEvents(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordComplexityPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.args.es.RemovePasswordComplexityPolicy(tt.args.ctx, tt.args.policy) + + if !tt.res.wantErr && err != nil { + t.Errorf("got wrong result should not get err: %v", err) + } + if tt.res.wantErr && !tt.res.errFunc(err) { + t.Errorf("got wrong err: %v ", err) + } + }) + } +} + +func TestAddPasswordAgePolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *OrgEventstore + ctx context.Context + policy *iam_model.PasswordAgePolicy + } + type res struct { + result *iam_model.PasswordAgePolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "add password age policy, ok", + args: args{ + es: GetMockChangesOrgOK(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAgeDays: 10, + ExpireWarnDays: 10, + }, + }, + res: res{ + result: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAgeDays: 10, + ExpireWarnDays: 10, + }, + }, + }, + { + name: "invalid policy", + args: args{ + es: GetMockChangesOrgOK(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{Sequence: 0}, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing org not found", + args: args{ + es: GetMockChangesOrgNoEvents(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAgeDays: 10, + ExpireWarnDays: 10, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := tt.args.es.AddPasswordAgePolicy(tt.args.ctx, tt.args.policy) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.MaxAgeDays != tt.res.result.MaxAgeDays { + t.Errorf("got wrong result MaxAgeDays: expected: %v, actual: %v ", tt.res.result.MaxAgeDays, result.MaxAgeDays) + } + if result.ExpireWarnDays != tt.res.result.ExpireWarnDays { + t.Errorf("got wrong result.ExpireWarnDays: expected: %v, actual: %v ", tt.res.result.ExpireWarnDays, result.ExpireWarnDays) + } + }) + } +} + +func TestChangePasswordAgePolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *OrgEventstore + ctx context.Context + policy *iam_model.PasswordAgePolicy + } + type res struct { + result *iam_model.PasswordAgePolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "change password age policy, ok", + args: args{ + es: GetMockChangesOrgWithPasswordAgePolicy(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAgeDays: 5, + ExpireWarnDays: 5, + }, + }, + res: res{ + result: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAgeDays: 5, + ExpireWarnDays: 5, + }, + }, + }, + { + name: "invalid policy", + args: args{ + es: GetMockChangesOrgOK(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{Sequence: 0}, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing iam not found", + args: args{ + es: GetMockChangesOrgNoEvents(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAgeDays: 10, + ExpireWarnDays: 10, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := tt.args.es.ChangePasswordAgePolicy(tt.args.ctx, tt.args.policy) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.MaxAgeDays != tt.res.result.MaxAgeDays { + t.Errorf("got wrong result MaxAgeDays: expected: %v, actual: %v ", tt.res.result.MaxAgeDays, result.MaxAgeDays) + } + if result.ExpireWarnDays != tt.res.result.ExpireWarnDays { + t.Errorf("got wrong result.ExpireWarnDays: expected: %v, actual: %v ", tt.res.result.ExpireWarnDays, result.ExpireWarnDays) + } + }) + } +} + +func TestRemovePasswordAgePolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *OrgEventstore + ctx context.Context + policy *iam_model.PasswordAgePolicy + } + type res struct { + result *iam_model.PasswordAgePolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "remove password age policy, ok", + args: args{ + es: GetMockChangesOrgWithPasswordAgePolicy(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + }, + }, + res: res{}, + }, + { + name: "invalid policy", + args: args{ + es: GetMockChangesOrgOK(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{Sequence: 0}, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing iam not found", + args: args{ + es: GetMockChangesOrgNoEvents(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordAgePolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.args.es.RemovePasswordAgePolicy(tt.args.ctx, tt.args.policy) + + if !tt.res.wantErr && err != nil { + t.Errorf("got wrong result should not get err: %v", err) + } + if tt.res.wantErr && !tt.res.errFunc(err) { + t.Errorf("got wrong err: %v ", err) + } + }) + } +} + +func TestAddPasswordLockoutPolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *OrgEventstore + ctx context.Context + policy *iam_model.PasswordLockoutPolicy + } + type res struct { + result *iam_model.PasswordLockoutPolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "add password lockout policy, ok", + args: args{ + es: GetMockChangesOrgOK(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAttempts: 10, + ShowLockOutFailures: true, + }, + }, + res: res{ + result: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAttempts: 10, + ShowLockOutFailures: true, + }, + }, + }, + { + name: "invalid policy", + args: args{ + es: GetMockChangesOrgOK(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{Sequence: 0}, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing org not found", + args: args{ + es: GetMockChangesOrgNoEvents(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAttempts: 10, + ShowLockOutFailures: true, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := tt.args.es.AddPasswordLockoutPolicy(tt.args.ctx, tt.args.policy) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.MaxAttempts != tt.res.result.MaxAttempts { + t.Errorf("got wrong result MaxAttempts: expected: %v, actual: %v ", tt.res.result.MaxAttempts, result.MaxAttempts) + } + if result.ShowLockOutFailures != tt.res.result.ShowLockOutFailures { + t.Errorf("got wrong result.ShowLockOutFailures: expected: %v, actual: %v ", tt.res.result.ShowLockOutFailures, result.ShowLockOutFailures) + } + }) + } +} + +func TestChangePasswordLockoutPolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *OrgEventstore + ctx context.Context + policy *iam_model.PasswordLockoutPolicy + } + type res struct { + result *iam_model.PasswordLockoutPolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "change password lockout policy, ok", + args: args{ + es: GetMockChangesOrgWithPasswordLockoutPolicy(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAttempts: 5, + ShowLockOutFailures: false, + }, + }, + res: res{ + result: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAttempts: 5, + ShowLockOutFailures: false, + }, + }, + }, + { + name: "invalid policy", + args: args{ + es: GetMockChangesOrgOK(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{Sequence: 0}, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing iam not found", + args: args{ + es: GetMockChangesOrgNoEvents(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + MaxAttempts: 10, + ShowLockOutFailures: true, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := tt.args.es.ChangePasswordLockoutPolicy(tt.args.ctx, tt.args.policy) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if result.MaxAttempts != tt.res.result.MaxAttempts { + t.Errorf("got wrong result MaxAttempts: expected: %v, actual: %v ", tt.res.result.MaxAttempts, result.MaxAttempts) + } + if result.ShowLockOutFailures != tt.res.result.ShowLockOutFailures { + t.Errorf("got wrong result.ShowLockOutFailures: expected: %v, actual: %v ", tt.res.result.ShowLockOutFailures, result.ShowLockOutFailures) + } + }) + } +} + +func TestRemovePasswordLockoutPolicy(t *testing.T) { + ctrl := gomock.NewController(t) + type args struct { + es *OrgEventstore + ctx context.Context + policy *iam_model.PasswordLockoutPolicy + } + type res struct { + result *iam_model.PasswordLockoutPolicy + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "remove password lockout policy, ok", + args: args{ + es: GetMockChangesOrgWithPasswordLockoutPolicy(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + }, + }, + res: res{}, + }, + { + name: "invalid policy", + args: args{ + es: GetMockChangesOrgOK(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{Sequence: 0}, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "existing iam not found", + args: args{ + es: GetMockChangesOrgNoEvents(ctrl), + ctx: authz.NewMockContext("orgID", "userID"), + policy: &iam_model.PasswordLockoutPolicy{ + ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 0}, + }, + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsNotFound, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.args.es.RemovePasswordLockoutPolicy(tt.args.ctx, tt.args.policy) + + if !tt.res.wantErr && err != nil { + t.Errorf("got wrong result should not get err: %v", err) + } + if tt.res.wantErr && !tt.res.errFunc(err) { + t.Errorf("got wrong err: %v ", err) + } + }) + } +} diff --git a/internal/org/repository/eventsourcing/model/org.go b/internal/org/repository/eventsourcing/model/org.go index 18c04acaff..f0e3c83ce4 100644 --- a/internal/org/repository/eventsourcing/model/org.go +++ b/internal/org/repository/eventsourcing/model/org.go @@ -20,11 +20,14 @@ type Org struct { Name string `json:"name,omitempty"` State int32 `json:"-"` - Domains []*OrgDomain `json:"-"` - Members []*OrgMember `json:"-"` - OrgIamPolicy *OrgIAMPolicy `json:"-"` - LoginPolicy *iam_es_model.LoginPolicy `json:"-"` - IDPs []*iam_es_model.IDPConfig `json:"-"` + Domains []*OrgDomain `json:"-"` + Members []*OrgMember `json:"-"` + OrgIAMPolicy *iam_es_model.OrgIAMPolicy `json:"-"` + IDPs []*iam_es_model.IDPConfig `json:"-"` + LoginPolicy *iam_es_model.LoginPolicy `json:"-"` + PasswordComplexityPolicy *iam_es_model.PasswordComplexityPolicy `json:"-"` + PasswordAgePolicy *iam_es_model.PasswordAgePolicy `json:"-"` + PasswordLockoutPolicy *iam_es_model.PasswordLockoutPolicy `json:"-"` } func OrgFromModel(org *org_model.Org) *Org { @@ -40,11 +43,20 @@ func OrgFromModel(org *org_model.Org) *Org { IDPs: idps, } if org.OrgIamPolicy != nil { - converted.OrgIamPolicy = OrgIAMPolicyFromModel(org.OrgIamPolicy) + converted.OrgIAMPolicy = iam_es_model.OrgIAMPolicyFromModel(org.OrgIamPolicy) } if org.LoginPolicy != nil { converted.LoginPolicy = iam_es_model.LoginPolicyFromModel(org.LoginPolicy) } + if org.PasswordComplexityPolicy != nil { + converted.PasswordComplexityPolicy = iam_es_model.PasswordComplexityPolicyFromModel(org.PasswordComplexityPolicy) + } + if org.PasswordAgePolicy != nil { + converted.PasswordAgePolicy = iam_es_model.PasswordAgePolicyFromModel(org.PasswordAgePolicy) + } + if org.PasswordLockoutPolicy != nil { + converted.PasswordLockoutPolicy = iam_es_model.PasswordLockoutPolicyFromModel(org.PasswordLockoutPolicy) + } return converted } @@ -57,12 +69,21 @@ func OrgToModel(org *Org) *org_model.Org { Members: OrgMembersToModel(org.Members), IDPs: iam_es_model.IDPConfigsToModel(org.IDPs), } - if org.OrgIamPolicy != nil { - converted.OrgIamPolicy = OrgIAMPolicyToModel(org.OrgIamPolicy) + if org.OrgIAMPolicy != nil { + converted.OrgIamPolicy = iam_es_model.OrgIAMPolicyToModel(org.OrgIAMPolicy) } if org.LoginPolicy != nil { converted.LoginPolicy = iam_es_model.LoginPolicyToModel(org.LoginPolicy) } + if org.PasswordComplexityPolicy != nil { + converted.PasswordComplexityPolicy = iam_es_model.PasswordComplexityPolicyToModel(org.PasswordComplexityPolicy) + } + if org.PasswordAgePolicy != nil { + converted.PasswordAgePolicy = iam_es_model.PasswordAgePolicyToModel(org.PasswordAgePolicy) + } + if org.PasswordLockoutPolicy != nil { + converted.PasswordLockoutPolicy = iam_es_model.PasswordLockoutPolicyToModel(org.PasswordLockoutPolicy) + } return converted } @@ -164,6 +185,24 @@ func (o *Org) AppendEvent(event *es_models.Event) (err error) { err = o.appendAddIdpProviderToLoginPolicyEvent(event) case LoginPolicyIDPProviderRemoved: err = o.appendRemoveIdpProviderFromLoginPolicyEvent(event) + case PasswordComplexityPolicyAdded: + err = o.appendAddPasswordComplexityPolicyEvent(event) + case PasswordComplexityPolicyChanged: + err = o.appendChangePasswordComplexityPolicyEvent(event) + case PasswordComplexityPolicyRemoved: + o.appendRemovePasswordComplexityPolicyEvent(event) + case PasswordAgePolicyAdded: + err = o.appendAddPasswordAgePolicyEvent(event) + case PasswordAgePolicyChanged: + err = o.appendChangePasswordAgePolicyEvent(event) + case PasswordAgePolicyRemoved: + o.appendRemovePasswordAgePolicyEvent(event) + case PasswordLockoutPolicyAdded: + err = o.appendAddPasswordLockoutPolicyEvent(event) + case PasswordLockoutPolicyChanged: + err = o.appendChangePasswordLockoutPolicyEvent(event) + case PasswordLockoutPolicyRemoved: + o.appendRemovePasswordLockoutPolicyEvent(event) } if err != nil { return err diff --git a/internal/org/repository/eventsourcing/model/org_iam_policy.go b/internal/org/repository/eventsourcing/model/org_iam_policy.go index 354ee5cc3c..f7b6241426 100644 --- a/internal/org/repository/eventsourcing/model/org_iam_policy.go +++ b/internal/org/repository/eventsourcing/model/org_iam_policy.go @@ -1,72 +1,24 @@ package model import ( - "encoding/json" - "github.com/caos/zitadel/internal/errors" - "github.com/caos/zitadel/internal/eventstore/models" es_models "github.com/caos/zitadel/internal/eventstore/models" - org_model "github.com/caos/zitadel/internal/org/model" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" ) -type OrgIAMPolicy struct { - models.ObjectRoot - - Description string `json:"description,omitempty"` - State int32 `json:"-"` - UserLoginMustBeDomain bool `json:"userLoginMustBeDomain"` -} - -func OrgIAMPolicyToModel(policy *OrgIAMPolicy) *org_model.OrgIAMPolicy { - return &org_model.OrgIAMPolicy{ - ObjectRoot: policy.ObjectRoot, - State: org_model.PolicyState(policy.State), - UserLoginMustBeDomain: policy.UserLoginMustBeDomain, - } -} - -func OrgIAMPolicyFromModel(policy *org_model.OrgIAMPolicy) *OrgIAMPolicy { - return &OrgIAMPolicy{ - ObjectRoot: policy.ObjectRoot, - State: int32(policy.State), - UserLoginMustBeDomain: policy.UserLoginMustBeDomain, - } -} - func (o *Org) appendAddOrgIAMPolicyEvent(event *es_models.Event) error { - o.OrgIamPolicy = new(OrgIAMPolicy) - err := o.OrgIamPolicy.SetData(event) + o.OrgIAMPolicy = new(iam_es_model.OrgIAMPolicy) + err := o.OrgIAMPolicy.SetData(event) if err != nil { return err } - o.OrgIamPolicy.ObjectRoot.CreationDate = event.CreationDate + o.OrgIAMPolicy.ObjectRoot.CreationDate = event.CreationDate return nil } func (o *Org) appendChangeOrgIAMPolicyEvent(event *es_models.Event) error { - return o.OrgIamPolicy.SetData(event) + return o.OrgIAMPolicy.SetData(event) } func (o *Org) appendRemoveOrgIAMPolicyEvent() { - o.OrgIamPolicy = nil -} - -func (p *OrgIAMPolicy) Changes(changed *OrgIAMPolicy) map[string]interface{} { - changes := make(map[string]interface{}, 2) - - if changed.Description != p.Description { - changes["description"] = changed.Description - } - if changed.UserLoginMustBeDomain != p.UserLoginMustBeDomain { - changes["userLoginMustBeDomain"] = changed.UserLoginMustBeDomain - } - - return changes -} - -func (p *OrgIAMPolicy) SetData(event *es_models.Event) error { - err := json.Unmarshal(event.Data, p) - if err != nil { - return errors.ThrowInternal(err, "EVENT-7JS9d", "unable to unmarshal data") - } - return nil + o.OrgIAMPolicy = nil } diff --git a/internal/org/repository/eventsourcing/model/password_age_policy.go b/internal/org/repository/eventsourcing/model/password_age_policy.go new file mode 100644 index 0000000000..09ddb64529 --- /dev/null +++ b/internal/org/repository/eventsourcing/model/password_age_policy.go @@ -0,0 +1,24 @@ +package model + +import ( + es_models "github.com/caos/zitadel/internal/eventstore/models" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" +) + +func (o *Org) appendAddPasswordAgePolicyEvent(event *es_models.Event) error { + o.PasswordAgePolicy = new(iam_es_model.PasswordAgePolicy) + err := o.PasswordAgePolicy.SetData(event) + if err != nil { + return err + } + o.PasswordAgePolicy.ObjectRoot.CreationDate = event.CreationDate + return nil +} + +func (o *Org) appendChangePasswordAgePolicyEvent(event *es_models.Event) error { + return o.PasswordAgePolicy.SetData(event) +} + +func (o *Org) appendRemovePasswordAgePolicyEvent(event *es_models.Event) { + o.PasswordAgePolicy = nil +} diff --git a/internal/org/repository/eventsourcing/model/password_age_policy_test.go b/internal/org/repository/eventsourcing/model/password_age_policy_test.go new file mode 100644 index 0000000000..34e03ad092 --- /dev/null +++ b/internal/org/repository/eventsourcing/model/password_age_policy_test.go @@ -0,0 +1,86 @@ +package model + +import ( + "encoding/json" + es_models "github.com/caos/zitadel/internal/eventstore/models" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + "testing" +) + +func TestAppendAddPasswordAgePolicyEvent(t *testing.T) { + type args struct { + org *Org + policy *iam_es_model.PasswordAgePolicy + event *es_models.Event + } + tests := []struct { + name string + args args + result *Org + }{ + { + name: "append add password age policy event", + args: args{ + org: &Org{}, + policy: &iam_es_model.PasswordAgePolicy{MaxAgeDays: 10}, + event: &es_models.Event{}, + }, + result: &Org{PasswordAgePolicy: &iam_es_model.PasswordAgePolicy{MaxAgeDays: 10}}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.args.policy != nil { + data, _ := json.Marshal(tt.args.policy) + tt.args.event.Data = data + } + tt.args.org.appendAddPasswordAgePolicyEvent(tt.args.event) + if tt.result.PasswordAgePolicy.MaxAgeDays != tt.args.org.PasswordAgePolicy.MaxAgeDays { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.PasswordAgePolicy.MaxAgeDays, tt.args.org.PasswordAgePolicy.MaxAgeDays) + } + }) + } +} + +func TestAppendChangePasswordAgePolicyEvent(t *testing.T) { + type args struct { + org *Org + policy *iam_es_model.PasswordAgePolicy + event *es_models.Event + } + tests := []struct { + name string + args args + result *Org + }{ + { + name: "append change password age policy event", + args: args{ + org: &Org{PasswordAgePolicy: &iam_es_model.PasswordAgePolicy{ + MaxAgeDays: 10, + }}, + policy: &iam_es_model.PasswordAgePolicy{MaxAgeDays: 5, ExpireWarnDays: 10}, + event: &es_models.Event{}, + }, + result: &Org{PasswordAgePolicy: &iam_es_model.PasswordAgePolicy{ + MaxAgeDays: 5, + ExpireWarnDays: 10, + }}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.args.policy != nil { + data, _ := json.Marshal(tt.args.policy) + tt.args.event.Data = data + } + tt.args.org.appendChangePasswordAgePolicyEvent(tt.args.event) + if tt.result.PasswordAgePolicy.MaxAgeDays != tt.args.org.PasswordAgePolicy.MaxAgeDays { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.PasswordAgePolicy.MaxAgeDays, tt.args.org.PasswordAgePolicy.MaxAgeDays) + } + if tt.result.PasswordAgePolicy.ExpireWarnDays != tt.args.org.PasswordAgePolicy.ExpireWarnDays { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.PasswordAgePolicy.ExpireWarnDays, tt.args.org.PasswordAgePolicy.ExpireWarnDays) + } + }) + } +} diff --git a/internal/org/repository/eventsourcing/model/password_complexity_policy.go b/internal/org/repository/eventsourcing/model/password_complexity_policy.go new file mode 100644 index 0000000000..be9e769a1e --- /dev/null +++ b/internal/org/repository/eventsourcing/model/password_complexity_policy.go @@ -0,0 +1,24 @@ +package model + +import ( + es_models "github.com/caos/zitadel/internal/eventstore/models" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" +) + +func (o *Org) appendAddPasswordComplexityPolicyEvent(event *es_models.Event) error { + o.PasswordComplexityPolicy = new(iam_es_model.PasswordComplexityPolicy) + err := o.PasswordComplexityPolicy.SetData(event) + if err != nil { + return err + } + o.PasswordComplexityPolicy.ObjectRoot.CreationDate = event.CreationDate + return nil +} + +func (o *Org) appendChangePasswordComplexityPolicyEvent(event *es_models.Event) error { + return o.PasswordComplexityPolicy.SetData(event) +} + +func (o *Org) appendRemovePasswordComplexityPolicyEvent(event *es_models.Event) { + o.PasswordComplexityPolicy = nil +} diff --git a/internal/org/repository/eventsourcing/model/password_complexity_policy_test.go b/internal/org/repository/eventsourcing/model/password_complexity_policy_test.go new file mode 100644 index 0000000000..85417bfe36 --- /dev/null +++ b/internal/org/repository/eventsourcing/model/password_complexity_policy_test.go @@ -0,0 +1,86 @@ +package model + +import ( + "encoding/json" + es_models "github.com/caos/zitadel/internal/eventstore/models" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + "testing" +) + +func TestAppendAddPasswordComplexityPolicyEvent(t *testing.T) { + type args struct { + org *Org + policy *iam_es_model.PasswordComplexityPolicy + event *es_models.Event + } + tests := []struct { + name string + args args + result *Org + }{ + { + name: "append add password complexity policy event", + args: args{ + org: &Org{}, + policy: &iam_es_model.PasswordComplexityPolicy{MinLength: 10}, + event: &es_models.Event{}, + }, + result: &Org{PasswordComplexityPolicy: &iam_es_model.PasswordComplexityPolicy{MinLength: 10}}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.args.policy != nil { + data, _ := json.Marshal(tt.args.policy) + tt.args.event.Data = data + } + tt.args.org.appendAddPasswordComplexityPolicyEvent(tt.args.event) + if tt.result.PasswordComplexityPolicy.MinLength != tt.args.org.PasswordComplexityPolicy.MinLength { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.PasswordComplexityPolicy.MinLength, tt.args.org.PasswordComplexityPolicy.MinLength) + } + }) + } +} + +func TestAppendChangePasswordComplexityPolicyEvent(t *testing.T) { + type args struct { + org *Org + policy *iam_es_model.PasswordComplexityPolicy + event *es_models.Event + } + tests := []struct { + name string + args args + result *Org + }{ + { + name: "append change password complexity policy event", + args: args{ + org: &Org{PasswordComplexityPolicy: &iam_es_model.PasswordComplexityPolicy{ + MinLength: 10, + }}, + policy: &iam_es_model.PasswordComplexityPolicy{MinLength: 5, HasLowercase: true}, + event: &es_models.Event{}, + }, + result: &Org{PasswordComplexityPolicy: &iam_es_model.PasswordComplexityPolicy{ + MinLength: 5, + HasLowercase: true, + }}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.args.policy != nil { + data, _ := json.Marshal(tt.args.policy) + tt.args.event.Data = data + } + tt.args.org.appendChangePasswordComplexityPolicyEvent(tt.args.event) + if tt.result.PasswordComplexityPolicy.MinLength != tt.args.org.PasswordComplexityPolicy.MinLength { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.PasswordComplexityPolicy.MinLength, tt.args.org.PasswordComplexityPolicy.MinLength) + } + if tt.result.PasswordComplexityPolicy.HasLowercase != tt.args.org.PasswordComplexityPolicy.HasLowercase { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.PasswordComplexityPolicy.HasLowercase, tt.args.org.PasswordComplexityPolicy.HasLowercase) + } + }) + } +} diff --git a/internal/org/repository/eventsourcing/model/password_lockout_policy.go b/internal/org/repository/eventsourcing/model/password_lockout_policy.go new file mode 100644 index 0000000000..9aa5efd33f --- /dev/null +++ b/internal/org/repository/eventsourcing/model/password_lockout_policy.go @@ -0,0 +1,24 @@ +package model + +import ( + es_models "github.com/caos/zitadel/internal/eventstore/models" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" +) + +func (o *Org) appendAddPasswordLockoutPolicyEvent(event *es_models.Event) error { + o.PasswordLockoutPolicy = new(iam_es_model.PasswordLockoutPolicy) + err := o.PasswordLockoutPolicy.SetData(event) + if err != nil { + return err + } + o.PasswordLockoutPolicy.ObjectRoot.CreationDate = event.CreationDate + return nil +} + +func (o *Org) appendChangePasswordLockoutPolicyEvent(event *es_models.Event) error { + return o.PasswordLockoutPolicy.SetData(event) +} + +func (o *Org) appendRemovePasswordLockoutPolicyEvent(event *es_models.Event) { + o.PasswordLockoutPolicy = nil +} diff --git a/internal/org/repository/eventsourcing/model/password_lockout_policy_test.go b/internal/org/repository/eventsourcing/model/password_lockout_policy_test.go new file mode 100644 index 0000000000..7efdf2955f --- /dev/null +++ b/internal/org/repository/eventsourcing/model/password_lockout_policy_test.go @@ -0,0 +1,86 @@ +package model + +import ( + "encoding/json" + es_models "github.com/caos/zitadel/internal/eventstore/models" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + "testing" +) + +func TestAppendAddPasswordLockoutPolicyEvent(t *testing.T) { + type args struct { + org *Org + policy *iam_es_model.PasswordLockoutPolicy + event *es_models.Event + } + tests := []struct { + name string + args args + result *Org + }{ + { + name: "append add password age policy event", + args: args{ + org: &Org{}, + policy: &iam_es_model.PasswordLockoutPolicy{MaxAttempts: 10}, + event: &es_models.Event{}, + }, + result: &Org{PasswordLockoutPolicy: &iam_es_model.PasswordLockoutPolicy{MaxAttempts: 10}}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.args.policy != nil { + data, _ := json.Marshal(tt.args.policy) + tt.args.event.Data = data + } + tt.args.org.appendAddPasswordLockoutPolicyEvent(tt.args.event) + if tt.result.PasswordLockoutPolicy.MaxAttempts != tt.args.org.PasswordLockoutPolicy.MaxAttempts { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.PasswordLockoutPolicy.MaxAttempts, tt.args.org.PasswordLockoutPolicy.MaxAttempts) + } + }) + } +} + +func TestAppendChangePasswordLockoutPolicyEvent(t *testing.T) { + type args struct { + org *Org + policy *iam_es_model.PasswordLockoutPolicy + event *es_models.Event + } + tests := []struct { + name string + args args + result *Org + }{ + { + name: "append change password age policy event", + args: args{ + org: &Org{PasswordLockoutPolicy: &iam_es_model.PasswordLockoutPolicy{ + MaxAttempts: 10, + }}, + policy: &iam_es_model.PasswordLockoutPolicy{MaxAttempts: 5, ShowLockOutFailures: true}, + event: &es_models.Event{}, + }, + result: &Org{PasswordLockoutPolicy: &iam_es_model.PasswordLockoutPolicy{ + MaxAttempts: 5, + ShowLockOutFailures: true, + }}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.args.policy != nil { + data, _ := json.Marshal(tt.args.policy) + tt.args.event.Data = data + } + tt.args.org.appendChangePasswordLockoutPolicyEvent(tt.args.event) + if tt.result.PasswordLockoutPolicy.MaxAttempts != tt.args.org.PasswordLockoutPolicy.MaxAttempts { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.PasswordLockoutPolicy.MaxAttempts, tt.args.org.PasswordLockoutPolicy.MaxAttempts) + } + if tt.result.PasswordLockoutPolicy.ShowLockOutFailures != tt.args.org.PasswordLockoutPolicy.ShowLockOutFailures { + t.Errorf("got wrong result: expected: %v, actual: %v ", tt.result.PasswordLockoutPolicy.ShowLockOutFailures, tt.args.org.PasswordLockoutPolicy.ShowLockOutFailures) + } + }) + } +} diff --git a/internal/org/repository/eventsourcing/model/types.go b/internal/org/repository/eventsourcing/model/types.go index c07df6663d..18234b9d52 100644 --- a/internal/org/repository/eventsourcing/model/types.go +++ b/internal/org/repository/eventsourcing/model/types.go @@ -51,4 +51,16 @@ const ( LoginPolicyIDPProviderAdded models.EventType = "org.policy.login.idpprovider.added" LoginPolicyIDPProviderRemoved models.EventType = "org.policy.login.idpprovider.removed" LoginPolicyIDPProviderCascadeRemoved models.EventType = "org.policy.login.idpprovider.cascade.removed" + + PasswordComplexityPolicyAdded models.EventType = "org.policy.password.complexity.added" + PasswordComplexityPolicyChanged models.EventType = "org.policy.password.complexity.changed" + PasswordComplexityPolicyRemoved models.EventType = "org.policy.password.complexity.removed" + + PasswordAgePolicyAdded models.EventType = "org.policy.password.age.added" + PasswordAgePolicyChanged models.EventType = "org.policy.password.age.changed" + PasswordAgePolicyRemoved models.EventType = "org.policy.password.age.removed" + + PasswordLockoutPolicyAdded models.EventType = "org.policy.password.lockout.added" + PasswordLockoutPolicyChanged models.EventType = "org.policy.password.lockout.changed" + PasswordLockoutPolicyRemoved models.EventType = "org.policy.password.lockout.removed" ) diff --git a/internal/org/repository/eventsourcing/org_iam_policy.go b/internal/org/repository/eventsourcing/org_iam_policy.go index 274ba07998..a922aeaa7a 100644 --- a/internal/org/repository/eventsourcing/org_iam_policy.go +++ b/internal/org/repository/eventsourcing/org_iam_policy.go @@ -2,13 +2,14 @@ package eventsourcing import ( "context" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" "github.com/caos/zitadel/internal/errors" es_models "github.com/caos/zitadel/internal/eventstore/models" "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" ) -func OrgIAMPolicyAddedAggregate(aggCreator *es_models.AggregateCreator, org *model.Org, policy *model.OrgIAMPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { +func OrgIAMPolicyAddedAggregate(aggCreator *es_models.AggregateCreator, org *model.Org, policy *iam_es_model.OrgIAMPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { return func(ctx context.Context) (*es_models.Aggregate, error) { if policy == nil { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-i9sJS", "Errors.Internal") @@ -21,7 +22,7 @@ func OrgIAMPolicyAddedAggregate(aggCreator *es_models.AggregateCreator, org *mod } } -func OrgIAMPolicyChangedAggregate(aggCreator *es_models.AggregateCreator, org *model.Org, policy *model.OrgIAMPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { +func OrgIAMPolicyChangedAggregate(aggCreator *es_models.AggregateCreator, org *model.Org, policy *iam_es_model.OrgIAMPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { return func(ctx context.Context) (*es_models.Aggregate, error) { if policy == nil { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-9Ksie", "Errors.Internal") @@ -30,7 +31,7 @@ func OrgIAMPolicyChangedAggregate(aggCreator *es_models.AggregateCreator, org *m if err != nil { return nil, err } - changes := org.OrgIamPolicy.Changes(policy) + changes := org.OrgIAMPolicy.Changes(policy) if len(changes) == 0 { return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Js6Vs", "Errors.NoChangesFound") } diff --git a/internal/org/repository/eventsourcing/org_iam_policy_test.go b/internal/org/repository/eventsourcing/org_iam_policy_test.go index c277fcae38..319efd8de9 100644 --- a/internal/org/repository/eventsourcing/org_iam_policy_test.go +++ b/internal/org/repository/eventsourcing/org_iam_policy_test.go @@ -2,6 +2,7 @@ package eventsourcing import ( "context" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" "testing" "github.com/caos/zitadel/internal/api/authz" @@ -20,7 +21,7 @@ func TestOrgIamPolicyAddedAggregates(t *testing.T) { ctx context.Context aggCreator *es_models.AggregateCreator org *model.Org - policy *model.OrgIAMPolicy + policy *iam_es_model.OrgIAMPolicy } tests := []struct { name string @@ -48,8 +49,7 @@ func TestOrgIamPolicyAddedAggregates(t *testing.T) { Sequence: 5, }, }, - policy: &model.OrgIAMPolicy{ - Description: "description", + policy: &iam_es_model.OrgIAMPolicy{ UserLoginMustBeDomain: true, }, }, @@ -90,7 +90,7 @@ func TestOrgIamPolicyChangedAggregates(t *testing.T) { ctx context.Context aggCreator *es_models.AggregateCreator org *model.Org - policy *model.OrgIAMPolicy + policy *iam_es_model.OrgIAMPolicy } tests := []struct { name string @@ -117,13 +117,11 @@ func TestOrgIamPolicyChangedAggregates(t *testing.T) { AggregateID: "sdaf", Sequence: 5, }, - OrgIamPolicy: &model.OrgIAMPolicy{ - Description: "description", + OrgIAMPolicy: &iam_es_model.OrgIAMPolicy{ UserLoginMustBeDomain: true, }, }, - policy: &model.OrgIAMPolicy{ - Description: "description", + policy: &iam_es_model.OrgIAMPolicy{ UserLoginMustBeDomain: false, }, }, @@ -143,13 +141,11 @@ func TestOrgIamPolicyChangedAggregates(t *testing.T) { AggregateID: "sdaf", Sequence: 5, }, - OrgIamPolicy: &model.OrgIAMPolicy{ - Description: "description", + OrgIAMPolicy: &iam_es_model.OrgIAMPolicy{ UserLoginMustBeDomain: true, }, }, - policy: &model.OrgIAMPolicy{ - Description: "description", + policy: &iam_es_model.OrgIAMPolicy{ UserLoginMustBeDomain: true, }, }, @@ -204,8 +200,7 @@ func TestOrgIamPolicyRemovedAggregates(t *testing.T) { AggregateID: "sdaf", Sequence: 5, }, - OrgIamPolicy: &model.OrgIAMPolicy{ - Description: "description", + OrgIAMPolicy: &iam_es_model.OrgIAMPolicy{ UserLoginMustBeDomain: true, }, }, diff --git a/internal/org/repository/eventsourcing/password_age_policy.go b/internal/org/repository/eventsourcing/password_age_policy.go new file mode 100644 index 0000000000..04d2acd03e --- /dev/null +++ b/internal/org/repository/eventsourcing/password_age_policy.go @@ -0,0 +1,76 @@ +package eventsourcing + +import ( + "context" + "github.com/caos/zitadel/internal/errors" + es_models "github.com/caos/zitadel/internal/eventstore/models" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" +) + +func PasswordAgePolicyAddedAggregate(aggCreator *es_models.AggregateCreator, existing *model.Org, policy *iam_es_model.PasswordAgePolicy) func(ctx context.Context) (*es_models.Aggregate, error) { + return func(ctx context.Context) (*es_models.Aggregate, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Hms9d", "Errors.Internal") + } + agg, err := OrgAggregate(ctx, aggCreator, existing.AggregateID, existing.Sequence) + if err != nil { + return nil, err + } + validationQuery := es_models.NewSearchQuery(). + AggregateTypeFilter(model.OrgAggregate). + AggregateIDFilter(existing.AggregateID) + + validation := checkExistingPasswordAgePolicyValidation() + agg.SetPrecondition(validationQuery, validation) + return agg.AppendEvent(model.PasswordAgePolicyAdded, policy) + } +} + +func PasswordAgePolicyChangedAggregate(aggCreator *es_models.AggregateCreator, existing *model.Org, policy *iam_es_model.PasswordAgePolicy) func(ctx context.Context) (*es_models.Aggregate, error) { + return func(ctx context.Context) (*es_models.Aggregate, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-3Gms0f", "Errors.Internal") + } + agg, err := OrgAggregate(ctx, aggCreator, existing.AggregateID, existing.Sequence) + if err != nil { + return nil, err + } + changes := existing.PasswordAgePolicy.Changes(policy) + if len(changes) == 0 { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Ls0rs", "Errors.NoChangesFound") + } + return agg.AppendEvent(model.PasswordAgePolicyChanged, changes) + } +} + +func PasswordAgePolicyRemovedAggregate(aggCreator *es_models.AggregateCreator, existing *model.Org) func(ctx context.Context) (*es_models.Aggregate, error) { + return func(ctx context.Context) (*es_models.Aggregate, error) { + if existing == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-4Gsk9", "Errors.Internal") + } + agg, err := OrgAggregate(ctx, aggCreator, existing.AggregateID, existing.Sequence) + if err != nil { + return nil, err + } + return agg.AppendEvent(model.PasswordAgePolicyRemoved, nil) + } +} + +func checkExistingPasswordAgePolicyValidation() func(...*es_models.Event) error { + return func(events ...*es_models.Event) error { + existing := false + for _, event := range events { + switch event.Type { + case model.PasswordAgePolicyAdded: + existing = true + case model.PasswordAgePolicyRemoved: + existing = false + } + } + if existing { + return errors.ThrowPreconditionFailed(nil, "EVENT-2Fjs0", "Errors.Org.PasswordAgePolicy.AlreadyExists") + } + return nil + } +} diff --git a/internal/org/repository/eventsourcing/password_age_policy_test.go b/internal/org/repository/eventsourcing/password_age_policy_test.go new file mode 100644 index 0000000000..fb2b637985 --- /dev/null +++ b/internal/org/repository/eventsourcing/password_age_policy_test.go @@ -0,0 +1,258 @@ +package eventsourcing + +import ( + "context" + "github.com/caos/zitadel/internal/api/authz" + caos_errs "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/eventstore/models" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" + "testing" +) + +func TestPasswordAgePolicyAddedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existing *model.Org + new *iam_es_model.PasswordAgePolicy + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "add password age policy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: &model.Org{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + }, + new: &iam_es_model.PasswordAgePolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + MaxAgeDays: 10, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.PasswordAgePolicyAdded}, + }, + }, + { + name: "existing org nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "password age policy config nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: &model.Org{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}}, + new: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := PasswordAgePolicyAddedAggregate(tt.args.aggCreator, tt.args.existing, tt.args.new)(tt.args.ctx) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + if agg.Events[i].Data == nil { + t.Errorf("should have data in event") + } + } + }) + } +} + +func TestPasswordAgePolicyChangedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existing *model.Org + new *iam_es_model.PasswordAgePolicy + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "change password age policy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: &model.Org{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + PasswordAgePolicy: &iam_es_model.PasswordAgePolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + }, + }, + new: &iam_es_model.PasswordAgePolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + MaxAgeDays: 5, + ExpireWarnDays: 5, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.PasswordAgePolicyChanged}, + }, + }, + { + name: "existing org nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "password age policy config nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: &model.Org{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}}, + new: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := PasswordAgePolicyChangedAggregate(tt.args.aggCreator, tt.args.existing, tt.args.new)(tt.args.ctx) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if !tt.res.wantErr && agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + if !tt.res.wantErr && agg.Events[i].Data == nil { + t.Errorf("should have data in event") + } + } + }) + } +} + +func TestPasswordAgePolicyRemovedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existing *model.Org + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "remove password age policy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: &model.Org{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + PasswordAgePolicy: &iam_es_model.PasswordAgePolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + }, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.PasswordAgePolicyRemoved}, + }, + }, + { + name: "existing org nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := PasswordAgePolicyRemovedAggregate(tt.args.aggCreator, tt.args.existing)(tt.args.ctx) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if !tt.res.wantErr && agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + } + }) + } +} diff --git a/internal/org/repository/eventsourcing/password_complexity_policy.go b/internal/org/repository/eventsourcing/password_complexity_policy.go new file mode 100644 index 0000000000..f87ec93c25 --- /dev/null +++ b/internal/org/repository/eventsourcing/password_complexity_policy.go @@ -0,0 +1,76 @@ +package eventsourcing + +import ( + "context" + "github.com/caos/zitadel/internal/errors" + es_models "github.com/caos/zitadel/internal/eventstore/models" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" +) + +func PasswordComplexityPolicyAddedAggregate(aggCreator *es_models.AggregateCreator, existing *model.Org, policy *iam_es_model.PasswordComplexityPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { + return func(ctx context.Context) (*es_models.Aggregate, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-F8iso", "Errors.Internal") + } + agg, err := OrgAggregate(ctx, aggCreator, existing.AggregateID, existing.Sequence) + if err != nil { + return nil, err + } + validationQuery := es_models.NewSearchQuery(). + AggregateTypeFilter(model.OrgAggregate). + AggregateIDFilter(existing.AggregateID) + + validation := checkExistingPasswordComplexityPolicyValidation() + agg.SetPrecondition(validationQuery, validation) + return agg.AppendEvent(model.PasswordComplexityPolicyAdded, policy) + } +} + +func PasswordComplexityPolicyChangedAggregate(aggCreator *es_models.AggregateCreator, existing *model.Org, policy *iam_es_model.PasswordComplexityPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { + return func(ctx context.Context) (*es_models.Aggregate, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-2dFT5", "Errors.Internal") + } + agg, err := OrgAggregate(ctx, aggCreator, existing.AggregateID, existing.Sequence) + if err != nil { + return nil, err + } + changes := existing.PasswordComplexityPolicy.Changes(policy) + if len(changes) == 0 { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Smk8d", "Errors.NoChangesFound") + } + return agg.AppendEvent(model.PasswordComplexityPolicyChanged, changes) + } +} + +func PasswordComplexityPolicyRemovedAggregate(aggCreator *es_models.AggregateCreator, existing *model.Org) func(ctx context.Context) (*es_models.Aggregate, error) { + return func(ctx context.Context) (*es_models.Aggregate, error) { + if existing == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-Lso9f", "Errors.Internal") + } + agg, err := OrgAggregate(ctx, aggCreator, existing.AggregateID, existing.Sequence) + if err != nil { + return nil, err + } + return agg.AppendEvent(model.PasswordComplexityPolicyRemoved, nil) + } +} + +func checkExistingPasswordComplexityPolicyValidation() func(...*es_models.Event) error { + return func(events ...*es_models.Event) error { + existing := false + for _, event := range events { + switch event.Type { + case model.PasswordComplexityPolicyAdded: + existing = true + case model.PasswordComplexityPolicyRemoved: + existing = false + } + } + if existing { + return errors.ThrowPreconditionFailed(nil, "EVENT-5Fjs8", "Errors.Org.PasswordComplexityPolicy.AlreadyExists") + } + return nil + } +} diff --git a/internal/org/repository/eventsourcing/password_complexity_policy_test.go b/internal/org/repository/eventsourcing/password_complexity_policy_test.go new file mode 100644 index 0000000000..f9ca57c76a --- /dev/null +++ b/internal/org/repository/eventsourcing/password_complexity_policy_test.go @@ -0,0 +1,258 @@ +package eventsourcing + +import ( + "context" + "github.com/caos/zitadel/internal/api/authz" + caos_errs "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/eventstore/models" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" + "testing" +) + +func TestPasswordComplexityPolicyAddedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existing *model.Org + new *iam_es_model.PasswordComplexityPolicy + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "add password complexity polciy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: &model.Org{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + }, + new: &iam_es_model.PasswordComplexityPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + MinLength: 10, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.PasswordComplexityPolicyAdded}, + }, + }, + { + name: "existing org nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "password complexity policy config nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: &model.Org{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}}, + new: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := PasswordComplexityPolicyAddedAggregate(tt.args.aggCreator, tt.args.existing, tt.args.new)(tt.args.ctx) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + if agg.Events[i].Data == nil { + t.Errorf("should have data in event") + } + } + }) + } +} + +func TestPasswordComplexityPolicyChangedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existing *model.Org + new *iam_es_model.PasswordComplexityPolicy + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "change password complexity policy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: &model.Org{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + PasswordComplexityPolicy: &iam_es_model.PasswordComplexityPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + }, + }, + new: &iam_es_model.PasswordComplexityPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + MinLength: 5, + HasLowercase: true, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.PasswordComplexityPolicyChanged}, + }, + }, + { + name: "existing org nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "password complexity policy config nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: &model.Org{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}}, + new: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := PasswordComplexityPolicyChangedAggregate(tt.args.aggCreator, tt.args.existing, tt.args.new)(tt.args.ctx) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + if agg.Events[i].Data == nil { + t.Errorf("should have data in event") + } + } + }) + } +} + +func TestPasswordComplexityPolicyRemovedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existing *model.Org + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "remove password complexity policy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: &model.Org{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + PasswordComplexityPolicy: &iam_es_model.PasswordComplexityPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + }, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.PasswordComplexityPolicyRemoved}, + }, + }, + { + name: "existing org nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := PasswordComplexityPolicyRemovedAggregate(tt.args.aggCreator, tt.args.existing)(tt.args.ctx) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + } + }) + } +} diff --git a/internal/org/repository/eventsourcing/password_lockout_policy.go b/internal/org/repository/eventsourcing/password_lockout_policy.go new file mode 100644 index 0000000000..adb6583c78 --- /dev/null +++ b/internal/org/repository/eventsourcing/password_lockout_policy.go @@ -0,0 +1,76 @@ +package eventsourcing + +import ( + "context" + "github.com/caos/zitadel/internal/errors" + es_models "github.com/caos/zitadel/internal/eventstore/models" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" +) + +func PasswordLockoutPolicyAddedAggregate(aggCreator *es_models.AggregateCreator, existing *model.Org, policy *iam_es_model.PasswordLockoutPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { + return func(ctx context.Context) (*es_models.Aggregate, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-4Tfi9", "Errors.Internal") + } + agg, err := OrgAggregate(ctx, aggCreator, existing.AggregateID, existing.Sequence) + if err != nil { + return nil, err + } + validationQuery := es_models.NewSearchQuery(). + AggregateTypeFilter(model.OrgAggregate). + AggregateIDFilter(existing.AggregateID) + + validation := checkExistingPasswordLockoutPolicyValidation() + agg.SetPrecondition(validationQuery, validation) + return agg.AppendEvent(model.PasswordLockoutPolicyAdded, policy) + } +} + +func PasswordLockoutPolicyChangedAggregate(aggCreator *es_models.AggregateCreator, existing *model.Org, policy *iam_es_model.PasswordLockoutPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { + return func(ctx context.Context) (*es_models.Aggregate, error) { + if policy == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-5lf9s", "Errors.Internal") + } + agg, err := OrgAggregate(ctx, aggCreator, existing.AggregateID, existing.Sequence) + if err != nil { + return nil, err + } + changes := existing.PasswordLockoutPolicy.Changes(policy) + if len(changes) == 0 { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-1dj9G", "Errors.NoChangesFound") + } + return agg.AppendEvent(model.PasswordLockoutPolicyChanged, changes) + } +} + +func PasswordLockoutPolicyRemovedAggregate(aggCreator *es_models.AggregateCreator, existing *model.Org) func(ctx context.Context) (*es_models.Aggregate, error) { + return func(ctx context.Context) (*es_models.Aggregate, error) { + if existing == nil { + return nil, errors.ThrowPreconditionFailed(nil, "EVENT-6Hsl0", "Errors.Internal") + } + agg, err := OrgAggregate(ctx, aggCreator, existing.AggregateID, existing.Sequence) + if err != nil { + return nil, err + } + return agg.AppendEvent(model.PasswordLockoutPolicyRemoved, nil) + } +} + +func checkExistingPasswordLockoutPolicyValidation() func(...*es_models.Event) error { + return func(events ...*es_models.Event) error { + existing := false + for _, event := range events { + switch event.Type { + case model.PasswordLockoutPolicyAdded: + existing = true + case model.PasswordLockoutPolicyRemoved: + existing = false + } + } + if existing { + return errors.ThrowPreconditionFailed(nil, "EVENT-2Dfl0", "Errors.Org.PasswordLockoutPolicy.AlreadyExists") + } + return nil + } +} diff --git a/internal/org/repository/eventsourcing/password_lockout_policy_test.go b/internal/org/repository/eventsourcing/password_lockout_policy_test.go new file mode 100644 index 0000000000..3cb83b0ef7 --- /dev/null +++ b/internal/org/repository/eventsourcing/password_lockout_policy_test.go @@ -0,0 +1,258 @@ +package eventsourcing + +import ( + "context" + "github.com/caos/zitadel/internal/api/authz" + caos_errs "github.com/caos/zitadel/internal/errors" + "github.com/caos/zitadel/internal/eventstore/models" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" + "github.com/caos/zitadel/internal/org/repository/eventsourcing/model" + "testing" +) + +func TestPasswordLockoutPolicyAddedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existing *model.Org + new *iam_es_model.PasswordLockoutPolicy + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "add password lockout polciy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: &model.Org{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + }, + new: &iam_es_model.PasswordLockoutPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + MaxAttempts: 10, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.PasswordLockoutPolicyAdded}, + }, + }, + { + name: "existing org nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "password lockout policy config nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: &model.Org{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}}, + new: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := PasswordLockoutPolicyAddedAggregate(tt.args.aggCreator, tt.args.existing, tt.args.new)(tt.args.ctx) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if !tt.res.wantErr && agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + if agg.Events[i].Data == nil { + t.Errorf("should have data in event") + } + } + }) + } +} + +func TestPasswordLockoutPolicyChangedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existing *model.Org + new *iam_es_model.PasswordLockoutPolicy + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "change password lockout policy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: &model.Org{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + PasswordLockoutPolicy: &iam_es_model.PasswordLockoutPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + }, + }, + new: &iam_es_model.PasswordLockoutPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + MaxAttempts: 5, + ShowLockOutFailures: true, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.PasswordLockoutPolicyChanged}, + }, + }, + { + name: "existing org nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + { + name: "password lockout policy config nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: &model.Org{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}}, + new: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := PasswordLockoutPolicyChangedAggregate(tt.args.aggCreator, tt.args.existing, tt.args.new)(tt.args.ctx) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if !tt.res.wantErr && agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + if agg.Events[i].Data == nil { + t.Errorf("should have data in event") + } + } + }) + } +} + +func TestPasswordLockoutPolicyRemovedAggregate(t *testing.T) { + type args struct { + ctx context.Context + existing *model.Org + aggCreator *models.AggregateCreator + } + type res struct { + eventLen int + eventTypes []models.EventType + wantErr bool + errFunc func(err error) bool + } + tests := []struct { + name string + args args + res res + }{ + { + name: "remove password lockout policy", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: &model.Org{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + PasswordLockoutPolicy: &iam_es_model.PasswordLockoutPolicy{ + ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, + }, + }, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + eventLen: 1, + eventTypes: []models.EventType{model.PasswordLockoutPolicyRemoved}, + }, + }, + { + name: "existing org nil", + args: args{ + ctx: authz.NewMockContext("orgID", "userID"), + existing: nil, + aggCreator: models.NewAggregateCreator("Test"), + }, + res: res{ + wantErr: true, + errFunc: caos_errs.IsPreconditionFailed, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + agg, err := PasswordLockoutPolicyRemovedAggregate(tt.args.aggCreator, tt.args.existing)(tt.args.ctx) + if (tt.res.wantErr && !tt.res.errFunc(err)) || (err != nil && !tt.res.wantErr) { + t.Errorf("got wrong err: %v ", err) + return + } + if tt.res.wantErr && tt.res.errFunc(err) { + return + } + if len(agg.Events) != tt.res.eventLen { + t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) + } + for i := 0; i < tt.res.eventLen; i++ { + if agg.Events[i].Type != tt.res.eventTypes[i] { + t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventTypes[i], agg.Events[i].Type.String()) + } + } + }) + } +} diff --git a/internal/policy/default.go b/internal/policy/default.go deleted file mode 100644 index fb02396d74..0000000000 --- a/internal/policy/default.go +++ /dev/null @@ -1,22 +0,0 @@ -package policy - -type PasswordAgePolicyDefault struct { - Description string - MaxAgeDays uint64 - ExpireWarnDays uint64 -} - -type PasswordComplexityPolicyDefault struct { - Description string - MinLength uint64 - HasLowercase bool - HasUppercase bool - HasNumber bool - HasSymbol bool -} - -type PasswordLockoutPolicyDefault struct { - Description string - MaxAttempts uint64 - ShowLockOutFailures bool -} diff --git a/internal/policy/model/policy_complexity.go b/internal/policy/model/policy_complexity.go deleted file mode 100644 index fbde89812f..0000000000 --- a/internal/policy/model/policy_complexity.go +++ /dev/null @@ -1,56 +0,0 @@ -package model - -import ( - caos_errs "github.com/caos/zitadel/internal/errors" - "github.com/caos/zitadel/internal/eventstore/models" - "regexp" -) - -var ( - hasStringLowerCase = regexp.MustCompile(`[a-z]`).MatchString - hasStringUpperCase = regexp.MustCompile(`[A-Z]`).MatchString - hasNumber = regexp.MustCompile(`[0-9]`).MatchString - hasSymbol = regexp.MustCompile(`[^A-Za-z0-9]`).MatchString -) - -type PasswordComplexityPolicy struct { - models.ObjectRoot - - Description string - State PolicyState - MinLength uint64 - HasLowercase bool - HasUppercase bool - HasNumber bool - HasSymbol bool -} - -func (p *PasswordComplexityPolicy) IsValid() error { - if p.MinLength == 0 || p.MinLength > 72 { - return caos_errs.ThrowInvalidArgument(nil, "MODEL-Lsp0e", "Errors.User.PasswordComplexityPolicy.MinLengthNotAllowed") - } - return nil -} - -func (p *PasswordComplexityPolicy) Check(password string) error { - if p.MinLength != 0 && uint64(len(password)) < p.MinLength { - return caos_errs.ThrowInvalidArgument(nil, "MODEL-HuJf6", "Errors.User.PasswordComplexityPolicy.MinLength") - } - - if p.HasLowercase && !hasStringLowerCase(password) { - return caos_errs.ThrowInvalidArgument(nil, "MODEL-co3Xw", "Errors.User.PasswordComplexityPolicy.HasLower") - } - - if p.HasUppercase && !hasStringUpperCase(password) { - return caos_errs.ThrowInvalidArgument(nil, "MODEL-VoaRj", "Errors.User.PasswordComplexityPolicy.HasUpper") - } - - if p.HasNumber && !hasNumber(password) { - return caos_errs.ThrowInvalidArgument(nil, "MODEL-ZBv4H", "Errors.User.PasswordComplexityPolicy.HasNumber") - } - - if p.HasSymbol && !hasSymbol(password) { - return caos_errs.ThrowInvalidArgument(nil, "MODEL-ZDLwA", "Errors.User.PasswordComplexityPolicy.HasSymbol") - } - return nil -} diff --git a/internal/policy/model/types.go b/internal/policy/model/types.go deleted file mode 100644 index 82d66d5eef..0000000000 --- a/internal/policy/model/types.go +++ /dev/null @@ -1,33 +0,0 @@ -package model - -import "github.com/caos/zitadel/internal/eventstore/models" - -const ( - //default - DefaultPolicy = "0" - - // complexity - PasswordComplexityPolicyAggregate models.AggregateType = "policy.password.complexity" - - PasswordComplexityPolicyAdded models.EventType = "policy.password.complexity.added" - PasswordComplexityPolicyChanged models.EventType = "policy.password.complexity.changed" - - // age - PasswordAgePolicyAggregate models.AggregateType = "policy.password.age" - - PasswordAgePolicyAdded models.EventType = "policy.password.age.added" - PasswordAgePolicyChanged models.EventType = "policy.password.age.changed" - - // lockout - PasswordLockoutPolicyAggregate models.AggregateType = "policy.password.lockout" - - PasswordLockoutPolicyAdded models.EventType = "policy.password.lockout.added" - PasswordLockoutPolicyChanged models.EventType = "policy.password.lockout.changed" -) - -type PolicyState int32 - -const ( - PolicyStateActive PolicyState = iota - PolicyStateInactive -) diff --git a/internal/policy/repository/eventsourcing/cache.go b/internal/policy/repository/eventsourcing/cache.go deleted file mode 100644 index 79aa96a221..0000000000 --- a/internal/policy/repository/eventsourcing/cache.go +++ /dev/null @@ -1,34 +0,0 @@ -package eventsourcing - -import ( - "github.com/caos/logging" - "github.com/caos/zitadel/internal/cache" - "github.com/caos/zitadel/internal/cache/config" - "github.com/caos/zitadel/internal/eventstore/models" -) - -type PolicyCache struct { - policyCache cache.Cache -} - -func StartCache(conf *config.CacheConfig) (*PolicyCache, error) { - policyCache, err := conf.Config.NewCache() - logging.Log("EVENT-L7ZcH").OnError(err).Panic("unable to create policy cache") - - return &PolicyCache{policyCache: policyCache}, nil -} - -func (c *PolicyCache) getPolicy(id string) (policy *PasswordComplexityPolicy) { - policy = &PasswordComplexityPolicy{ObjectRoot: models.ObjectRoot{AggregateID: id}} - if err := c.policyCache.Get(id, policy); err != nil { - logging.Log("EVENT-tkUue").WithError(err).Debug("error in getting cache") - } - return policy -} - -func (c *PolicyCache) cachePolicy(policy *PasswordComplexityPolicy) { - err := c.policyCache.Set(policy.AggregateID, policy) - if err != nil { - logging.Log("EVENT-DVcpF").WithError(err).Debug("error in setting policy cache") - } -} diff --git a/internal/policy/repository/eventsourcing/cache_age.go b/internal/policy/repository/eventsourcing/cache_age.go deleted file mode 100644 index e8e9ec6dd0..0000000000 --- a/internal/policy/repository/eventsourcing/cache_age.go +++ /dev/null @@ -1,20 +0,0 @@ -package eventsourcing - -import ( - "github.com/caos/logging" -) - -func (c *PolicyCache) getAgePolicy(id string) (policy *PasswordAgePolicy) { - policy = new(PasswordAgePolicy) - if err := c.policyCache.Get(id, policy); err != nil { - logging.Log("EVENT-NqMFM").WithError(err).Debug("error in getting cache") - } - return policy -} - -func (c *PolicyCache) cacheAgePolicy(policy *PasswordAgePolicy) { - err := c.policyCache.Set(policy.AggregateID, policy) - if err != nil { - logging.Log("EVENT-6vRvM").WithError(err).Debug("error in setting policy cache") - } -} diff --git a/internal/policy/repository/eventsourcing/cache_complexity.go b/internal/policy/repository/eventsourcing/cache_complexity.go deleted file mode 100644 index 7c05e5528d..0000000000 --- a/internal/policy/repository/eventsourcing/cache_complexity.go +++ /dev/null @@ -1,20 +0,0 @@ -package eventsourcing - -import ( - "github.com/caos/logging" -) - -func (c *PolicyCache) getComplexityPolicy(id string) (policy *PasswordComplexityPolicy) { - policy = new(PasswordComplexityPolicy) - if err := c.policyCache.Get(id, policy); err != nil { - logging.Log("EVENT-Wgrph").WithError(err).Debug("error in getting cache") - } - return policy -} - -func (c *PolicyCache) cacheComplexityPolicy(policy *PasswordComplexityPolicy) { - err := c.policyCache.Set(policy.AggregateID, policy) - if err != nil { - logging.Log("EVENT-ylGny").WithError(err).Debug("error in setting policy cache") - } -} diff --git a/internal/policy/repository/eventsourcing/cache_lockout.go b/internal/policy/repository/eventsourcing/cache_lockout.go deleted file mode 100644 index 4fbb7f700e..0000000000 --- a/internal/policy/repository/eventsourcing/cache_lockout.go +++ /dev/null @@ -1,20 +0,0 @@ -package eventsourcing - -import ( - "github.com/caos/logging" -) - -func (c *PolicyCache) getLockoutPolicy(id string) (policy *PasswordLockoutPolicy) { - policy = new(PasswordLockoutPolicy) - if err := c.policyCache.Get(id, policy); err != nil { - logging.Log("EVENT-Zoljf").WithError(err).Debug("error in getting cache") - } - return policy -} - -func (c *PolicyCache) cacheLockoutPolicy(policy *PasswordLockoutPolicy) { - err := c.policyCache.Set(policy.AggregateID, policy) - if err != nil { - logging.Log("EVENT-6klAf").WithError(err).Debug("error in setting policy cache") - } -} diff --git a/internal/policy/repository/eventsourcing/eventstore.go b/internal/policy/repository/eventsourcing/eventstore.go deleted file mode 100644 index 25922d4626..0000000000 --- a/internal/policy/repository/eventsourcing/eventstore.go +++ /dev/null @@ -1,38 +0,0 @@ -package eventsourcing - -import ( - "github.com/caos/zitadel/internal/cache/config" - sd "github.com/caos/zitadel/internal/config/systemdefaults" - es_int "github.com/caos/zitadel/internal/eventstore" - "github.com/caos/zitadel/internal/id" - "github.com/caos/zitadel/internal/policy" -) - -type PolicyEventstore struct { - es_int.Eventstore - policyCache *PolicyCache - idGenerator id.Generator - passwordAgePolicyDefault policy.PasswordAgePolicyDefault - passwordComplexityPolicyDefault policy.PasswordComplexityPolicyDefault - passwordLockoutPolicyDefault policy.PasswordLockoutPolicyDefault -} - -type PolicyConfig struct { - es_int.Eventstore - Cache *config.CacheConfig -} - -func StartPolicy(conf PolicyConfig, systemDefaults sd.SystemDefaults) (*PolicyEventstore, error) { - policyCache, err := StartCache(conf.Cache) - if err != nil { - return nil, err - } - return &PolicyEventstore{ - Eventstore: conf.Eventstore, - policyCache: policyCache, - idGenerator: id.SonyFlakeGenerator, - passwordAgePolicyDefault: systemDefaults.DefaultPolicies.Age, - passwordComplexityPolicyDefault: systemDefaults.DefaultPolicies.Complexity, - passwordLockoutPolicyDefault: systemDefaults.DefaultPolicies.Lockout, - }, nil -} diff --git a/internal/policy/repository/eventsourcing/eventstore_age.go b/internal/policy/repository/eventsourcing/eventstore_age.go deleted file mode 100644 index 8addfacbec..0000000000 --- a/internal/policy/repository/eventsourcing/eventstore_age.go +++ /dev/null @@ -1,76 +0,0 @@ -package eventsourcing - -import ( - "context" - - "github.com/caos/zitadel/internal/api/authz" - caos_errs "github.com/caos/zitadel/internal/errors" - es_sdk "github.com/caos/zitadel/internal/eventstore/sdk" - pol_model "github.com/caos/zitadel/internal/policy/model" -) - -func (es *PolicyEventstore) GetPasswordAgePolicy(ctx context.Context, id string) (*pol_model.PasswordAgePolicy, error) { - policy := es.policyCache.getAgePolicy(id) - - query := PasswordAgePolicyQuery(id, policy.Sequence) - err := es_sdk.Filter(ctx, es.FilterEvents, policy.AppendEvents, query) - if caos_errs.IsNotFound(err) && es.passwordAgePolicyDefault.Description != "" { - policy.Description = es.passwordAgePolicyDefault.Description - policy.MaxAgeDays = es.passwordAgePolicyDefault.MaxAgeDays - policy.ExpireWarnDays = es.passwordAgePolicyDefault.ExpireWarnDays - } else if err != nil { - return nil, err - } - es.policyCache.cacheAgePolicy(policy) - return PasswordAgePolicyToModel(policy), nil -} - -func (es *PolicyEventstore) CreatePasswordAgePolicy(ctx context.Context, policy *pol_model.PasswordAgePolicy) (*pol_model.PasswordAgePolicy, error) { - ctxData := authz.GetCtxData(ctx) - existingPolicy, err := es.GetPasswordAgePolicy(ctx, ctxData.OrgID) - if err != nil && !caos_errs.IsNotFound(err) { - return nil, err - } - if existingPolicy != nil && existingPolicy.Sequence > 0 { - return nil, caos_errs.ThrowPreconditionFailed(nil, "EVENT-yDJ5I", "Errors.Policy.AlreadyExists") - } - - id, err := es.idGenerator.Next() - if err != nil { - return nil, err - } - policy.AggregateID = id - - repoPolicy := PasswordAgePolicyFromModel(policy) - - createAggregate := PasswordAgePolicyCreateAggregate(es.AggregateCreator(), repoPolicy) - err = es_sdk.Push(ctx, es.PushAggregates, repoPolicy.AppendEvents, createAggregate) - if err != nil { - return nil, err - } - - es.policyCache.cacheAgePolicy(repoPolicy) - return PasswordAgePolicyToModel(repoPolicy), nil -} - -func (es *PolicyEventstore) UpdatePasswordAgePolicy(ctx context.Context, policy *pol_model.PasswordAgePolicy) (*pol_model.PasswordAgePolicy, error) { - ctxData := authz.GetCtxData(ctx) - existingPolicy, err := es.GetPasswordAgePolicy(ctx, ctxData.OrgID) - if err != nil { - return nil, err - } - if existingPolicy.Sequence <= 0 { - return es.CreatePasswordAgePolicy(ctx, policy) - } - repoExisting := PasswordAgePolicyFromModel(existingPolicy) - repoNew := PasswordAgePolicyFromModel(policy) - - updateAggregate := PasswordAgePolicyUpdateAggregate(es.AggregateCreator(), repoExisting, repoNew) - err = es_sdk.Push(ctx, es.PushAggregates, repoExisting.AppendEvents, updateAggregate) - if err != nil { - return nil, err - } - - es.policyCache.cacheAgePolicy(repoExisting) - return PasswordAgePolicyToModel(repoExisting), nil -} diff --git a/internal/policy/repository/eventsourcing/eventstore_age_mock_test.go b/internal/policy/repository/eventsourcing/eventstore_age_mock_test.go deleted file mode 100644 index 37bf4b09a9..0000000000 --- a/internal/policy/repository/eventsourcing/eventstore_age_mock_test.go +++ /dev/null @@ -1,70 +0,0 @@ -package eventsourcing - -import ( - "encoding/json" - - "github.com/caos/zitadel/internal/id" - - mock_cache "github.com/caos/zitadel/internal/cache/mock" - "github.com/caos/zitadel/internal/eventstore/mock" - es_models "github.com/caos/zitadel/internal/eventstore/models" - "github.com/caos/zitadel/internal/policy/model" - "github.com/golang/mock/gomock" -) - -func GetMockedEventstoreAge(ctrl *gomock.Controller, mockEs *mock.MockEventstore) *PolicyEventstore { - return &PolicyEventstore{ - Eventstore: mockEs, - policyCache: GetMockCacheAge(ctrl), - idGenerator: GetSonyFlake(), - } -} - -func GetMockCacheAge(ctrl *gomock.Controller) *PolicyCache { - mockCache := mock_cache.NewMockCache(ctrl) - mockCache.EXPECT().Get(gomock.Any(), gomock.Any()).Return(nil).AnyTimes() - mockCache.EXPECT().Set(gomock.Any(), gomock.Any()).Return(nil).AnyTimes() - return &PolicyCache{policyCache: mockCache} -} - -func GetSonyFlake() id.Generator { - return id.SonyFlakeGenerator -} - -func GetMockGetPasswordAgePolicyOK(ctrl *gomock.Controller) *PolicyEventstore { - data, _ := json.Marshal(model.PasswordAgePolicy{Description: "Name"}) - events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.PasswordAgePolicyAdded, Data: data}, - } - mockEs := mock.NewMockEventstore(ctrl) - mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) - return GetMockedEventstoreAge(ctrl, mockEs) -} - -func GetMockGetPasswordAgePolicyNoEvents(ctrl *gomock.Controller) *PolicyEventstore { - events := []*es_models.Event{} - mockEs := mock.NewMockEventstore(ctrl) - mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) - return GetMockedEventstoreAge(ctrl, mockEs) -} - -func GetMockPasswordAgePolicy(ctrl *gomock.Controller) *PolicyEventstore { - data, _ := json.Marshal(model.PasswordAgePolicy{Description: "Name"}) - events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.PasswordAgePolicyAdded, Data: data}, - } - mockEs := mock.NewMockEventstore(ctrl) - mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) - mockEs.EXPECT().AggregateCreator().Return(es_models.NewAggregateCreator("TEST")) - mockEs.EXPECT().PushAggregates(gomock.Any(), gomock.Any()).Return(nil) - return GetMockedEventstoreAge(ctrl, mockEs) -} - -func GetMockPasswordAgePolicyNoEvents(ctrl *gomock.Controller) *PolicyEventstore { - events := []*es_models.Event{} - mockEs := mock.NewMockEventstore(ctrl) - mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) - mockEs.EXPECT().AggregateCreator().Return(es_models.NewAggregateCreator("TEST")) - mockEs.EXPECT().PushAggregates(gomock.Any(), gomock.Any()).Return(nil) - return GetMockedEventstoreAge(ctrl, mockEs) -} diff --git a/internal/policy/repository/eventsourcing/eventstore_age_test.go b/internal/policy/repository/eventsourcing/eventstore_age_test.go deleted file mode 100644 index 93751888c6..0000000000 --- a/internal/policy/repository/eventsourcing/eventstore_age_test.go +++ /dev/null @@ -1,169 +0,0 @@ -package eventsourcing - -import ( - "context" - "testing" - - "github.com/golang/mock/gomock" - - "github.com/caos/zitadel/internal/api/authz" - caos_errs "github.com/caos/zitadel/internal/errors" - es_models "github.com/caos/zitadel/internal/eventstore/models" - "github.com/caos/zitadel/internal/policy/model" -) - -func TestGetPasswordAgePolicy(t *testing.T) { - ctrl := gomock.NewController(t) - type args struct { - es *PolicyEventstore - policy *model.PasswordAgePolicy - } - type res struct { - policy *model.PasswordAgePolicy - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "policy from events, ok", - args: args{ - es: GetMockGetPasswordAgePolicyOK(ctrl), - policy: &model.PasswordAgePolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}}, - }, - res: res{ - policy: &model.PasswordAgePolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}}, - }, - }, - { - name: "policy from events, no events", - args: args{ - es: GetMockGetPasswordAgePolicyNoEvents(ctrl), - policy: &model.PasswordAgePolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 2}}, - }, - res: res{ - wantErr: true, - errFunc: caos_errs.IsNotFound, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := tt.args.es.GetPasswordAgePolicy(nil, tt.args.policy.AggregateID) - - if !tt.res.wantErr && result.AggregateID != tt.res.policy.AggregateID { - t.Errorf("got wrong result name: expected: %v, actual: %v ", tt.res.policy.AggregateID, result.AggregateID) - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} - -func TestCreatePasswordAgePolicy(t *testing.T) { - ctrl := gomock.NewController(t) - type args struct { - es *PolicyEventstore - ctx context.Context - policy *model.PasswordAgePolicy - } - type res struct { - policy *model.PasswordAgePolicy - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "create policy, ok", - args: args{ - es: GetMockPasswordAgePolicyNoEvents(ctrl), - ctx: authz.NewMockContext("orgID", "userID"), - policy: &model.PasswordAgePolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID1", Sequence: 2}, Description: "Name"}, - }, - res: res{ - policy: &model.PasswordAgePolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID1", Sequence: 2}, Description: "Name"}, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := tt.args.es.CreatePasswordAgePolicy(tt.args.ctx, tt.args.policy) - - if !tt.res.wantErr && result.AggregateID == "" { - t.Errorf("result has no id") - } - if !tt.res.wantErr && result.Description != tt.res.policy.Description { - t.Errorf("got wrong result name: expected: %v, actual: %v ", tt.res.policy.Description, result.Description) - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} - -func TestUpdatePasswordAgePolicy(t *testing.T) { - ctrl := gomock.NewController(t) - type args struct { - es *PolicyEventstore - ctx context.Context - new *model.PasswordAgePolicy - } - type res struct { - policy *model.PasswordAgePolicy - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "update policy, ok", - args: args{ - es: GetMockPasswordAgePolicy(ctrl), - ctx: authz.NewMockContext("orgID", "userID"), - new: &model.PasswordAgePolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Description: "NameNew"}, - }, - res: res{ - policy: &model.PasswordAgePolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Description: "NameNew"}, - }, - }, - { - name: "existing policy not found", - args: args{ - es: GetMockPasswordAgePolicyNoEvents(ctrl), - ctx: authz.NewMockContext("orgID", "userID"), - new: &model.PasswordAgePolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Description: "NameNew"}, - }, - res: res{ - wantErr: true, - errFunc: caos_errs.IsNotFound, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := tt.args.es.UpdatePasswordAgePolicy(tt.args.ctx, tt.args.new) - - if !tt.res.wantErr && result.AggregateID == "" { - t.Errorf("result has no id") - } - if !tt.res.wantErr && result.Description != tt.res.policy.Description { - t.Errorf("got wrong result name: expected: %v, actual: %v ", tt.res.policy.Description, result.Description) - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} diff --git a/internal/policy/repository/eventsourcing/eventstore_complexity.go b/internal/policy/repository/eventsourcing/eventstore_complexity.go deleted file mode 100644 index 074c434036..0000000000 --- a/internal/policy/repository/eventsourcing/eventstore_complexity.go +++ /dev/null @@ -1,85 +0,0 @@ -package eventsourcing - -import ( - "context" - - "github.com/caos/zitadel/internal/api/authz" - caos_errs "github.com/caos/zitadel/internal/errors" - es_sdk "github.com/caos/zitadel/internal/eventstore/sdk" - pol_model "github.com/caos/zitadel/internal/policy/model" -) - -func (es *PolicyEventstore) GetPasswordComplexityPolicy(ctx context.Context, id string) (*pol_model.PasswordComplexityPolicy, error) { - policy := es.policyCache.getComplexityPolicy(id) - - query := PasswordComplexityPolicyQuery(id, policy.Sequence) - err := es_sdk.Filter(ctx, es.FilterEvents, policy.AppendEvents, query) - if caos_errs.IsNotFound(err) && es.passwordComplexityPolicyDefault.Description != "" { - policy.Description = es.passwordComplexityPolicyDefault.Description - policy.MinLength = es.passwordComplexityPolicyDefault.MinLength - policy.HasLowercase = es.passwordComplexityPolicyDefault.HasLowercase - policy.HasUppercase = es.passwordComplexityPolicyDefault.HasUppercase - policy.HasNumber = es.passwordComplexityPolicyDefault.HasNumber - policy.HasSymbol = es.passwordComplexityPolicyDefault.HasSymbol - } else if err != nil { - return nil, err - } - es.policyCache.cacheComplexityPolicy(policy) - return PasswordComplexityPolicyToModel(policy), nil -} - -func (es *PolicyEventstore) CreatePasswordComplexityPolicy(ctx context.Context, policy *pol_model.PasswordComplexityPolicy) (*pol_model.PasswordComplexityPolicy, error) { - ctxData := authz.GetCtxData(ctx) - if err := policy.IsValid(); err != nil { - return nil, err - } - existingPolicy, err := es.GetPasswordComplexityPolicy(ctx, ctxData.OrgID) - if err != nil && !caos_errs.IsNotFound(err) { - return nil, err - } - if existingPolicy != nil && existingPolicy.Sequence > 0 { - return nil, caos_errs.ThrowPreconditionFailed(nil, "EVENT-yDJ5I", "Errors.Policy.AlreadyExists") - } - - id, err := es.idGenerator.Next() - if err != nil { - return nil, err - } - policy.AggregateID = id - - repoPolicy := PasswordComplexityPolicyFromModel(policy) - - createAggregate := PasswordComplexityPolicyCreateAggregate(es.AggregateCreator(), repoPolicy) - err = es_sdk.Push(ctx, es.PushAggregates, repoPolicy.AppendEvents, createAggregate) - if err != nil { - return nil, err - } - - es.policyCache.cacheComplexityPolicy(repoPolicy) - return PasswordComplexityPolicyToModel(repoPolicy), nil -} - -func (es *PolicyEventstore) UpdatePasswordComplexityPolicy(ctx context.Context, policy *pol_model.PasswordComplexityPolicy) (*pol_model.PasswordComplexityPolicy, error) { - ctxData := authz.GetCtxData(ctx) - if err := policy.IsValid(); err != nil { - return nil, err - } - existingPolicy, err := es.GetPasswordComplexityPolicy(ctx, ctxData.OrgID) - if err != nil { - return nil, err - } - if existingPolicy.Sequence <= 0 { - return es.CreatePasswordComplexityPolicy(ctx, policy) - } - repoExisting := PasswordComplexityPolicyFromModel(existingPolicy) - repoNew := PasswordComplexityPolicyFromModel(policy) - - updateAggregate := PasswordComplexityPolicyUpdateAggregate(es.AggregateCreator(), repoExisting, repoNew) - err = es_sdk.Push(ctx, es.PushAggregates, repoExisting.AppendEvents, updateAggregate) - if err != nil { - return nil, err - } - - es.policyCache.cacheComplexityPolicy(repoExisting) - return PasswordComplexityPolicyToModel(repoExisting), nil -} diff --git a/internal/policy/repository/eventsourcing/eventstore_complexity_mock_test.go b/internal/policy/repository/eventsourcing/eventstore_complexity_mock_test.go deleted file mode 100644 index bab874b331..0000000000 --- a/internal/policy/repository/eventsourcing/eventstore_complexity_mock_test.go +++ /dev/null @@ -1,64 +0,0 @@ -package eventsourcing - -import ( - "encoding/json" - - mock_cache "github.com/caos/zitadel/internal/cache/mock" - "github.com/caos/zitadel/internal/eventstore/mock" - es_models "github.com/caos/zitadel/internal/eventstore/models" - "github.com/caos/zitadel/internal/policy/model" - "github.com/golang/mock/gomock" -) - -func GetMockedEventstoreComplexity(ctrl *gomock.Controller, mockEs *mock.MockEventstore) *PolicyEventstore { - return &PolicyEventstore{ - Eventstore: mockEs, - policyCache: GetMockCacheComplexity(ctrl), - idGenerator: GetSonyFlake(), - } -} - -func GetMockCacheComplexity(ctrl *gomock.Controller) *PolicyCache { - mockCache := mock_cache.NewMockCache(ctrl) - mockCache.EXPECT().Get(gomock.Any(), gomock.Any()).Return(nil).AnyTimes() - mockCache.EXPECT().Set(gomock.Any(), gomock.Any()).Return(nil).AnyTimes() - return &PolicyCache{policyCache: mockCache} -} - -func GetMockGetPasswordComplexityPolicyOK(ctrl *gomock.Controller) *PolicyEventstore { - data, _ := json.Marshal(model.PasswordComplexityPolicy{Description: "Name"}) - events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.PasswordComplexityPolicyAdded, Data: data}, - } - mockEs := mock.NewMockEventstore(ctrl) - mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) - return GetMockedEventstoreComplexity(ctrl, mockEs) -} - -func GetMockGetPasswordComplexityPolicyNoEvents(ctrl *gomock.Controller) *PolicyEventstore { - events := []*es_models.Event{} - mockEs := mock.NewMockEventstore(ctrl) - mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) - return GetMockedEventstoreComplexity(ctrl, mockEs) -} - -func GetMockPasswordComplexityPolicy(ctrl *gomock.Controller) *PolicyEventstore { - data, _ := json.Marshal(model.PasswordComplexityPolicy{Description: "Name"}) - events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.PasswordComplexityPolicyAdded, Data: data}, - } - mockEs := mock.NewMockEventstore(ctrl) - mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) - mockEs.EXPECT().AggregateCreator().Return(es_models.NewAggregateCreator("TEST")) - mockEs.EXPECT().PushAggregates(gomock.Any(), gomock.Any()).Return(nil) - return GetMockedEventstoreComplexity(ctrl, mockEs) -} - -func GetMockPasswordComplexityPolicyNoEvents(ctrl *gomock.Controller) *PolicyEventstore { - events := []*es_models.Event{} - mockEs := mock.NewMockEventstore(ctrl) - mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) - mockEs.EXPECT().AggregateCreator().Return(es_models.NewAggregateCreator("TEST")) - mockEs.EXPECT().PushAggregates(gomock.Any(), gomock.Any()).Return(nil) - return GetMockedEventstoreComplexity(ctrl, mockEs) -} diff --git a/internal/policy/repository/eventsourcing/eventstore_complexity_test.go b/internal/policy/repository/eventsourcing/eventstore_complexity_test.go deleted file mode 100644 index 8afdd66799..0000000000 --- a/internal/policy/repository/eventsourcing/eventstore_complexity_test.go +++ /dev/null @@ -1,188 +0,0 @@ -package eventsourcing - -import ( - "context" - "testing" - - "github.com/golang/mock/gomock" - - "github.com/caos/zitadel/internal/api/authz" - caos_errs "github.com/caos/zitadel/internal/errors" - es_models "github.com/caos/zitadel/internal/eventstore/models" - "github.com/caos/zitadel/internal/policy/model" -) - -func TestGetPasswordComplexityPolicy(t *testing.T) { - ctrl := gomock.NewController(t) - type args struct { - es *PolicyEventstore - policy *model.PasswordComplexityPolicy - } - type res struct { - policy *model.PasswordComplexityPolicy - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "policy from events, ok", - args: args{ - es: GetMockGetPasswordComplexityPolicyOK(ctrl), - policy: &model.PasswordComplexityPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}}, - }, - res: res{ - policy: &model.PasswordComplexityPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}}, - }, - }, - { - name: "policy from events, no events", - args: args{ - es: GetMockGetPasswordComplexityPolicyNoEvents(ctrl), - policy: &model.PasswordComplexityPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 2}}, - }, - res: res{ - wantErr: true, - errFunc: caos_errs.IsNotFound, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := tt.args.es.GetPasswordComplexityPolicy(nil, tt.args.policy.AggregateID) - - if !tt.res.wantErr && result.AggregateID != tt.res.policy.AggregateID { - t.Errorf("got wrong result name: expected: %v, actual: %v ", tt.res.policy.AggregateID, result.AggregateID) - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} - -func TestCreatePasswordComplexityPolicy(t *testing.T) { - ctrl := gomock.NewController(t) - type args struct { - es *PolicyEventstore - ctx context.Context - policy *model.PasswordComplexityPolicy - } - type res struct { - policy *model.PasswordComplexityPolicy - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "create policy, ok", - args: args{ - es: GetMockPasswordComplexityPolicyNoEvents(ctrl), - ctx: authz.NewMockContext("orgID", "userID"), - policy: &model.PasswordComplexityPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID1", Sequence: 2}, Description: "Name", MinLength: 8}, - }, - res: res{ - policy: &model.PasswordComplexityPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID1", Sequence: 2}, Description: "Name", MinLength: 8}, - }, - }, - { - name: "create policy, no minlength", - args: args{ - es: GetMockPasswordComplexityPolicyNoEvents(ctrl), - ctx: authz.NewMockContext("orgID", "userID"), - policy: &model.PasswordComplexityPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID1", Sequence: 2}, Description: "Name"}, - }, - res: res{ - errFunc: caos_errs.IsErrorInvalidArgument, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := tt.args.es.CreatePasswordComplexityPolicy(tt.args.ctx, tt.args.policy) - - if tt.res.errFunc == nil && result.AggregateID == "" { - t.Errorf("result has no id") - } - if tt.res.errFunc == nil && result.Description != tt.res.policy.Description { - t.Errorf("got wrong result name: expected: %v, actual: %v ", tt.res.policy.Description, result.Description) - } - if tt.res.errFunc != nil && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} - -func TestUpdatePasswordComplexityPolicy(t *testing.T) { - ctrl := gomock.NewController(t) - type args struct { - es *PolicyEventstore - ctx context.Context - new *model.PasswordComplexityPolicy - } - type res struct { - policy *model.PasswordComplexityPolicy - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "update policy, ok", - args: args{ - es: GetMockPasswordComplexityPolicy(ctrl), - ctx: authz.NewMockContext("orgID", "userID"), - new: &model.PasswordComplexityPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Description: "NameNew", MinLength: 8}, - }, - res: res{ - policy: &model.PasswordComplexityPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Description: "NameNew", MinLength: 8}, - }, - }, - { - name: "create policy, no minlength", - args: args{ - es: GetMockPasswordComplexityPolicyNoEvents(ctrl), - ctx: authz.NewMockContext("orgID", "userID"), - new: &model.PasswordComplexityPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID1", Sequence: 2}, Description: "Name"}, - }, - res: res{ - errFunc: caos_errs.IsErrorInvalidArgument, - }, - }, - { - name: "existing policy not found", - args: args{ - es: GetMockPasswordComplexityPolicyNoEvents(ctrl), - ctx: authz.NewMockContext("orgID", "userID"), - new: &model.PasswordComplexityPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Description: "NameNew", MinLength: 8}, - }, - res: res{ - errFunc: caos_errs.IsNotFound, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := tt.args.es.UpdatePasswordComplexityPolicy(tt.args.ctx, tt.args.new) - - if tt.res.errFunc == nil && result.AggregateID == "" { - t.Errorf("result has no id") - } - if tt.res.errFunc == nil && result.Description != tt.res.policy.Description { - t.Errorf("got wrong result name: expected: %v, actual: %v ", tt.res.policy.Description, result.Description) - } - if tt.res.errFunc != nil && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} diff --git a/internal/policy/repository/eventsourcing/eventstore_lockout.go b/internal/policy/repository/eventsourcing/eventstore_lockout.go deleted file mode 100644 index b54af4753c..0000000000 --- a/internal/policy/repository/eventsourcing/eventstore_lockout.go +++ /dev/null @@ -1,76 +0,0 @@ -package eventsourcing - -import ( - "context" - - "github.com/caos/zitadel/internal/api/authz" - caos_errs "github.com/caos/zitadel/internal/errors" - es_sdk "github.com/caos/zitadel/internal/eventstore/sdk" - pol_model "github.com/caos/zitadel/internal/policy/model" -) - -func (es *PolicyEventstore) GetPasswordLockoutPolicy(ctx context.Context, id string) (*pol_model.PasswordLockoutPolicy, error) { - policy := es.policyCache.getLockoutPolicy(id) - - query := PasswordLockoutPolicyQuery(id, policy.Sequence) - err := es_sdk.Filter(ctx, es.FilterEvents, policy.AppendEvents, query) - if caos_errs.IsNotFound(err) && es.passwordLockoutPolicyDefault.Description != "" { - policy.Description = es.passwordLockoutPolicyDefault.Description - policy.MaxAttempts = es.passwordLockoutPolicyDefault.MaxAttempts - policy.ShowLockOutFailures = es.passwordLockoutPolicyDefault.ShowLockOutFailures - } else if err != nil { - return nil, err - } - es.policyCache.cacheLockoutPolicy(policy) - return PasswordLockoutPolicyToModel(policy), nil -} - -func (es *PolicyEventstore) CreatePasswordLockoutPolicy(ctx context.Context, policy *pol_model.PasswordLockoutPolicy) (*pol_model.PasswordLockoutPolicy, error) { - ctxData := authz.GetCtxData(ctx) - existingPolicy, err := es.GetPasswordLockoutPolicy(ctx, ctxData.OrgID) - if err != nil && !caos_errs.IsNotFound(err) { - return nil, err - } - if existingPolicy != nil && existingPolicy.Sequence > 0 { - return nil, caos_errs.ThrowPreconditionFailed(nil, "EVENT-yDJ5I", "Errors.Policy.AlreadyExists") - } - - id, err := es.idGenerator.Next() - if err != nil { - return nil, err - } - policy.AggregateID = id - - repoPolicy := PasswordLockoutPolicyFromModel(policy) - - createAggregate := PasswordLockoutPolicyCreateAggregate(es.AggregateCreator(), repoPolicy) - err = es_sdk.Push(ctx, es.PushAggregates, repoPolicy.AppendEvents, createAggregate) - if err != nil { - return nil, err - } - - es.policyCache.cacheLockoutPolicy(repoPolicy) - return PasswordLockoutPolicyToModel(repoPolicy), nil -} - -func (es *PolicyEventstore) UpdatePasswordLockoutPolicy(ctx context.Context, policy *pol_model.PasswordLockoutPolicy) (*pol_model.PasswordLockoutPolicy, error) { - ctxData := authz.GetCtxData(ctx) - existingPolicy, err := es.GetPasswordLockoutPolicy(ctx, ctxData.OrgID) - if err != nil { - return nil, err - } - if existingPolicy.Sequence <= 0 { - return es.CreatePasswordLockoutPolicy(ctx, policy) - } - repoExisting := PasswordLockoutPolicyFromModel(existingPolicy) - repoNew := PasswordLockoutPolicyFromModel(policy) - - updateAggregate := PasswordLockoutPolicyUpdateAggregate(es.AggregateCreator(), repoExisting, repoNew) - err = es_sdk.Push(ctx, es.PushAggregates, repoExisting.AppendEvents, updateAggregate) - if err != nil { - return nil, err - } - - es.policyCache.cacheLockoutPolicy(repoExisting) - return PasswordLockoutPolicyToModel(repoExisting), nil -} diff --git a/internal/policy/repository/eventsourcing/eventstore_lockout_mock_test.go b/internal/policy/repository/eventsourcing/eventstore_lockout_mock_test.go deleted file mode 100644 index bf3d0ae971..0000000000 --- a/internal/policy/repository/eventsourcing/eventstore_lockout_mock_test.go +++ /dev/null @@ -1,64 +0,0 @@ -package eventsourcing - -import ( - "encoding/json" - - mock_cache "github.com/caos/zitadel/internal/cache/mock" - "github.com/caos/zitadel/internal/eventstore/mock" - es_models "github.com/caos/zitadel/internal/eventstore/models" - "github.com/caos/zitadel/internal/policy/model" - "github.com/golang/mock/gomock" -) - -func GetMockedEventstoreLockout(ctrl *gomock.Controller, mockEs *mock.MockEventstore) *PolicyEventstore { - return &PolicyEventstore{ - Eventstore: mockEs, - policyCache: GetMockCacheLockout(ctrl), - idGenerator: GetSonyFlake(), - } -} - -func GetMockCacheLockout(ctrl *gomock.Controller) *PolicyCache { - mockCache := mock_cache.NewMockCache(ctrl) - mockCache.EXPECT().Get(gomock.Any(), gomock.Any()).Return(nil).AnyTimes() - mockCache.EXPECT().Set(gomock.Any(), gomock.Any()).Return(nil).AnyTimes() - return &PolicyCache{policyCache: mockCache} -} - -func GetMockGetPasswordLockoutPolicyOK(ctrl *gomock.Controller) *PolicyEventstore { - data, _ := json.Marshal(model.PasswordLockoutPolicy{Description: "Name"}) - events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.PasswordLockoutPolicyAdded, Data: data}, - } - mockEs := mock.NewMockEventstore(ctrl) - mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) - return GetMockedEventstoreLockout(ctrl, mockEs) -} - -func GetMockGetPasswordLockoutPolicyNoEvents(ctrl *gomock.Controller) *PolicyEventstore { - events := []*es_models.Event{} - mockEs := mock.NewMockEventstore(ctrl) - mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) - return GetMockedEventstoreLockout(ctrl, mockEs) -} - -func GetMockPasswordLockoutPolicy(ctrl *gomock.Controller) *PolicyEventstore { - data, _ := json.Marshal(model.PasswordLockoutPolicy{Description: "Name"}) - events := []*es_models.Event{ - &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: model.PasswordLockoutPolicyAdded, Data: data}, - } - mockEs := mock.NewMockEventstore(ctrl) - mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) - mockEs.EXPECT().AggregateCreator().Return(es_models.NewAggregateCreator("TEST")) - mockEs.EXPECT().PushAggregates(gomock.Any(), gomock.Any()).Return(nil) - return GetMockedEventstoreLockout(ctrl, mockEs) -} - -func GetMockPasswordLockoutPolicyNoEvents(ctrl *gomock.Controller) *PolicyEventstore { - events := []*es_models.Event{} - mockEs := mock.NewMockEventstore(ctrl) - mockEs.EXPECT().FilterEvents(gomock.Any(), gomock.Any()).Return(events, nil) - mockEs.EXPECT().AggregateCreator().Return(es_models.NewAggregateCreator("TEST")) - mockEs.EXPECT().PushAggregates(gomock.Any(), gomock.Any()).Return(nil) - return GetMockedEventstoreLockout(ctrl, mockEs) -} diff --git a/internal/policy/repository/eventsourcing/eventstore_lockout_test.go b/internal/policy/repository/eventsourcing/eventstore_lockout_test.go deleted file mode 100644 index df77cef4da..0000000000 --- a/internal/policy/repository/eventsourcing/eventstore_lockout_test.go +++ /dev/null @@ -1,169 +0,0 @@ -package eventsourcing - -import ( - "context" - "testing" - - "github.com/golang/mock/gomock" - - "github.com/caos/zitadel/internal/api/authz" - caos_errs "github.com/caos/zitadel/internal/errors" - es_models "github.com/caos/zitadel/internal/eventstore/models" - "github.com/caos/zitadel/internal/policy/model" -) - -func TestGetPasswordLockoutPolicy(t *testing.T) { - ctrl := gomock.NewController(t) - type args struct { - es *PolicyEventstore - policy *model.PasswordLockoutPolicy - } - type res struct { - policy *model.PasswordLockoutPolicy - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "policy from events, ok", - args: args{ - es: GetMockGetPasswordLockoutPolicyOK(ctrl), - policy: &model.PasswordLockoutPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}}, - }, - res: res{ - policy: &model.PasswordLockoutPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}}, - }, - }, - { - name: "policy from events, no events", - args: args{ - es: GetMockGetPasswordLockoutPolicyNoEvents(ctrl), - policy: &model.PasswordLockoutPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 2}}, - }, - res: res{ - wantErr: true, - errFunc: caos_errs.IsNotFound, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := tt.args.es.GetPasswordLockoutPolicy(nil, tt.args.policy.AggregateID) - - if !tt.res.wantErr && result.AggregateID != tt.res.policy.AggregateID { - t.Errorf("got wrong result name: expected: %v, actual: %v ", tt.res.policy.AggregateID, result.AggregateID) - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} - -func TestCreatePasswordLockoutPolicy(t *testing.T) { - ctrl := gomock.NewController(t) - type args struct { - es *PolicyEventstore - ctx context.Context - policy *model.PasswordLockoutPolicy - } - type res struct { - policy *model.PasswordLockoutPolicy - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "create policy, ok", - args: args{ - es: GetMockPasswordLockoutPolicyNoEvents(ctrl), - ctx: authz.NewMockContext("orgID", "userID"), - policy: &model.PasswordLockoutPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID1", Sequence: 2}, Description: "Name"}, - }, - res: res{ - policy: &model.PasswordLockoutPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID1", Sequence: 2}, Description: "Name"}, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := tt.args.es.CreatePasswordLockoutPolicy(tt.args.ctx, tt.args.policy) - - if !tt.res.wantErr && result.AggregateID == "" { - t.Errorf("result has no id") - } - if !tt.res.wantErr && result.Description != tt.res.policy.Description { - t.Errorf("got wrong result name: expected: %v, actual: %v ", tt.res.policy.Description, result.Description) - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} - -func TestUpdatePasswordLockoutPolicy(t *testing.T) { - ctrl := gomock.NewController(t) - type args struct { - es *PolicyEventstore - ctx context.Context - new *model.PasswordLockoutPolicy - } - type res struct { - policy *model.PasswordLockoutPolicy - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "update policy, ok", - args: args{ - es: GetMockPasswordLockoutPolicy(ctrl), - ctx: authz.NewMockContext("orgID", "userID"), - new: &model.PasswordLockoutPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Description: "NameNew"}, - }, - res: res{ - policy: &model.PasswordLockoutPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Description: "NameNew"}, - }, - }, - { - name: "existing policy not found", - args: args{ - es: GetMockPasswordLockoutPolicyNoEvents(ctrl), - ctx: authz.NewMockContext("orgID", "userID"), - new: &model.PasswordLockoutPolicy{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Description: "NameNew"}, - }, - res: res{ - wantErr: true, - errFunc: caos_errs.IsNotFound, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result, err := tt.args.es.UpdatePasswordLockoutPolicy(tt.args.ctx, tt.args.new) - - if !tt.res.wantErr && result.AggregateID == "" { - t.Errorf("result has no id") - } - if !tt.res.wantErr && result.Description != tt.res.policy.Description { - t.Errorf("got wrong result name: expected: %v, actual: %v ", tt.res.policy.Description, result.Description) - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} diff --git a/internal/policy/repository/eventsourcing/model_age.go b/internal/policy/repository/eventsourcing/model_age.go deleted file mode 100644 index b2d06b0682..0000000000 --- a/internal/policy/repository/eventsourcing/model_age.go +++ /dev/null @@ -1,80 +0,0 @@ -package eventsourcing - -import ( - "encoding/json" - - "github.com/caos/logging" - "github.com/caos/zitadel/internal/eventstore/models" - es_models "github.com/caos/zitadel/internal/eventstore/models" - "github.com/caos/zitadel/internal/policy/model" -) - -const ( - policyAgeVersion = "v1" -) - -type PasswordAgePolicy struct { - models.ObjectRoot - - Description string `json:"description,omitempty"` - State int32 `json:"-"` - MaxAgeDays uint64 `json:"maxAgeDays"` - ExpireWarnDays uint64 `json:"expireWarnDays"` -} - -func (p *PasswordAgePolicy) AgeChanges(changed *PasswordAgePolicy) map[string]interface{} { - changes := make(map[string]interface{}, 1) - if changed.Description != "" && p.Description != changed.Description { - changes["description"] = changed.Description - } - if p.MaxAgeDays != changed.MaxAgeDays { - changes["maxAgeDays"] = changed.MaxAgeDays - } - if p.ExpireWarnDays != changed.ExpireWarnDays { - changes["expireWarnDays"] = changed.ExpireWarnDays - } - return changes -} - -func PasswordAgePolicyFromModel(policy *model.PasswordAgePolicy) *PasswordAgePolicy { - return &PasswordAgePolicy{ - ObjectRoot: policy.ObjectRoot, - Description: policy.Description, - State: int32(policy.State), - MaxAgeDays: policy.MaxAgeDays, - ExpireWarnDays: policy.ExpireWarnDays, - } -} - -func PasswordAgePolicyToModel(policy *PasswordAgePolicy) *model.PasswordAgePolicy { - return &model.PasswordAgePolicy{ - ObjectRoot: policy.ObjectRoot, - Description: policy.Description, - State: model.PolicyState(policy.State), - MaxAgeDays: policy.MaxAgeDays, - ExpireWarnDays: policy.ExpireWarnDays, - } -} - -func (p *PasswordAgePolicy) AppendEvents(events ...*es_models.Event) error { - for _, event := range events { - if err := p.AppendEvent(event); err != nil { - return err - } - } - return nil -} - -func (p *PasswordAgePolicy) AppendEvent(event *es_models.Event) error { - p.ObjectRoot.AppendEvent(event) - - switch event.Type { - case model.PasswordAgePolicyAdded, model.PasswordAgePolicyChanged: - if err := json.Unmarshal(event.Data, p); err != nil { - logging.Log("EVEN-idl93").WithError(err).Error("could not unmarshal event data") - return err - } - return nil - } - return nil -} diff --git a/internal/policy/repository/eventsourcing/model_lockout.go b/internal/policy/repository/eventsourcing/model_lockout.go deleted file mode 100644 index 5d28d6124b..0000000000 --- a/internal/policy/repository/eventsourcing/model_lockout.go +++ /dev/null @@ -1,80 +0,0 @@ -package eventsourcing - -import ( - "encoding/json" - - "github.com/caos/logging" - "github.com/caos/zitadel/internal/eventstore/models" - es_models "github.com/caos/zitadel/internal/eventstore/models" - "github.com/caos/zitadel/internal/policy/model" -) - -const ( - policyLockoutVersion = "v1" -) - -type PasswordLockoutPolicy struct { - models.ObjectRoot - - Description string `json:"description,omitempty"` - State int32 `json:"-"` - MaxAttempts uint64 `json:"maxAttempts"` - ShowLockOutFailures bool `json:"showLockOutFailures"` -} - -func (p *PasswordLockoutPolicy) LockoutChanges(changed *PasswordLockoutPolicy) map[string]interface{} { - changes := make(map[string]interface{}, 1) - if changed.Description != "" && p.Description != changed.Description { - changes["description"] = changed.Description - } - if p.MaxAttempts != changed.MaxAttempts { - changes["maxAttempts"] = changed.MaxAttempts - } - if p.ShowLockOutFailures != changed.ShowLockOutFailures { - changes["showLockOutFailures"] = changed.ShowLockOutFailures - } - return changes -} - -func PasswordLockoutPolicyFromModel(policy *model.PasswordLockoutPolicy) *PasswordLockoutPolicy { - return &PasswordLockoutPolicy{ - ObjectRoot: policy.ObjectRoot, - Description: policy.Description, - State: int32(policy.State), - MaxAttempts: policy.MaxAttempts, - ShowLockOutFailures: policy.ShowLockOutFailures, - } -} - -func PasswordLockoutPolicyToModel(policy *PasswordLockoutPolicy) *model.PasswordLockoutPolicy { - return &model.PasswordLockoutPolicy{ - ObjectRoot: policy.ObjectRoot, - Description: policy.Description, - State: model.PolicyState(policy.State), - MaxAttempts: policy.MaxAttempts, - ShowLockOutFailures: policy.ShowLockOutFailures, - } -} - -func (p *PasswordLockoutPolicy) AppendEvents(events ...*es_models.Event) error { - for _, event := range events { - if err := p.AppendEvent(event); err != nil { - return err - } - } - return nil -} - -func (p *PasswordLockoutPolicy) AppendEvent(event *es_models.Event) error { - p.ObjectRoot.AppendEvent(event) - - switch event.Type { - case model.PasswordLockoutPolicyAdded, model.PasswordLockoutPolicyChanged: - if err := json.Unmarshal(event.Data, p); err != nil { - logging.Log("EVEN-idl93").WithError(err).Error("could not unmarshal event data") - return err - } - return nil - } - return nil -} diff --git a/internal/policy/repository/eventsourcing/policy_age.go b/internal/policy/repository/eventsourcing/policy_age.go deleted file mode 100644 index 61675f0d96..0000000000 --- a/internal/policy/repository/eventsourcing/policy_age.go +++ /dev/null @@ -1,51 +0,0 @@ -package eventsourcing - -import ( - "context" - - "github.com/caos/zitadel/internal/errors" - es_models "github.com/caos/zitadel/internal/eventstore/models" - "github.com/caos/zitadel/internal/policy/model" -) - -func PasswordAgePolicyQuery(recourceOwner string, latestSequence uint64) *es_models.SearchQuery { - return es_models.NewSearchQuery(). - AggregateTypeFilter(model.PasswordAgePolicyAggregate). - LatestSequenceFilter(latestSequence). - ResourceOwnerFilter(recourceOwner) -} - -func PasswordAgePolicyAggregate(ctx context.Context, aggCreator *es_models.AggregateCreator, policy *PasswordAgePolicy) (*es_models.Aggregate, error) { - if policy == nil { - return nil, errors.ThrowPreconditionFailed(nil, "EVENT-1T05i", "Errors.Internal") - } - return aggCreator.NewAggregate(ctx, policy.AggregateID, model.PasswordAgePolicyAggregate, policyAgeVersion, policy.Sequence) -} - -func PasswordAgePolicyCreateAggregate(aggCreator *es_models.AggregateCreator, policy *PasswordAgePolicy) func(ctx context.Context) (*es_models.Aggregate, error) { - return func(ctx context.Context) (*es_models.Aggregate, error) { - if policy == nil { - return nil, errors.ThrowPreconditionFailed(nil, "EVENT-kdie6", "Errors.Internal") - } - agg, err := PasswordAgePolicyAggregate(ctx, aggCreator, policy) - if err != nil { - return nil, err - } - - return agg.AppendEvent(model.PasswordAgePolicyAdded, policy) - } -} - -func PasswordAgePolicyUpdateAggregate(aggCreator *es_models.AggregateCreator, existingPolicy *PasswordAgePolicy, newPolicy *PasswordAgePolicy) func(ctx context.Context) (*es_models.Aggregate, error) { - return func(ctx context.Context) (*es_models.Aggregate, error) { - if newPolicy == nil { - return nil, errors.ThrowPreconditionFailed(nil, "EVENT-dhr74", "Errors.Internal") - } - agg, err := PasswordAgePolicyAggregate(ctx, aggCreator, existingPolicy) - if err != nil { - return nil, err - } - changes := existingPolicy.AgeChanges(newPolicy) - return agg.AppendEvent(model.PasswordAgePolicyChanged, changes) - } -} diff --git a/internal/policy/repository/eventsourcing/policy_age_test.go b/internal/policy/repository/eventsourcing/policy_age_test.go deleted file mode 100644 index 407911f540..0000000000 --- a/internal/policy/repository/eventsourcing/policy_age_test.go +++ /dev/null @@ -1,268 +0,0 @@ -package eventsourcing - -import ( - "context" - "testing" - - "github.com/caos/zitadel/internal/api/authz" - caos_errs "github.com/caos/zitadel/internal/errors" - "github.com/caos/zitadel/internal/eventstore/models" - policy_model "github.com/caos/zitadel/internal/policy/model" -) - -func TestGetPasswordAgePolicyQuery(t *testing.T) { - type args struct { - recourceOwner string - sequence uint64 - } - type res struct { - filterLen int - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "Get password age policy query ok", - args: args{ - recourceOwner: "org", - sequence: 14, - }, - res: res{ - filterLen: 3, - }, - }, - { - name: "Get password age policy query, no org", - args: args{ - sequence: 1, - }, - res: res{ - filterLen: 3, - wantErr: true, - errFunc: caos_errs.IsPreconditionFailed, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - query := PasswordAgePolicyQuery(tt.args.recourceOwner, tt.args.sequence) - if !tt.res.wantErr && query == nil { - t.Errorf("query should not be nil") - } - if !tt.res.wantErr && len(query.Filters) != tt.res.filterLen { - t.Errorf("got wrong filter len: expected: %v, actual: %v ", tt.res.filterLen, len(query.Filters)) - } - }) - } -} - -func TestPasswordAgePolicyAggregate(t *testing.T) { - - type args struct { - ctx context.Context - aggCreator *models.AggregateCreator - policy *PasswordAgePolicy - } - type res struct { - eventLen int - aggType models.AggregateType - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "create aggregate", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - aggCreator: models.NewAggregateCreator("Test"), - policy: &PasswordAgePolicy{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Description: "Test"}, - }, - res: res{ - eventLen: 0, - aggType: policy_model.PasswordAgePolicyAggregate, - }, - }, - { - name: "policy nil", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 0, - aggType: policy_model.PasswordAgePolicyAggregate, - wantErr: true, - errFunc: caos_errs.IsPreconditionFailed, - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - agg, err := PasswordAgePolicyAggregate(tt.args.ctx, tt.args.aggCreator, tt.args.policy) - - if !tt.res.wantErr && agg == nil { - t.Errorf("agg should not be nil") - } - if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { - t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} - -func TestPasswordAgePolicyCreateAggregate(t *testing.T) { - type args struct { - ctx context.Context - new *PasswordAgePolicy - aggCreator *models.AggregateCreator - } - type res struct { - eventLen int - eventType models.EventType - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "policy update aggregate ok", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - new: &PasswordAgePolicy{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, Description: "PolicyName", State: int32(policy_model.PolicyStateActive)}, - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 1, - eventType: policy_model.PasswordAgePolicyAdded, - }, - }, - { - name: "new policy nil", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - new: nil, - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 1, - eventType: policy_model.PasswordAgePolicyAdded, - wantErr: true, - errFunc: caos_errs.IsPreconditionFailed, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - agg, err := PasswordAgePolicyCreateAggregate(tt.args.aggCreator, tt.args.new)(tt.args.ctx) - - if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { - t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) - } - if !tt.res.wantErr && agg.Events[0].Type != tt.res.eventType { - t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventType, agg.Events[0].Type.String()) - } - if !tt.res.wantErr && agg.Events[0].Data == nil { - t.Errorf("should have data in event") - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} - -func TestPasswordAgePolicyUpdateAggregate(t *testing.T) { - type args struct { - ctx context.Context - existingPolicy *PasswordAgePolicy - newPolicy *PasswordAgePolicy - aggCreator *models.AggregateCreator - } - type res struct { - eventLen int - eventType models.EventType - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "policy update aggregate ok", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - existingPolicy: &PasswordAgePolicy{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, Description: "PolicyName", State: int32(policy_model.PolicyStateActive)}, - newPolicy: &PasswordAgePolicy{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, Description: "PolicyName_Changed", State: int32(policy_model.PolicyStateActive)}, - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 1, - eventType: policy_model.PasswordAgePolicyChanged, - }, - }, - { - name: "existing policy nil", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - existingPolicy: nil, - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 1, - eventType: policy_model.PasswordAgePolicyChanged, - wantErr: true, - errFunc: caos_errs.IsPreconditionFailed, - }, - }, - { - name: "new policy nil", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - existingPolicy: &PasswordAgePolicy{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, Description: "ProjectName", State: int32(policy_model.PolicyStateActive)}, - newPolicy: nil, - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 1, - eventType: policy_model.PasswordAgePolicyChanged, - wantErr: true, - errFunc: caos_errs.IsPreconditionFailed, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - agg, err := PasswordAgePolicyUpdateAggregate(tt.args.aggCreator, tt.args.existingPolicy, tt.args.newPolicy)(tt.args.ctx) - - if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { - t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) - } - if !tt.res.wantErr && agg.Events[0].Type != tt.res.eventType { - t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventType, agg.Events[0].Type.String()) - } - if !tt.res.wantErr && agg.Events[0].Data == nil { - t.Errorf("should have data in event") - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} diff --git a/internal/policy/repository/eventsourcing/policy_complexity.go b/internal/policy/repository/eventsourcing/policy_complexity.go deleted file mode 100644 index 360449e226..0000000000 --- a/internal/policy/repository/eventsourcing/policy_complexity.go +++ /dev/null @@ -1,52 +0,0 @@ -package eventsourcing - -import ( - "context" - - "github.com/caos/zitadel/internal/errors" - es_models "github.com/caos/zitadel/internal/eventstore/models" - "github.com/caos/zitadel/internal/policy/model" -) - -func PasswordComplexityPolicyQuery(recourceOwner string, latestSequence uint64) *es_models.SearchQuery { - return es_models.NewSearchQuery(). - AggregateTypeFilter(model.PasswordComplexityPolicyAggregate). - LatestSequenceFilter(latestSequence). - ResourceOwnerFilter(recourceOwner) - -} - -func PasswordComplexityPolicyAggregate(ctx context.Context, aggCreator *es_models.AggregateCreator, policy *PasswordComplexityPolicy) (*es_models.Aggregate, error) { - if policy == nil { - return nil, errors.ThrowPreconditionFailed(nil, "EVENT-fRVr9", "Errors.Internal") - } - return aggCreator.NewAggregate(ctx, policy.AggregateID, model.PasswordComplexityPolicyAggregate, policyComplexityVersion, policy.Sequence) -} - -func PasswordComplexityPolicyCreateAggregate(aggCreator *es_models.AggregateCreator, policy *PasswordComplexityPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { - return func(ctx context.Context) (*es_models.Aggregate, error) { - if policy == nil { - return nil, errors.ThrowPreconditionFailed(nil, "EVENT-kdie6", "Errors.Internal") - } - agg, err := PasswordComplexityPolicyAggregate(ctx, aggCreator, policy) - if err != nil { - return nil, err - } - - return agg.AppendEvent(model.PasswordComplexityPolicyAdded, policy) - } -} - -func PasswordComplexityPolicyUpdateAggregate(aggCreator *es_models.AggregateCreator, existingPolicy *PasswordComplexityPolicy, newPolicy *PasswordComplexityPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { - return func(ctx context.Context) (*es_models.Aggregate, error) { - if newPolicy == nil { - return nil, errors.ThrowPreconditionFailed(nil, "EVENT-dhr74", "Errors.Internal") - } - agg, err := PasswordComplexityPolicyAggregate(ctx, aggCreator, existingPolicy) - if err != nil { - return nil, err - } - changes := existingPolicy.ComplexityChanges(newPolicy) - return agg.AppendEvent(model.PasswordComplexityPolicyChanged, changes) - } -} diff --git a/internal/policy/repository/eventsourcing/policy_complexity_test.go b/internal/policy/repository/eventsourcing/policy_complexity_test.go deleted file mode 100644 index b819a94bb3..0000000000 --- a/internal/policy/repository/eventsourcing/policy_complexity_test.go +++ /dev/null @@ -1,268 +0,0 @@ -package eventsourcing - -import ( - "context" - "testing" - - "github.com/caos/zitadel/internal/api/authz" - caos_errs "github.com/caos/zitadel/internal/errors" - "github.com/caos/zitadel/internal/eventstore/models" - policy_model "github.com/caos/zitadel/internal/policy/model" -) - -func TestPasswordComplexityPolicyQuery(t *testing.T) { - type args struct { - recourceOwner string - sequence uint64 - } - type res struct { - filterLen int - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "Get password complexity policy query ok", - args: args{ - recourceOwner: "org", - sequence: 0, - }, - res: res{ - filterLen: 2, - }, - }, - { - name: "Get password complexity policy query, no org", - args: args{ - sequence: 1, - }, - res: res{ - filterLen: 3, - wantErr: true, - errFunc: caos_errs.IsPreconditionFailed, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - query := PasswordComplexityPolicyQuery(tt.args.recourceOwner, tt.args.sequence) - if !tt.res.wantErr && query == nil { - t.Errorf("query should not be nil") - } - if !tt.res.wantErr && len(query.Filters) != tt.res.filterLen { - t.Errorf("got wrong filter len: expected: %v, actual: %v ", tt.res.filterLen, len(query.Filters)) - } - }) - } -} - -func TestPasswordComplexityPolicyAggregate(t *testing.T) { - - type args struct { - ctx context.Context - aggCreator *models.AggregateCreator - policy *PasswordComplexityPolicy - } - type res struct { - eventLen int - aggType models.AggregateType - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "create aggregate", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - aggCreator: models.NewAggregateCreator("Test"), - policy: &PasswordComplexityPolicy{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Description: "Test"}, - }, - res: res{ - eventLen: 0, - aggType: policy_model.PasswordComplexityPolicyAggregate, - }, - }, - { - name: "policy nil", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 0, - aggType: policy_model.PasswordComplexityPolicyAggregate, - wantErr: true, - errFunc: caos_errs.IsPreconditionFailed, - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - agg, err := PasswordComplexityPolicyAggregate(tt.args.ctx, tt.args.aggCreator, tt.args.policy) - - if !tt.res.wantErr && agg == nil { - t.Errorf("agg should not be nil") - } - if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { - t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} - -func TestPasswordComplexityPolicyCreateAggregate(t *testing.T) { - type args struct { - ctx context.Context - new *PasswordComplexityPolicy - aggCreator *models.AggregateCreator - } - type res struct { - eventLen int - eventType models.EventType - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "policy update aggregate ok", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - new: &PasswordComplexityPolicy{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, Description: "PolicyName", State: int32(policy_model.PolicyStateActive)}, - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 1, - eventType: policy_model.PasswordComplexityPolicyAdded, - }, - }, - { - name: "new policy nil", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - new: nil, - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 1, - eventType: policy_model.PasswordComplexityPolicyAdded, - wantErr: true, - errFunc: caos_errs.IsPreconditionFailed, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - agg, err := PasswordComplexityPolicyCreateAggregate(tt.args.aggCreator, tt.args.new)(tt.args.ctx) - - if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { - t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) - } - if !tt.res.wantErr && agg.Events[0].Type != tt.res.eventType { - t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventType, agg.Events[0].Type.String()) - } - if !tt.res.wantErr && agg.Events[0].Data == nil { - t.Errorf("should have data in event") - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} - -func TestPasswordComplexityPolicyUpdateAggregate(t *testing.T) { - type args struct { - ctx context.Context - existingPolicy *PasswordComplexityPolicy - newPolicy *PasswordComplexityPolicy - aggCreator *models.AggregateCreator - } - type res struct { - eventLen int - eventType models.EventType - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "policy update aggregate ok", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - existingPolicy: &PasswordComplexityPolicy{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, Description: "PolicyName", State: int32(policy_model.PolicyStateActive)}, - newPolicy: &PasswordComplexityPolicy{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, Description: "PolicyName_Changed", State: int32(policy_model.PolicyStateActive)}, - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 1, - eventType: policy_model.PasswordComplexityPolicyChanged, - }, - }, - { - name: "existing policy nil", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - existingPolicy: nil, - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 1, - eventType: policy_model.PasswordComplexityPolicyChanged, - wantErr: true, - errFunc: caos_errs.IsPreconditionFailed, - }, - }, - { - name: "new policy nil", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - existingPolicy: &PasswordComplexityPolicy{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, Description: "ProjectName", State: int32(policy_model.PolicyStateActive)}, - newPolicy: nil, - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 1, - eventType: policy_model.PasswordComplexityPolicyChanged, - wantErr: true, - errFunc: caos_errs.IsPreconditionFailed, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - agg, err := PasswordComplexityPolicyUpdateAggregate(tt.args.aggCreator, tt.args.existingPolicy, tt.args.newPolicy)(tt.args.ctx) - - if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { - t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) - } - if !tt.res.wantErr && agg.Events[0].Type != tt.res.eventType { - t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventType, agg.Events[0].Type.String()) - } - if !tt.res.wantErr && agg.Events[0].Data == nil { - t.Errorf("should have data in event") - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} diff --git a/internal/policy/repository/eventsourcing/policy_lockout.go b/internal/policy/repository/eventsourcing/policy_lockout.go deleted file mode 100644 index c01715e8c8..0000000000 --- a/internal/policy/repository/eventsourcing/policy_lockout.go +++ /dev/null @@ -1,53 +0,0 @@ -package eventsourcing - -import ( - "context" - - "github.com/caos/zitadel/internal/errors" - es_models "github.com/caos/zitadel/internal/eventstore/models" - "github.com/caos/zitadel/internal/policy/model" -) - -func PasswordLockoutPolicyQuery(recourceOwner string, latestSequence uint64) *es_models.SearchQuery { - return es_models.NewSearchQuery(). - AggregateTypeFilter(model.PasswordLockoutPolicyAggregate). - LatestSequenceFilter(latestSequence). - ResourceOwnerFilter(recourceOwner) - -} - -func PasswordLockoutPolicyAggregate(ctx context.Context, aggCreator *es_models.AggregateCreator, policy *PasswordLockoutPolicy) (*es_models.Aggregate, error) { - if policy == nil { - return nil, errors.ThrowPreconditionFailed(nil, "EVENT-aTRlj", "Errors.Internal") - } - return aggCreator.NewAggregate(ctx, policy.AggregateID, model.PasswordLockoutPolicyAggregate, policyLockoutVersion, policy.Sequence) -} - -func PasswordLockoutPolicyCreateAggregate(aggCreator *es_models.AggregateCreator, policy *PasswordLockoutPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { - return func(ctx context.Context) (*es_models.Aggregate, error) { - if policy == nil { - return nil, errors.ThrowPreconditionFailed(nil, "EVENT-kdie6", "Errors.Internal") - } - - agg, err := PasswordLockoutPolicyAggregate(ctx, aggCreator, policy) - if err != nil { - return nil, err - } - - return agg.AppendEvent(model.PasswordLockoutPolicyAdded, policy) - } -} - -func PasswordLockoutPolicyUpdateAggregate(aggCreator *es_models.AggregateCreator, existingPolicy *PasswordLockoutPolicy, newPolicy *PasswordLockoutPolicy) func(ctx context.Context) (*es_models.Aggregate, error) { - return func(ctx context.Context) (*es_models.Aggregate, error) { - if newPolicy == nil { - return nil, errors.ThrowPreconditionFailed(nil, "EVENT-dhr74", "Errors.Internal") - } - agg, err := PasswordLockoutPolicyAggregate(ctx, aggCreator, existingPolicy) - if err != nil { - return nil, err - } - changes := existingPolicy.LockoutChanges(newPolicy) - return agg.AppendEvent(model.PasswordLockoutPolicyChanged, changes) - } -} diff --git a/internal/policy/repository/eventsourcing/policy_lockout_test.go b/internal/policy/repository/eventsourcing/policy_lockout_test.go deleted file mode 100644 index 7caa3b394b..0000000000 --- a/internal/policy/repository/eventsourcing/policy_lockout_test.go +++ /dev/null @@ -1,268 +0,0 @@ -package eventsourcing - -import ( - "context" - "testing" - - "github.com/caos/zitadel/internal/api/authz" - caos_errs "github.com/caos/zitadel/internal/errors" - "github.com/caos/zitadel/internal/eventstore/models" - policy_model "github.com/caos/zitadel/internal/policy/model" -) - -func TestGetPasswordLockoutPolicyQuery(t *testing.T) { - type args struct { - recourceOwner string - sequence uint64 - } - type res struct { - filterLen int - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "Get password lockout policy query ok", - args: args{ - recourceOwner: "org", - sequence: 14, - }, - res: res{ - filterLen: 3, - }, - }, - { - name: "Get password lockout policy query, no org", - args: args{ - sequence: 1, - }, - res: res{ - filterLen: 3, - wantErr: true, - errFunc: caos_errs.IsPreconditionFailed, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - query := PasswordLockoutPolicyQuery(tt.args.recourceOwner, tt.args.sequence) - if !tt.res.wantErr && query == nil { - t.Errorf("query should not be nil") - } - if !tt.res.wantErr && len(query.Filters) != tt.res.filterLen { - t.Errorf("got wrong filter len: expected: %v, actual: %v ", tt.res.filterLen, len(query.Filters)) - } - }) - } -} - -func TestPasswordLockoutPolicyAggregate(t *testing.T) { - - type args struct { - ctx context.Context - aggCreator *models.AggregateCreator - policy *PasswordLockoutPolicy - } - type res struct { - eventLen int - aggType models.AggregateType - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "create aggregate", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - aggCreator: models.NewAggregateCreator("Test"), - policy: &PasswordLockoutPolicy{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Description: "Test"}, - }, - res: res{ - eventLen: 0, - aggType: policy_model.PasswordLockoutPolicyAggregate, - }, - }, - { - name: "policy nil", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 0, - aggType: policy_model.PasswordLockoutPolicyAggregate, - wantErr: true, - errFunc: caos_errs.IsPreconditionFailed, - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - agg, err := PasswordLockoutPolicyAggregate(tt.args.ctx, tt.args.aggCreator, tt.args.policy) - - if !tt.res.wantErr && agg == nil { - t.Errorf("agg should not be nil") - } - if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { - t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} - -func TestPasswordLockoutPolicyCreateAggregate(t *testing.T) { - type args struct { - ctx context.Context - newPolicy *PasswordLockoutPolicy - aggCreator *models.AggregateCreator - } - type res struct { - eventLen int - eventType models.EventType - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "policy update aggregate ok", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - newPolicy: &PasswordLockoutPolicy{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, Description: "PolicyName", State: int32(policy_model.PolicyStateActive)}, - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 1, - eventType: policy_model.PasswordLockoutPolicyAdded, - }, - }, - { - name: "new policy nil", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - newPolicy: nil, - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 1, - eventType: policy_model.PasswordLockoutPolicyAdded, - wantErr: true, - errFunc: caos_errs.IsPreconditionFailed, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - agg, err := PasswordLockoutPolicyCreateAggregate(tt.args.aggCreator, tt.args.newPolicy)(tt.args.ctx) - - if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { - t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) - } - if !tt.res.wantErr && agg.Events[0].Type != tt.res.eventType { - t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventType, agg.Events[0].Type.String()) - } - if !tt.res.wantErr && agg.Events[0].Data == nil { - t.Errorf("should have data in event") - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} - -func TestPasswordLockoutPolicyUpdateAggregate(t *testing.T) { - type args struct { - ctx context.Context - existingPolicy *PasswordLockoutPolicy - newPolicy *PasswordLockoutPolicy - aggCreator *models.AggregateCreator - } - type res struct { - eventLen int - eventType models.EventType - wantErr bool - errFunc func(err error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "policy update aggregate ok", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - existingPolicy: &PasswordLockoutPolicy{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, Description: "PolicyName", State: int32(policy_model.PolicyStateActive)}, - newPolicy: &PasswordLockoutPolicy{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, Description: "PolicyName_Changed", State: int32(policy_model.PolicyStateActive)}, - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 1, - eventType: policy_model.PasswordLockoutPolicyChanged, - }, - }, - { - name: "existing policy nil", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - existingPolicy: nil, - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 1, - eventType: policy_model.PasswordLockoutPolicyChanged, - wantErr: true, - errFunc: caos_errs.IsPreconditionFailed, - }, - }, - { - name: "new policy nil", - args: args{ - ctx: authz.NewMockContext("orgID", "userID"), - existingPolicy: &PasswordLockoutPolicy{ObjectRoot: models.ObjectRoot{AggregateID: "AggregateID"}, Description: "ProjectName", State: int32(policy_model.PolicyStateActive)}, - newPolicy: nil, - aggCreator: models.NewAggregateCreator("Test"), - }, - res: res{ - eventLen: 1, - eventType: policy_model.PasswordLockoutPolicyChanged, - wantErr: true, - errFunc: caos_errs.IsPreconditionFailed, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - agg, err := PasswordLockoutPolicyUpdateAggregate(tt.args.aggCreator, tt.args.existingPolicy, tt.args.newPolicy)(tt.args.ctx) - - if !tt.res.wantErr && len(agg.Events) != tt.res.eventLen { - t.Errorf("got wrong event len: expected: %v, actual: %v ", tt.res.eventLen, len(agg.Events)) - } - if !tt.res.wantErr && agg.Events[0].Type != tt.res.eventType { - t.Errorf("got wrong event type: expected: %v, actual: %v ", tt.res.eventType, agg.Events[0].Type.String()) - } - if !tt.res.wantErr && agg.Events[0].Data == nil { - t.Errorf("should have data in event") - } - if tt.res.wantErr && !tt.res.errFunc(err) { - t.Errorf("got wrong err: %v ", err) - } - }) - } -} diff --git a/internal/setup/config.go b/internal/setup/config.go index 74df588cb8..1c60d336df 100644 --- a/internal/setup/config.go +++ b/internal/setup/config.go @@ -7,8 +7,10 @@ import ( type IAMSetUp struct { Step1 *Step1 - //TODO: label policy - // Step2 *Step2 + Step2 *Step2 + Step3 *Step3 + Step4 *Step4 + Step5 *Step5 } func (setup *IAMSetUp) steps(currentDone iam_model.Step) ([]step, error) { @@ -17,8 +19,10 @@ func (setup *IAMSetUp) steps(currentDone iam_model.Step) ([]step, error) { for _, step := range []step{ setup.Step1, - //TODO: label policy - // setup.Step2, + setup.Step2, + setup.Step3, + setup.Step4, + setup.Step5, } { if step.step() <= currentDone { continue @@ -44,12 +48,6 @@ type LoginPolicy struct { AllowExternalIdp bool } -//TODO: label policy -// type LabelPolicy struct { -// PrimaryColor string -// SecondayColor string -// } - type User struct { FirstName string LastName string diff --git a/internal/setup/setup.go b/internal/setup/setup.go index df9fa2da0d..717cd0258f 100644 --- a/internal/setup/setup.go +++ b/internal/setup/setup.go @@ -16,8 +16,6 @@ import ( iam_event "github.com/caos/zitadel/internal/iam/repository/eventsourcing" es_org "github.com/caos/zitadel/internal/org/repository/eventsourcing" org_event "github.com/caos/zitadel/internal/org/repository/eventsourcing" - es_policy "github.com/caos/zitadel/internal/policy/repository/eventsourcing" - policy_event "github.com/caos/zitadel/internal/policy/repository/eventsourcing" proj_model "github.com/caos/zitadel/internal/project/model" es_proj "github.com/caos/zitadel/internal/project/repository/eventsourcing" proj_event "github.com/caos/zitadel/internal/project/repository/eventsourcing" @@ -31,7 +29,6 @@ type Setup struct { OrgEvents *org_event.OrgEventstore UserEvents *usr_event.UserEventstore ProjectEvents *proj_event.ProjectEventstore - PolicyEvents *policy_event.PolicyEventstore } const ( @@ -86,13 +83,6 @@ func StartSetup(esConfig es_int.Config, sd systemdefaults.SystemDefaults) (*Setu return nil, err } - setup.PolicyEvents, err = es_policy.StartPolicy(es_policy.PolicyConfig{ - Eventstore: es, - Cache: esConfig.Cache, - }, sd) - if err != nil { - return nil, err - } return setup, nil } @@ -130,7 +120,7 @@ func (s *Setup) Execute(ctx context.Context, setUpConfig IAMSetUp) error { return err } - err = step.execute(ctx) + iam, err = step.execute(ctx) if err != nil { return err } diff --git a/internal/setup/step.go b/internal/setup/step.go index ecd8b7fce7..f9e497058f 100644 --- a/internal/setup/step.go +++ b/internal/setup/step.go @@ -8,7 +8,7 @@ import ( type step interface { step() iam_model.Step - execute(context.Context) error + execute(context.Context) (*iam_model.IAM, error) init(*Setup) isNil() bool } diff --git a/internal/setup/step1.go b/internal/setup/step1.go index 39c9e12e91..a745a1a3e4 100644 --- a/internal/setup/step1.go +++ b/internal/setup/step1.go @@ -9,7 +9,6 @@ import ( "github.com/caos/zitadel/internal/eventstore/models" iam_model "github.com/caos/zitadel/internal/iam/model" org_model "github.com/caos/zitadel/internal/org/model" - policy_model "github.com/caos/zitadel/internal/policy/model" proj_model "github.com/caos/zitadel/internal/project/model" usr_model "github.com/caos/zitadel/internal/user/model" ) @@ -25,7 +24,7 @@ type Step1 struct { createdUsers map[string]*usr_model.User createdOrgs map[string]*org_model.Org createdProjects map[string]*proj_model.Project - pwComplexityPolicy *policy_model.PasswordComplexityPolicy + pwComplexityPolicy *iam_model.PasswordComplexityPolicyView } func (s *Step1) isNil() bool { @@ -43,51 +42,46 @@ func (step *Step1) init(setup *Setup) { step.createdProjects = make(map[string]*proj_model.Project) } -func (step *Step1) execute(ctx context.Context) (err error) { - err = step.loginPolicy(ctx, step.DefaultLoginPolicy) +func (step *Step1) execute(ctx context.Context) (*iam_model.IAM, error) { + err := step.loginPolicy(ctx, step.DefaultLoginPolicy) if err != nil { logging.Log("SETUP-Hdu8S").WithError(err).Error("unable to create login policy") - return err + return nil, err } - pwComplexityPolicy, err := step.setup.PolicyEvents.GetPasswordComplexityPolicy(ctx, policy_model.DefaultPolicy) - if err != nil { - logging.Log("SETUP-9osWF").WithError(err).Error("unable to read complexity policy") - return err - } - step.pwComplexityPolicy = pwComplexityPolicy + step.pwComplexityPolicy = new(iam_model.PasswordComplexityPolicyView) err = step.orgs(ctx, step.Orgs) if err != nil { logging.Log("SETUP-p4oWq").WithError(err).Error("unable to set up orgs") - return err + return nil, err } ctx = setSetUpContextData(ctx, step.setup.iamID) err = step.iamOwners(ctx, step.Owners) if err != nil { logging.Log("SETUP-WHr01").WithError(err).Error("unable to set up iam owners") - return err + return nil, err } err = step.setGlobalOrg(ctx, step.GlobalOrg) if err != nil { logging.Log("SETUP-0874m").WithError(err).Error("unable to set global org") - return err + return nil, err } err = step.setIamProject(ctx, step.IAMProject) if err != nil { logging.Log("SETUP-kaWjq").WithError(err).Error("unable to set zitadel project") - return err + return nil, err } - _, err = step.setup.IamEvents.SetupDone(ctx, step.setup.iamID, step.step()) + iam, err := step.setup.IamEvents.SetupDone(ctx, step.setup.iamID, step.step()) if err != nil { logging.Log("SETUP-de342").WithField("step", step.step()).WithError(err).Error("unable to finish setup") - return err + return nil, err } - return nil + return iam, nil } func (step *Step1) loginPolicy(ctx context.Context, policy LoginPolicy) error { @@ -114,7 +108,7 @@ func (step *Step1) orgs(ctx context.Context, orgs []Org) error { } step.createdOrgs[iamOrg.Name] = org - var policy *org_model.OrgIAMPolicy + var policy *iam_model.OrgIAMPolicyView if iamOrg.OrgIamPolicy { policy, err = step.iamorgpolicy(ctx, org) if err != nil { @@ -122,10 +116,8 @@ func (step *Step1) orgs(ctx context.Context, orgs []Org) error { return err } } else { - policy, err = step.setup.OrgEvents.GetOrgIAMPolicy(ctx, policy_model.DefaultPolicy) - if err != nil { - logging.LogWithFields("SETUP-IS8wS", "Org IAM Policy", iamOrg.Name).WithError(err).Error("unable to get default iam org policy") - return err + policy = &iam_model.OrgIAMPolicyView{ + UserLoginMustBeDomain: true, } } @@ -161,13 +153,20 @@ func (step *Step1) org(ctx context.Context, org Org) (*org_model.Org, error) { return step.setup.OrgEvents.CreateOrg(ctx, createOrg, nil) } -func (step *Step1) iamorgpolicy(ctx context.Context, org *org_model.Org) (*org_model.OrgIAMPolicy, error) { +func (step *Step1) iamorgpolicy(ctx context.Context, org *org_model.Org) (*iam_model.OrgIAMPolicyView, error) { ctx = setSetUpContextData(ctx, org.AggregateID) - policy := &org_model.OrgIAMPolicy{ + policy := &iam_model.OrgIAMPolicy{ ObjectRoot: models.ObjectRoot{AggregateID: org.AggregateID}, UserLoginMustBeDomain: false, } - return step.setup.OrgEvents.AddOrgIAMPolicy(ctx, policy) + createdpolicy, err := step.setup.OrgEvents.AddOrgIAMPolicy(ctx, policy) + if err != nil { + return nil, err + } + return &iam_model.OrgIAMPolicyView{ + AggregateID: org.AggregateID, + UserLoginMustBeDomain: createdpolicy.UserLoginMustBeDomain, + }, nil } func (step *Step1) iamOwners(ctx context.Context, owners []string) error { @@ -220,7 +219,7 @@ func (step *Step1) setIamProject(ctx context.Context, iamProjectName string) err return nil } -func (step *Step1) users(ctx context.Context, users []User, orgPolicy *org_model.OrgIAMPolicy) error { +func (step *Step1) users(ctx context.Context, users []User, orgPolicy *iam_model.OrgIAMPolicyView) error { for _, user := range users { created, err := step.user(ctx, user, orgPolicy) if err != nil { @@ -232,7 +231,7 @@ func (step *Step1) users(ctx context.Context, users []User, orgPolicy *org_model return nil } -func (step *Step1) user(ctx context.Context, user User, orgPolicy *org_model.OrgIAMPolicy) (*usr_model.User, error) { +func (step *Step1) user(ctx context.Context, user User, orgPolicy *iam_model.OrgIAMPolicyView) (*usr_model.User, error) { createUser := &usr_model.User{ UserName: user.UserName, Human: &usr_model.Human{ diff --git a/internal/setup/step2.go b/internal/setup/step2.go index 588e95bf9d..6517b35c84 100644 --- a/internal/setup/step2.go +++ b/internal/setup/step2.go @@ -1,30 +1,57 @@ package setup -//TODO: label policy -// import ( -// "context" +import ( + "context" + "github.com/caos/logging" + "github.com/caos/zitadel/internal/eventstore/models" + es_sdk "github.com/caos/zitadel/internal/eventstore/sdk" + iam_model "github.com/caos/zitadel/internal/iam/model" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" +) -// iam_model "github.com/caos/zitadel/internal/iam/model" -// ) +type Step2 struct { + DefaultPasswordComplexityPolicy iam_model.PasswordComplexityPolicy -// type Step2 struct { -// DefaultLabelPolicy LabelPolicy + setup *Setup +} -// setup *Setup -// } +func (s *Step2) isNil() bool { + return s == nil +} -// func (s *Step2) isNil() bool { -// return s == nil -// } +func (step *Step2) step() iam_model.Step { + return iam_model.Step2 +} -// func (step *Step2) step() iam_model.Step { -// return iam_model.Step2 -// } +func (step *Step2) init(setup *Setup) { + step.setup = setup +} -// func (step *Step2) init(setup *Setup) { -// step.setup = setup -// } +func (step *Step2) execute(ctx context.Context) (*iam_model.IAM, error) { + iam, agg, err := step.passwordComplexityPolicy(ctx, &step.DefaultPasswordComplexityPolicy) + if err != nil { + logging.Log("SETUP-Ms9fl").WithField("step", step.step()).WithError(err).Error("unable to finish setup (pw complexity policy)") + return nil, err + } + iam, agg, push, err := step.setup.IamEvents.PrepareSetupDone(ctx, iam, agg, step.step()) + if err != nil { + logging.Log("SETUP-V8sui").WithField("step", step.step()).WithError(err).Error("unable to finish setup (prepare setup done)") + return nil, err + } + err = es_sdk.PushAggregates(ctx, push, iam.AppendEvents, agg) + if err != nil { + logging.Log("SETUP-V8sui").WithField("step", step.step()).WithError(err).Error("unable to finish setup") + return nil, err + } + return iam_es_model.IAMToModel(iam), nil +} -// func (step *Step2) execute(ctx context.Context) error { -// return nil -// } +func (step *Step2) passwordComplexityPolicy(ctx context.Context, policy *iam_model.PasswordComplexityPolicy) (*iam_es_model.IAM, *models.Aggregate, error) { + logging.Log("SETUP-Bs8id").Info("setting up password complexity policy") + policy.AggregateID = step.setup.iamID + iam, aggregate, err := step.setup.IamEvents.PrepareAddPasswordComplexityPolicy(ctx, policy) + if err != nil { + return nil, nil, err + } + return iam, aggregate, nil +} diff --git a/internal/setup/step3.go b/internal/setup/step3.go new file mode 100644 index 0000000000..1ebfd9a0e6 --- /dev/null +++ b/internal/setup/step3.go @@ -0,0 +1,57 @@ +package setup + +import ( + "context" + "github.com/caos/logging" + "github.com/caos/zitadel/internal/eventstore/models" + es_sdk "github.com/caos/zitadel/internal/eventstore/sdk" + iam_model "github.com/caos/zitadel/internal/iam/model" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" +) + +type Step3 struct { + DefaultPasswordAgePolicy iam_model.PasswordAgePolicy + + setup *Setup +} + +func (s *Step3) isNil() bool { + return s == nil +} + +func (step *Step3) step() iam_model.Step { + return iam_model.Step3 +} + +func (step *Step3) init(setup *Setup) { + step.setup = setup +} + +func (step *Step3) execute(ctx context.Context) (*iam_model.IAM, error) { + iam, agg, err := step.passwordAgePolicy(ctx, &step.DefaultPasswordAgePolicy) + if err != nil { + logging.Log("SETUP-Mski9").WithField("step", step.step()).WithError(err).Error("unable to finish setup (pw age policy)") + return nil, err + } + iam, agg, push, err := step.setup.IamEvents.PrepareSetupDone(ctx, iam, agg, step.step()) + if err != nil { + logging.Log("SETUP-4Gsny").WithField("step", step.step()).WithError(err).Error("unable to finish setup (prepare setup done)") + return nil, err + } + err = es_sdk.PushAggregates(ctx, push, iam.AppendEvents, agg) + if err != nil { + logging.Log("SETUP-Yc8ui").WithField("step", step.step()).WithError(err).Error("unable to finish setup") + return nil, err + } + return iam_es_model.IAMToModel(iam), nil +} + +func (step *Step3) passwordAgePolicy(ctx context.Context, policy *iam_model.PasswordAgePolicy) (*iam_es_model.IAM, *models.Aggregate, error) { + logging.Log("SETUP-bVs8i").Info("setting up password complexity policy") + policy.AggregateID = step.setup.iamID + iam, aggregate, err := step.setup.IamEvents.PrepareAddPasswordAgePolicy(ctx, policy) + if err != nil { + return nil, nil, err + } + return iam, aggregate, nil +} diff --git a/internal/setup/step4.go b/internal/setup/step4.go new file mode 100644 index 0000000000..fa50bc1511 --- /dev/null +++ b/internal/setup/step4.go @@ -0,0 +1,57 @@ +package setup + +import ( + "context" + "github.com/caos/logging" + "github.com/caos/zitadel/internal/eventstore/models" + es_sdk "github.com/caos/zitadel/internal/eventstore/sdk" + iam_model "github.com/caos/zitadel/internal/iam/model" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" +) + +type Step4 struct { + DefaultPasswordLockoutPolicy iam_model.PasswordLockoutPolicy + + setup *Setup +} + +func (s *Step4) isNil() bool { + return s == nil +} + +func (step *Step4) step() iam_model.Step { + return iam_model.Step4 +} + +func (step *Step4) init(setup *Setup) { + step.setup = setup +} + +func (step *Step4) execute(ctx context.Context) (*iam_model.IAM, error) { + iam, agg, err := step.passwordLockoutPolicy(ctx, &step.DefaultPasswordLockoutPolicy) + if err != nil { + logging.Log("SETUP-xCd9i").WithField("step", step.step()).WithError(err).Error("unable to finish setup (pw age policy)") + return nil, err + } + iam, agg, push, err := step.setup.IamEvents.PrepareSetupDone(ctx, iam, agg, step.step()) + if err != nil { + logging.Log("SETUP-bVsm9").WithField("step", step.step()).WithError(err).Error("unable to finish setup (prepare setup done)") + return nil, err + } + err = es_sdk.PushAggregates(ctx, push, iam.AppendEvents, agg) + if err != nil { + logging.Log("SETUP-wCxko").WithField("step", step.step()).WithError(err).Error("unable to finish setup") + return nil, err + } + return iam_es_model.IAMToModel(iam), nil +} + +func (step *Step4) passwordLockoutPolicy(ctx context.Context, policy *iam_model.PasswordLockoutPolicy) (*iam_es_model.IAM, *models.Aggregate, error) { + logging.Log("SETUP-vSfr4").Info("setting up password complexity policy") + policy.AggregateID = step.setup.iamID + iam, aggregate, err := step.setup.IamEvents.PrepareAddPasswordLockoutPolicy(ctx, policy) + if err != nil { + return nil, nil, err + } + return iam, aggregate, nil +} diff --git a/internal/setup/step5.go b/internal/setup/step5.go new file mode 100644 index 0000000000..d45f9a11fd --- /dev/null +++ b/internal/setup/step5.go @@ -0,0 +1,57 @@ +package setup + +import ( + "context" + "github.com/caos/logging" + "github.com/caos/zitadel/internal/eventstore/models" + es_sdk "github.com/caos/zitadel/internal/eventstore/sdk" + iam_model "github.com/caos/zitadel/internal/iam/model" + iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model" +) + +type Step5 struct { + DefaultOrgIAMPolicy iam_model.OrgIAMPolicy + + setup *Setup +} + +func (s *Step5) isNil() bool { + return s == nil +} + +func (step *Step5) step() iam_model.Step { + return iam_model.Step5 +} + +func (step *Step5) init(setup *Setup) { + step.setup = setup +} + +func (step *Step5) execute(ctx context.Context) (*iam_model.IAM, error) { + iam, agg, err := step.orgIAMPolicy(ctx, &step.DefaultOrgIAMPolicy) + if err != nil { + logging.Log("SETUP-3nKd9").WithField("step", step.step()).WithError(err).Error("unable to finish setup (org iam policy)") + return nil, err + } + iam, agg, push, err := step.setup.IamEvents.PrepareSetupDone(ctx, iam, agg, step.step()) + if err != nil { + logging.Log("SETUP-5h8Ds").WithField("step", step.step()).WithError(err).Error("unable to finish setup (prepare setup done)") + return nil, err + } + err = es_sdk.PushAggregates(ctx, push, iam.AppendEvents, agg) + if err != nil { + logging.Log("SETUP-3fGk0").WithField("step", step.step()).WithError(err).Error("unable to finish setup") + return nil, err + } + return iam_es_model.IAMToModel(iam), nil +} + +func (step *Step5) orgIAMPolicy(ctx context.Context, policy *iam_model.OrgIAMPolicy) (*iam_es_model.IAM, *models.Aggregate, error) { + logging.Log("SETUP-5Gn8s").Info("setting up org iam policy") + policy.AggregateID = step.setup.iamID + iam, aggregate, err := step.setup.IamEvents.PrepareAddOrgIAMPolicy(ctx, policy) + if err != nil { + return nil, nil, err + } + return iam, aggregate, nil +} diff --git a/internal/static/i18n/de.yaml b/internal/static/i18n/de.yaml index 8674ee145d..666d66b05e 100644 --- a/internal/static/i18n/de.yaml +++ b/internal/static/i18n/de.yaml @@ -89,6 +89,22 @@ Errors: AlreadyExists: Login Policy existiert bereits IdpProviderAlreadyExisting: Idp Provider existiert bereits IdpProviderNotExisting: Idp Provider existiert nicht + PasswordComplexity: + Empty: Passwort Komplexitäts Policy ist leer + NotExisting: Passwort Komplexitäts Policy existiert nicht + AlreadyExists: Passwort Komplexitäts Policy existiert bereits + PasswordLockout: + Empty: Passwort Lockout Policy ist leer + NotExisting: Passwort Lockout Policy existiert nicht + AlreadyExists: Passwort Lockout Policy existiert bereits + PasswordAge: + Empty: Passwort Age Policy ist leer + NotExisting: Passwort Age Policy existiert nicht + AlreadyExists: Passwort Age Policy existiert bereits + OrgIAM: + Empty: Org IAM Policy ist leer + NotExisting: Org IAM Policy existiert nicht + AlreadyExists: Org IAM Policy existiert bereits Project: ProjectIDMissing: Project Id fehlt AlreadyExists: Project existiert bereits auf der Organisation @@ -141,6 +157,22 @@ Errors: AlreadyExists: Default Login Policy existiert bereits IdpProviderAlreadyExisting: Idp Provider existiert bereits IdpProviderNotExisting: Idp Provider existiert nicht + PasswordComplexityPolicy: + NotExisting: Default Password Complexity Policy existiert nicht + AlreadyExists: Default Password Complexity Policy existiert bereits + Empty: Default Password Complexity Policy leer + PasswordAgePolicy: + NotExisting: Default Password Age Policy existiert nicht + AlreadyExists: Default Password Age Policy existiert bereits + Empty: Default Password Age Policy leer + PasswordLockoutPolicy: + NotExisting: Default Password Lockout Policy existiert nicht + AlreadyExists: Default Password Lockout Policy existiert bereits + Empty: Default Password Lockout Policy leer + OrgIAM: + NotExisting: Default Org IAM Policy existiert nicht + AlreadyExists: Default Org IAM Policy existiert bereits + Empty: Default Org IAM Policy leer Policy: AlreadyExists: Policy existiert bereits UserGrant: diff --git a/internal/static/i18n/en.yaml b/internal/static/i18n/en.yaml index 815d641868..2df3e39262 100644 --- a/internal/static/i18n/en.yaml +++ b/internal/static/i18n/en.yaml @@ -89,6 +89,14 @@ Errors: AlreadyExists: Login Policy already exists IdpProviderAlreadyExisting: Idp Provider already existing IdpProviderNotExisting: Idp Provider not existing + PasswordComplexity: + Empty: Passwort Complexity Policy is empty + NotExisting: Passwort Complexity Policy doesn't exist + AlreadyExists: Passwort Complexity Policy already exists + OrgIAM: + Empty: Org IAM Policy is empty + NotExisting: Org IAM Policy doesn't exist + AlreadyExists: Org IAM Policy already exists Project: ProjectIDMissing: Project Id missing AlreadyExists: Project already exists on organisation @@ -141,6 +149,30 @@ Errors: AlreadyExists: Default Login Policy already exists IdpProviderAlreadyExisting: Idp Provider already existing IdpProviderNotExisting: Idp Provider not existing + PasswordComplexityPolicy: + NotExisting: Default Password Complexity Policy not existing + AlreadyExists: Default Password Complexity Policy already existing + Empty: Default Password Complexity Policy empty + PasswordAgePolicy: + NotExisting: Default Password Age Policy not existing + AlreadyExists: Default Password Age Policy already existing + Empty: Default Password Age Policy empty + PasswordLockoutPolicy: + NotExisting: Default Password Lockout Policy not existing + AlreadyExists: Default Password Lockout Policy already existing + Empty: Default Password Lockout Policy empty + PasswordLockout: + Empty: Passwort Lockout Policy is empty + NotExisting: Passwort Lockout Policy not existing + AlreadyExists: Passwort Lockout Policy already exists + PasswordAge: + Empty: Passwort Age Policy is empty + NotExisting: Passwort Age Policy not existing + AlreadyExists: Passwort Age Policy already exists + OrgIAM: + Empty: Org IAM Policy is empty + NotExisting: Org IAM Policy not existing + AlreadyExists: Org IAM Policy already exists Policy: AlreadyExists: Policy already exists UserGrant: diff --git a/internal/ui/login/handler/external_login_handler.go b/internal/ui/login/handler/external_login_handler.go index 8be633c1c2..2722c59ce1 100644 --- a/internal/ui/login/handler/external_login_handler.go +++ b/internal/ui/login/handler/external_login_handler.go @@ -251,7 +251,7 @@ func (l *Login) mapTokenToLoginUser(tokens *oidc.Tokens, idpConfig *iam_model.ID } return externalUser } -func (l *Login) mapExternalUserToLoginUser(orgIamPolicy *org_model.OrgIAMPolicy, linkingUser *model.ExternalUser, idpConfig *iam_model.IDPConfigView) (*usr_model.User, *usr_model.ExternalIDP) { +func (l *Login) mapExternalUserToLoginUser(orgIamPolicy *iam_model.OrgIAMPolicyView, linkingUser *model.ExternalUser, idpConfig *iam_model.IDPConfigView) (*usr_model.User, *usr_model.ExternalIDP) { username := linkingUser.PreferredUsername switch idpConfig.OIDCUsernameMapping { case iam_model.OIDCMappingFieldEmail: diff --git a/internal/ui/login/handler/external_register_handler.go b/internal/ui/login/handler/external_register_handler.go index 7e2a07f916..1d8f23e799 100644 --- a/internal/ui/login/handler/external_register_handler.go +++ b/internal/ui/login/handler/external_register_handler.go @@ -108,7 +108,7 @@ func (l *Login) handleExternalUserRegister(w http.ResponseWriter, r *http.Reques l.renderNextStep(w, r, authReq) } -func (l *Login) mapTokenToLoginUserAndExternalIDP(orgIamPolicy *org_model.OrgIAMPolicy, tokens *oidc.Tokens, idpConfig *iam_model.IDPConfigView) (*usr_model.User, *usr_model.ExternalIDP) { +func (l *Login) mapTokenToLoginUserAndExternalIDP(orgIamPolicy *iam_model.OrgIAMPolicyView, tokens *oidc.Tokens, idpConfig *iam_model.IDPConfigView) (*usr_model.User, *usr_model.ExternalIDP) { username := tokens.IDTokenClaims.PreferredUsername switch idpConfig.OIDCUsernameMapping { case iam_model.OIDCMappingFieldEmail: diff --git a/internal/ui/login/handler/password_complexity_policy_handler.go b/internal/ui/login/handler/password_complexity_policy_handler.go index fc0054f552..e1d35d66a8 100644 --- a/internal/ui/login/handler/password_complexity_policy_handler.go +++ b/internal/ui/login/handler/password_complexity_policy_handler.go @@ -3,7 +3,7 @@ package handler import ( "github.com/caos/zitadel/internal/auth_request/model" "github.com/caos/zitadel/internal/errors" - policy_model "github.com/caos/zitadel/internal/policy/model" + iam_model "github.com/caos/zitadel/internal/iam/model" "net/http" "regexp" "strconv" @@ -23,7 +23,7 @@ var ( hasSymbol = regexp.MustCompile(SymbolRegex).MatchString ) -func (l *Login) getPasswordComplexityPolicy(r *http.Request, orgID string) (*policy_model.PasswordComplexityPolicy, string, error) { +func (l *Login) getPasswordComplexityPolicy(r *http.Request, orgID string) (*iam_model.PasswordComplexityPolicyView, string, error) { policy, err := l.authRepo.GetMyPasswordComplexityPolicy(setContext(r.Context(), orgID)) if err != nil { return nil, err.Error(), err @@ -32,7 +32,7 @@ func (l *Login) getPasswordComplexityPolicy(r *http.Request, orgID string) (*pol return policy, description, nil } -func (l *Login) getPasswordComplexityPolicyByUserID(r *http.Request, userID string) (*policy_model.PasswordComplexityPolicy, string, error) { +func (l *Login) getPasswordComplexityPolicyByUserID(r *http.Request, userID string) (*iam_model.PasswordComplexityPolicyView, string, error) { user, err := l.authRepo.UserByID(r.Context(), userID) if err != nil { return nil, "", nil @@ -45,7 +45,7 @@ func (l *Login) getPasswordComplexityPolicyByUserID(r *http.Request, userID stri return policy, description, nil } -func (l *Login) generatePolicyDescription(r *http.Request, policy *policy_model.PasswordComplexityPolicy) (string, error) { +func (l *Login) generatePolicyDescription(r *http.Request, policy *iam_model.PasswordComplexityPolicyView) (string, error) { description := "
    " minLength := l.renderer.LocalizeFromRequest(r, "Password.MinLength", nil) description += "
  • clear" + minLength + " " + strconv.Itoa(int(policy.MinLength)) + "
  • " diff --git a/internal/ui/login/handler/policy_handler.go b/internal/ui/login/handler/policy_handler.go index b9741240ee..5d0c92ccd0 100644 --- a/internal/ui/login/handler/policy_handler.go +++ b/internal/ui/login/handler/policy_handler.go @@ -2,15 +2,18 @@ package handler import ( iam_model "github.com/caos/zitadel/internal/iam/model" - org_model "github.com/caos/zitadel/internal/org/model" "net/http" ) -func (l *Login) getOrgIamPolicy(r *http.Request, orgID string) (*org_model.OrgIAMPolicy, error) { +func (l *Login) getDefaultOrgIamPolicy(r *http.Request) (*iam_model.OrgIAMPolicyView, error) { + return l.authRepo.GetDefaultOrgIAMPolicy(r.Context()) +} + +func (l *Login) getOrgIamPolicy(r *http.Request, orgID string) (*iam_model.OrgIAMPolicyView, error) { if orgID == "" { - return l.authRepo.GetDefaultOrgIamPolicy(r.Context()), nil + return l.authRepo.GetDefaultOrgIAMPolicy(r.Context()) } - return l.authRepo.GetOrgIamPolicy(r.Context(), orgID) + return l.authRepo.GetOrgIAMPolicy(r.Context(), orgID) } func (l *Login) getIDPConfigByID(r *http.Request, idpConfigID string) (*iam_model.IDPConfigView, error) { diff --git a/internal/ui/login/handler/register_org_handler.go b/internal/ui/login/handler/register_org_handler.go index fe2b200c38..c1a4b8dc6e 100644 --- a/internal/ui/login/handler/register_org_handler.go +++ b/internal/ui/login/handler/register_org_handler.go @@ -108,10 +108,10 @@ func (l *Login) renderRegisterOrg(w http.ResponseWriter, r *http.Request, authRe data.HasNumber = NumberRegex } } - orgPolicy, err := l.getOrgIamPolicy(r, "0") + orgPolicy, err := l.getDefaultOrgIamPolicy(r) if orgPolicy != nil { data.UserLoginMustBeDomain = orgPolicy.UserLoginMustBeDomain - data.IamDomain = orgPolicy.IamDomain + data.IamDomain = orgPolicy.IAMDomain } l.renderer.RenderTemplate(w, r, l.renderer.Templates[tmplRegisterOrg], data, nil) diff --git a/internal/user/model/password.go b/internal/user/model/password.go index 57fb9957d6..9762dade2f 100644 --- a/internal/user/model/password.go +++ b/internal/user/model/password.go @@ -4,7 +4,7 @@ import ( "github.com/caos/zitadel/internal/crypto" caos_errs "github.com/caos/zitadel/internal/errors" es_models "github.com/caos/zitadel/internal/eventstore/models" - policy_model "github.com/caos/zitadel/internal/policy/model" + iam_model "github.com/caos/zitadel/internal/iam/model" "time" ) @@ -35,7 +35,7 @@ func (p *Password) IsValid() bool { return p.AggregateID != "" && p.SecretString != "" } -func (p *Password) HashPasswordIfExisting(policy *policy_model.PasswordComplexityPolicy, passwordAlg crypto.HashAlgorithm, onetime bool) error { +func (p *Password) HashPasswordIfExisting(policy *iam_model.PasswordComplexityPolicyView, passwordAlg crypto.HashAlgorithm, onetime bool) error { if p.SecretString == "" { return nil } diff --git a/internal/user/model/user.go b/internal/user/model/user.go index 5846d7d56c..197f6c5d49 100644 --- a/internal/user/model/user.go +++ b/internal/user/model/user.go @@ -1,11 +1,11 @@ package model import ( + iam_model "github.com/caos/zitadel/internal/iam/model" "strings" caos_errors "github.com/caos/zitadel/internal/errors" es_models "github.com/caos/zitadel/internal/eventstore/models" - org_model "github.com/caos/zitadel/internal/org/model" "github.com/golang/protobuf/ptypes/timestamp" ) @@ -30,7 +30,7 @@ const ( UserStateInitial ) -func (u *User) CheckOrgIAMPolicy(policy *org_model.OrgIAMPolicy) error { +func (u *User) CheckOrgIAMPolicy(policy *iam_model.OrgIAMPolicyView) error { if policy == nil { return caos_errors.ThrowPreconditionFailed(nil, "MODEL-zSH7j", "Errors.Users.OrgIamPolicyNil") } @@ -89,7 +89,7 @@ func (u *User) IsValid() bool { return u.Machine.IsValid() } -func (u *User) CheckOrgIamPolicy(policy *org_model.OrgIAMPolicy) error { +func (u *User) CheckOrgIamPolicy(policy *iam_model.OrgIAMPolicy) error { if policy == nil { return caos_errors.ThrowPreconditionFailed(nil, "MODEL-zSH7j", "Errors.Users.OrgIamPolicyNil") } diff --git a/internal/user/model/user_human.go b/internal/user/model/user_human.go index 93efa82f83..91a988b53c 100644 --- a/internal/user/model/user_human.go +++ b/internal/user/model/user_human.go @@ -1,10 +1,9 @@ package model import ( + iam_model "github.com/caos/zitadel/internal/iam/model" "time" - policy_model "github.com/caos/zitadel/internal/policy/model" - "github.com/caos/zitadel/internal/crypto" es_models "github.com/caos/zitadel/internal/eventstore/models" ) @@ -57,7 +56,7 @@ func (u *Human) IsOTPReady() bool { return u.OTP != nil && u.OTP.State == MfaStateReady } -func (u *Human) HashPasswordIfExisting(policy *policy_model.PasswordComplexityPolicy, passwordAlg crypto.HashAlgorithm, onetime bool) error { +func (u *Human) HashPasswordIfExisting(policy *iam_model.PasswordComplexityPolicyView, passwordAlg crypto.HashAlgorithm, onetime bool) error { if u.Password != nil { return u.Password.HashPasswordIfExisting(policy, passwordAlg, onetime) } diff --git a/internal/user/repository/eventsourcing/eventstore.go b/internal/user/repository/eventsourcing/eventstore.go index 74805a5fb4..f63fab95c1 100644 --- a/internal/user/repository/eventsourcing/eventstore.go +++ b/internal/user/repository/eventsourcing/eventstore.go @@ -3,6 +3,7 @@ package eventsourcing import ( "context" "fmt" + iam_model "github.com/caos/zitadel/internal/iam/model" "time" "github.com/caos/logging" @@ -10,9 +11,6 @@ import ( "github.com/caos/zitadel/internal/errors" "github.com/caos/zitadel/internal/id" - org_model "github.com/caos/zitadel/internal/org/model" - policy_model "github.com/caos/zitadel/internal/policy/model" - "github.com/pquerna/otp/totp" req_model "github.com/caos/zitadel/internal/auth_request/model" @@ -119,7 +117,7 @@ func (es *UserEventstore) UserEventsByID(ctx context.Context, id string, sequenc return es.FilterEvents(ctx, query) } -func (es *UserEventstore) prepareCreateMachine(ctx context.Context, user *usr_model.User, orgIamPolicy *org_model.OrgIAMPolicy, resourceOwner string) (*model.User, []*es_models.Aggregate, error) { +func (es *UserEventstore) prepareCreateMachine(ctx context.Context, user *usr_model.User, orgIamPolicy *iam_model.OrgIAMPolicyView, resourceOwner string) (*model.User, []*es_models.Aggregate, error) { machine := model.UserFromModel(user) if !orgIamPolicy.UserLoginMustBeDomain { @@ -131,7 +129,7 @@ func (es *UserEventstore) prepareCreateMachine(ctx context.Context, user *usr_mo return machine, createAggregates, err } -func (es *UserEventstore) prepareCreateHuman(ctx context.Context, user *usr_model.User, pwPolicy *policy_model.PasswordComplexityPolicy, orgIAMPolicy *org_model.OrgIAMPolicy, resourceOwner string) (*model.User, []*es_models.Aggregate, error) { +func (es *UserEventstore) prepareCreateHuman(ctx context.Context, user *usr_model.User, pwPolicy *iam_model.PasswordComplexityPolicyView, orgIAMPolicy *iam_model.OrgIAMPolicyView, resourceOwner string) (*model.User, []*es_models.Aggregate, error) { err := user.CheckOrgIAMPolicy(orgIAMPolicy) if err != nil { return nil, nil, err @@ -163,7 +161,7 @@ func (es *UserEventstore) prepareCreateHuman(ctx context.Context, user *usr_mode return repoUser, createAggregates, err } -func (es *UserEventstore) PrepareCreateUser(ctx context.Context, user *usr_model.User, pwPolicy *policy_model.PasswordComplexityPolicy, orgIAMPolicy *org_model.OrgIAMPolicy, resourceOwner string) (*model.User, []*es_models.Aggregate, error) { +func (es *UserEventstore) PrepareCreateUser(ctx context.Context, user *usr_model.User, pwPolicy *iam_model.PasswordComplexityPolicyView, orgIAMPolicy *iam_model.OrgIAMPolicyView, resourceOwner string) (*model.User, []*es_models.Aggregate, error) { id, err := es.idGenerator.Next() if err != nil { return nil, nil, err @@ -178,7 +176,7 @@ func (es *UserEventstore) PrepareCreateUser(ctx context.Context, user *usr_model return nil, nil, errors.ThrowInvalidArgument(nil, "EVENT-Q29tp", "Errors.User.TypeUndefined") } -func (es *UserEventstore) CreateUser(ctx context.Context, user *usr_model.User, pwPolicy *policy_model.PasswordComplexityPolicy, orgIAMPolicy *org_model.OrgIAMPolicy) (*usr_model.User, error) { +func (es *UserEventstore) CreateUser(ctx context.Context, user *usr_model.User, pwPolicy *iam_model.PasswordComplexityPolicyView, orgIAMPolicy *iam_model.OrgIAMPolicyView) (*usr_model.User, error) { repoUser, aggregates, err := es.PrepareCreateUser(ctx, user, pwPolicy, orgIAMPolicy, "") if err != nil { return nil, err @@ -193,7 +191,7 @@ func (es *UserEventstore) CreateUser(ctx context.Context, user *usr_model.User, return model.UserToModel(repoUser), nil } -func (es *UserEventstore) PrepareRegisterUser(ctx context.Context, user *usr_model.User, externalIDP *usr_model.ExternalIDP, policy *policy_model.PasswordComplexityPolicy, orgIAMPolicy *org_model.OrgIAMPolicy, resourceOwner string) (*model.User, []*es_models.Aggregate, error) { +func (es *UserEventstore) PrepareRegisterUser(ctx context.Context, user *usr_model.User, externalIDP *usr_model.ExternalIDP, policy *iam_model.PasswordComplexityPolicyView, orgIAMPolicy *iam_model.OrgIAMPolicyView, resourceOwner string) (*model.User, []*es_models.Aggregate, error) { if user.Human == nil { return nil, nil, caos_errs.ThrowInvalidArgument(nil, "EVENT-ht8Ux", "Errors.User.Invalid") } @@ -235,7 +233,7 @@ func (es *UserEventstore) PrepareRegisterUser(ctx context.Context, user *usr_mod return repoUser, aggregates, err } -func (es *UserEventstore) RegisterUser(ctx context.Context, user *usr_model.User, pwPolicy *policy_model.PasswordComplexityPolicy, orgIAMPolicy *org_model.OrgIAMPolicy, resourceOwner string) (*usr_model.User, error) { +func (es *UserEventstore) RegisterUser(ctx context.Context, user *usr_model.User, pwPolicy *iam_model.PasswordComplexityPolicyView, orgIAMPolicy *iam_model.OrgIAMPolicyView, resourceOwner string) (*usr_model.User, error) { repoUser, createAggregates, err := es.PrepareRegisterUser(ctx, user, nil, pwPolicy, orgIAMPolicy, resourceOwner) if err != nil { return nil, err @@ -326,7 +324,7 @@ func (es *UserEventstore) UnlockUser(ctx context.Context, id string) (*usr_model return model.UserToModel(repoUser), nil } -func (es *UserEventstore) PrepareRemoveUser(ctx context.Context, id string, orgIamPolicy *org_model.OrgIAMPolicy) (*model.User, []*es_models.Aggregate, error) { +func (es *UserEventstore) PrepareRemoveUser(ctx context.Context, id string, orgIamPolicy *iam_model.OrgIAMPolicyView) (*model.User, []*es_models.Aggregate, error) { user, err := es.UserByID(ctx, id) if err != nil { return nil, nil, err @@ -340,7 +338,7 @@ func (es *UserEventstore) PrepareRemoveUser(ctx context.Context, id string, orgI return repoUser, aggregate, nil } -func (es *UserEventstore) RemoveUser(ctx context.Context, id string, orgIamPolicy *org_model.OrgIAMPolicy) error { +func (es *UserEventstore) RemoveUser(ctx context.Context, id string, orgIamPolicy *iam_model.OrgIAMPolicyView) error { repoUser, aggregate, err := es.PrepareRemoveUser(ctx, id, orgIamPolicy) if err != nil { return err @@ -475,7 +473,7 @@ func (es *UserEventstore) InitCodeSent(ctx context.Context, userID string) error return nil } -func (es *UserEventstore) VerifyInitCode(ctx context.Context, policy *policy_model.PasswordComplexityPolicy, userID, verificationCode, password string) error { +func (es *UserEventstore) VerifyInitCode(ctx context.Context, policy *iam_model.PasswordComplexityPolicyView, userID, verificationCode, password string) error { if userID == "" { return caos_errs.ThrowPreconditionFailed(nil, "EVENT-lo9fd", "Errors.User.UserIDMissing") } @@ -588,7 +586,7 @@ func (es *UserEventstore) setPasswordCheckResult(ctx context.Context, user *usr_ return nil } -func (es *UserEventstore) SetOneTimePassword(ctx context.Context, policy *policy_model.PasswordComplexityPolicy, password *usr_model.Password) (*usr_model.Password, error) { +func (es *UserEventstore) SetOneTimePassword(ctx context.Context, policy *iam_model.PasswordComplexityPolicyView, password *usr_model.Password) (*usr_model.Password, error) { user, err := es.UserByID(ctx, password.AggregateID) if err != nil { return nil, err @@ -599,7 +597,7 @@ func (es *UserEventstore) SetOneTimePassword(ctx context.Context, policy *policy return es.changedPassword(ctx, user, policy, password.SecretString, true) } -func (es *UserEventstore) SetPassword(ctx context.Context, policy *policy_model.PasswordComplexityPolicy, userID, code, password string) error { +func (es *UserEventstore) SetPassword(ctx context.Context, policy *iam_model.PasswordComplexityPolicyView, userID, code, password string) error { user, err := es.UserByID(ctx, userID) if err != nil { return err @@ -658,7 +656,7 @@ func (es *UserEventstore) ChangeMachine(ctx context.Context, machine *usr_model. return model.MachineToModel(repoUser.Machine), nil } -func (es *UserEventstore) ChangePassword(ctx context.Context, policy *policy_model.PasswordComplexityPolicy, userID, old, new string) (*usr_model.Password, error) { +func (es *UserEventstore) ChangePassword(ctx context.Context, policy *iam_model.PasswordComplexityPolicyView, userID, old, new string) (*usr_model.Password, error) { user, err := es.UserByID(ctx, userID) if err != nil { return nil, err @@ -675,7 +673,7 @@ func (es *UserEventstore) ChangePassword(ctx context.Context, policy *policy_mod return es.changedPassword(ctx, user, policy, new, false) } -func (es *UserEventstore) changedPassword(ctx context.Context, user *usr_model.User, policy *policy_model.PasswordComplexityPolicy, password string, onetime bool) (*usr_model.Password, error) { +func (es *UserEventstore) changedPassword(ctx context.Context, user *usr_model.User, policy *iam_model.PasswordComplexityPolicyView, password string, onetime bool) (*usr_model.Password, error) { pw := &usr_model.Password{SecretString: password} err := pw.HashPasswordIfExisting(policy, es.PasswordAlg, onetime) if err != nil { @@ -1429,7 +1427,7 @@ func (es *UserEventstore) DomainClaimedSent(ctx context.Context, userID string) return nil } -func (es *UserEventstore) ChangeUsername(ctx context.Context, userID, username string, orgIamPolicy *org_model.OrgIAMPolicy) error { +func (es *UserEventstore) ChangeUsername(ctx context.Context, userID, username string, orgIamPolicy *iam_model.OrgIAMPolicyView) error { user, err := es.UserByID(ctx, userID) if err != nil { return err diff --git a/internal/user/repository/eventsourcing/eventstore_test.go b/internal/user/repository/eventsourcing/eventstore_test.go index 2d1265341e..9dba522daf 100644 --- a/internal/user/repository/eventsourcing/eventstore_test.go +++ b/internal/user/repository/eventsourcing/eventstore_test.go @@ -3,6 +3,7 @@ package eventsourcing import ( "context" "encoding/json" + iam_model "github.com/caos/zitadel/internal/iam/model" "net" "testing" "time" @@ -14,8 +15,6 @@ import ( "github.com/caos/zitadel/internal/crypto" caos_errs "github.com/caos/zitadel/internal/errors" es_models "github.com/caos/zitadel/internal/eventstore/models" - org_model "github.com/caos/zitadel/internal/org/model" - policy_model "github.com/caos/zitadel/internal/policy/model" "github.com/caos/zitadel/internal/user/model" repo_model "github.com/caos/zitadel/internal/user/repository/eventsourcing/model" ) @@ -95,8 +94,8 @@ func TestCreateUser(t *testing.T) { es *UserEventstore ctx context.Context user *model.User - policy *policy_model.PasswordComplexityPolicy - orgPolicy *org_model.OrgIAMPolicy + policy *iam_model.PasswordComplexityPolicyView + orgPolicy *iam_model.OrgIAMPolicyView } type res struct { user *model.User @@ -133,8 +132,8 @@ func TestCreateUser(t *testing.T) { }, }, }, - policy: &policy_model.PasswordComplexityPolicy{}, - orgPolicy: &org_model.OrgIAMPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, + orgPolicy: &iam_model.OrgIAMPolicyView{}, }, res: res{ user: &model.User{ @@ -176,8 +175,8 @@ func TestCreateUser(t *testing.T) { }, }, }, - policy: &policy_model.PasswordComplexityPolicy{}, - orgPolicy: &org_model.OrgIAMPolicy{UserLoginMustBeDomain: false}, + policy: &iam_model.PasswordComplexityPolicyView{}, + orgPolicy: &iam_model.OrgIAMPolicyView{UserLoginMustBeDomain: false}, }, res: res{ user: &model.User{ObjectRoot: es_models.ObjectRoot{Sequence: 1}, @@ -226,8 +225,8 @@ func TestCreateUser(t *testing.T) { }, }, }, - policy: &policy_model.PasswordComplexityPolicy{}, - orgPolicy: &org_model.OrgIAMPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, + orgPolicy: &iam_model.OrgIAMPolicyView{}, }, res: res{ user: &model.User{ObjectRoot: es_models.ObjectRoot{Sequence: 1}, @@ -275,8 +274,8 @@ func TestCreateUser(t *testing.T) { }, }, }, - policy: &policy_model.PasswordComplexityPolicy{}, - orgPolicy: &org_model.OrgIAMPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, + orgPolicy: &iam_model.OrgIAMPolicyView{}, }, res: res{ user: &model.User{ObjectRoot: es_models.ObjectRoot{Sequence: 1}, @@ -301,8 +300,8 @@ func TestCreateUser(t *testing.T) { es: GetMockManipulateUser(ctrl), ctx: authz.NewMockContext("orgID", "userID"), user: &model.User{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Human: &model.Human{}}, - policy: &policy_model.PasswordComplexityPolicy{}, - orgPolicy: &org_model.OrgIAMPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, + orgPolicy: &iam_model.OrgIAMPolicyView{}, }, res: res{ errFunc: caos_errs.IsPreconditionFailed, @@ -314,7 +313,7 @@ func TestCreateUser(t *testing.T) { es: GetMockManipulateUser(ctrl), ctx: authz.NewMockContext("orgID", "userID"), user: &model.User{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Human: &model.Human{}}, - orgPolicy: &org_model.OrgIAMPolicy{}, + orgPolicy: &iam_model.OrgIAMPolicyView{}, }, res: res{ errFunc: caos_errs.IsPreconditionFailed, @@ -326,7 +325,7 @@ func TestCreateUser(t *testing.T) { es: GetMockManipulateUser(ctrl), ctx: authz.NewMockContext("orgID", "userID"), user: &model.User{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID", Sequence: 1}, Human: &model.Human{}}, - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, }, res: res{ errFunc: caos_errs.IsPreconditionFailed, @@ -367,8 +366,8 @@ func TestRegisterUser(t *testing.T) { ctx context.Context user *model.User resourceOwner string - policy *policy_model.PasswordComplexityPolicy - orgPolicy *org_model.OrgIAMPolicy + policy *iam_model.PasswordComplexityPolicyView + orgPolicy *iam_model.OrgIAMPolicyView } type res struct { user *model.User @@ -406,8 +405,8 @@ func TestRegisterUser(t *testing.T) { }, }, }, - policy: &policy_model.PasswordComplexityPolicy{}, - orgPolicy: &org_model.OrgIAMPolicy{UserLoginMustBeDomain: true}, + policy: &iam_model.PasswordComplexityPolicyView{}, + orgPolicy: &iam_model.OrgIAMPolicyView{UserLoginMustBeDomain: true}, resourceOwner: "ResourceOwner", }, res: res{ @@ -450,8 +449,8 @@ func TestRegisterUser(t *testing.T) { }, }, }, - policy: &policy_model.PasswordComplexityPolicy{}, - orgPolicy: &org_model.OrgIAMPolicy{UserLoginMustBeDomain: false}, + policy: &iam_model.PasswordComplexityPolicyView{}, + orgPolicy: &iam_model.OrgIAMPolicyView{UserLoginMustBeDomain: false}, resourceOwner: "ResourceOwner", }, res: res{ @@ -476,8 +475,8 @@ func TestRegisterUser(t *testing.T) { es: GetMockManipulateUser(ctrl), ctx: authz.NewMockContext("orgID", "userID"), user: &model.User{ObjectRoot: es_models.ObjectRoot{Sequence: 1}, Human: &model.Human{}}, - policy: &policy_model.PasswordComplexityPolicy{}, - orgPolicy: &org_model.OrgIAMPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, + orgPolicy: &iam_model.OrgIAMPolicyView{}, resourceOwner: "ResourceOwner", }, res: res{ @@ -502,8 +501,8 @@ func TestRegisterUser(t *testing.T) { }, }, }, - policy: &policy_model.PasswordComplexityPolicy{}, - orgPolicy: &org_model.OrgIAMPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, + orgPolicy: &iam_model.OrgIAMPolicyView{}, resourceOwner: "ResourceOwner", }, res: res{ @@ -528,8 +527,8 @@ func TestRegisterUser(t *testing.T) { }, }, }, - policy: &policy_model.PasswordComplexityPolicy{}, - orgPolicy: &org_model.OrgIAMPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, + orgPolicy: &iam_model.OrgIAMPolicyView{}, }, res: res{ errFunc: caos_errs.IsPreconditionFailed, @@ -553,7 +552,7 @@ func TestRegisterUser(t *testing.T) { }, }, }, - orgPolicy: &org_model.OrgIAMPolicy{}, + orgPolicy: &iam_model.OrgIAMPolicyView{}, }, res: res{ errFunc: caos_errs.IsPreconditionFailed, @@ -577,7 +576,7 @@ func TestRegisterUser(t *testing.T) { }, }, }, - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, }, res: res{ errFunc: caos_errs.IsPreconditionFailed, @@ -1078,7 +1077,7 @@ func TestInitCodeVerify(t *testing.T) { type args struct { es *UserEventstore ctx context.Context - policy *policy_model.PasswordComplexityPolicy + policy *iam_model.PasswordComplexityPolicyView userID string verifyCode string password string @@ -1105,7 +1104,7 @@ func TestInitCodeVerify(t *testing.T) { }, ), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, verifyCode: "code", userID: "userID", }, @@ -1125,7 +1124,7 @@ func TestInitCodeVerify(t *testing.T) { }, ), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, userID: "userID", verifyCode: "code", password: "password", @@ -1145,7 +1144,7 @@ func TestInitCodeVerify(t *testing.T) { }, ), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, userID: "userID", verifyCode: "code", password: "password", @@ -1156,7 +1155,7 @@ func TestInitCodeVerify(t *testing.T) { args: args{ es: GetMockManipulateUser(ctrl), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, userID: "", verifyCode: "code", password: "password", @@ -1170,7 +1169,7 @@ func TestInitCodeVerify(t *testing.T) { args: args{ es: GetMockManipulateUser(ctrl), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{HasNumber: true}, + policy: &iam_model.PasswordComplexityPolicyView{HasNumber: true}, userID: "userID", verifyCode: "code", password: "password", @@ -1184,7 +1183,7 @@ func TestInitCodeVerify(t *testing.T) { args: args{ es: GetMockManipulateUserNoEventsWithPw(ctrl), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, userID: "userID", password: "password", verifyCode: "code", @@ -1352,7 +1351,7 @@ func TestSetOneTimePassword(t *testing.T) { type args struct { es *UserEventstore ctx context.Context - policy *policy_model.PasswordComplexityPolicy + policy *iam_model.PasswordComplexityPolicyView password *model.Password } type res struct { @@ -1369,7 +1368,7 @@ func TestSetOneTimePassword(t *testing.T) { args: args{ es: GetMockManipulateUserWithPasswordCodeGen(ctrl, repo_model.User{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID"}, Human: &repo_model.Human{}}), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, password: &model.Password{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID"}, SecretString: "Password"}, }, res: res{ @@ -1381,7 +1380,7 @@ func TestSetOneTimePassword(t *testing.T) { args: args{ es: GetMockManipulateUser(ctrl), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, password: &model.Password{ObjectRoot: es_models.ObjectRoot{AggregateID: ""}, SecretString: "Password"}, }, res: res{ @@ -1393,7 +1392,7 @@ func TestSetOneTimePassword(t *testing.T) { args: args{ es: GetMockManipulateUserNoEvents(ctrl), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, password: &model.Password{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID"}, SecretString: "Password"}, }, res: res{ @@ -1557,7 +1556,7 @@ func TestSetPassword(t *testing.T) { type args struct { es *UserEventstore ctx context.Context - policy *policy_model.PasswordComplexityPolicy + policy *iam_model.PasswordComplexityPolicyView userID string code string password string @@ -1587,7 +1586,7 @@ func TestSetPassword(t *testing.T) { }, ), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, userID: "userID", code: "code", password: "password", @@ -1599,7 +1598,7 @@ func TestSetPassword(t *testing.T) { args: args{ es: GetMockManipulateUser(ctrl), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, userID: "", code: "code", password: "password", @@ -1613,7 +1612,7 @@ func TestSetPassword(t *testing.T) { args: args{ es: GetMockManipulateUserNoEvents(ctrl), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, userID: "userID", code: "code", password: "password", @@ -1632,7 +1631,7 @@ func TestSetPassword(t *testing.T) { }, ), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, userID: "userID", code: "code", password: "password", @@ -1658,7 +1657,7 @@ func TestSetPassword(t *testing.T) { }, ), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, userID: "userID", code: "code", password: "password", @@ -1687,7 +1686,7 @@ func TestChangePassword(t *testing.T) { type args struct { es *UserEventstore ctx context.Context - policy *policy_model.PasswordComplexityPolicy + policy *iam_model.PasswordComplexityPolicyView userID string old string new string @@ -1717,7 +1716,7 @@ func TestChangePassword(t *testing.T) { }, ), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, userID: "userID", old: "old", new: "new", @@ -1731,7 +1730,7 @@ func TestChangePassword(t *testing.T) { args: args{ es: GetMockManipulateUser(ctrl), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, userID: "", old: "old", new: "new", @@ -1745,7 +1744,7 @@ func TestChangePassword(t *testing.T) { args: args{ es: GetMockManipulateUserNoEvents(ctrl), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, userID: "userID", old: "old", new: "new", @@ -1764,7 +1763,7 @@ func TestChangePassword(t *testing.T) { }, ), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, userID: "userID", old: "old", new: "new", @@ -1789,7 +1788,7 @@ func TestChangePassword(t *testing.T) { }, ), ctx: authz.NewMockContext("orgID", "userID"), - policy: &policy_model.PasswordComplexityPolicy{}, + policy: &iam_model.PasswordComplexityPolicyView{}, userID: "userID", old: "old", new: "new", diff --git a/internal/user/repository/view/model/notify_user.go b/internal/user/repository/view/model/notify_user.go index 51260ef903..b5a5e687f6 100644 --- a/internal/user/repository/view/model/notify_user.go +++ b/internal/user/repository/view/model/notify_user.go @@ -2,6 +2,7 @@ package model import ( "encoding/json" + iam_model "github.com/caos/zitadel/internal/iam/model" "time" "github.com/caos/logging" @@ -95,7 +96,7 @@ func (u *NotifyUser) GenerateLoginName(domain string, appendDomain bool) string return u.UserName + "@" + domain } -func (u *NotifyUser) SetLoginNames(policy *org_model.OrgIAMPolicy, domains []*org_model.OrgDomain) { +func (u *NotifyUser) SetLoginNames(policy *iam_model.OrgIAMPolicy, domains []*org_model.OrgDomain) { loginNames := make([]string, 0) for _, d := range domains { if d.Verified { diff --git a/internal/user/repository/view/model/user.go b/internal/user/repository/view/model/user.go index 218a6eda76..02996bee3f 100644 --- a/internal/user/repository/view/model/user.go +++ b/internal/user/repository/view/model/user.go @@ -2,6 +2,7 @@ package model import ( "encoding/json" + iam_model "github.com/caos/zitadel/internal/iam/model" "time" org_model "github.com/caos/zitadel/internal/org/model" @@ -169,7 +170,7 @@ func (u *UserView) GenerateLoginName(domain string, appendDomain bool) string { return u.UserName + "@" + domain } -func (u *UserView) SetLoginNames(policy *org_model.OrgIAMPolicy, domains []*org_model.OrgDomain) { +func (u *UserView) SetLoginNames(policy *iam_model.OrgIAMPolicy, domains []*org_model.OrgDomain) { loginNames := make([]string, 0) for _, d := range domains { if d.Verified { diff --git a/migrations/cockroach/V1.17__policies.sql b/migrations/cockroach/V1.17__policies.sql new file mode 100644 index 0000000000..94b6aa40be --- /dev/null +++ b/migrations/cockroach/V1.17__policies.sql @@ -0,0 +1,173 @@ +CREATE TABLE auth.password_complexity_policies ( + aggregate_id TEXT, + + creation_date TIMESTAMPTZ, + change_date TIMESTAMPTZ, + complexity_policy_state SMALLINT, + sequence BIGINT, + + min_length BIGINT, + has_lowercase BOOLEAN, + has_uppercase BOOLEAN, + has_symbol BOOLEAN, + has_number BOOLEAN, + + PRIMARY KEY (aggregate_id) +); + +CREATE TABLE adminapi.password_complexity_policies ( + aggregate_id TEXT, + + creation_date TIMESTAMPTZ, + change_date TIMESTAMPTZ, + complexity_policy_state SMALLINT, + sequence BIGINT, + + min_length BIGINT, + has_lowercase BOOLEAN, + has_uppercase BOOLEAN, + has_symbol BOOLEAN, + has_number BOOLEAN, + + PRIMARY KEY (aggregate_id) +); + +CREATE TABLE management.password_complexity_policies ( + aggregate_id TEXT, + + creation_date TIMESTAMPTZ, + change_date TIMESTAMPTZ, + complexity_policy_state SMALLINT, + sequence BIGINT, + + min_length BIGINT, + has_lowercase BOOLEAN, + has_uppercase BOOLEAN, + has_symbol BOOLEAN, + has_number BOOLEAN, + + PRIMARY KEY (aggregate_id) +); + +CREATE TABLE auth.password_age_policies ( + aggregate_id TEXT, + + creation_date TIMESTAMPTZ, + change_date TIMESTAMPTZ, + age_policy_state SMALLINT, + sequence BIGINT, + + max_age_days BIGINT, + expire_warn_days BIGINT, + + PRIMARY KEY (aggregate_id) +); + +CREATE TABLE adminapi.password_age_policies ( + aggregate_id TEXT, + + creation_date TIMESTAMPTZ, + change_date TIMESTAMPTZ, + age_policy_state SMALLINT, + sequence BIGINT, + + max_age_days BIGINT, + expire_warn_days BIGINT, + + PRIMARY KEY (aggregate_id) +); + +CREATE TABLE management.password_age_policies ( + aggregate_id TEXT, + + creation_date TIMESTAMPTZ, + change_date TIMESTAMPTZ, + age_policy_state SMALLINT, + sequence BIGINT, + + max_age_days BIGINT, + expire_warn_days BIGINT, + + PRIMARY KEY (aggregate_id) +); + +CREATE TABLE auth.password_lockout_policies ( + aggregate_id TEXT, + + creation_date TIMESTAMPTZ, + change_date TIMESTAMPTZ, + lockout_policy_state SMALLINT, + sequence BIGINT, + + max_attempts BIGINT, + show_lockout_failures BOOLEAN, + + PRIMARY KEY (aggregate_id) +); + +CREATE TABLE adminapi.password_lockout_policies ( + aggregate_id TEXT, + + creation_date TIMESTAMPTZ, + change_date TIMESTAMPTZ, + lockout_policy_state SMALLINT, + sequence BIGINT, + + max_attempts BIGINT, + show_lockout_failures BOOLEAN, + + PRIMARY KEY (aggregate_id) +); + +CREATE TABLE management.password_lockout_policies ( + aggregate_id TEXT, + + creation_date TIMESTAMPTZ, + change_date TIMESTAMPTZ, + lockout_policy_state SMALLINT, + sequence BIGINT, + + max_attempts BIGINT, + show_lockout_failures BOOLEAN, + + PRIMARY KEY (aggregate_id) +); + +CREATE TABLE management.org_iam_policies ( + aggregate_id TEXT, + + creation_date TIMESTAMPTZ, + change_date TIMESTAMPTZ, + org_iam_policy_state SMALLINT, + sequence BIGINT, + + user_login_must_be_domain BOOLEAN, + + PRIMARY KEY (aggregate_id) +); + +CREATE TABLE auth.org_iam_policies ( + aggregate_id TEXT, + + creation_date TIMESTAMPTZ, + change_date TIMESTAMPTZ, + org_iam_policy_state SMALLINT, + sequence BIGINT, + + user_login_must_be_domain BOOLEAN, + + PRIMARY KEY (aggregate_id) +); + +CREATE TABLE adminapi.org_iam_policies ( + aggregate_id TEXT, + + creation_date TIMESTAMPTZ, + change_date TIMESTAMPTZ, + org_iam_policy_state SMALLINT, + sequence BIGINT, + + user_login_must_be_domain BOOLEAN, + + PRIMARY KEY (aggregate_id) +); \ No newline at end of file diff --git a/pkg/grpc/admin/admin.pb.authoptions.go b/pkg/grpc/admin/admin.pb.authoptions.go index 22005775b3..34f93a778b 100644 --- a/pkg/grpc/admin/admin.pb.authoptions.go +++ b/pkg/grpc/admin/admin.pb.authoptions.go @@ -34,12 +34,22 @@ var AdminService_AuthMethods = authz.MethodMapping{ CheckParam: "", }, - "/caos.zitadel.admin.api.v1.AdminService/GetOrgIamPolicy": authz.Option{ + "/caos.zitadel.admin.api.v1.AdminService/GetDefaultOrgIAMPolicy": authz.Option{ Permission: "iam.policy.read", CheckParam: "", }, - "/caos.zitadel.admin.api.v1.AdminService/CreateOrgIamPolicy": authz.Option{ + "/caos.zitadel.admin.api.v1.AdminService/UpdateDefaultOrgIamPolicy": authz.Option{ + Permission: "iam.policy.write", + CheckParam: "", + }, + + "/caos.zitadel.admin.api.v1.AdminService/GetOrgIAMPolicy": authz.Option{ + Permission: "iam.policy.read", + CheckParam: "", + }, + + "/caos.zitadel.admin.api.v1.AdminService/CreateOrgIAMPolicy": authz.Option{ Permission: "iam.policy.write", CheckParam: "", }, @@ -49,7 +59,7 @@ var AdminService_AuthMethods = authz.MethodMapping{ CheckParam: "", }, - "/caos.zitadel.admin.api.v1.AdminService/DeleteOrgIamPolicy": authz.Option{ + "/caos.zitadel.admin.api.v1.AdminService/RemoveOrgIAMPolicy": authz.Option{ Permission: "iam.policy.delete", CheckParam: "", }, @@ -163,4 +173,34 @@ var AdminService_AuthMethods = authz.MethodMapping{ Permission: "iam.policy.write", CheckParam: "", }, + + "/caos.zitadel.admin.api.v1.AdminService/GetDefaultPasswordComplexityPolicy": authz.Option{ + Permission: "iam.policy.read", + CheckParam: "", + }, + + "/caos.zitadel.admin.api.v1.AdminService/UpdateDefaultPasswordComplexityPolicy": authz.Option{ + Permission: "iam.policy.write", + CheckParam: "", + }, + + "/caos.zitadel.admin.api.v1.AdminService/GetDefaultPasswordAgePolicy": authz.Option{ + Permission: "iam.policy.read", + CheckParam: "", + }, + + "/caos.zitadel.admin.api.v1.AdminService/UpdateDefaultPasswordAgePolicy": authz.Option{ + Permission: "iam.policy.write", + CheckParam: "", + }, + + "/caos.zitadel.admin.api.v1.AdminService/GetDefaultPasswordLockoutPolicy": authz.Option{ + Permission: "iam.policy.read", + CheckParam: "", + }, + + "/caos.zitadel.admin.api.v1.AdminService/UpdateDefaultPasswordLockoutPolicy": authz.Option{ + Permission: "iam.policy.write", + CheckParam: "", + }, } diff --git a/pkg/grpc/admin/admin.pb.go b/pkg/grpc/admin/admin.pb.go index e0f17f56c4..707af019ba 100644 --- a/pkg/grpc/admin/admin.pb.go +++ b/pkg/grpc/admin/admin.pb.go @@ -2036,12 +2036,11 @@ type OrgIamPolicy struct { unknownFields protoimpl.UnknownFields OrgId string `protobuf:"bytes,1,opt,name=org_id,json=orgId,proto3" json:"org_id,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - UserLoginMustBeDomain bool `protobuf:"varint,3,opt,name=user_login_must_be_domain,json=userLoginMustBeDomain,proto3" json:"user_login_must_be_domain,omitempty"` - Default bool `protobuf:"varint,4,opt,name=default,proto3" json:"default,omitempty"` - Sequence uint64 `protobuf:"varint,5,opt,name=sequence,proto3" json:"sequence,omitempty"` - CreationDate *timestamp.Timestamp `protobuf:"bytes,6,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` - ChangeDate *timestamp.Timestamp `protobuf:"bytes,7,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` + UserLoginMustBeDomain bool `protobuf:"varint,2,opt,name=user_login_must_be_domain,json=userLoginMustBeDomain,proto3" json:"user_login_must_be_domain,omitempty"` + Default bool `protobuf:"varint,3,opt,name=default,proto3" json:"default,omitempty"` + Sequence uint64 `protobuf:"varint,4,opt,name=sequence,proto3" json:"sequence,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,5,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,6,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` } func (x *OrgIamPolicy) Reset() { @@ -2071,7 +2070,7 @@ func (x *OrgIamPolicy) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use OrgIamPolicy.ProtoReflect.Descriptor instead. +// Deprecated: Use OrgIAMPolicy.ProtoReflect.Descriptor instead. func (*OrgIamPolicy) Descriptor() ([]byte, []int) { return file_admin_proto_rawDescGZIP(), []int{17} } @@ -2083,13 +2082,6 @@ func (x *OrgIamPolicy) GetOrgId() string { return "" } -func (x *OrgIamPolicy) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - func (x *OrgIamPolicy) GetUserLoginMustBeDomain() bool { if x != nil { return x.UserLoginMustBeDomain @@ -2125,6 +2117,93 @@ func (x *OrgIamPolicy) GetChangeDate() *timestamp.Timestamp { return nil } +type OrgIamPolicyView struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OrgId string `protobuf:"bytes,1,opt,name=org_id,json=orgId,proto3" json:"org_id,omitempty"` + UserLoginMustBeDomain bool `protobuf:"varint,2,opt,name=user_login_must_be_domain,json=userLoginMustBeDomain,proto3" json:"user_login_must_be_domain,omitempty"` + Default bool `protobuf:"varint,3,opt,name=default,proto3" json:"default,omitempty"` + Sequence uint64 `protobuf:"varint,4,opt,name=sequence,proto3" json:"sequence,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,5,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,6,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` +} + +func (x *OrgIamPolicyView) Reset() { + *x = OrgIamPolicyView{} + if protoimpl.UnsafeEnabled { + mi := &file_admin_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OrgIamPolicyView) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OrgIamPolicyView) ProtoMessage() {} + +func (x *OrgIamPolicyView) ProtoReflect() protoreflect.Message { + mi := &file_admin_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OrgIamPolicyView.ProtoReflect.Descriptor instead. +func (*OrgIamPolicyView) Descriptor() ([]byte, []int) { + return file_admin_proto_rawDescGZIP(), []int{18} +} + +func (x *OrgIamPolicyView) GetOrgId() string { + if x != nil { + return x.OrgId + } + return "" +} + +func (x *OrgIamPolicyView) GetUserLoginMustBeDomain() bool { + if x != nil { + return x.UserLoginMustBeDomain + } + return false +} + +func (x *OrgIamPolicyView) GetDefault() bool { + if x != nil { + return x.Default + } + return false +} + +func (x *OrgIamPolicyView) GetSequence() uint64 { + if x != nil { + return x.Sequence + } + return 0 +} + +func (x *OrgIamPolicyView) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *OrgIamPolicyView) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + type OrgIamPolicyRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2138,7 +2217,7 @@ type OrgIamPolicyRequest struct { func (x *OrgIamPolicyRequest) Reset() { *x = OrgIamPolicyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[18] + mi := &file_admin_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2151,7 +2230,7 @@ func (x *OrgIamPolicyRequest) String() string { func (*OrgIamPolicyRequest) ProtoMessage() {} func (x *OrgIamPolicyRequest) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[18] + mi := &file_admin_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2164,7 +2243,7 @@ func (x *OrgIamPolicyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgIamPolicyRequest.ProtoReflect.Descriptor instead. func (*OrgIamPolicyRequest) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{18} + return file_admin_proto_rawDescGZIP(), []int{19} } func (x *OrgIamPolicyRequest) GetOrgId() string { @@ -2199,7 +2278,7 @@ type OrgIamPolicyID struct { func (x *OrgIamPolicyID) Reset() { *x = OrgIamPolicyID{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[19] + mi := &file_admin_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2212,7 +2291,7 @@ func (x *OrgIamPolicyID) String() string { func (*OrgIamPolicyID) ProtoMessage() {} func (x *OrgIamPolicyID) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[19] + mi := &file_admin_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2225,7 +2304,7 @@ func (x *OrgIamPolicyID) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgIamPolicyID.ProtoReflect.Descriptor instead. func (*OrgIamPolicyID) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{19} + return file_admin_proto_rawDescGZIP(), []int{20} } func (x *OrgIamPolicyID) GetOrgId() string { @@ -2246,7 +2325,7 @@ type IamMemberRoles struct { func (x *IamMemberRoles) Reset() { *x = IamMemberRoles{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[20] + mi := &file_admin_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2259,7 +2338,7 @@ func (x *IamMemberRoles) String() string { func (*IamMemberRoles) ProtoMessage() {} func (x *IamMemberRoles) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[20] + mi := &file_admin_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2272,7 +2351,7 @@ func (x *IamMemberRoles) ProtoReflect() protoreflect.Message { // Deprecated: Use IamMemberRoles.ProtoReflect.Descriptor instead. func (*IamMemberRoles) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{20} + return file_admin_proto_rawDescGZIP(), []int{21} } func (x *IamMemberRoles) GetRoles() []string { @@ -2297,7 +2376,7 @@ type IamMember struct { func (x *IamMember) Reset() { *x = IamMember{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[21] + mi := &file_admin_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2310,7 +2389,7 @@ func (x *IamMember) String() string { func (*IamMember) ProtoMessage() {} func (x *IamMember) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[21] + mi := &file_admin_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2323,7 +2402,7 @@ func (x *IamMember) ProtoReflect() protoreflect.Message { // Deprecated: Use IamMember.ProtoReflect.Descriptor instead. func (*IamMember) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{21} + return file_admin_proto_rawDescGZIP(), []int{22} } func (x *IamMember) GetUserId() string { @@ -2373,7 +2452,7 @@ type AddIamMemberRequest struct { func (x *AddIamMemberRequest) Reset() { *x = AddIamMemberRequest{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[22] + mi := &file_admin_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2386,7 +2465,7 @@ func (x *AddIamMemberRequest) String() string { func (*AddIamMemberRequest) ProtoMessage() {} func (x *AddIamMemberRequest) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[22] + mi := &file_admin_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2399,7 +2478,7 @@ func (x *AddIamMemberRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AddIamMemberRequest.ProtoReflect.Descriptor instead. func (*AddIamMemberRequest) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{22} + return file_admin_proto_rawDescGZIP(), []int{23} } func (x *AddIamMemberRequest) GetUserId() string { @@ -2428,7 +2507,7 @@ type ChangeIamMemberRequest struct { func (x *ChangeIamMemberRequest) Reset() { *x = ChangeIamMemberRequest{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[23] + mi := &file_admin_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2441,7 +2520,7 @@ func (x *ChangeIamMemberRequest) String() string { func (*ChangeIamMemberRequest) ProtoMessage() {} func (x *ChangeIamMemberRequest) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[23] + mi := &file_admin_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2454,7 +2533,7 @@ func (x *ChangeIamMemberRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeIamMemberRequest.ProtoReflect.Descriptor instead. func (*ChangeIamMemberRequest) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{23} + return file_admin_proto_rawDescGZIP(), []int{24} } func (x *ChangeIamMemberRequest) GetUserId() string { @@ -2482,7 +2561,7 @@ type RemoveIamMemberRequest struct { func (x *RemoveIamMemberRequest) Reset() { *x = RemoveIamMemberRequest{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[24] + mi := &file_admin_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2495,7 +2574,7 @@ func (x *RemoveIamMemberRequest) String() string { func (*RemoveIamMemberRequest) ProtoMessage() {} func (x *RemoveIamMemberRequest) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[24] + mi := &file_admin_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2508,7 +2587,7 @@ func (x *RemoveIamMemberRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveIamMemberRequest.ProtoReflect.Descriptor instead. func (*RemoveIamMemberRequest) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{24} + return file_admin_proto_rawDescGZIP(), []int{25} } func (x *RemoveIamMemberRequest) GetUserId() string { @@ -2534,7 +2613,7 @@ type IamMemberSearchResponse struct { func (x *IamMemberSearchResponse) Reset() { *x = IamMemberSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[25] + mi := &file_admin_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2547,7 +2626,7 @@ func (x *IamMemberSearchResponse) String() string { func (*IamMemberSearchResponse) ProtoMessage() {} func (x *IamMemberSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[25] + mi := &file_admin_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2560,7 +2639,7 @@ func (x *IamMemberSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IamMemberSearchResponse.ProtoReflect.Descriptor instead. func (*IamMemberSearchResponse) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{25} + return file_admin_proto_rawDescGZIP(), []int{26} } func (x *IamMemberSearchResponse) GetOffset() uint64 { @@ -2625,7 +2704,7 @@ type IamMemberView struct { func (x *IamMemberView) Reset() { *x = IamMemberView{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[26] + mi := &file_admin_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2638,7 +2717,7 @@ func (x *IamMemberView) String() string { func (*IamMemberView) ProtoMessage() {} func (x *IamMemberView) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[26] + mi := &file_admin_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2651,7 +2730,7 @@ func (x *IamMemberView) ProtoReflect() protoreflect.Message { // Deprecated: Use IamMemberView.ProtoReflect.Descriptor instead. func (*IamMemberView) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{26} + return file_admin_proto_rawDescGZIP(), []int{27} } func (x *IamMemberView) GetUserId() string { @@ -2737,7 +2816,7 @@ type IamMemberSearchRequest struct { func (x *IamMemberSearchRequest) Reset() { *x = IamMemberSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[27] + mi := &file_admin_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2750,7 +2829,7 @@ func (x *IamMemberSearchRequest) String() string { func (*IamMemberSearchRequest) ProtoMessage() {} func (x *IamMemberSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[27] + mi := &file_admin_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2763,7 +2842,7 @@ func (x *IamMemberSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use IamMemberSearchRequest.ProtoReflect.Descriptor instead. func (*IamMemberSearchRequest) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{27} + return file_admin_proto_rawDescGZIP(), []int{28} } func (x *IamMemberSearchRequest) GetOffset() uint64 { @@ -2800,7 +2879,7 @@ type IamMemberSearchQuery struct { func (x *IamMemberSearchQuery) Reset() { *x = IamMemberSearchQuery{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[28] + mi := &file_admin_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2813,7 +2892,7 @@ func (x *IamMemberSearchQuery) String() string { func (*IamMemberSearchQuery) ProtoMessage() {} func (x *IamMemberSearchQuery) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[28] + mi := &file_admin_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2826,7 +2905,7 @@ func (x *IamMemberSearchQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use IamMemberSearchQuery.ProtoReflect.Descriptor instead. func (*IamMemberSearchQuery) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{28} + return file_admin_proto_rawDescGZIP(), []int{29} } func (x *IamMemberSearchQuery) GetKey() IamMemberSearchKey { @@ -2863,7 +2942,7 @@ type FailedEventID struct { func (x *FailedEventID) Reset() { *x = FailedEventID{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[29] + mi := &file_admin_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2876,7 +2955,7 @@ func (x *FailedEventID) String() string { func (*FailedEventID) ProtoMessage() {} func (x *FailedEventID) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[29] + mi := &file_admin_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2889,7 +2968,7 @@ func (x *FailedEventID) ProtoReflect() protoreflect.Message { // Deprecated: Use FailedEventID.ProtoReflect.Descriptor instead. func (*FailedEventID) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{29} + return file_admin_proto_rawDescGZIP(), []int{30} } func (x *FailedEventID) GetDatabase() string { @@ -2924,7 +3003,7 @@ type FailedEvents struct { func (x *FailedEvents) Reset() { *x = FailedEvents{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[30] + mi := &file_admin_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2937,7 +3016,7 @@ func (x *FailedEvents) String() string { func (*FailedEvents) ProtoMessage() {} func (x *FailedEvents) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[30] + mi := &file_admin_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2950,7 +3029,7 @@ func (x *FailedEvents) ProtoReflect() protoreflect.Message { // Deprecated: Use FailedEvents.ProtoReflect.Descriptor instead. func (*FailedEvents) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{30} + return file_admin_proto_rawDescGZIP(), []int{31} } func (x *FailedEvents) GetFailedEvents() []*FailedEvent { @@ -2975,7 +3054,7 @@ type FailedEvent struct { func (x *FailedEvent) Reset() { *x = FailedEvent{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[31] + mi := &file_admin_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2988,7 +3067,7 @@ func (x *FailedEvent) String() string { func (*FailedEvent) ProtoMessage() {} func (x *FailedEvent) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[31] + mi := &file_admin_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3001,7 +3080,7 @@ func (x *FailedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use FailedEvent.ProtoReflect.Descriptor instead. func (*FailedEvent) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{31} + return file_admin_proto_rawDescGZIP(), []int{32} } func (x *FailedEvent) GetDatabase() string { @@ -3051,7 +3130,7 @@ type ViewID struct { func (x *ViewID) Reset() { *x = ViewID{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[32] + mi := &file_admin_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3064,7 +3143,7 @@ func (x *ViewID) String() string { func (*ViewID) ProtoMessage() {} func (x *ViewID) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[32] + mi := &file_admin_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3077,7 +3156,7 @@ func (x *ViewID) ProtoReflect() protoreflect.Message { // Deprecated: Use ViewID.ProtoReflect.Descriptor instead. func (*ViewID) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{32} + return file_admin_proto_rawDescGZIP(), []int{33} } func (x *ViewID) GetDatabase() string { @@ -3105,7 +3184,7 @@ type Views struct { func (x *Views) Reset() { *x = Views{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[33] + mi := &file_admin_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3118,7 +3197,7 @@ func (x *Views) String() string { func (*Views) ProtoMessage() {} func (x *Views) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[33] + mi := &file_admin_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3131,7 +3210,7 @@ func (x *Views) ProtoReflect() protoreflect.Message { // Deprecated: Use Views.ProtoReflect.Descriptor instead. func (*Views) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{33} + return file_admin_proto_rawDescGZIP(), []int{34} } func (x *Views) GetViews() []*View { @@ -3155,7 +3234,7 @@ type View struct { func (x *View) Reset() { *x = View{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[34] + mi := &file_admin_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3168,7 +3247,7 @@ func (x *View) String() string { func (*View) ProtoMessage() {} func (x *View) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[34] + mi := &file_admin_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3181,7 +3260,7 @@ func (x *View) ProtoReflect() protoreflect.Message { // Deprecated: Use View.ProtoReflect.Descriptor instead. func (*View) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{34} + return file_admin_proto_rawDescGZIP(), []int{35} } func (x *View) GetDatabase() string { @@ -3223,7 +3302,7 @@ type IdpID struct { func (x *IdpID) Reset() { *x = IdpID{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[35] + mi := &file_admin_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3236,7 +3315,7 @@ func (x *IdpID) String() string { func (*IdpID) ProtoMessage() {} func (x *IdpID) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[35] + mi := &file_admin_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3249,7 +3328,7 @@ func (x *IdpID) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpID.ProtoReflect.Descriptor instead. func (*IdpID) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{35} + return file_admin_proto_rawDescGZIP(), []int{36} } func (x *IdpID) GetId() string { @@ -3279,7 +3358,7 @@ type Idp struct { func (x *Idp) Reset() { *x = Idp{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[36] + mi := &file_admin_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3292,7 +3371,7 @@ func (x *Idp) String() string { func (*Idp) ProtoMessage() {} func (x *Idp) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[36] + mi := &file_admin_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3305,7 +3384,7 @@ func (x *Idp) ProtoReflect() protoreflect.Message { // Deprecated: Use Idp.ProtoReflect.Descriptor instead. func (*Idp) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{36} + return file_admin_proto_rawDescGZIP(), []int{37} } func (x *Idp) GetId() string { @@ -3394,7 +3473,7 @@ type IdpUpdate struct { func (x *IdpUpdate) Reset() { *x = IdpUpdate{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[37] + mi := &file_admin_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3407,7 +3486,7 @@ func (x *IdpUpdate) String() string { func (*IdpUpdate) ProtoMessage() {} func (x *IdpUpdate) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[37] + mi := &file_admin_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3420,7 +3499,7 @@ func (x *IdpUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpUpdate.ProtoReflect.Descriptor instead. func (*IdpUpdate) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{37} + return file_admin_proto_rawDescGZIP(), []int{38} } func (x *IdpUpdate) GetId() string { @@ -3458,7 +3537,7 @@ type OidcIdpConfig struct { func (x *OidcIdpConfig) Reset() { *x = OidcIdpConfig{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[38] + mi := &file_admin_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3471,7 +3550,7 @@ func (x *OidcIdpConfig) String() string { func (*OidcIdpConfig) ProtoMessage() {} func (x *OidcIdpConfig) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[38] + mi := &file_admin_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3484,7 +3563,7 @@ func (x *OidcIdpConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use OidcIdpConfig.ProtoReflect.Descriptor instead. func (*OidcIdpConfig) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{38} + return file_admin_proto_rawDescGZIP(), []int{39} } func (x *OidcIdpConfig) GetClientId() string { @@ -3533,7 +3612,7 @@ type OidcIdpConfigCreate struct { func (x *OidcIdpConfigCreate) Reset() { *x = OidcIdpConfigCreate{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[39] + mi := &file_admin_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3546,7 +3625,7 @@ func (x *OidcIdpConfigCreate) String() string { func (*OidcIdpConfigCreate) ProtoMessage() {} func (x *OidcIdpConfigCreate) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[39] + mi := &file_admin_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3559,7 +3638,7 @@ func (x *OidcIdpConfigCreate) ProtoReflect() protoreflect.Message { // Deprecated: Use OidcIdpConfigCreate.ProtoReflect.Descriptor instead. func (*OidcIdpConfigCreate) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{39} + return file_admin_proto_rawDescGZIP(), []int{40} } func (x *OidcIdpConfigCreate) GetName() string { @@ -3635,7 +3714,7 @@ type OidcIdpConfigUpdate struct { func (x *OidcIdpConfigUpdate) Reset() { *x = OidcIdpConfigUpdate{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[40] + mi := &file_admin_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3648,7 +3727,7 @@ func (x *OidcIdpConfigUpdate) String() string { func (*OidcIdpConfigUpdate) ProtoMessage() {} func (x *OidcIdpConfigUpdate) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[40] + mi := &file_admin_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3661,7 +3740,7 @@ func (x *OidcIdpConfigUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use OidcIdpConfigUpdate.ProtoReflect.Descriptor instead. func (*OidcIdpConfigUpdate) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{40} + return file_admin_proto_rawDescGZIP(), []int{41} } func (x *OidcIdpConfigUpdate) GetIdpId() string { @@ -3729,7 +3808,7 @@ type IdpSearchResponse struct { func (x *IdpSearchResponse) Reset() { *x = IdpSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[41] + mi := &file_admin_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3742,7 +3821,7 @@ func (x *IdpSearchResponse) String() string { func (*IdpSearchResponse) ProtoMessage() {} func (x *IdpSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[41] + mi := &file_admin_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3755,7 +3834,7 @@ func (x *IdpSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpSearchResponse.ProtoReflect.Descriptor instead. func (*IdpSearchResponse) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{41} + return file_admin_proto_rawDescGZIP(), []int{42} } func (x *IdpSearchResponse) GetOffset() uint64 { @@ -3820,7 +3899,7 @@ type IdpView struct { func (x *IdpView) Reset() { *x = IdpView{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[42] + mi := &file_admin_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3833,7 +3912,7 @@ func (x *IdpView) String() string { func (*IdpView) ProtoMessage() {} func (x *IdpView) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[42] + mi := &file_admin_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3846,7 +3925,7 @@ func (x *IdpView) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpView.ProtoReflect.Descriptor instead. func (*IdpView) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{42} + return file_admin_proto_rawDescGZIP(), []int{43} } func (x *IdpView) GetId() string { @@ -3937,7 +4016,7 @@ type OidcIdpConfigView struct { func (x *OidcIdpConfigView) Reset() { *x = OidcIdpConfigView{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[43] + mi := &file_admin_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3950,7 +4029,7 @@ func (x *OidcIdpConfigView) String() string { func (*OidcIdpConfigView) ProtoMessage() {} func (x *OidcIdpConfigView) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[43] + mi := &file_admin_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3963,7 +4042,7 @@ func (x *OidcIdpConfigView) ProtoReflect() protoreflect.Message { // Deprecated: Use OidcIdpConfigView.ProtoReflect.Descriptor instead. func (*OidcIdpConfigView) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{43} + return file_admin_proto_rawDescGZIP(), []int{44} } func (x *OidcIdpConfigView) GetClientId() string { @@ -4014,7 +4093,7 @@ type IdpSearchRequest struct { func (x *IdpSearchRequest) Reset() { *x = IdpSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[44] + mi := &file_admin_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4027,7 +4106,7 @@ func (x *IdpSearchRequest) String() string { func (*IdpSearchRequest) ProtoMessage() {} func (x *IdpSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[44] + mi := &file_admin_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4040,7 +4119,7 @@ func (x *IdpSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpSearchRequest.ProtoReflect.Descriptor instead. func (*IdpSearchRequest) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{44} + return file_admin_proto_rawDescGZIP(), []int{45} } func (x *IdpSearchRequest) GetOffset() uint64 { @@ -4077,7 +4156,7 @@ type IdpSearchQuery struct { func (x *IdpSearchQuery) Reset() { *x = IdpSearchQuery{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[45] + mi := &file_admin_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4090,7 +4169,7 @@ func (x *IdpSearchQuery) String() string { func (*IdpSearchQuery) ProtoMessage() {} func (x *IdpSearchQuery) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[45] + mi := &file_admin_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4103,7 +4182,7 @@ func (x *IdpSearchQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpSearchQuery.ProtoReflect.Descriptor instead. func (*IdpSearchQuery) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{45} + return file_admin_proto_rawDescGZIP(), []int{46} } func (x *IdpSearchQuery) GetKey() IdpSearchKey { @@ -4132,15 +4211,17 @@ type DefaultLoginPolicy struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AllowUsernamePassword bool `protobuf:"varint,1,opt,name=allow_username_password,json=allowUsernamePassword,proto3" json:"allow_username_password,omitempty"` - AllowRegister bool `protobuf:"varint,2,opt,name=allow_register,json=allowRegister,proto3" json:"allow_register,omitempty"` - AllowExternalIdp bool `protobuf:"varint,3,opt,name=allow_external_idp,json=allowExternalIdp,proto3" json:"allow_external_idp,omitempty"` + AllowUsernamePassword bool `protobuf:"varint,1,opt,name=allow_username_password,json=allowUsernamePassword,proto3" json:"allow_username_password,omitempty"` + AllowRegister bool `protobuf:"varint,2,opt,name=allow_register,json=allowRegister,proto3" json:"allow_register,omitempty"` + AllowExternalIdp bool `protobuf:"varint,3,opt,name=allow_external_idp,json=allowExternalIdp,proto3" json:"allow_external_idp,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,4,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,5,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` } func (x *DefaultLoginPolicy) Reset() { *x = DefaultLoginPolicy{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[46] + mi := &file_admin_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4153,7 +4234,7 @@ func (x *DefaultLoginPolicy) String() string { func (*DefaultLoginPolicy) ProtoMessage() {} func (x *DefaultLoginPolicy) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[46] + mi := &file_admin_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4166,7 +4247,7 @@ func (x *DefaultLoginPolicy) ProtoReflect() protoreflect.Message { // Deprecated: Use DefaultLoginPolicy.ProtoReflect.Descriptor instead. func (*DefaultLoginPolicy) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{46} + return file_admin_proto_rawDescGZIP(), []int{47} } func (x *DefaultLoginPolicy) GetAllowUsernamePassword() bool { @@ -4190,6 +4271,83 @@ func (x *DefaultLoginPolicy) GetAllowExternalIdp() bool { return false } +func (x *DefaultLoginPolicy) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *DefaultLoginPolicy) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + +type DefaultLoginPolicyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AllowUsernamePassword bool `protobuf:"varint,1,opt,name=allow_username_password,json=allowUsernamePassword,proto3" json:"allow_username_password,omitempty"` + AllowRegister bool `protobuf:"varint,2,opt,name=allow_register,json=allowRegister,proto3" json:"allow_register,omitempty"` + AllowExternalIdp bool `protobuf:"varint,3,opt,name=allow_external_idp,json=allowExternalIdp,proto3" json:"allow_external_idp,omitempty"` +} + +func (x *DefaultLoginPolicyRequest) Reset() { + *x = DefaultLoginPolicyRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_admin_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DefaultLoginPolicyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DefaultLoginPolicyRequest) ProtoMessage() {} + +func (x *DefaultLoginPolicyRequest) ProtoReflect() protoreflect.Message { + mi := &file_admin_proto_msgTypes[48] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DefaultLoginPolicyRequest.ProtoReflect.Descriptor instead. +func (*DefaultLoginPolicyRequest) Descriptor() ([]byte, []int) { + return file_admin_proto_rawDescGZIP(), []int{48} +} + +func (x *DefaultLoginPolicyRequest) GetAllowUsernamePassword() bool { + if x != nil { + return x.AllowUsernamePassword + } + return false +} + +func (x *DefaultLoginPolicyRequest) GetAllowRegister() bool { + if x != nil { + return x.AllowRegister + } + return false +} + +func (x *DefaultLoginPolicyRequest) GetAllowExternalIdp() bool { + if x != nil { + return x.AllowExternalIdp + } + return false +} + type IdpProviderID struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4201,7 +4359,7 @@ type IdpProviderID struct { func (x *IdpProviderID) Reset() { *x = IdpProviderID{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[47] + mi := &file_admin_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4214,7 +4372,7 @@ func (x *IdpProviderID) String() string { func (*IdpProviderID) ProtoMessage() {} func (x *IdpProviderID) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[47] + mi := &file_admin_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4227,7 +4385,7 @@ func (x *IdpProviderID) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpProviderID.ProtoReflect.Descriptor instead. func (*IdpProviderID) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{47} + return file_admin_proto_rawDescGZIP(), []int{49} } func (x *IdpProviderID) GetIdpConfigId() string { @@ -4242,15 +4400,17 @@ type DefaultLoginPolicyView struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AllowUsernamePassword bool `protobuf:"varint,1,opt,name=allow_username_password,json=allowUsernamePassword,proto3" json:"allow_username_password,omitempty"` - AllowRegister bool `protobuf:"varint,2,opt,name=allow_register,json=allowRegister,proto3" json:"allow_register,omitempty"` - AllowExternalIdp bool `protobuf:"varint,3,opt,name=allow_external_idp,json=allowExternalIdp,proto3" json:"allow_external_idp,omitempty"` + AllowUsernamePassword bool `protobuf:"varint,1,opt,name=allow_username_password,json=allowUsernamePassword,proto3" json:"allow_username_password,omitempty"` + AllowRegister bool `protobuf:"varint,2,opt,name=allow_register,json=allowRegister,proto3" json:"allow_register,omitempty"` + AllowExternalIdp bool `protobuf:"varint,3,opt,name=allow_external_idp,json=allowExternalIdp,proto3" json:"allow_external_idp,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,4,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,5,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` } func (x *DefaultLoginPolicyView) Reset() { *x = DefaultLoginPolicyView{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[48] + mi := &file_admin_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4263,7 +4423,7 @@ func (x *DefaultLoginPolicyView) String() string { func (*DefaultLoginPolicyView) ProtoMessage() {} func (x *DefaultLoginPolicyView) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[48] + mi := &file_admin_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4276,7 +4436,7 @@ func (x *DefaultLoginPolicyView) ProtoReflect() protoreflect.Message { // Deprecated: Use DefaultLoginPolicyView.ProtoReflect.Descriptor instead. func (*DefaultLoginPolicyView) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{48} + return file_admin_proto_rawDescGZIP(), []int{50} } func (x *DefaultLoginPolicyView) GetAllowUsernamePassword() bool { @@ -4300,6 +4460,20 @@ func (x *DefaultLoginPolicyView) GetAllowExternalIdp() bool { return false } +func (x *DefaultLoginPolicyView) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *DefaultLoginPolicyView) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + type IdpProviderView struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4313,7 +4487,7 @@ type IdpProviderView struct { func (x *IdpProviderView) Reset() { *x = IdpProviderView{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[49] + mi := &file_admin_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4326,7 +4500,7 @@ func (x *IdpProviderView) String() string { func (*IdpProviderView) ProtoMessage() {} func (x *IdpProviderView) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[49] + mi := &file_admin_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4339,7 +4513,7 @@ func (x *IdpProviderView) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpProviderView.ProtoReflect.Descriptor instead. func (*IdpProviderView) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{49} + return file_admin_proto_rawDescGZIP(), []int{51} } func (x *IdpProviderView) GetIdpConfigId() string { @@ -4379,7 +4553,7 @@ type IdpProviderSearchResponse struct { func (x *IdpProviderSearchResponse) Reset() { *x = IdpProviderSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[50] + mi := &file_admin_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4392,7 +4566,7 @@ func (x *IdpProviderSearchResponse) String() string { func (*IdpProviderSearchResponse) ProtoMessage() {} func (x *IdpProviderSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[50] + mi := &file_admin_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4405,7 +4579,7 @@ func (x *IdpProviderSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpProviderSearchResponse.ProtoReflect.Descriptor instead. func (*IdpProviderSearchResponse) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{50} + return file_admin_proto_rawDescGZIP(), []int{52} } func (x *IdpProviderSearchResponse) GetOffset() uint64 { @@ -4462,7 +4636,7 @@ type IdpProviderSearchRequest struct { func (x *IdpProviderSearchRequest) Reset() { *x = IdpProviderSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_admin_proto_msgTypes[51] + mi := &file_admin_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4475,7 +4649,7 @@ func (x *IdpProviderSearchRequest) String() string { func (*IdpProviderSearchRequest) ProtoMessage() {} func (x *IdpProviderSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_admin_proto_msgTypes[51] + mi := &file_admin_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4488,7 +4662,7 @@ func (x *IdpProviderSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpProviderSearchRequest.ProtoReflect.Descriptor instead. func (*IdpProviderSearchRequest) Descriptor() ([]byte, []int) { - return file_admin_proto_rawDescGZIP(), []int{51} + return file_admin_proto_rawDescGZIP(), []int{53} } func (x *IdpProviderSearchRequest) GetOffset() uint64 { @@ -4505,6 +4679,669 @@ func (x *IdpProviderSearchRequest) GetLimit() uint64 { return 0 } +type DefaultPasswordComplexityPolicy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MinLength uint64 `protobuf:"varint,1,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + HasUppercase bool `protobuf:"varint,2,opt,name=has_uppercase,json=hasUppercase,proto3" json:"has_uppercase,omitempty"` + HasLowercase bool `protobuf:"varint,3,opt,name=has_lowercase,json=hasLowercase,proto3" json:"has_lowercase,omitempty"` + HasNumber bool `protobuf:"varint,4,opt,name=has_number,json=hasNumber,proto3" json:"has_number,omitempty"` + HasSymbol bool `protobuf:"varint,5,opt,name=has_symbol,json=hasSymbol,proto3" json:"has_symbol,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,6,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,7,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` +} + +func (x *DefaultPasswordComplexityPolicy) Reset() { + *x = DefaultPasswordComplexityPolicy{} + if protoimpl.UnsafeEnabled { + mi := &file_admin_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DefaultPasswordComplexityPolicy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DefaultPasswordComplexityPolicy) ProtoMessage() {} + +func (x *DefaultPasswordComplexityPolicy) ProtoReflect() protoreflect.Message { + mi := &file_admin_proto_msgTypes[54] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DefaultPasswordComplexityPolicy.ProtoReflect.Descriptor instead. +func (*DefaultPasswordComplexityPolicy) Descriptor() ([]byte, []int) { + return file_admin_proto_rawDescGZIP(), []int{54} +} + +func (x *DefaultPasswordComplexityPolicy) GetMinLength() uint64 { + if x != nil { + return x.MinLength + } + return 0 +} + +func (x *DefaultPasswordComplexityPolicy) GetHasUppercase() bool { + if x != nil { + return x.HasUppercase + } + return false +} + +func (x *DefaultPasswordComplexityPolicy) GetHasLowercase() bool { + if x != nil { + return x.HasLowercase + } + return false +} + +func (x *DefaultPasswordComplexityPolicy) GetHasNumber() bool { + if x != nil { + return x.HasNumber + } + return false +} + +func (x *DefaultPasswordComplexityPolicy) GetHasSymbol() bool { + if x != nil { + return x.HasSymbol + } + return false +} + +func (x *DefaultPasswordComplexityPolicy) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *DefaultPasswordComplexityPolicy) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + +type DefaultPasswordComplexityPolicyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MinLength uint64 `protobuf:"varint,1,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + HasUppercase bool `protobuf:"varint,2,opt,name=has_uppercase,json=hasUppercase,proto3" json:"has_uppercase,omitempty"` + HasLowercase bool `protobuf:"varint,3,opt,name=has_lowercase,json=hasLowercase,proto3" json:"has_lowercase,omitempty"` + HasNumber bool `protobuf:"varint,4,opt,name=has_number,json=hasNumber,proto3" json:"has_number,omitempty"` + HasSymbol bool `protobuf:"varint,5,opt,name=has_symbol,json=hasSymbol,proto3" json:"has_symbol,omitempty"` +} + +func (x *DefaultPasswordComplexityPolicyRequest) Reset() { + *x = DefaultPasswordComplexityPolicyRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_admin_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DefaultPasswordComplexityPolicyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DefaultPasswordComplexityPolicyRequest) ProtoMessage() {} + +func (x *DefaultPasswordComplexityPolicyRequest) ProtoReflect() protoreflect.Message { + mi := &file_admin_proto_msgTypes[55] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DefaultPasswordComplexityPolicyRequest.ProtoReflect.Descriptor instead. +func (*DefaultPasswordComplexityPolicyRequest) Descriptor() ([]byte, []int) { + return file_admin_proto_rawDescGZIP(), []int{55} +} + +func (x *DefaultPasswordComplexityPolicyRequest) GetMinLength() uint64 { + if x != nil { + return x.MinLength + } + return 0 +} + +func (x *DefaultPasswordComplexityPolicyRequest) GetHasUppercase() bool { + if x != nil { + return x.HasUppercase + } + return false +} + +func (x *DefaultPasswordComplexityPolicyRequest) GetHasLowercase() bool { + if x != nil { + return x.HasLowercase + } + return false +} + +func (x *DefaultPasswordComplexityPolicyRequest) GetHasNumber() bool { + if x != nil { + return x.HasNumber + } + return false +} + +func (x *DefaultPasswordComplexityPolicyRequest) GetHasSymbol() bool { + if x != nil { + return x.HasSymbol + } + return false +} + +type DefaultPasswordComplexityPolicyView struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MinLength uint64 `protobuf:"varint,1,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + HasUppercase bool `protobuf:"varint,2,opt,name=has_uppercase,json=hasUppercase,proto3" json:"has_uppercase,omitempty"` + HasLowercase bool `protobuf:"varint,3,opt,name=has_lowercase,json=hasLowercase,proto3" json:"has_lowercase,omitempty"` + HasNumber bool `protobuf:"varint,4,opt,name=has_number,json=hasNumber,proto3" json:"has_number,omitempty"` + HasSymbol bool `protobuf:"varint,5,opt,name=has_symbol,json=hasSymbol,proto3" json:"has_symbol,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,6,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,7,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` +} + +func (x *DefaultPasswordComplexityPolicyView) Reset() { + *x = DefaultPasswordComplexityPolicyView{} + if protoimpl.UnsafeEnabled { + mi := &file_admin_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DefaultPasswordComplexityPolicyView) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DefaultPasswordComplexityPolicyView) ProtoMessage() {} + +func (x *DefaultPasswordComplexityPolicyView) ProtoReflect() protoreflect.Message { + mi := &file_admin_proto_msgTypes[56] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DefaultPasswordComplexityPolicyView.ProtoReflect.Descriptor instead. +func (*DefaultPasswordComplexityPolicyView) Descriptor() ([]byte, []int) { + return file_admin_proto_rawDescGZIP(), []int{56} +} + +func (x *DefaultPasswordComplexityPolicyView) GetMinLength() uint64 { + if x != nil { + return x.MinLength + } + return 0 +} + +func (x *DefaultPasswordComplexityPolicyView) GetHasUppercase() bool { + if x != nil { + return x.HasUppercase + } + return false +} + +func (x *DefaultPasswordComplexityPolicyView) GetHasLowercase() bool { + if x != nil { + return x.HasLowercase + } + return false +} + +func (x *DefaultPasswordComplexityPolicyView) GetHasNumber() bool { + if x != nil { + return x.HasNumber + } + return false +} + +func (x *DefaultPasswordComplexityPolicyView) GetHasSymbol() bool { + if x != nil { + return x.HasSymbol + } + return false +} + +func (x *DefaultPasswordComplexityPolicyView) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *DefaultPasswordComplexityPolicyView) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + +type DefaultPasswordAgePolicy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MaxAgeDays uint64 `protobuf:"varint,1,opt,name=max_age_days,json=maxAgeDays,proto3" json:"max_age_days,omitempty"` + ExpireWarnDays uint64 `protobuf:"varint,2,opt,name=expire_warn_days,json=expireWarnDays,proto3" json:"expire_warn_days,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,3,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,4,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` +} + +func (x *DefaultPasswordAgePolicy) Reset() { + *x = DefaultPasswordAgePolicy{} + if protoimpl.UnsafeEnabled { + mi := &file_admin_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DefaultPasswordAgePolicy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DefaultPasswordAgePolicy) ProtoMessage() {} + +func (x *DefaultPasswordAgePolicy) ProtoReflect() protoreflect.Message { + mi := &file_admin_proto_msgTypes[57] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DefaultPasswordAgePolicy.ProtoReflect.Descriptor instead. +func (*DefaultPasswordAgePolicy) Descriptor() ([]byte, []int) { + return file_admin_proto_rawDescGZIP(), []int{57} +} + +func (x *DefaultPasswordAgePolicy) GetMaxAgeDays() uint64 { + if x != nil { + return x.MaxAgeDays + } + return 0 +} + +func (x *DefaultPasswordAgePolicy) GetExpireWarnDays() uint64 { + if x != nil { + return x.ExpireWarnDays + } + return 0 +} + +func (x *DefaultPasswordAgePolicy) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *DefaultPasswordAgePolicy) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + +type DefaultPasswordAgePolicyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MaxAgeDays uint64 `protobuf:"varint,1,opt,name=max_age_days,json=maxAgeDays,proto3" json:"max_age_days,omitempty"` + ExpireWarnDays uint64 `protobuf:"varint,2,opt,name=expire_warn_days,json=expireWarnDays,proto3" json:"expire_warn_days,omitempty"` +} + +func (x *DefaultPasswordAgePolicyRequest) Reset() { + *x = DefaultPasswordAgePolicyRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_admin_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DefaultPasswordAgePolicyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DefaultPasswordAgePolicyRequest) ProtoMessage() {} + +func (x *DefaultPasswordAgePolicyRequest) ProtoReflect() protoreflect.Message { + mi := &file_admin_proto_msgTypes[58] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DefaultPasswordAgePolicyRequest.ProtoReflect.Descriptor instead. +func (*DefaultPasswordAgePolicyRequest) Descriptor() ([]byte, []int) { + return file_admin_proto_rawDescGZIP(), []int{58} +} + +func (x *DefaultPasswordAgePolicyRequest) GetMaxAgeDays() uint64 { + if x != nil { + return x.MaxAgeDays + } + return 0 +} + +func (x *DefaultPasswordAgePolicyRequest) GetExpireWarnDays() uint64 { + if x != nil { + return x.ExpireWarnDays + } + return 0 +} + +type DefaultPasswordAgePolicyView struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MaxAgeDays uint64 `protobuf:"varint,1,opt,name=max_age_days,json=maxAgeDays,proto3" json:"max_age_days,omitempty"` + ExpireWarnDays uint64 `protobuf:"varint,2,opt,name=expire_warn_days,json=expireWarnDays,proto3" json:"expire_warn_days,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,3,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,4,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` +} + +func (x *DefaultPasswordAgePolicyView) Reset() { + *x = DefaultPasswordAgePolicyView{} + if protoimpl.UnsafeEnabled { + mi := &file_admin_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DefaultPasswordAgePolicyView) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DefaultPasswordAgePolicyView) ProtoMessage() {} + +func (x *DefaultPasswordAgePolicyView) ProtoReflect() protoreflect.Message { + mi := &file_admin_proto_msgTypes[59] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DefaultPasswordAgePolicyView.ProtoReflect.Descriptor instead. +func (*DefaultPasswordAgePolicyView) Descriptor() ([]byte, []int) { + return file_admin_proto_rawDescGZIP(), []int{59} +} + +func (x *DefaultPasswordAgePolicyView) GetMaxAgeDays() uint64 { + if x != nil { + return x.MaxAgeDays + } + return 0 +} + +func (x *DefaultPasswordAgePolicyView) GetExpireWarnDays() uint64 { + if x != nil { + return x.ExpireWarnDays + } + return 0 +} + +func (x *DefaultPasswordAgePolicyView) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *DefaultPasswordAgePolicyView) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + +type DefaultPasswordLockoutPolicy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MaxAttempts uint64 `protobuf:"varint,1,opt,name=max_attempts,json=maxAttempts,proto3" json:"max_attempts,omitempty"` + ShowLockoutFailure bool `protobuf:"varint,2,opt,name=show_lockout_failure,json=showLockoutFailure,proto3" json:"show_lockout_failure,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,3,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,4,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` +} + +func (x *DefaultPasswordLockoutPolicy) Reset() { + *x = DefaultPasswordLockoutPolicy{} + if protoimpl.UnsafeEnabled { + mi := &file_admin_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DefaultPasswordLockoutPolicy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DefaultPasswordLockoutPolicy) ProtoMessage() {} + +func (x *DefaultPasswordLockoutPolicy) ProtoReflect() protoreflect.Message { + mi := &file_admin_proto_msgTypes[60] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DefaultPasswordLockoutPolicy.ProtoReflect.Descriptor instead. +func (*DefaultPasswordLockoutPolicy) Descriptor() ([]byte, []int) { + return file_admin_proto_rawDescGZIP(), []int{60} +} + +func (x *DefaultPasswordLockoutPolicy) GetMaxAttempts() uint64 { + if x != nil { + return x.MaxAttempts + } + return 0 +} + +func (x *DefaultPasswordLockoutPolicy) GetShowLockoutFailure() bool { + if x != nil { + return x.ShowLockoutFailure + } + return false +} + +func (x *DefaultPasswordLockoutPolicy) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *DefaultPasswordLockoutPolicy) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + +type DefaultPasswordLockoutPolicyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MaxAttempts uint64 `protobuf:"varint,1,opt,name=max_attempts,json=maxAttempts,proto3" json:"max_attempts,omitempty"` + ShowLockoutFailure bool `protobuf:"varint,2,opt,name=show_lockout_failure,json=showLockoutFailure,proto3" json:"show_lockout_failure,omitempty"` +} + +func (x *DefaultPasswordLockoutPolicyRequest) Reset() { + *x = DefaultPasswordLockoutPolicyRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_admin_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DefaultPasswordLockoutPolicyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DefaultPasswordLockoutPolicyRequest) ProtoMessage() {} + +func (x *DefaultPasswordLockoutPolicyRequest) ProtoReflect() protoreflect.Message { + mi := &file_admin_proto_msgTypes[61] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DefaultPasswordLockoutPolicyRequest.ProtoReflect.Descriptor instead. +func (*DefaultPasswordLockoutPolicyRequest) Descriptor() ([]byte, []int) { + return file_admin_proto_rawDescGZIP(), []int{61} +} + +func (x *DefaultPasswordLockoutPolicyRequest) GetMaxAttempts() uint64 { + if x != nil { + return x.MaxAttempts + } + return 0 +} + +func (x *DefaultPasswordLockoutPolicyRequest) GetShowLockoutFailure() bool { + if x != nil { + return x.ShowLockoutFailure + } + return false +} + +type DefaultPasswordLockoutPolicyView struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MaxAttempts uint64 `protobuf:"varint,1,opt,name=max_attempts,json=maxAttempts,proto3" json:"max_attempts,omitempty"` + ShowLockoutFailure bool `protobuf:"varint,2,opt,name=show_lockout_failure,json=showLockoutFailure,proto3" json:"show_lockout_failure,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,3,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,4,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` +} + +func (x *DefaultPasswordLockoutPolicyView) Reset() { + *x = DefaultPasswordLockoutPolicyView{} + if protoimpl.UnsafeEnabled { + mi := &file_admin_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DefaultPasswordLockoutPolicyView) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DefaultPasswordLockoutPolicyView) ProtoMessage() {} + +func (x *DefaultPasswordLockoutPolicyView) ProtoReflect() protoreflect.Message { + mi := &file_admin_proto_msgTypes[62] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DefaultPasswordLockoutPolicyView.ProtoReflect.Descriptor instead. +func (*DefaultPasswordLockoutPolicyView) Descriptor() ([]byte, []int) { + return file_admin_proto_rawDescGZIP(), []int{62} +} + +func (x *DefaultPasswordLockoutPolicyView) GetMaxAttempts() uint64 { + if x != nil { + return x.MaxAttempts + } + return 0 +} + +func (x *DefaultPasswordLockoutPolicyView) GetShowLockoutFailure() bool { + if x != nil { + return x.ShowLockoutFailure + } + return false +} + +func (x *DefaultPasswordLockoutPolicyView) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *DefaultPasswordLockoutPolicyView) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + var File_admin_proto protoreflect.FileDescriptor var file_admin_proto_rawDesc = []byte{ @@ -4764,79 +5601,431 @@ var file_admin_proto_rawDesc = []byte{ 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0xb5, 0x02, 0x0a, 0x0c, 0x4f, 0x72, + 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x93, 0x02, 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, + 0x64, 0x12, 0x38, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, + 0x6d, 0x75, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x4d, + 0x75, 0x73, 0x74, 0x42, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, + 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, + 0x97, 0x02, 0x0a, 0x10, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x56, 0x69, 0x65, 0x77, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x19, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x6d, 0x75, 0x73, 0x74, 0x5f, 0x62, + 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, + 0x75, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x4d, 0x75, 0x73, 0x74, 0x42, 0x65, 0x44, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, + 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, 0x91, 0x01, 0x0a, 0x13, 0x4f, 0x72, + 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1e, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x6d, 0x75, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x4d, 0x75, 0x73, 0x74, 0x42, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, - 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6e, 0x4d, 0x75, 0x73, 0x74, 0x42, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x30, 0x0a, + 0x0e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x44, 0x12, + 0x1e, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x22, + 0x26, 0x0a, 0x0e, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, + 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0xd4, 0x01, 0x0a, 0x09, 0x49, 0x61, 0x6d, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, + 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, + 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, - 0x65, 0x22, 0x91, 0x01, 0x0a, 0x13, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x06, 0x6f, 0x72, 0x67, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, - 0x10, 0x01, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x19, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x6d, 0x75, 0x73, 0x74, 0x5f, 0x62, - 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, - 0x75, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x4d, 0x75, 0x73, 0x74, 0x42, 0x65, 0x44, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x30, 0x0a, 0x0e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x22, 0x26, 0x0a, 0x0e, 0x49, 0x61, 0x6d, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, - 0xd4, 0x01, 0x0a, 0x09, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0b, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, + 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x4d, + 0x0a, 0x13, 0x41, 0x64, 0x64, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, + 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x50, 0x0a, + 0x16, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, + 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, + 0x3a, 0x0a, 0x16, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x9e, 0x02, 0x0a, 0x17, + 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x56, 0x69, + 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, + 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, + 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x4d, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x49, 0x61, 0x6d, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x50, 0x0a, 0x16, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, - 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x3a, 0x0a, 0x16, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x22, 0x9e, 0x02, 0x0a, 0x17, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, + 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xea, 0x02, 0x0a, + 0x0d, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x12, 0x17, + 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x3b, 0x0a, + 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, + 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, + 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, + 0x72, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, + 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, + 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x91, 0x01, 0x0a, 0x16, 0x49, 0x61, + 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x49, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xb8, 0x01, + 0x0a, 0x14, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x49, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, + 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x3f, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x46, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x23, 0x0a, 0x08, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, + 0x24, 0x0a, 0x09, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x76, 0x69, 0x65, + 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, + 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, + 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x5b, + 0x0a, 0x0c, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x4b, + 0x0a, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x66, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xb9, 0x01, 0x0a, 0x0b, + 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x65, 0x77, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, 0x65, 0x77, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x73, + 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x53, 0x0a, 0x06, 0x56, 0x69, 0x65, 0x77, 0x49, + 0x44, 0x12, 0x23, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x09, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x08, 0x76, 0x69, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x0a, 0x05, + 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x05, 0x76, 0x69, 0x65, 0x77, 0x73, 0x22, 0xb1, 0x01, 0x0a, + 0x04, 0x56, 0x69, 0x65, 0x77, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, + 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, + 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x22, 0x20, 0x0a, 0x05, 0x49, 0x64, 0x70, 0x49, 0x44, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, + 0x69, 0x64, 0x22, 0xf4, 0x02, 0x0a, 0x03, 0x49, 0x64, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x6f, 0x5f, + 0x73, 0x72, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x6f, 0x53, + 0x72, 0x63, 0x12, 0x4b, 0x0a, 0x0b, 0x6f, 0x69, 0x64, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x69, 0x64, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x69, + 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x53, 0x0a, 0x09, 0x49, 0x64, 0x70, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x6f, 0x5f, 0x73, 0x72, 0x63, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x6f, 0x53, 0x72, 0x63, 0x22, 0x81, + 0x01, 0x0a, 0x0d, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, + 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, + 0x6f, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, + 0x65, 0x73, 0x22, 0xa4, 0x03, 0x0a, 0x13, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, + 0x01, 0x18, 0xc8, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, + 0x67, 0x6f, 0x5f, 0x73, 0x72, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x6f, + 0x67, 0x6f, 0x53, 0x72, 0x63, 0x12, 0x27, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, + 0x01, 0x18, 0xc8, 0x01, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x2f, + 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, + 0x01, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, + 0x22, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x06, 0x69, 0x73, 0x73, + 0x75, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x64, 0x0a, 0x18, 0x69, + 0x64, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, + 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, + 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x15, 0x69, 0x64, 0x70, 0x44, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x12, 0x56, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, + 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, + 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x0a, 0x13, 0x4f, 0x69, + 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x12, 0x1e, 0x0a, 0x06, 0x69, 0x64, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x69, 0x64, 0x70, 0x49, + 0x64, 0x12, 0x27, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, + 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, + 0x22, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x06, 0x69, 0x73, 0x73, + 0x75, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x64, 0x0a, 0x18, 0x69, + 0x64, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, + 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, + 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x15, 0x69, 0x64, 0x70, 0x44, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x12, 0x56, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, + 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, + 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x92, 0x02, 0x0a, 0x11, 0x49, 0x64, + 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x61, 0x6d, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x12, 0x3a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, + 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, + 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, + 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, + 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x81, + 0x03, 0x0a, 0x07, 0x49, 0x64, 0x70, 0x56, 0x69, 0x65, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x6f, 0x5f, + 0x73, 0x72, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x6f, 0x53, + 0x72, 0x63, 0x12, 0x4f, 0x0a, 0x0b, 0x6f, 0x69, 0x64, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x69, 0x64, 0x63, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x42, + 0x11, 0x0a, 0x0f, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x69, + 0x65, 0x77, 0x22, 0x9e, 0x02, 0x0a, 0x11, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x56, 0x69, 0x65, 0x77, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x64, 0x0a, 0x18, 0x69, 0x64, 0x70, 0x5f, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x52, 0x15, 0x69, 0x64, 0x70, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x56, 0x0a, 0x10, 0x75, + 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, + 0x69, 0x6e, 0x67, 0x22, 0x85, 0x01, 0x0a, 0x10, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x43, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xac, 0x01, 0x0a, 0x0e, + 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x43, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x3f, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x9f, 0x02, 0x0a, 0x12, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x15, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x70, 0x12, 0x3f, + 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, + 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, 0xa8, 0x01, 0x0a, + 0x19, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x70, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x70, 0x22, 0x3c, 0x0a, 0x0d, 0x49, 0x64, 0x70, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x12, 0x2b, 0x0a, 0x0d, 0x69, 0x64, 0x70, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x69, 0x64, 0x70, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x64, 0x22, 0xa3, 0x02, 0x0a, 0x16, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, + 0x12, 0x36, 0x0a, 0x17, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x15, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, + 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x70, 0x12, 0x3f, 0x0a, + 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, + 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x0f, + 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x12, + 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x64, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, + 0xa2, 0x02, 0x0a, 0x19, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x42, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, @@ -4844,321 +6033,140 @@ var file_admin_proto_rawDesc = []byte{ 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x22, 0xea, 0x02, 0x0a, 0x0d, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, - 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, - 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, - 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x91, 0x01, 0x0a, 0x16, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x49, 0x0a, 0x07, 0x71, 0x75, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x14, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x49, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, - 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3f, 0x0a, 0x06, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x49, 0x44, 0x12, 0x23, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x64, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x09, 0x76, 0x69, 0x65, 0x77, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x08, 0x76, 0x69, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, - 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x5b, 0x0a, 0x0c, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x4b, 0x0a, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, - 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x22, 0xb9, 0x01, 0x0a, 0x0b, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, - 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, - 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x66, 0x61, - 0x69, 0x6c, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x53, 0x0a, 0x06, 0x56, 0x69, 0x65, 0x77, 0x49, 0x44, 0x12, 0x23, 0x0a, 0x08, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, - 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x24, - 0x0a, 0x09, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x76, 0x69, 0x65, 0x77, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x0a, 0x05, 0x56, 0x69, 0x65, 0x77, 0x73, 0x12, 0x35, 0x0a, - 0x05, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x05, 0x76, - 0x69, 0x65, 0x77, 0x73, 0x22, 0xb1, 0x01, 0x0a, 0x04, 0x56, 0x69, 0x65, 0x77, 0x12, 0x1a, 0x0a, - 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x65, - 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, - 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x20, 0x0a, 0x05, 0x49, 0x64, 0x70, 0x49, - 0x44, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, - 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0xf4, 0x02, 0x0a, 0x03, 0x49, - 0x64, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x39, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, - 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, - 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x6f, 0x5f, 0x73, 0x72, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x6f, 0x53, 0x72, 0x63, 0x12, 0x4b, 0x0a, 0x0b, 0x6f, 0x69, - 0x64, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x69, 0x64, 0x63, - 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x69, 0x64, - 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x22, 0x53, 0x0a, 0x09, 0x49, 0x64, 0x70, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x17, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, - 0x6f, 0x67, 0x6f, 0x5f, 0x73, 0x72, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, - 0x6f, 0x67, 0x6f, 0x53, 0x72, 0x63, 0x22, 0x81, 0x01, 0x0a, 0x0d, 0x4f, 0x69, 0x64, 0x63, 0x49, - 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, - 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, - 0x73, 0x75, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, - 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x22, 0xa4, 0x03, 0x0a, 0x13, 0x4f, - 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x6f, 0x5f, 0x73, 0x72, 0x63, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x6f, 0x53, 0x72, 0x63, 0x12, 0x27, 0x0a, - 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x08, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, - 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x22, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, - 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, - 0x18, 0xc8, 0x01, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, - 0x70, 0x65, 0x73, 0x12, 0x64, 0x0a, 0x18, 0x69, 0x64, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x52, 0x15, 0x69, 0x64, 0x70, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, - 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x56, 0x0a, 0x10, 0x75, 0x73, 0x65, - 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x22, 0xfd, 0x02, 0x0a, 0x13, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x06, 0x69, 0x64, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, - 0x10, 0x01, 0x52, 0x05, 0x69, 0x64, 0x70, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x09, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, - 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x22, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, - 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, - 0x18, 0xc8, 0x01, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, - 0x70, 0x65, 0x73, 0x12, 0x64, 0x0a, 0x18, 0x69, 0x64, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x52, 0x15, 0x69, 0x64, 0x70, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, - 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x56, 0x0a, 0x10, 0x75, 0x73, 0x65, - 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x22, 0x92, 0x02, 0x0a, 0x11, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, - 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x81, 0x03, 0x0a, 0x07, 0x49, 0x64, 0x70, 0x56, 0x69, - 0x65, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x39, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, - 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, - 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x6f, 0x5f, 0x73, 0x72, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x6f, 0x53, 0x72, 0x63, 0x12, 0x4f, 0x0a, 0x0b, 0x6f, 0x69, - 0x64, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x69, 0x64, 0x63, - 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, - 0x0a, 0x6f, 0x69, 0x64, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x73, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x69, 0x64, 0x70, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0x9e, 0x02, 0x0a, 0x11, 0x4f, - 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x69, 0x65, 0x77, - 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, - 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x64, 0x0a, - 0x18, 0x69, 0x64, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, - 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x15, 0x69, 0x64, - 0x70, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, - 0x69, 0x6e, 0x67, 0x12, 0x56, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, - 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, - 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, - 0x6e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x85, 0x01, 0x0a, 0x10, - 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x74, 0x61, 0x6d, 0x70, 0x22, 0x48, 0x0a, 0x18, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x43, - 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x22, 0xac, 0x01, 0x0a, 0x0e, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x43, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, - 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3f, 0x0a, 0x06, 0x6d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0xa1, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, - 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x70, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x70, 0x22, 0x3c, 0x0a, 0x0d, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x12, 0x2b, 0x0a, 0x0d, 0x69, 0x64, 0x70, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x69, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x64, 0x22, 0xa5, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, - 0x36, 0x0a, 0x17, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x15, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2c, - 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x5f, 0x69, 0x64, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x70, 0x22, 0x81, 0x01, 0x0a, - 0x0f, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, - 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, - 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x22, 0xa2, 0x02, 0x0a, 0x19, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x42, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, - 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x48, 0x0a, 0x18, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x2a, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0xc6, + 0x02, 0x0a, 0x1f, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x75, 0x70, 0x70, 0x65, 0x72, 0x63, 0x61, + 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x55, 0x70, 0x70, + 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x6c, 0x6f, + 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, + 0x61, 0x73, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x68, + 0x61, 0x73, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x68, 0x61, 0x73, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, + 0x73, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x68, 0x61, 0x73, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, 0xcf, 0x01, 0x0a, 0x26, 0x44, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x75, 0x70, 0x70, 0x65, 0x72, 0x63, 0x61, + 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x55, 0x70, 0x70, + 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x6c, 0x6f, + 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, + 0x61, 0x73, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x68, + 0x61, 0x73, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x68, 0x61, 0x73, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, + 0x73, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x68, 0x61, 0x73, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x22, 0xca, 0x02, 0x0a, 0x23, 0x44, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, + 0x77, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x75, 0x70, 0x70, 0x65, 0x72, 0x63, 0x61, 0x73, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x55, 0x70, 0x70, 0x65, + 0x72, 0x63, 0x61, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x6c, 0x6f, 0x77, + 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, + 0x73, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, + 0x73, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x68, 0x61, 0x73, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, + 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, + 0x61, 0x73, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, 0xe4, 0x01, 0x0a, 0x18, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x12, 0x20, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x67, 0x65, 0x5f, 0x64, + 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x41, 0x67, + 0x65, 0x44, 0x61, 0x79, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, + 0x77, 0x61, 0x72, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x57, 0x61, 0x72, 0x6e, 0x44, 0x61, 0x79, 0x73, 0x12, + 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, + 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, 0x6d, 0x0a, + 0x1f, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x20, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x41, 0x67, 0x65, 0x44, 0x61, + 0x79, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x77, 0x61, 0x72, + 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x78, + 0x70, 0x69, 0x72, 0x65, 0x57, 0x61, 0x72, 0x6e, 0x44, 0x61, 0x79, 0x73, 0x22, 0xe8, 0x01, 0x0a, + 0x1c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x20, 0x0a, + 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x41, 0x67, 0x65, 0x44, 0x61, 0x79, 0x73, 0x12, + 0x28, 0x0a, 0x10, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x77, 0x61, 0x72, 0x6e, 0x5f, 0x64, + 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, + 0x65, 0x57, 0x61, 0x72, 0x6e, 0x44, 0x61, 0x79, 0x73, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, 0xf1, 0x01, 0x0a, 0x1c, 0x44, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, + 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, + 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, + 0x6d, 0x61, 0x78, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x73, + 0x68, 0x6f, 0x77, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, + 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x68, 0x6f, 0x77, 0x4c, + 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x3f, 0x0a, + 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, + 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, 0x7a, 0x0a, 0x23, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, + 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x41, 0x74, 0x74, + 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6c, 0x6f, + 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, + 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x22, 0xf5, 0x01, 0x0a, 0x20, 0x44, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, + 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x21, 0x0a, 0x0c, + 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, + 0x30, 0x0a, 0x14, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, + 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, + 0x68, 0x6f, 0x77, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, + 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, + 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x2a, 0x50, 0x0a, 0x08, 0x4f, 0x72, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x4f, 0x52, 0x47, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4f, 0x52, 0x47, 0x53, 0x54, 0x41, 0x54, @@ -5258,7 +6266,7 @@ var file_admin_proto_rawDesc = []byte{ 0x0a, 0x13, 0x49, 0x44, 0x50, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x44, 0x50, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x49, 0x44, 0x43, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x44, 0x50, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x41, 0x4d, 0x4c, 0x10, 0x02, 0x32, 0x83, 0x25, 0x0a, 0x0c, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x41, 0x4d, 0x4c, 0x10, 0x02, 0x32, 0x9f, 0x31, 0x0a, 0x0c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4b, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, @@ -5308,266 +6316,364 @@ var file_admin_proto_rawDesc = []byte{ 0x67, 0x53, 0x65, 0x74, 0x55, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x22, 0x0c, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x69, 0x61, 0x6d, - 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x9c, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4f, 0x72, - 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x29, 0x2e, 0x63, 0x61, 0x6f, + 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x99, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, + 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2f, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6f, 0x72, 0x67, 0x69, 0x61, 0x6d, 0x82, 0xb5, 0x18, + 0x11, 0x0a, 0x0f, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x12, 0xb4, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, + 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, + 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x22, 0x1a, 0x1d, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6f, 0x72, 0x67, 0x69, 0x61, 0x6d, + 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xa6, 0x01, 0x0a, 0x0f, 0x47, 0x65, + 0x74, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x29, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x44, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, + 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x7b, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6f, 0x72, 0x67, 0x69, 0x61, 0x6d, 0x82, 0xb5, 0x18, + 0x11, 0x0a, 0x0f, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x12, 0xae, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, + 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x6f, 0x72, 0x67, + 0x73, 0x2f, 0x7b, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x2f, 0x6f, 0x72, 0x67, 0x69, 0x61, 0x6d, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, + 0x12, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x12, 0xae, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, + 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x49, 0x44, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x35, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x7b, 0x6f, - 0x72, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x61, 0x6d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x82, 0xb5, 0x18, 0x11, 0x0a, 0x0f, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xa8, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2e, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, - 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x7b, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x61, - 0x6d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, - 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x12, 0xa8, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x49, 0x61, - 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x1a, 0x18, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, - 0x7b, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x61, 0x6d, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x2e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x90, 0x01, 0x0a, 0x12, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x12, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, - 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x44, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x2a, 0x18, 0x2f, - 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x7b, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x61, - 0x6d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x82, 0xb5, 0x18, 0x13, 0x0a, 0x11, 0x69, 0x61, 0x6d, - 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x83, - 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, - 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x29, 0x2e, 0x63, + 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x1a, 0x1e, 0x2f, 0x6f, 0x72, + 0x67, 0x73, 0x2f, 0x7b, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6f, 0x72, 0x67, 0x69, 0x61, 0x6d, 0x3a, 0x01, 0x2a, 0x82, 0xb5, + 0x18, 0x12, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, + 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x29, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3d, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x2a, 0x1e, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x7b, 0x6f, + 0x72, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, + 0x6f, 0x72, 0x67, 0x69, 0x61, 0x6d, 0x82, 0xb5, 0x18, 0x13, 0x0a, 0x11, 0x69, 0x61, 0x6d, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x83, 0x01, + 0x0a, 0x11, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, + 0x6c, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x29, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, + 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x82, 0xb5, + 0x18, 0x11, 0x0a, 0x0f, 0x69, 0x61, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x12, 0x8f, 0x01, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x49, 0x61, 0x6d, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x41, 0x64, 0x64, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x0d, 0x22, 0x08, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x82, + 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x9f, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x61, 0x6d, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, - 0x0e, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x82, - 0xb5, 0x18, 0x11, 0x0a, 0x0f, 0x69, 0x61, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, - 0x72, 0x65, 0x61, 0x64, 0x12, 0x8f, 0x01, 0x0a, 0x0c, 0x41, 0x64, 0x64, 0x49, 0x61, 0x6d, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x29, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x0d, 0x22, 0x08, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, - 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x9f, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x61, 0x6d, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x1a, 0x12, 0x2f, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x3a, - 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, - 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x2a, - 0x12, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x13, 0x0a, 0x11, 0x69, 0x61, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xab, 0x01, 0x0a, 0x10, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, - 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x61, 0x6d, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, - 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, - 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x11, 0x0a, 0x0f, 0x69, 0x61, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x62, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x56, - 0x69, 0x65, 0x77, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x1c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x08, 0x12, 0x06, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x82, 0xb5, - 0x18, 0x0a, 0x0a, 0x08, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x7c, 0x0a, 0x09, - 0x43, 0x6c, 0x65, 0x61, 0x72, 0x56, 0x69, 0x65, 0x77, 0x12, 0x21, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1d, 0x2f, 0x76, - 0x69, 0x65, 0x77, 0x73, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x7d, 0x2f, - 0x7b, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x82, 0xb5, 0x18, 0x0b, 0x0a, - 0x09, 0x69, 0x61, 0x6d, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x77, 0x0a, 0x0f, 0x47, 0x65, - 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x23, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x82, 0xb5, 0x18, 0x0a, 0x0a, 0x08, 0x69, 0x61, 0x6d, 0x2e, 0x72, - 0x65, 0x61, 0x64, 0x12, 0xa4, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x61, - 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4d, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x38, 0x2a, 0x36, 0x2f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x7d, 0x2f, 0x7b, 0x76, - 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x7d, 0x82, 0xb5, 0x18, 0x0b, 0x0a, - 0x09, 0x69, 0x61, 0x6d, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x75, 0x0a, 0x07, 0x49, 0x64, - 0x70, 0x42, 0x79, 0x49, 0x44, 0x12, 0x20, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x49, 0x64, 0x70, 0x49, 0x44, 0x1a, 0x22, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x56, 0x69, 0x65, 0x77, 0x22, 0x24, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, - 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x72, 0x65, 0x61, - 0x64, 0x12, 0x89, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x69, 0x64, 0x63, - 0x49, 0x64, 0x70, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x1a, 0x1e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x64, 0x70, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x69, 0x64, - 0x70, 0x73, 0x2f, 0x6f, 0x69, 0x64, 0x63, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, - 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x81, 0x01, - 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x24, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, - 0x70, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x1e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x1a, - 0x0a, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x82, 0xb5, - 0x18, 0x0f, 0x0a, 0x0d, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x12, 0x8d, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x49, 0x44, 0x1a, 0x1e, 0x2e, 0x63, 0x61, + 0x65, 0x72, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x1a, 0x12, 0x2f, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, + 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x22, 0x34, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1b, 0x1a, 0x16, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, - 0x5f, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, - 0x18, 0x0f, 0x0a, 0x0d, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x12, 0x8d, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x49, 0x44, 0x1a, 0x1e, 0x2e, 0x63, 0x61, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x61, + 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x2a, 0x12, + 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x13, 0x0a, 0x11, 0x69, 0x61, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xab, 0x01, 0x0a, 0x10, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x49, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x31, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x61, 0x6d, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x61, + 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, + 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x11, 0x0a, 0x0f, 0x69, 0x61, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x62, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x56, 0x69, + 0x65, 0x77, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x22, 0x34, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1b, 0x1a, 0x16, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, - 0x5f, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, - 0x18, 0x0f, 0x0a, 0x0d, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x12, 0x72, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x64, 0x70, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x64, 0x70, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x25, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x2a, 0x0a, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x70, 0x2e, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xa8, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2e, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, - 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x28, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, - 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x1a, - 0x19, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x6f, 0x69, 0x64, 0x63, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, - 0x0f, 0x0a, 0x0d, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x12, 0x93, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x49, 0x64, 0x70, 0x73, 0x12, - 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, - 0x70, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x90, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x73, 0x22, 0x1c, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x08, 0x12, 0x06, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x82, 0xb5, 0x18, + 0x0a, 0x0a, 0x08, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x7c, 0x0a, 0x09, 0x43, + 0x6c, 0x65, 0x61, 0x72, 0x56, 0x69, 0x65, 0x77, 0x12, 0x21, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x22, 0x2c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, - 0x6f, 0x67, 0x69, 0x6e, 0x82, 0xb5, 0x18, 0x11, 0x0a, 0x0f, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x18, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1d, 0x2f, 0x76, 0x69, + 0x65, 0x77, 0x73, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x7d, 0x2f, 0x7b, + 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, + 0x69, 0x61, 0x6d, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x77, 0x0a, 0x0f, 0x47, 0x65, 0x74, + 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x23, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x82, 0xb5, 0x18, 0x0a, 0x0a, 0x08, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x12, 0xa4, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x38, 0x2a, 0x36, 0x2f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x7d, 0x2f, 0x7b, 0x76, 0x69, + 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x7d, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, + 0x69, 0x61, 0x6d, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x75, 0x0a, 0x07, 0x49, 0x64, 0x70, + 0x42, 0x79, 0x49, 0x44, 0x12, 0x20, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x64, 0x70, 0x49, 0x44, 0x1a, 0x22, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x56, 0x69, 0x65, 0x77, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, + 0x18, 0x0e, 0x0a, 0x0c, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x12, 0x89, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x69, 0x64, 0x63, 0x49, + 0x64, 0x70, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, + 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x1a, 0x1e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, + 0x64, 0x70, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, 0x69, 0x64, 0x70, + 0x73, 0x2f, 0x6f, 0x69, 0x64, 0x63, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x69, + 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x81, 0x01, 0x0a, + 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x24, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x1e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x1a, 0x0a, + 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, + 0x0f, 0x0a, 0x0d, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x12, 0x8d, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x49, + 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x49, 0x44, 0x1a, 0x1e, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1b, 0x1a, 0x16, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, + 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, + 0x0f, 0x0a, 0x0d, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x12, 0x8d, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x49, + 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x49, 0x44, 0x1a, 0x1e, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1b, 0x1a, 0x16, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, + 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, + 0x0f, 0x0a, 0x0d, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x12, 0x72, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x20, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x64, 0x70, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x25, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x2a, 0x0a, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x12, 0xa8, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, + 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2e, 0x2e, 0x63, + 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x28, 0x2e, 0x63, + 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x1a, 0x19, + 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6f, + 0x69, 0x64, 0x63, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0f, + 0x0a, 0x0d, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, + 0x93, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x49, 0x64, 0x70, 0x73, 0x12, 0x2b, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x12, 0x22, 0x0d, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x70, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x90, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, + 0x67, 0x69, 0x6e, 0x82, 0xb5, 0x18, 0x11, 0x0a, 0x0f, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xb1, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x1a, 0x0f, 0x2f, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x3a, 0x01, 0x2a, - 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xd4, 0x01, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x33, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, - 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, - 0x24, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, - 0x2f, 0x69, 0x64, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x5f, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x11, 0x0a, 0x0f, 0x69, 0x61, - 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xb7, 0x01, - 0x0a, 0x22, 0x41, 0x64, 0x64, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x54, 0x6f, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x14, 0x1a, 0x0f, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, + 0x67, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xd4, 0x01, 0x0a, + 0x21, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x73, 0x12, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, + 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, + 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2f, 0x69, 0x64, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, + 0x18, 0x11, 0x0a, 0x0f, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x12, 0xb7, 0x01, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x49, 0x64, 0x70, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x6f, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x28, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x49, 0x44, 0x1a, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x28, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, - 0x22, 0x1c, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x69, - 0x6e, 0x2f, 0x69, 0x64, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x3a, 0x01, - 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xb7, 0x01, 0x0a, 0x27, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x46, 0x72, 0x6f, - 0x6d, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x22, 0x3d, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, + 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2f, 0x69, 0x64, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x69, 0x61, 0x6d, + 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xb7, 0x01, + 0x0a, 0x27, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, + 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4a, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2e, 0x2a, 0x2c, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, + 0x6f, 0x67, 0x69, 0x6e, 0x2f, 0x69, 0x64, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, + 0x7d, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xb8, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x3e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, + 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x82, 0xb5, 0x18, + 0x11, 0x0a, 0x0f, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x12, 0xe6, 0x01, 0x0a, 0x25, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x41, 0x2e, 0x63, + 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, + 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x3a, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x3e, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x22, 0x1a, 0x1d, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, + 0x74, 0x79, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x2e, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xa3, 0x01, 0x0a, 0x1b, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x37, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x2a, 0x2c, 0x2f, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2f, 0x69, - 0x64, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x70, - 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x12, 0x0a, - 0x10, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x42, 0xba, 0x01, 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x61, 0x6f, 0x73, 0x2f, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2f, 0x70, 0x6b, - 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x92, 0x41, 0x8e, 0x01, - 0x12, 0x41, 0x0a, 0x0d, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x22, 0x2b, 0x12, 0x29, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x61, 0x6f, 0x73, 0x2f, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x32, 0x03, - 0x30, 0x2e, 0x31, 0x2a, 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, + 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x22, 0x33, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, + 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x61, 0x67, 0x65, 0x82, 0xb5, 0x18, 0x11, + 0x0a, 0x0f, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x61, + 0x64, 0x12, 0xca, 0x01, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3a, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x1a, 0x16, 0x2f, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x2f, 0x61, 0x67, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x69, 0x61, + 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xaf, + 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x3b, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, + 0x1a, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x2f, 0x6c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x82, 0xb5, 0x18, 0x11, 0x0a, + 0x0f, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x12, 0xda, 0x01, 0x0a, 0x22, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, + 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x1a, 0x1a, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x6c, 0x6f, 0x63, + 0x6b, 0x6f, 0x75, 0x74, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x69, 0x61, 0x6d, + 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0xba, 0x01, + 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x61, 0x6f, + 0x73, 0x2f, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x92, 0x41, 0x8e, 0x01, 0x12, 0x41, 0x0a, 0x0d, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x2b, 0x12, + 0x29, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x61, 0x6f, 0x73, 0x2f, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x32, 0x03, 0x30, 0x2e, 0x31, 0x2a, + 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -5583,210 +6689,255 @@ func file_admin_proto_rawDescGZIP() []byte { } var file_admin_proto_enumTypes = make([]protoimpl.EnumInfo, 12) -var file_admin_proto_msgTypes = make([]protoimpl.MessageInfo, 52) +var file_admin_proto_msgTypes = make([]protoimpl.MessageInfo, 63) var file_admin_proto_goTypes = []interface{}{ - (OrgState)(0), // 0: caos.zitadel.admin.api.v1.OrgState - (OrgSearchKey)(0), // 1: caos.zitadel.admin.api.v1.OrgSearchKey - (OrgSearchMethod)(0), // 2: caos.zitadel.admin.api.v1.OrgSearchMethod - (UserState)(0), // 3: caos.zitadel.admin.api.v1.UserState - (Gender)(0), // 4: caos.zitadel.admin.api.v1.Gender - (MachineKeyType)(0), // 5: caos.zitadel.admin.api.v1.MachineKeyType - (IamMemberSearchKey)(0), // 6: caos.zitadel.admin.api.v1.IamMemberSearchKey - (SearchMethod)(0), // 7: caos.zitadel.admin.api.v1.SearchMethod - (IdpState)(0), // 8: caos.zitadel.admin.api.v1.IdpState - (OIDCMappingField)(0), // 9: caos.zitadel.admin.api.v1.OIDCMappingField - (IdpSearchKey)(0), // 10: caos.zitadel.admin.api.v1.IdpSearchKey - (IdpType)(0), // 11: caos.zitadel.admin.api.v1.IdpType - (*OrgID)(nil), // 12: caos.zitadel.admin.api.v1.OrgID - (*UniqueOrgRequest)(nil), // 13: caos.zitadel.admin.api.v1.UniqueOrgRequest - (*UniqueOrgResponse)(nil), // 14: caos.zitadel.admin.api.v1.UniqueOrgResponse - (*Org)(nil), // 15: caos.zitadel.admin.api.v1.Org - (*OrgSearchRequest)(nil), // 16: caos.zitadel.admin.api.v1.OrgSearchRequest - (*OrgSearchQuery)(nil), // 17: caos.zitadel.admin.api.v1.OrgSearchQuery - (*OrgSearchResponse)(nil), // 18: caos.zitadel.admin.api.v1.OrgSearchResponse - (*OrgSetUpRequest)(nil), // 19: caos.zitadel.admin.api.v1.OrgSetUpRequest - (*OrgSetUpResponse)(nil), // 20: caos.zitadel.admin.api.v1.OrgSetUpResponse - (*CreateUserRequest)(nil), // 21: caos.zitadel.admin.api.v1.CreateUserRequest - (*CreateHumanRequest)(nil), // 22: caos.zitadel.admin.api.v1.CreateHumanRequest - (*CreateMachineRequest)(nil), // 23: caos.zitadel.admin.api.v1.CreateMachineRequest - (*UserResponse)(nil), // 24: caos.zitadel.admin.api.v1.UserResponse - (*HumanResponse)(nil), // 25: caos.zitadel.admin.api.v1.HumanResponse - (*MachineResponse)(nil), // 26: caos.zitadel.admin.api.v1.MachineResponse - (*MachineKeyResponse)(nil), // 27: caos.zitadel.admin.api.v1.MachineKeyResponse - (*CreateOrgRequest)(nil), // 28: caos.zitadel.admin.api.v1.CreateOrgRequest - (*OrgIamPolicy)(nil), // 29: caos.zitadel.admin.api.v1.OrgIamPolicy - (*OrgIamPolicyRequest)(nil), // 30: caos.zitadel.admin.api.v1.OrgIamPolicyRequest - (*OrgIamPolicyID)(nil), // 31: caos.zitadel.admin.api.v1.OrgIamPolicyID - (*IamMemberRoles)(nil), // 32: caos.zitadel.admin.api.v1.IamMemberRoles - (*IamMember)(nil), // 33: caos.zitadel.admin.api.v1.IamMember - (*AddIamMemberRequest)(nil), // 34: caos.zitadel.admin.api.v1.AddIamMemberRequest - (*ChangeIamMemberRequest)(nil), // 35: caos.zitadel.admin.api.v1.ChangeIamMemberRequest - (*RemoveIamMemberRequest)(nil), // 36: caos.zitadel.admin.api.v1.RemoveIamMemberRequest - (*IamMemberSearchResponse)(nil), // 37: caos.zitadel.admin.api.v1.IamMemberSearchResponse - (*IamMemberView)(nil), // 38: caos.zitadel.admin.api.v1.IamMemberView - (*IamMemberSearchRequest)(nil), // 39: caos.zitadel.admin.api.v1.IamMemberSearchRequest - (*IamMemberSearchQuery)(nil), // 40: caos.zitadel.admin.api.v1.IamMemberSearchQuery - (*FailedEventID)(nil), // 41: caos.zitadel.admin.api.v1.FailedEventID - (*FailedEvents)(nil), // 42: caos.zitadel.admin.api.v1.FailedEvents - (*FailedEvent)(nil), // 43: caos.zitadel.admin.api.v1.FailedEvent - (*ViewID)(nil), // 44: caos.zitadel.admin.api.v1.ViewID - (*Views)(nil), // 45: caos.zitadel.admin.api.v1.Views - (*View)(nil), // 46: caos.zitadel.admin.api.v1.View - (*IdpID)(nil), // 47: caos.zitadel.admin.api.v1.IdpID - (*Idp)(nil), // 48: caos.zitadel.admin.api.v1.Idp - (*IdpUpdate)(nil), // 49: caos.zitadel.admin.api.v1.IdpUpdate - (*OidcIdpConfig)(nil), // 50: caos.zitadel.admin.api.v1.OidcIdpConfig - (*OidcIdpConfigCreate)(nil), // 51: caos.zitadel.admin.api.v1.OidcIdpConfigCreate - (*OidcIdpConfigUpdate)(nil), // 52: caos.zitadel.admin.api.v1.OidcIdpConfigUpdate - (*IdpSearchResponse)(nil), // 53: caos.zitadel.admin.api.v1.IdpSearchResponse - (*IdpView)(nil), // 54: caos.zitadel.admin.api.v1.IdpView - (*OidcIdpConfigView)(nil), // 55: caos.zitadel.admin.api.v1.OidcIdpConfigView - (*IdpSearchRequest)(nil), // 56: caos.zitadel.admin.api.v1.IdpSearchRequest - (*IdpSearchQuery)(nil), // 57: caos.zitadel.admin.api.v1.IdpSearchQuery - (*DefaultLoginPolicy)(nil), // 58: caos.zitadel.admin.api.v1.DefaultLoginPolicy - (*IdpProviderID)(nil), // 59: caos.zitadel.admin.api.v1.IdpProviderID - (*DefaultLoginPolicyView)(nil), // 60: caos.zitadel.admin.api.v1.DefaultLoginPolicyView - (*IdpProviderView)(nil), // 61: caos.zitadel.admin.api.v1.IdpProviderView - (*IdpProviderSearchResponse)(nil), // 62: caos.zitadel.admin.api.v1.IdpProviderSearchResponse - (*IdpProviderSearchRequest)(nil), // 63: caos.zitadel.admin.api.v1.IdpProviderSearchRequest - (*timestamp.Timestamp)(nil), // 64: google.protobuf.Timestamp - (*empty.Empty)(nil), // 65: google.protobuf.Empty - (*_struct.Struct)(nil), // 66: google.protobuf.Struct + (OrgState)(0), // 0: caos.zitadel.admin.api.v1.OrgState + (OrgSearchKey)(0), // 1: caos.zitadel.admin.api.v1.OrgSearchKey + (OrgSearchMethod)(0), // 2: caos.zitadel.admin.api.v1.OrgSearchMethod + (UserState)(0), // 3: caos.zitadel.admin.api.v1.UserState + (Gender)(0), // 4: caos.zitadel.admin.api.v1.Gender + (MachineKeyType)(0), // 5: caos.zitadel.admin.api.v1.MachineKeyType + (IamMemberSearchKey)(0), // 6: caos.zitadel.admin.api.v1.IamMemberSearchKey + (SearchMethod)(0), // 7: caos.zitadel.admin.api.v1.SearchMethod + (IdpState)(0), // 8: caos.zitadel.admin.api.v1.IdpState + (OIDCMappingField)(0), // 9: caos.zitadel.admin.api.v1.OIDCMappingField + (IdpSearchKey)(0), // 10: caos.zitadel.admin.api.v1.IdpSearchKey + (IdpType)(0), // 11: caos.zitadel.admin.api.v1.IdpType + (*OrgID)(nil), // 12: caos.zitadel.admin.api.v1.OrgID + (*UniqueOrgRequest)(nil), // 13: caos.zitadel.admin.api.v1.UniqueOrgRequest + (*UniqueOrgResponse)(nil), // 14: caos.zitadel.admin.api.v1.UniqueOrgResponse + (*Org)(nil), // 15: caos.zitadel.admin.api.v1.Org + (*OrgSearchRequest)(nil), // 16: caos.zitadel.admin.api.v1.OrgSearchRequest + (*OrgSearchQuery)(nil), // 17: caos.zitadel.admin.api.v1.OrgSearchQuery + (*OrgSearchResponse)(nil), // 18: caos.zitadel.admin.api.v1.OrgSearchResponse + (*OrgSetUpRequest)(nil), // 19: caos.zitadel.admin.api.v1.OrgSetUpRequest + (*OrgSetUpResponse)(nil), // 20: caos.zitadel.admin.api.v1.OrgSetUpResponse + (*CreateUserRequest)(nil), // 21: caos.zitadel.admin.api.v1.CreateUserRequest + (*CreateHumanRequest)(nil), // 22: caos.zitadel.admin.api.v1.CreateHumanRequest + (*CreateMachineRequest)(nil), // 23: caos.zitadel.admin.api.v1.CreateMachineRequest + (*UserResponse)(nil), // 24: caos.zitadel.admin.api.v1.UserResponse + (*HumanResponse)(nil), // 25: caos.zitadel.admin.api.v1.HumanResponse + (*MachineResponse)(nil), // 26: caos.zitadel.admin.api.v1.MachineResponse + (*MachineKeyResponse)(nil), // 27: caos.zitadel.admin.api.v1.MachineKeyResponse + (*CreateOrgRequest)(nil), // 28: caos.zitadel.admin.api.v1.CreateOrgRequest + (*OrgIamPolicy)(nil), // 29: caos.zitadel.admin.api.v1.OrgIAMPolicy + (*OrgIamPolicyView)(nil), // 30: caos.zitadel.admin.api.v1.OrgIamPolicyView + (*OrgIamPolicyRequest)(nil), // 31: caos.zitadel.admin.api.v1.OrgIamPolicyRequest + (*OrgIamPolicyID)(nil), // 32: caos.zitadel.admin.api.v1.OrgIamPolicyID + (*IamMemberRoles)(nil), // 33: caos.zitadel.admin.api.v1.IamMemberRoles + (*IamMember)(nil), // 34: caos.zitadel.admin.api.v1.IamMember + (*AddIamMemberRequest)(nil), // 35: caos.zitadel.admin.api.v1.AddIamMemberRequest + (*ChangeIamMemberRequest)(nil), // 36: caos.zitadel.admin.api.v1.ChangeIamMemberRequest + (*RemoveIamMemberRequest)(nil), // 37: caos.zitadel.admin.api.v1.RemoveIamMemberRequest + (*IamMemberSearchResponse)(nil), // 38: caos.zitadel.admin.api.v1.IamMemberSearchResponse + (*IamMemberView)(nil), // 39: caos.zitadel.admin.api.v1.IamMemberView + (*IamMemberSearchRequest)(nil), // 40: caos.zitadel.admin.api.v1.IamMemberSearchRequest + (*IamMemberSearchQuery)(nil), // 41: caos.zitadel.admin.api.v1.IamMemberSearchQuery + (*FailedEventID)(nil), // 42: caos.zitadel.admin.api.v1.FailedEventID + (*FailedEvents)(nil), // 43: caos.zitadel.admin.api.v1.FailedEvents + (*FailedEvent)(nil), // 44: caos.zitadel.admin.api.v1.FailedEvent + (*ViewID)(nil), // 45: caos.zitadel.admin.api.v1.ViewID + (*Views)(nil), // 46: caos.zitadel.admin.api.v1.Views + (*View)(nil), // 47: caos.zitadel.admin.api.v1.View + (*IdpID)(nil), // 48: caos.zitadel.admin.api.v1.IdpID + (*Idp)(nil), // 49: caos.zitadel.admin.api.v1.Idp + (*IdpUpdate)(nil), // 50: caos.zitadel.admin.api.v1.IdpUpdate + (*OidcIdpConfig)(nil), // 51: caos.zitadel.admin.api.v1.OidcIdpConfig + (*OidcIdpConfigCreate)(nil), // 52: caos.zitadel.admin.api.v1.OidcIdpConfigCreate + (*OidcIdpConfigUpdate)(nil), // 53: caos.zitadel.admin.api.v1.OidcIdpConfigUpdate + (*IdpSearchResponse)(nil), // 54: caos.zitadel.admin.api.v1.IdpSearchResponse + (*IdpView)(nil), // 55: caos.zitadel.admin.api.v1.IdpView + (*OidcIdpConfigView)(nil), // 56: caos.zitadel.admin.api.v1.OidcIdpConfigView + (*IdpSearchRequest)(nil), // 57: caos.zitadel.admin.api.v1.IdpSearchRequest + (*IdpSearchQuery)(nil), // 58: caos.zitadel.admin.api.v1.IdpSearchQuery + (*DefaultLoginPolicy)(nil), // 59: caos.zitadel.admin.api.v1.DefaultLoginPolicy + (*DefaultLoginPolicyRequest)(nil), // 60: caos.zitadel.admin.api.v1.DefaultLoginPolicyRequest + (*IdpProviderID)(nil), // 61: caos.zitadel.admin.api.v1.IdpProviderID + (*DefaultLoginPolicyView)(nil), // 62: caos.zitadel.admin.api.v1.DefaultLoginPolicyView + (*IdpProviderView)(nil), // 63: caos.zitadel.admin.api.v1.IdpProviderView + (*IdpProviderSearchResponse)(nil), // 64: caos.zitadel.admin.api.v1.IdpProviderSearchResponse + (*IdpProviderSearchRequest)(nil), // 65: caos.zitadel.admin.api.v1.IdpProviderSearchRequest + (*DefaultPasswordComplexityPolicy)(nil), // 66: caos.zitadel.admin.api.v1.DefaultPasswordComplexityPolicy + (*DefaultPasswordComplexityPolicyRequest)(nil), // 67: caos.zitadel.admin.api.v1.DefaultPasswordComplexityPolicyRequest + (*DefaultPasswordComplexityPolicyView)(nil), // 68: caos.zitadel.admin.api.v1.DefaultPasswordComplexityPolicyView + (*DefaultPasswordAgePolicy)(nil), // 69: caos.zitadel.admin.api.v1.DefaultPasswordAgePolicy + (*DefaultPasswordAgePolicyRequest)(nil), // 70: caos.zitadel.admin.api.v1.DefaultPasswordAgePolicyRequest + (*DefaultPasswordAgePolicyView)(nil), // 71: caos.zitadel.admin.api.v1.DefaultPasswordAgePolicyView + (*DefaultPasswordLockoutPolicy)(nil), // 72: caos.zitadel.admin.api.v1.DefaultPasswordLockoutPolicy + (*DefaultPasswordLockoutPolicyRequest)(nil), // 73: caos.zitadel.admin.api.v1.DefaultPasswordLockoutPolicyRequest + (*DefaultPasswordLockoutPolicyView)(nil), // 74: caos.zitadel.admin.api.v1.DefaultPasswordLockoutPolicyView + (*timestamp.Timestamp)(nil), // 75: google.protobuf.Timestamp + (*empty.Empty)(nil), // 76: google.protobuf.Empty + (*_struct.Struct)(nil), // 77: google.protobuf.Struct } var file_admin_proto_depIdxs = []int32{ - 0, // 0: caos.zitadel.admin.api.v1.Org.state:type_name -> caos.zitadel.admin.api.v1.OrgState - 64, // 1: caos.zitadel.admin.api.v1.Org.creation_date:type_name -> google.protobuf.Timestamp - 64, // 2: caos.zitadel.admin.api.v1.Org.change_date:type_name -> google.protobuf.Timestamp - 1, // 3: caos.zitadel.admin.api.v1.OrgSearchRequest.sorting_column:type_name -> caos.zitadel.admin.api.v1.OrgSearchKey - 17, // 4: caos.zitadel.admin.api.v1.OrgSearchRequest.queries:type_name -> caos.zitadel.admin.api.v1.OrgSearchQuery - 1, // 5: caos.zitadel.admin.api.v1.OrgSearchQuery.key:type_name -> caos.zitadel.admin.api.v1.OrgSearchKey - 2, // 6: caos.zitadel.admin.api.v1.OrgSearchQuery.method:type_name -> caos.zitadel.admin.api.v1.OrgSearchMethod - 15, // 7: caos.zitadel.admin.api.v1.OrgSearchResponse.result:type_name -> caos.zitadel.admin.api.v1.Org - 64, // 8: caos.zitadel.admin.api.v1.OrgSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 28, // 9: caos.zitadel.admin.api.v1.OrgSetUpRequest.org:type_name -> caos.zitadel.admin.api.v1.CreateOrgRequest - 21, // 10: caos.zitadel.admin.api.v1.OrgSetUpRequest.user:type_name -> caos.zitadel.admin.api.v1.CreateUserRequest - 15, // 11: caos.zitadel.admin.api.v1.OrgSetUpResponse.org:type_name -> caos.zitadel.admin.api.v1.Org - 24, // 12: caos.zitadel.admin.api.v1.OrgSetUpResponse.user:type_name -> caos.zitadel.admin.api.v1.UserResponse - 22, // 13: caos.zitadel.admin.api.v1.CreateUserRequest.human:type_name -> caos.zitadel.admin.api.v1.CreateHumanRequest - 23, // 14: caos.zitadel.admin.api.v1.CreateUserRequest.machine:type_name -> caos.zitadel.admin.api.v1.CreateMachineRequest - 4, // 15: caos.zitadel.admin.api.v1.CreateHumanRequest.gender:type_name -> caos.zitadel.admin.api.v1.Gender - 3, // 16: caos.zitadel.admin.api.v1.UserResponse.state:type_name -> caos.zitadel.admin.api.v1.UserState - 64, // 17: caos.zitadel.admin.api.v1.UserResponse.creation_date:type_name -> google.protobuf.Timestamp - 64, // 18: caos.zitadel.admin.api.v1.UserResponse.change_date:type_name -> google.protobuf.Timestamp - 25, // 19: caos.zitadel.admin.api.v1.UserResponse.human:type_name -> caos.zitadel.admin.api.v1.HumanResponse - 26, // 20: caos.zitadel.admin.api.v1.UserResponse.machine:type_name -> caos.zitadel.admin.api.v1.MachineResponse - 4, // 21: caos.zitadel.admin.api.v1.HumanResponse.gender:type_name -> caos.zitadel.admin.api.v1.Gender - 27, // 22: caos.zitadel.admin.api.v1.MachineResponse.keys:type_name -> caos.zitadel.admin.api.v1.MachineKeyResponse - 5, // 23: caos.zitadel.admin.api.v1.MachineKeyResponse.type:type_name -> caos.zitadel.admin.api.v1.MachineKeyType - 64, // 24: caos.zitadel.admin.api.v1.MachineKeyResponse.creation_date:type_name -> google.protobuf.Timestamp - 64, // 25: caos.zitadel.admin.api.v1.MachineKeyResponse.expiration_date:type_name -> google.protobuf.Timestamp - 64, // 26: caos.zitadel.admin.api.v1.OrgIamPolicy.creation_date:type_name -> google.protobuf.Timestamp - 64, // 27: caos.zitadel.admin.api.v1.OrgIamPolicy.change_date:type_name -> google.protobuf.Timestamp - 64, // 28: caos.zitadel.admin.api.v1.IamMember.change_date:type_name -> google.protobuf.Timestamp - 64, // 29: caos.zitadel.admin.api.v1.IamMember.creation_date:type_name -> google.protobuf.Timestamp - 38, // 30: caos.zitadel.admin.api.v1.IamMemberSearchResponse.result:type_name -> caos.zitadel.admin.api.v1.IamMemberView - 64, // 31: caos.zitadel.admin.api.v1.IamMemberSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 64, // 32: caos.zitadel.admin.api.v1.IamMemberView.change_date:type_name -> google.protobuf.Timestamp - 64, // 33: caos.zitadel.admin.api.v1.IamMemberView.creation_date:type_name -> google.protobuf.Timestamp - 40, // 34: caos.zitadel.admin.api.v1.IamMemberSearchRequest.queries:type_name -> caos.zitadel.admin.api.v1.IamMemberSearchQuery - 6, // 35: caos.zitadel.admin.api.v1.IamMemberSearchQuery.key:type_name -> caos.zitadel.admin.api.v1.IamMemberSearchKey - 7, // 36: caos.zitadel.admin.api.v1.IamMemberSearchQuery.method:type_name -> caos.zitadel.admin.api.v1.SearchMethod - 43, // 37: caos.zitadel.admin.api.v1.FailedEvents.failed_events:type_name -> caos.zitadel.admin.api.v1.FailedEvent - 46, // 38: caos.zitadel.admin.api.v1.Views.views:type_name -> caos.zitadel.admin.api.v1.View - 64, // 39: caos.zitadel.admin.api.v1.View.view_timestamp:type_name -> google.protobuf.Timestamp - 8, // 40: caos.zitadel.admin.api.v1.Idp.state:type_name -> caos.zitadel.admin.api.v1.IdpState - 64, // 41: caos.zitadel.admin.api.v1.Idp.creation_date:type_name -> google.protobuf.Timestamp - 64, // 42: caos.zitadel.admin.api.v1.Idp.change_date:type_name -> google.protobuf.Timestamp - 50, // 43: caos.zitadel.admin.api.v1.Idp.oidc_config:type_name -> caos.zitadel.admin.api.v1.OidcIdpConfig - 9, // 44: caos.zitadel.admin.api.v1.OidcIdpConfigCreate.idp_display_name_mapping:type_name -> caos.zitadel.admin.api.v1.OIDCMappingField - 9, // 45: caos.zitadel.admin.api.v1.OidcIdpConfigCreate.username_mapping:type_name -> caos.zitadel.admin.api.v1.OIDCMappingField - 9, // 46: caos.zitadel.admin.api.v1.OidcIdpConfigUpdate.idp_display_name_mapping:type_name -> caos.zitadel.admin.api.v1.OIDCMappingField - 9, // 47: caos.zitadel.admin.api.v1.OidcIdpConfigUpdate.username_mapping:type_name -> caos.zitadel.admin.api.v1.OIDCMappingField - 54, // 48: caos.zitadel.admin.api.v1.IdpSearchResponse.result:type_name -> caos.zitadel.admin.api.v1.IdpView - 64, // 49: caos.zitadel.admin.api.v1.IdpSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 8, // 50: caos.zitadel.admin.api.v1.IdpView.state:type_name -> caos.zitadel.admin.api.v1.IdpState - 64, // 51: caos.zitadel.admin.api.v1.IdpView.creation_date:type_name -> google.protobuf.Timestamp - 64, // 52: caos.zitadel.admin.api.v1.IdpView.change_date:type_name -> google.protobuf.Timestamp - 55, // 53: caos.zitadel.admin.api.v1.IdpView.oidc_config:type_name -> caos.zitadel.admin.api.v1.OidcIdpConfigView - 9, // 54: caos.zitadel.admin.api.v1.OidcIdpConfigView.idp_display_name_mapping:type_name -> caos.zitadel.admin.api.v1.OIDCMappingField - 9, // 55: caos.zitadel.admin.api.v1.OidcIdpConfigView.username_mapping:type_name -> caos.zitadel.admin.api.v1.OIDCMappingField - 57, // 56: caos.zitadel.admin.api.v1.IdpSearchRequest.queries:type_name -> caos.zitadel.admin.api.v1.IdpSearchQuery - 10, // 57: caos.zitadel.admin.api.v1.IdpSearchQuery.key:type_name -> caos.zitadel.admin.api.v1.IdpSearchKey - 7, // 58: caos.zitadel.admin.api.v1.IdpSearchQuery.method:type_name -> caos.zitadel.admin.api.v1.SearchMethod - 11, // 59: caos.zitadel.admin.api.v1.IdpProviderView.type:type_name -> caos.zitadel.admin.api.v1.IdpType - 61, // 60: caos.zitadel.admin.api.v1.IdpProviderSearchResponse.result:type_name -> caos.zitadel.admin.api.v1.IdpProviderView - 64, // 61: caos.zitadel.admin.api.v1.IdpProviderSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 65, // 62: caos.zitadel.admin.api.v1.AdminService.Healthz:input_type -> google.protobuf.Empty - 65, // 63: caos.zitadel.admin.api.v1.AdminService.Ready:input_type -> google.protobuf.Empty - 65, // 64: caos.zitadel.admin.api.v1.AdminService.Validate:input_type -> google.protobuf.Empty - 13, // 65: caos.zitadel.admin.api.v1.AdminService.IsOrgUnique:input_type -> caos.zitadel.admin.api.v1.UniqueOrgRequest - 12, // 66: caos.zitadel.admin.api.v1.AdminService.GetOrgByID:input_type -> caos.zitadel.admin.api.v1.OrgID - 16, // 67: caos.zitadel.admin.api.v1.AdminService.SearchOrgs:input_type -> caos.zitadel.admin.api.v1.OrgSearchRequest - 19, // 68: caos.zitadel.admin.api.v1.AdminService.SetUpOrg:input_type -> caos.zitadel.admin.api.v1.OrgSetUpRequest - 31, // 69: caos.zitadel.admin.api.v1.AdminService.GetOrgIamPolicy:input_type -> caos.zitadel.admin.api.v1.OrgIamPolicyID - 30, // 70: caos.zitadel.admin.api.v1.AdminService.CreateOrgIamPolicy:input_type -> caos.zitadel.admin.api.v1.OrgIamPolicyRequest - 30, // 71: caos.zitadel.admin.api.v1.AdminService.UpdateOrgIamPolicy:input_type -> caos.zitadel.admin.api.v1.OrgIamPolicyRequest - 31, // 72: caos.zitadel.admin.api.v1.AdminService.DeleteOrgIamPolicy:input_type -> caos.zitadel.admin.api.v1.OrgIamPolicyID - 65, // 73: caos.zitadel.admin.api.v1.AdminService.GetIamMemberRoles:input_type -> google.protobuf.Empty - 34, // 74: caos.zitadel.admin.api.v1.AdminService.AddIamMember:input_type -> caos.zitadel.admin.api.v1.AddIamMemberRequest - 35, // 75: caos.zitadel.admin.api.v1.AdminService.ChangeIamMember:input_type -> caos.zitadel.admin.api.v1.ChangeIamMemberRequest - 36, // 76: caos.zitadel.admin.api.v1.AdminService.RemoveIamMember:input_type -> caos.zitadel.admin.api.v1.RemoveIamMemberRequest - 39, // 77: caos.zitadel.admin.api.v1.AdminService.SearchIamMembers:input_type -> caos.zitadel.admin.api.v1.IamMemberSearchRequest - 65, // 78: caos.zitadel.admin.api.v1.AdminService.GetViews:input_type -> google.protobuf.Empty - 44, // 79: caos.zitadel.admin.api.v1.AdminService.ClearView:input_type -> caos.zitadel.admin.api.v1.ViewID - 65, // 80: caos.zitadel.admin.api.v1.AdminService.GetFailedEvents:input_type -> google.protobuf.Empty - 41, // 81: caos.zitadel.admin.api.v1.AdminService.RemoveFailedEvent:input_type -> caos.zitadel.admin.api.v1.FailedEventID - 47, // 82: caos.zitadel.admin.api.v1.AdminService.IdpByID:input_type -> caos.zitadel.admin.api.v1.IdpID - 51, // 83: caos.zitadel.admin.api.v1.AdminService.CreateOidcIdp:input_type -> caos.zitadel.admin.api.v1.OidcIdpConfigCreate - 49, // 84: caos.zitadel.admin.api.v1.AdminService.UpdateIdpConfig:input_type -> caos.zitadel.admin.api.v1.IdpUpdate - 47, // 85: caos.zitadel.admin.api.v1.AdminService.DeactivateIdpConfig:input_type -> caos.zitadel.admin.api.v1.IdpID - 47, // 86: caos.zitadel.admin.api.v1.AdminService.ReactivateIdpConfig:input_type -> caos.zitadel.admin.api.v1.IdpID - 47, // 87: caos.zitadel.admin.api.v1.AdminService.RemoveIdpConfig:input_type -> caos.zitadel.admin.api.v1.IdpID - 52, // 88: caos.zitadel.admin.api.v1.AdminService.UpdateOidcIdpConfig:input_type -> caos.zitadel.admin.api.v1.OidcIdpConfigUpdate - 56, // 89: caos.zitadel.admin.api.v1.AdminService.SearchIdps:input_type -> caos.zitadel.admin.api.v1.IdpSearchRequest - 65, // 90: caos.zitadel.admin.api.v1.AdminService.GetDefaultLoginPolicy:input_type -> google.protobuf.Empty - 58, // 91: caos.zitadel.admin.api.v1.AdminService.UpdateDefaultLoginPolicy:input_type -> caos.zitadel.admin.api.v1.DefaultLoginPolicy - 63, // 92: caos.zitadel.admin.api.v1.AdminService.GetDefaultLoginPolicyIdpProviders:input_type -> caos.zitadel.admin.api.v1.IdpProviderSearchRequest - 59, // 93: caos.zitadel.admin.api.v1.AdminService.AddIdpProviderToDefaultLoginPolicy:input_type -> caos.zitadel.admin.api.v1.IdpProviderID - 59, // 94: caos.zitadel.admin.api.v1.AdminService.RemoveIdpProviderFromDefaultLoginPolicy:input_type -> caos.zitadel.admin.api.v1.IdpProviderID - 65, // 95: caos.zitadel.admin.api.v1.AdminService.Healthz:output_type -> google.protobuf.Empty - 65, // 96: caos.zitadel.admin.api.v1.AdminService.Ready:output_type -> google.protobuf.Empty - 66, // 97: caos.zitadel.admin.api.v1.AdminService.Validate:output_type -> google.protobuf.Struct - 14, // 98: caos.zitadel.admin.api.v1.AdminService.IsOrgUnique:output_type -> caos.zitadel.admin.api.v1.UniqueOrgResponse - 15, // 99: caos.zitadel.admin.api.v1.AdminService.GetOrgByID:output_type -> caos.zitadel.admin.api.v1.Org - 18, // 100: caos.zitadel.admin.api.v1.AdminService.SearchOrgs:output_type -> caos.zitadel.admin.api.v1.OrgSearchResponse - 20, // 101: caos.zitadel.admin.api.v1.AdminService.SetUpOrg:output_type -> caos.zitadel.admin.api.v1.OrgSetUpResponse - 29, // 102: caos.zitadel.admin.api.v1.AdminService.GetOrgIamPolicy:output_type -> caos.zitadel.admin.api.v1.OrgIamPolicy - 29, // 103: caos.zitadel.admin.api.v1.AdminService.CreateOrgIamPolicy:output_type -> caos.zitadel.admin.api.v1.OrgIamPolicy - 29, // 104: caos.zitadel.admin.api.v1.AdminService.UpdateOrgIamPolicy:output_type -> caos.zitadel.admin.api.v1.OrgIamPolicy - 65, // 105: caos.zitadel.admin.api.v1.AdminService.DeleteOrgIamPolicy:output_type -> google.protobuf.Empty - 32, // 106: caos.zitadel.admin.api.v1.AdminService.GetIamMemberRoles:output_type -> caos.zitadel.admin.api.v1.IamMemberRoles - 33, // 107: caos.zitadel.admin.api.v1.AdminService.AddIamMember:output_type -> caos.zitadel.admin.api.v1.IamMember - 33, // 108: caos.zitadel.admin.api.v1.AdminService.ChangeIamMember:output_type -> caos.zitadel.admin.api.v1.IamMember - 65, // 109: caos.zitadel.admin.api.v1.AdminService.RemoveIamMember:output_type -> google.protobuf.Empty - 37, // 110: caos.zitadel.admin.api.v1.AdminService.SearchIamMembers:output_type -> caos.zitadel.admin.api.v1.IamMemberSearchResponse - 45, // 111: caos.zitadel.admin.api.v1.AdminService.GetViews:output_type -> caos.zitadel.admin.api.v1.Views - 65, // 112: caos.zitadel.admin.api.v1.AdminService.ClearView:output_type -> google.protobuf.Empty - 42, // 113: caos.zitadel.admin.api.v1.AdminService.GetFailedEvents:output_type -> caos.zitadel.admin.api.v1.FailedEvents - 65, // 114: caos.zitadel.admin.api.v1.AdminService.RemoveFailedEvent:output_type -> google.protobuf.Empty - 54, // 115: caos.zitadel.admin.api.v1.AdminService.IdpByID:output_type -> caos.zitadel.admin.api.v1.IdpView - 48, // 116: caos.zitadel.admin.api.v1.AdminService.CreateOidcIdp:output_type -> caos.zitadel.admin.api.v1.Idp - 48, // 117: caos.zitadel.admin.api.v1.AdminService.UpdateIdpConfig:output_type -> caos.zitadel.admin.api.v1.Idp - 48, // 118: caos.zitadel.admin.api.v1.AdminService.DeactivateIdpConfig:output_type -> caos.zitadel.admin.api.v1.Idp - 48, // 119: caos.zitadel.admin.api.v1.AdminService.ReactivateIdpConfig:output_type -> caos.zitadel.admin.api.v1.Idp - 65, // 120: caos.zitadel.admin.api.v1.AdminService.RemoveIdpConfig:output_type -> google.protobuf.Empty - 50, // 121: caos.zitadel.admin.api.v1.AdminService.UpdateOidcIdpConfig:output_type -> caos.zitadel.admin.api.v1.OidcIdpConfig - 53, // 122: caos.zitadel.admin.api.v1.AdminService.SearchIdps:output_type -> caos.zitadel.admin.api.v1.IdpSearchResponse - 60, // 123: caos.zitadel.admin.api.v1.AdminService.GetDefaultLoginPolicy:output_type -> caos.zitadel.admin.api.v1.DefaultLoginPolicyView - 58, // 124: caos.zitadel.admin.api.v1.AdminService.UpdateDefaultLoginPolicy:output_type -> caos.zitadel.admin.api.v1.DefaultLoginPolicy - 62, // 125: caos.zitadel.admin.api.v1.AdminService.GetDefaultLoginPolicyIdpProviders:output_type -> caos.zitadel.admin.api.v1.IdpProviderSearchResponse - 59, // 126: caos.zitadel.admin.api.v1.AdminService.AddIdpProviderToDefaultLoginPolicy:output_type -> caos.zitadel.admin.api.v1.IdpProviderID - 65, // 127: caos.zitadel.admin.api.v1.AdminService.RemoveIdpProviderFromDefaultLoginPolicy:output_type -> google.protobuf.Empty - 95, // [95:128] is the sub-list for method output_type - 62, // [62:95] is the sub-list for method input_type - 62, // [62:62] is the sub-list for extension type_name - 62, // [62:62] is the sub-list for extension extendee - 0, // [0:62] is the sub-list for field type_name + 0, // 0: caos.zitadel.admin.api.v1.Org.state:type_name -> caos.zitadel.admin.api.v1.OrgState + 75, // 1: caos.zitadel.admin.api.v1.Org.creation_date:type_name -> google.protobuf.Timestamp + 75, // 2: caos.zitadel.admin.api.v1.Org.change_date:type_name -> google.protobuf.Timestamp + 1, // 3: caos.zitadel.admin.api.v1.OrgSearchRequest.sorting_column:type_name -> caos.zitadel.admin.api.v1.OrgSearchKey + 17, // 4: caos.zitadel.admin.api.v1.OrgSearchRequest.queries:type_name -> caos.zitadel.admin.api.v1.OrgSearchQuery + 1, // 5: caos.zitadel.admin.api.v1.OrgSearchQuery.key:type_name -> caos.zitadel.admin.api.v1.OrgSearchKey + 2, // 6: caos.zitadel.admin.api.v1.OrgSearchQuery.method:type_name -> caos.zitadel.admin.api.v1.OrgSearchMethod + 15, // 7: caos.zitadel.admin.api.v1.OrgSearchResponse.result:type_name -> caos.zitadel.admin.api.v1.Org + 75, // 8: caos.zitadel.admin.api.v1.OrgSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 28, // 9: caos.zitadel.admin.api.v1.OrgSetUpRequest.org:type_name -> caos.zitadel.admin.api.v1.CreateOrgRequest + 21, // 10: caos.zitadel.admin.api.v1.OrgSetUpRequest.user:type_name -> caos.zitadel.admin.api.v1.CreateUserRequest + 15, // 11: caos.zitadel.admin.api.v1.OrgSetUpResponse.org:type_name -> caos.zitadel.admin.api.v1.Org + 24, // 12: caos.zitadel.admin.api.v1.OrgSetUpResponse.user:type_name -> caos.zitadel.admin.api.v1.UserResponse + 22, // 13: caos.zitadel.admin.api.v1.CreateUserRequest.human:type_name -> caos.zitadel.admin.api.v1.CreateHumanRequest + 23, // 14: caos.zitadel.admin.api.v1.CreateUserRequest.machine:type_name -> caos.zitadel.admin.api.v1.CreateMachineRequest + 4, // 15: caos.zitadel.admin.api.v1.CreateHumanRequest.gender:type_name -> caos.zitadel.admin.api.v1.Gender + 3, // 16: caos.zitadel.admin.api.v1.UserResponse.state:type_name -> caos.zitadel.admin.api.v1.UserState + 75, // 17: caos.zitadel.admin.api.v1.UserResponse.creation_date:type_name -> google.protobuf.Timestamp + 75, // 18: caos.zitadel.admin.api.v1.UserResponse.change_date:type_name -> google.protobuf.Timestamp + 25, // 19: caos.zitadel.admin.api.v1.UserResponse.human:type_name -> caos.zitadel.admin.api.v1.HumanResponse + 26, // 20: caos.zitadel.admin.api.v1.UserResponse.machine:type_name -> caos.zitadel.admin.api.v1.MachineResponse + 4, // 21: caos.zitadel.admin.api.v1.HumanResponse.gender:type_name -> caos.zitadel.admin.api.v1.Gender + 27, // 22: caos.zitadel.admin.api.v1.MachineResponse.keys:type_name -> caos.zitadel.admin.api.v1.MachineKeyResponse + 5, // 23: caos.zitadel.admin.api.v1.MachineKeyResponse.type:type_name -> caos.zitadel.admin.api.v1.MachineKeyType + 75, // 24: caos.zitadel.admin.api.v1.MachineKeyResponse.creation_date:type_name -> google.protobuf.Timestamp + 75, // 25: caos.zitadel.admin.api.v1.MachineKeyResponse.expiration_date:type_name -> google.protobuf.Timestamp + 75, // 26: caos.zitadel.admin.api.v1.OrgIAMPolicy.creation_date:type_name -> google.protobuf.Timestamp + 75, // 27: caos.zitadel.admin.api.v1.OrgIAMPolicy.change_date:type_name -> google.protobuf.Timestamp + 75, // 28: caos.zitadel.admin.api.v1.OrgIamPolicyView.creation_date:type_name -> google.protobuf.Timestamp + 75, // 29: caos.zitadel.admin.api.v1.OrgIamPolicyView.change_date:type_name -> google.protobuf.Timestamp + 75, // 30: caos.zitadel.admin.api.v1.IamMember.change_date:type_name -> google.protobuf.Timestamp + 75, // 31: caos.zitadel.admin.api.v1.IamMember.creation_date:type_name -> google.protobuf.Timestamp + 39, // 32: caos.zitadel.admin.api.v1.IamMemberSearchResponse.result:type_name -> caos.zitadel.admin.api.v1.IamMemberView + 75, // 33: caos.zitadel.admin.api.v1.IamMemberSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 75, // 34: caos.zitadel.admin.api.v1.IamMemberView.change_date:type_name -> google.protobuf.Timestamp + 75, // 35: caos.zitadel.admin.api.v1.IamMemberView.creation_date:type_name -> google.protobuf.Timestamp + 41, // 36: caos.zitadel.admin.api.v1.IamMemberSearchRequest.queries:type_name -> caos.zitadel.admin.api.v1.IamMemberSearchQuery + 6, // 37: caos.zitadel.admin.api.v1.IamMemberSearchQuery.key:type_name -> caos.zitadel.admin.api.v1.IamMemberSearchKey + 7, // 38: caos.zitadel.admin.api.v1.IamMemberSearchQuery.method:type_name -> caos.zitadel.admin.api.v1.SearchMethod + 44, // 39: caos.zitadel.admin.api.v1.FailedEvents.failed_events:type_name -> caos.zitadel.admin.api.v1.FailedEvent + 47, // 40: caos.zitadel.admin.api.v1.Views.views:type_name -> caos.zitadel.admin.api.v1.View + 75, // 41: caos.zitadel.admin.api.v1.View.view_timestamp:type_name -> google.protobuf.Timestamp + 8, // 42: caos.zitadel.admin.api.v1.Idp.state:type_name -> caos.zitadel.admin.api.v1.IdpState + 75, // 43: caos.zitadel.admin.api.v1.Idp.creation_date:type_name -> google.protobuf.Timestamp + 75, // 44: caos.zitadel.admin.api.v1.Idp.change_date:type_name -> google.protobuf.Timestamp + 51, // 45: caos.zitadel.admin.api.v1.Idp.oidc_config:type_name -> caos.zitadel.admin.api.v1.OidcIdpConfig + 9, // 46: caos.zitadel.admin.api.v1.OidcIdpConfigCreate.idp_display_name_mapping:type_name -> caos.zitadel.admin.api.v1.OIDCMappingField + 9, // 47: caos.zitadel.admin.api.v1.OidcIdpConfigCreate.username_mapping:type_name -> caos.zitadel.admin.api.v1.OIDCMappingField + 9, // 48: caos.zitadel.admin.api.v1.OidcIdpConfigUpdate.idp_display_name_mapping:type_name -> caos.zitadel.admin.api.v1.OIDCMappingField + 9, // 49: caos.zitadel.admin.api.v1.OidcIdpConfigUpdate.username_mapping:type_name -> caos.zitadel.admin.api.v1.OIDCMappingField + 55, // 50: caos.zitadel.admin.api.v1.IdpSearchResponse.result:type_name -> caos.zitadel.admin.api.v1.IdpView + 75, // 51: caos.zitadel.admin.api.v1.IdpSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 8, // 52: caos.zitadel.admin.api.v1.IdpView.state:type_name -> caos.zitadel.admin.api.v1.IdpState + 75, // 53: caos.zitadel.admin.api.v1.IdpView.creation_date:type_name -> google.protobuf.Timestamp + 75, // 54: caos.zitadel.admin.api.v1.IdpView.change_date:type_name -> google.protobuf.Timestamp + 56, // 55: caos.zitadel.admin.api.v1.IdpView.oidc_config:type_name -> caos.zitadel.admin.api.v1.OidcIdpConfigView + 9, // 56: caos.zitadel.admin.api.v1.OidcIdpConfigView.idp_display_name_mapping:type_name -> caos.zitadel.admin.api.v1.OIDCMappingField + 9, // 57: caos.zitadel.admin.api.v1.OidcIdpConfigView.username_mapping:type_name -> caos.zitadel.admin.api.v1.OIDCMappingField + 58, // 58: caos.zitadel.admin.api.v1.IdpSearchRequest.queries:type_name -> caos.zitadel.admin.api.v1.IdpSearchQuery + 10, // 59: caos.zitadel.admin.api.v1.IdpSearchQuery.key:type_name -> caos.zitadel.admin.api.v1.IdpSearchKey + 7, // 60: caos.zitadel.admin.api.v1.IdpSearchQuery.method:type_name -> caos.zitadel.admin.api.v1.SearchMethod + 75, // 61: caos.zitadel.admin.api.v1.DefaultLoginPolicy.creation_date:type_name -> google.protobuf.Timestamp + 75, // 62: caos.zitadel.admin.api.v1.DefaultLoginPolicy.change_date:type_name -> google.protobuf.Timestamp + 75, // 63: caos.zitadel.admin.api.v1.DefaultLoginPolicyView.creation_date:type_name -> google.protobuf.Timestamp + 75, // 64: caos.zitadel.admin.api.v1.DefaultLoginPolicyView.change_date:type_name -> google.protobuf.Timestamp + 11, // 65: caos.zitadel.admin.api.v1.IdpProviderView.type:type_name -> caos.zitadel.admin.api.v1.IdpType + 63, // 66: caos.zitadel.admin.api.v1.IdpProviderSearchResponse.result:type_name -> caos.zitadel.admin.api.v1.IdpProviderView + 75, // 67: caos.zitadel.admin.api.v1.IdpProviderSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 75, // 68: caos.zitadel.admin.api.v1.DefaultPasswordComplexityPolicy.creation_date:type_name -> google.protobuf.Timestamp + 75, // 69: caos.zitadel.admin.api.v1.DefaultPasswordComplexityPolicy.change_date:type_name -> google.protobuf.Timestamp + 75, // 70: caos.zitadel.admin.api.v1.DefaultPasswordComplexityPolicyView.creation_date:type_name -> google.protobuf.Timestamp + 75, // 71: caos.zitadel.admin.api.v1.DefaultPasswordComplexityPolicyView.change_date:type_name -> google.protobuf.Timestamp + 75, // 72: caos.zitadel.admin.api.v1.DefaultPasswordAgePolicy.creation_date:type_name -> google.protobuf.Timestamp + 75, // 73: caos.zitadel.admin.api.v1.DefaultPasswordAgePolicy.change_date:type_name -> google.protobuf.Timestamp + 75, // 74: caos.zitadel.admin.api.v1.DefaultPasswordAgePolicyView.creation_date:type_name -> google.protobuf.Timestamp + 75, // 75: caos.zitadel.admin.api.v1.DefaultPasswordAgePolicyView.change_date:type_name -> google.protobuf.Timestamp + 75, // 76: caos.zitadel.admin.api.v1.DefaultPasswordLockoutPolicy.creation_date:type_name -> google.protobuf.Timestamp + 75, // 77: caos.zitadel.admin.api.v1.DefaultPasswordLockoutPolicy.change_date:type_name -> google.protobuf.Timestamp + 75, // 78: caos.zitadel.admin.api.v1.DefaultPasswordLockoutPolicyView.creation_date:type_name -> google.protobuf.Timestamp + 75, // 79: caos.zitadel.admin.api.v1.DefaultPasswordLockoutPolicyView.change_date:type_name -> google.protobuf.Timestamp + 76, // 80: caos.zitadel.admin.api.v1.AdminService.Healthz:input_type -> google.protobuf.Empty + 76, // 81: caos.zitadel.admin.api.v1.AdminService.Ready:input_type -> google.protobuf.Empty + 76, // 82: caos.zitadel.admin.api.v1.AdminService.Validate:input_type -> google.protobuf.Empty + 13, // 83: caos.zitadel.admin.api.v1.AdminService.IsOrgUnique:input_type -> caos.zitadel.admin.api.v1.UniqueOrgRequest + 12, // 84: caos.zitadel.admin.api.v1.AdminService.GetOrgByID:input_type -> caos.zitadel.admin.api.v1.OrgID + 16, // 85: caos.zitadel.admin.api.v1.AdminService.SearchOrgs:input_type -> caos.zitadel.admin.api.v1.OrgSearchRequest + 19, // 86: caos.zitadel.admin.api.v1.AdminService.SetUpOrg:input_type -> caos.zitadel.admin.api.v1.OrgSetUpRequest + 76, // 87: caos.zitadel.admin.api.v1.AdminService.GetDefaultOrgIAMPolicy:input_type -> google.protobuf.Empty + 31, // 88: caos.zitadel.admin.api.v1.AdminService.UpdateDefaultOrgIamPolicy:input_type -> caos.zitadel.admin.api.v1.OrgIamPolicyRequest + 32, // 89: caos.zitadel.admin.api.v1.AdminService.GetOrgIAMPolicy:input_type -> caos.zitadel.admin.api.v1.OrgIamPolicyID + 31, // 90: caos.zitadel.admin.api.v1.AdminService.CreateOrgIAMPolicy:input_type -> caos.zitadel.admin.api.v1.OrgIamPolicyRequest + 31, // 91: caos.zitadel.admin.api.v1.AdminService.UpdateOrgIamPolicy:input_type -> caos.zitadel.admin.api.v1.OrgIamPolicyRequest + 32, // 92: caos.zitadel.admin.api.v1.AdminService.RemoveOrgIAMPolicy:input_type -> caos.zitadel.admin.api.v1.OrgIamPolicyID + 76, // 93: caos.zitadel.admin.api.v1.AdminService.GetIamMemberRoles:input_type -> google.protobuf.Empty + 35, // 94: caos.zitadel.admin.api.v1.AdminService.AddIamMember:input_type -> caos.zitadel.admin.api.v1.AddIamMemberRequest + 36, // 95: caos.zitadel.admin.api.v1.AdminService.ChangeIamMember:input_type -> caos.zitadel.admin.api.v1.ChangeIamMemberRequest + 37, // 96: caos.zitadel.admin.api.v1.AdminService.RemoveIamMember:input_type -> caos.zitadel.admin.api.v1.RemoveIamMemberRequest + 40, // 97: caos.zitadel.admin.api.v1.AdminService.SearchIamMembers:input_type -> caos.zitadel.admin.api.v1.IamMemberSearchRequest + 76, // 98: caos.zitadel.admin.api.v1.AdminService.GetViews:input_type -> google.protobuf.Empty + 45, // 99: caos.zitadel.admin.api.v1.AdminService.ClearView:input_type -> caos.zitadel.admin.api.v1.ViewID + 76, // 100: caos.zitadel.admin.api.v1.AdminService.GetFailedEvents:input_type -> google.protobuf.Empty + 42, // 101: caos.zitadel.admin.api.v1.AdminService.RemoveFailedEvent:input_type -> caos.zitadel.admin.api.v1.FailedEventID + 48, // 102: caos.zitadel.admin.api.v1.AdminService.IdpByID:input_type -> caos.zitadel.admin.api.v1.IdpID + 52, // 103: caos.zitadel.admin.api.v1.AdminService.CreateOidcIdp:input_type -> caos.zitadel.admin.api.v1.OidcIdpConfigCreate + 50, // 104: caos.zitadel.admin.api.v1.AdminService.UpdateIdpConfig:input_type -> caos.zitadel.admin.api.v1.IdpUpdate + 48, // 105: caos.zitadel.admin.api.v1.AdminService.DeactivateIdpConfig:input_type -> caos.zitadel.admin.api.v1.IdpID + 48, // 106: caos.zitadel.admin.api.v1.AdminService.ReactivateIdpConfig:input_type -> caos.zitadel.admin.api.v1.IdpID + 48, // 107: caos.zitadel.admin.api.v1.AdminService.RemoveIdpConfig:input_type -> caos.zitadel.admin.api.v1.IdpID + 53, // 108: caos.zitadel.admin.api.v1.AdminService.UpdateOidcIdpConfig:input_type -> caos.zitadel.admin.api.v1.OidcIdpConfigUpdate + 57, // 109: caos.zitadel.admin.api.v1.AdminService.SearchIdps:input_type -> caos.zitadel.admin.api.v1.IdpSearchRequest + 76, // 110: caos.zitadel.admin.api.v1.AdminService.GetDefaultLoginPolicy:input_type -> google.protobuf.Empty + 60, // 111: caos.zitadel.admin.api.v1.AdminService.UpdateDefaultLoginPolicy:input_type -> caos.zitadel.admin.api.v1.DefaultLoginPolicyRequest + 65, // 112: caos.zitadel.admin.api.v1.AdminService.GetDefaultLoginPolicyIdpProviders:input_type -> caos.zitadel.admin.api.v1.IdpProviderSearchRequest + 61, // 113: caos.zitadel.admin.api.v1.AdminService.AddIdpProviderToDefaultLoginPolicy:input_type -> caos.zitadel.admin.api.v1.IdpProviderID + 61, // 114: caos.zitadel.admin.api.v1.AdminService.RemoveIdpProviderFromDefaultLoginPolicy:input_type -> caos.zitadel.admin.api.v1.IdpProviderID + 76, // 115: caos.zitadel.admin.api.v1.AdminService.GetDefaultPasswordComplexityPolicy:input_type -> google.protobuf.Empty + 67, // 116: caos.zitadel.admin.api.v1.AdminService.UpdateDefaultPasswordComplexityPolicy:input_type -> caos.zitadel.admin.api.v1.DefaultPasswordComplexityPolicyRequest + 76, // 117: caos.zitadel.admin.api.v1.AdminService.GetDefaultPasswordAgePolicy:input_type -> google.protobuf.Empty + 70, // 118: caos.zitadel.admin.api.v1.AdminService.UpdateDefaultPasswordAgePolicy:input_type -> caos.zitadel.admin.api.v1.DefaultPasswordAgePolicyRequest + 76, // 119: caos.zitadel.admin.api.v1.AdminService.GetDefaultPasswordLockoutPolicy:input_type -> google.protobuf.Empty + 73, // 120: caos.zitadel.admin.api.v1.AdminService.UpdateDefaultPasswordLockoutPolicy:input_type -> caos.zitadel.admin.api.v1.DefaultPasswordLockoutPolicyRequest + 76, // 121: caos.zitadel.admin.api.v1.AdminService.Healthz:output_type -> google.protobuf.Empty + 76, // 122: caos.zitadel.admin.api.v1.AdminService.Ready:output_type -> google.protobuf.Empty + 77, // 123: caos.zitadel.admin.api.v1.AdminService.Validate:output_type -> google.protobuf.Struct + 14, // 124: caos.zitadel.admin.api.v1.AdminService.IsOrgUnique:output_type -> caos.zitadel.admin.api.v1.UniqueOrgResponse + 15, // 125: caos.zitadel.admin.api.v1.AdminService.GetOrgByID:output_type -> caos.zitadel.admin.api.v1.Org + 18, // 126: caos.zitadel.admin.api.v1.AdminService.SearchOrgs:output_type -> caos.zitadel.admin.api.v1.OrgSearchResponse + 20, // 127: caos.zitadel.admin.api.v1.AdminService.SetUpOrg:output_type -> caos.zitadel.admin.api.v1.OrgSetUpResponse + 30, // 128: caos.zitadel.admin.api.v1.AdminService.GetDefaultOrgIAMPolicy:output_type -> caos.zitadel.admin.api.v1.OrgIamPolicyView + 29, // 129: caos.zitadel.admin.api.v1.AdminService.UpdateDefaultOrgIamPolicy:output_type -> caos.zitadel.admin.api.v1.OrgIAMPolicy + 30, // 130: caos.zitadel.admin.api.v1.AdminService.GetOrgIAMPolicy:output_type -> caos.zitadel.admin.api.v1.OrgIamPolicyView + 29, // 131: caos.zitadel.admin.api.v1.AdminService.CreateOrgIAMPolicy:output_type -> caos.zitadel.admin.api.v1.OrgIAMPolicy + 29, // 132: caos.zitadel.admin.api.v1.AdminService.UpdateOrgIamPolicy:output_type -> caos.zitadel.admin.api.v1.OrgIAMPolicy + 76, // 133: caos.zitadel.admin.api.v1.AdminService.RemoveOrgIAMPolicy:output_type -> google.protobuf.Empty + 33, // 134: caos.zitadel.admin.api.v1.AdminService.GetIamMemberRoles:output_type -> caos.zitadel.admin.api.v1.IamMemberRoles + 34, // 135: caos.zitadel.admin.api.v1.AdminService.AddIamMember:output_type -> caos.zitadel.admin.api.v1.IamMember + 34, // 136: caos.zitadel.admin.api.v1.AdminService.ChangeIamMember:output_type -> caos.zitadel.admin.api.v1.IamMember + 76, // 137: caos.zitadel.admin.api.v1.AdminService.RemoveIamMember:output_type -> google.protobuf.Empty + 38, // 138: caos.zitadel.admin.api.v1.AdminService.SearchIamMembers:output_type -> caos.zitadel.admin.api.v1.IamMemberSearchResponse + 46, // 139: caos.zitadel.admin.api.v1.AdminService.GetViews:output_type -> caos.zitadel.admin.api.v1.Views + 76, // 140: caos.zitadel.admin.api.v1.AdminService.ClearView:output_type -> google.protobuf.Empty + 43, // 141: caos.zitadel.admin.api.v1.AdminService.GetFailedEvents:output_type -> caos.zitadel.admin.api.v1.FailedEvents + 76, // 142: caos.zitadel.admin.api.v1.AdminService.RemoveFailedEvent:output_type -> google.protobuf.Empty + 55, // 143: caos.zitadel.admin.api.v1.AdminService.IdpByID:output_type -> caos.zitadel.admin.api.v1.IdpView + 49, // 144: caos.zitadel.admin.api.v1.AdminService.CreateOidcIdp:output_type -> caos.zitadel.admin.api.v1.Idp + 49, // 145: caos.zitadel.admin.api.v1.AdminService.UpdateIdpConfig:output_type -> caos.zitadel.admin.api.v1.Idp + 49, // 146: caos.zitadel.admin.api.v1.AdminService.DeactivateIdpConfig:output_type -> caos.zitadel.admin.api.v1.Idp + 49, // 147: caos.zitadel.admin.api.v1.AdminService.ReactivateIdpConfig:output_type -> caos.zitadel.admin.api.v1.Idp + 76, // 148: caos.zitadel.admin.api.v1.AdminService.RemoveIdpConfig:output_type -> google.protobuf.Empty + 51, // 149: caos.zitadel.admin.api.v1.AdminService.UpdateOidcIdpConfig:output_type -> caos.zitadel.admin.api.v1.OidcIdpConfig + 54, // 150: caos.zitadel.admin.api.v1.AdminService.SearchIdps:output_type -> caos.zitadel.admin.api.v1.IdpSearchResponse + 62, // 151: caos.zitadel.admin.api.v1.AdminService.GetDefaultLoginPolicy:output_type -> caos.zitadel.admin.api.v1.DefaultLoginPolicyView + 59, // 152: caos.zitadel.admin.api.v1.AdminService.UpdateDefaultLoginPolicy:output_type -> caos.zitadel.admin.api.v1.DefaultLoginPolicy + 64, // 153: caos.zitadel.admin.api.v1.AdminService.GetDefaultLoginPolicyIdpProviders:output_type -> caos.zitadel.admin.api.v1.IdpProviderSearchResponse + 61, // 154: caos.zitadel.admin.api.v1.AdminService.AddIdpProviderToDefaultLoginPolicy:output_type -> caos.zitadel.admin.api.v1.IdpProviderID + 76, // 155: caos.zitadel.admin.api.v1.AdminService.RemoveIdpProviderFromDefaultLoginPolicy:output_type -> google.protobuf.Empty + 68, // 156: caos.zitadel.admin.api.v1.AdminService.GetDefaultPasswordComplexityPolicy:output_type -> caos.zitadel.admin.api.v1.DefaultPasswordComplexityPolicyView + 66, // 157: caos.zitadel.admin.api.v1.AdminService.UpdateDefaultPasswordComplexityPolicy:output_type -> caos.zitadel.admin.api.v1.DefaultPasswordComplexityPolicy + 71, // 158: caos.zitadel.admin.api.v1.AdminService.GetDefaultPasswordAgePolicy:output_type -> caos.zitadel.admin.api.v1.DefaultPasswordAgePolicyView + 69, // 159: caos.zitadel.admin.api.v1.AdminService.UpdateDefaultPasswordAgePolicy:output_type -> caos.zitadel.admin.api.v1.DefaultPasswordAgePolicy + 74, // 160: caos.zitadel.admin.api.v1.AdminService.GetDefaultPasswordLockoutPolicy:output_type -> caos.zitadel.admin.api.v1.DefaultPasswordLockoutPolicyView + 72, // 161: caos.zitadel.admin.api.v1.AdminService.UpdateDefaultPasswordLockoutPolicy:output_type -> caos.zitadel.admin.api.v1.DefaultPasswordLockoutPolicy + 121, // [121:162] is the sub-list for method output_type + 80, // [80:121] is the sub-list for method input_type + 80, // [80:80] is the sub-list for extension type_name + 80, // [80:80] is the sub-list for extension extendee + 0, // [0:80] is the sub-list for field type_name } func init() { file_admin_proto_init() } @@ -6012,7 +7163,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OrgIamPolicyRequest); i { + switch v := v.(*OrgIamPolicyView); i { case 0: return &v.state case 1: @@ -6024,7 +7175,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OrgIamPolicyID); i { + switch v := v.(*OrgIamPolicyRequest); i { case 0: return &v.state case 1: @@ -6036,7 +7187,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IamMemberRoles); i { + switch v := v.(*OrgIamPolicyID); i { case 0: return &v.state case 1: @@ -6048,7 +7199,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IamMember); i { + switch v := v.(*IamMemberRoles); i { case 0: return &v.state case 1: @@ -6060,7 +7211,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddIamMemberRequest); i { + switch v := v.(*IamMember); i { case 0: return &v.state case 1: @@ -6072,7 +7223,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangeIamMemberRequest); i { + switch v := v.(*AddIamMemberRequest); i { case 0: return &v.state case 1: @@ -6084,7 +7235,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemoveIamMemberRequest); i { + switch v := v.(*ChangeIamMemberRequest); i { case 0: return &v.state case 1: @@ -6096,7 +7247,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IamMemberSearchResponse); i { + switch v := v.(*RemoveIamMemberRequest); i { case 0: return &v.state case 1: @@ -6108,7 +7259,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IamMemberView); i { + switch v := v.(*IamMemberSearchResponse); i { case 0: return &v.state case 1: @@ -6120,7 +7271,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IamMemberSearchRequest); i { + switch v := v.(*IamMemberView); i { case 0: return &v.state case 1: @@ -6132,7 +7283,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IamMemberSearchQuery); i { + switch v := v.(*IamMemberSearchRequest); i { case 0: return &v.state case 1: @@ -6144,7 +7295,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FailedEventID); i { + switch v := v.(*IamMemberSearchQuery); i { case 0: return &v.state case 1: @@ -6156,7 +7307,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FailedEvents); i { + switch v := v.(*FailedEventID); i { case 0: return &v.state case 1: @@ -6168,7 +7319,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FailedEvent); i { + switch v := v.(*FailedEvents); i { case 0: return &v.state case 1: @@ -6180,7 +7331,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ViewID); i { + switch v := v.(*FailedEvent); i { case 0: return &v.state case 1: @@ -6192,7 +7343,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Views); i { + switch v := v.(*ViewID); i { case 0: return &v.state case 1: @@ -6204,7 +7355,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*View); i { + switch v := v.(*Views); i { case 0: return &v.state case 1: @@ -6216,7 +7367,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdpID); i { + switch v := v.(*View); i { case 0: return &v.state case 1: @@ -6228,7 +7379,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Idp); i { + switch v := v.(*IdpID); i { case 0: return &v.state case 1: @@ -6240,7 +7391,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdpUpdate); i { + switch v := v.(*Idp); i { case 0: return &v.state case 1: @@ -6252,7 +7403,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OidcIdpConfig); i { + switch v := v.(*IdpUpdate); i { case 0: return &v.state case 1: @@ -6264,7 +7415,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OidcIdpConfigCreate); i { + switch v := v.(*OidcIdpConfig); i { case 0: return &v.state case 1: @@ -6276,7 +7427,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OidcIdpConfigUpdate); i { + switch v := v.(*OidcIdpConfigCreate); i { case 0: return &v.state case 1: @@ -6288,7 +7439,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdpSearchResponse); i { + switch v := v.(*OidcIdpConfigUpdate); i { case 0: return &v.state case 1: @@ -6300,7 +7451,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdpView); i { + switch v := v.(*IdpSearchResponse); i { case 0: return &v.state case 1: @@ -6312,7 +7463,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OidcIdpConfigView); i { + switch v := v.(*IdpView); i { case 0: return &v.state case 1: @@ -6324,7 +7475,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdpSearchRequest); i { + switch v := v.(*OidcIdpConfigView); i { case 0: return &v.state case 1: @@ -6336,7 +7487,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdpSearchQuery); i { + switch v := v.(*IdpSearchRequest); i { case 0: return &v.state case 1: @@ -6348,7 +7499,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DefaultLoginPolicy); i { + switch v := v.(*IdpSearchQuery); i { case 0: return &v.state case 1: @@ -6360,7 +7511,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdpProviderID); i { + switch v := v.(*DefaultLoginPolicy); i { case 0: return &v.state case 1: @@ -6372,7 +7523,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DefaultLoginPolicyView); i { + switch v := v.(*DefaultLoginPolicyRequest); i { case 0: return &v.state case 1: @@ -6384,7 +7535,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdpProviderView); i { + switch v := v.(*IdpProviderID); i { case 0: return &v.state case 1: @@ -6396,7 +7547,7 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdpProviderSearchResponse); i { + switch v := v.(*DefaultLoginPolicyView); i { case 0: return &v.state case 1: @@ -6408,6 +7559,30 @@ func file_admin_proto_init() { } } file_admin_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IdpProviderView); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_admin_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IdpProviderSearchResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_admin_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IdpProviderSearchRequest); i { case 0: return &v.state @@ -6419,6 +7594,114 @@ func file_admin_proto_init() { return nil } } + file_admin_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DefaultPasswordComplexityPolicy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_admin_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DefaultPasswordComplexityPolicyRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_admin_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DefaultPasswordComplexityPolicyView); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_admin_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DefaultPasswordAgePolicy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_admin_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DefaultPasswordAgePolicyRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_admin_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DefaultPasswordAgePolicyView); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_admin_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DefaultPasswordLockoutPolicy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_admin_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DefaultPasswordLockoutPolicyRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_admin_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DefaultPasswordLockoutPolicyView); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_admin_proto_msgTypes[9].OneofWrappers = []interface{}{ (*CreateUserRequest_Human)(nil), @@ -6428,10 +7711,10 @@ func file_admin_proto_init() { (*UserResponse_Human)(nil), (*UserResponse_Machine)(nil), } - file_admin_proto_msgTypes[36].OneofWrappers = []interface{}{ + file_admin_proto_msgTypes[37].OneofWrappers = []interface{}{ (*Idp_OidcConfig)(nil), } - file_admin_proto_msgTypes[42].OneofWrappers = []interface{}{ + file_admin_proto_msgTypes[43].OneofWrappers = []interface{}{ (*IdpView_OidcConfig)(nil), } type x struct{} @@ -6440,7 +7723,7 @@ func file_admin_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_admin_proto_rawDesc, NumEnums: 12, - NumMessages: 52, + NumMessages: 63, NumExtensions: 0, NumServices: 1, }, @@ -6478,10 +7761,12 @@ type AdminServiceClient interface { SearchOrgs(ctx context.Context, in *OrgSearchRequest, opts ...grpc.CallOption) (*OrgSearchResponse, error) SetUpOrg(ctx context.Context, in *OrgSetUpRequest, opts ...grpc.CallOption) (*OrgSetUpResponse, error) //ORG_IAM_POLICY - GetOrgIamPolicy(ctx context.Context, in *OrgIamPolicyID, opts ...grpc.CallOption) (*OrgIamPolicy, error) + GetDefaultOrgIamPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*OrgIamPolicyView, error) + UpdateDefaultOrgIamPolicy(ctx context.Context, in *OrgIamPolicyRequest, opts ...grpc.CallOption) (*OrgIamPolicy, error) + GetOrgIamPolicy(ctx context.Context, in *OrgIamPolicyID, opts ...grpc.CallOption) (*OrgIamPolicyView, error) CreateOrgIamPolicy(ctx context.Context, in *OrgIamPolicyRequest, opts ...grpc.CallOption) (*OrgIamPolicy, error) UpdateOrgIamPolicy(ctx context.Context, in *OrgIamPolicyRequest, opts ...grpc.CallOption) (*OrgIamPolicy, error) - DeleteOrgIamPolicy(ctx context.Context, in *OrgIamPolicyID, opts ...grpc.CallOption) (*empty.Empty, error) + RemoveOrgIamPolicy(ctx context.Context, in *OrgIamPolicyID, opts ...grpc.CallOption) (*empty.Empty, error) GetIamMemberRoles(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*IamMemberRoles, error) AddIamMember(ctx context.Context, in *AddIamMemberRequest, opts ...grpc.CallOption) (*IamMember, error) ChangeIamMember(ctx context.Context, in *ChangeIamMemberRequest, opts ...grpc.CallOption) (*IamMember, error) @@ -6500,10 +7785,16 @@ type AdminServiceClient interface { UpdateOidcIdpConfig(ctx context.Context, in *OidcIdpConfigUpdate, opts ...grpc.CallOption) (*OidcIdpConfig, error) SearchIdps(ctx context.Context, in *IdpSearchRequest, opts ...grpc.CallOption) (*IdpSearchResponse, error) GetDefaultLoginPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*DefaultLoginPolicyView, error) - UpdateDefaultLoginPolicy(ctx context.Context, in *DefaultLoginPolicy, opts ...grpc.CallOption) (*DefaultLoginPolicy, error) + UpdateDefaultLoginPolicy(ctx context.Context, in *DefaultLoginPolicyRequest, opts ...grpc.CallOption) (*DefaultLoginPolicy, error) GetDefaultLoginPolicyIdpProviders(ctx context.Context, in *IdpProviderSearchRequest, opts ...grpc.CallOption) (*IdpProviderSearchResponse, error) AddIdpProviderToDefaultLoginPolicy(ctx context.Context, in *IdpProviderID, opts ...grpc.CallOption) (*IdpProviderID, error) RemoveIdpProviderFromDefaultLoginPolicy(ctx context.Context, in *IdpProviderID, opts ...grpc.CallOption) (*empty.Empty, error) + GetDefaultPasswordComplexityPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*DefaultPasswordComplexityPolicyView, error) + UpdateDefaultPasswordComplexityPolicy(ctx context.Context, in *DefaultPasswordComplexityPolicyRequest, opts ...grpc.CallOption) (*DefaultPasswordComplexityPolicy, error) + GetDefaultPasswordAgePolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*DefaultPasswordAgePolicyView, error) + UpdateDefaultPasswordAgePolicy(ctx context.Context, in *DefaultPasswordAgePolicyRequest, opts ...grpc.CallOption) (*DefaultPasswordAgePolicy, error) + GetDefaultPasswordLockoutPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*DefaultPasswordLockoutPolicyView, error) + UpdateDefaultPasswordLockoutPolicy(ctx context.Context, in *DefaultPasswordLockoutPolicyRequest, opts ...grpc.CallOption) (*DefaultPasswordLockoutPolicy, error) } type adminServiceClient struct { @@ -6577,9 +7868,27 @@ func (c *adminServiceClient) SetUpOrg(ctx context.Context, in *OrgSetUpRequest, return out, nil } -func (c *adminServiceClient) GetOrgIamPolicy(ctx context.Context, in *OrgIamPolicyID, opts ...grpc.CallOption) (*OrgIamPolicy, error) { +func (c *adminServiceClient) GetDefaultOrgIamPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*OrgIamPolicyView, error) { + out := new(OrgIamPolicyView) + err := c.cc.Invoke(ctx, "/caos.zitadel.admin.api.v1.AdminService/GetDefaultOrgIAMPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminServiceClient) UpdateDefaultOrgIamPolicy(ctx context.Context, in *OrgIamPolicyRequest, opts ...grpc.CallOption) (*OrgIamPolicy, error) { out := new(OrgIamPolicy) - err := c.cc.Invoke(ctx, "/caos.zitadel.admin.api.v1.AdminService/GetOrgIamPolicy", in, out, opts...) + err := c.cc.Invoke(ctx, "/caos.zitadel.admin.api.v1.AdminService/UpdateDefaultOrgIamPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminServiceClient) GetOrgIamPolicy(ctx context.Context, in *OrgIamPolicyID, opts ...grpc.CallOption) (*OrgIamPolicyView, error) { + out := new(OrgIamPolicyView) + err := c.cc.Invoke(ctx, "/caos.zitadel.admin.api.v1.AdminService/GetOrgIAMPolicy", in, out, opts...) if err != nil { return nil, err } @@ -6588,7 +7897,7 @@ func (c *adminServiceClient) GetOrgIamPolicy(ctx context.Context, in *OrgIamPoli func (c *adminServiceClient) CreateOrgIamPolicy(ctx context.Context, in *OrgIamPolicyRequest, opts ...grpc.CallOption) (*OrgIamPolicy, error) { out := new(OrgIamPolicy) - err := c.cc.Invoke(ctx, "/caos.zitadel.admin.api.v1.AdminService/CreateOrgIamPolicy", in, out, opts...) + err := c.cc.Invoke(ctx, "/caos.zitadel.admin.api.v1.AdminService/CreateOrgIAMPolicy", in, out, opts...) if err != nil { return nil, err } @@ -6604,9 +7913,9 @@ func (c *adminServiceClient) UpdateOrgIamPolicy(ctx context.Context, in *OrgIamP return out, nil } -func (c *adminServiceClient) DeleteOrgIamPolicy(ctx context.Context, in *OrgIamPolicyID, opts ...grpc.CallOption) (*empty.Empty, error) { +func (c *adminServiceClient) RemoveOrgIamPolicy(ctx context.Context, in *OrgIamPolicyID, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/caos.zitadel.admin.api.v1.AdminService/DeleteOrgIamPolicy", in, out, opts...) + err := c.cc.Invoke(ctx, "/caos.zitadel.admin.api.v1.AdminService/RemoveOrgIAMPolicy", in, out, opts...) if err != nil { return nil, err } @@ -6775,7 +8084,7 @@ func (c *adminServiceClient) GetDefaultLoginPolicy(ctx context.Context, in *empt return out, nil } -func (c *adminServiceClient) UpdateDefaultLoginPolicy(ctx context.Context, in *DefaultLoginPolicy, opts ...grpc.CallOption) (*DefaultLoginPolicy, error) { +func (c *adminServiceClient) UpdateDefaultLoginPolicy(ctx context.Context, in *DefaultLoginPolicyRequest, opts ...grpc.CallOption) (*DefaultLoginPolicy, error) { out := new(DefaultLoginPolicy) err := c.cc.Invoke(ctx, "/caos.zitadel.admin.api.v1.AdminService/UpdateDefaultLoginPolicy", in, out, opts...) if err != nil { @@ -6811,6 +8120,60 @@ func (c *adminServiceClient) RemoveIdpProviderFromDefaultLoginPolicy(ctx context return out, nil } +func (c *adminServiceClient) GetDefaultPasswordComplexityPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*DefaultPasswordComplexityPolicyView, error) { + out := new(DefaultPasswordComplexityPolicyView) + err := c.cc.Invoke(ctx, "/caos.zitadel.admin.api.v1.AdminService/GetDefaultPasswordComplexityPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminServiceClient) UpdateDefaultPasswordComplexityPolicy(ctx context.Context, in *DefaultPasswordComplexityPolicyRequest, opts ...grpc.CallOption) (*DefaultPasswordComplexityPolicy, error) { + out := new(DefaultPasswordComplexityPolicy) + err := c.cc.Invoke(ctx, "/caos.zitadel.admin.api.v1.AdminService/UpdateDefaultPasswordComplexityPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminServiceClient) GetDefaultPasswordAgePolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*DefaultPasswordAgePolicyView, error) { + out := new(DefaultPasswordAgePolicyView) + err := c.cc.Invoke(ctx, "/caos.zitadel.admin.api.v1.AdminService/GetDefaultPasswordAgePolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminServiceClient) UpdateDefaultPasswordAgePolicy(ctx context.Context, in *DefaultPasswordAgePolicyRequest, opts ...grpc.CallOption) (*DefaultPasswordAgePolicy, error) { + out := new(DefaultPasswordAgePolicy) + err := c.cc.Invoke(ctx, "/caos.zitadel.admin.api.v1.AdminService/UpdateDefaultPasswordAgePolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminServiceClient) GetDefaultPasswordLockoutPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*DefaultPasswordLockoutPolicyView, error) { + out := new(DefaultPasswordLockoutPolicyView) + err := c.cc.Invoke(ctx, "/caos.zitadel.admin.api.v1.AdminService/GetDefaultPasswordLockoutPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *adminServiceClient) UpdateDefaultPasswordLockoutPolicy(ctx context.Context, in *DefaultPasswordLockoutPolicyRequest, opts ...grpc.CallOption) (*DefaultPasswordLockoutPolicy, error) { + out := new(DefaultPasswordLockoutPolicy) + err := c.cc.Invoke(ctx, "/caos.zitadel.admin.api.v1.AdminService/UpdateDefaultPasswordLockoutPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // AdminServiceServer is the server API for AdminService service. type AdminServiceServer interface { // Healthz returns status OK as soon as the service started @@ -6824,10 +8187,12 @@ type AdminServiceServer interface { SearchOrgs(context.Context, *OrgSearchRequest) (*OrgSearchResponse, error) SetUpOrg(context.Context, *OrgSetUpRequest) (*OrgSetUpResponse, error) //ORG_IAM_POLICY - GetOrgIamPolicy(context.Context, *OrgIamPolicyID) (*OrgIamPolicy, error) + GetDefaultOrgIamPolicy(context.Context, *empty.Empty) (*OrgIamPolicyView, error) + UpdateDefaultOrgIamPolicy(context.Context, *OrgIamPolicyRequest) (*OrgIamPolicy, error) + GetOrgIamPolicy(context.Context, *OrgIamPolicyID) (*OrgIamPolicyView, error) CreateOrgIamPolicy(context.Context, *OrgIamPolicyRequest) (*OrgIamPolicy, error) UpdateOrgIamPolicy(context.Context, *OrgIamPolicyRequest) (*OrgIamPolicy, error) - DeleteOrgIamPolicy(context.Context, *OrgIamPolicyID) (*empty.Empty, error) + RemoveOrgIamPolicy(context.Context, *OrgIamPolicyID) (*empty.Empty, error) GetIamMemberRoles(context.Context, *empty.Empty) (*IamMemberRoles, error) AddIamMember(context.Context, *AddIamMemberRequest) (*IamMember, error) ChangeIamMember(context.Context, *ChangeIamMemberRequest) (*IamMember, error) @@ -6846,10 +8211,16 @@ type AdminServiceServer interface { UpdateOidcIdpConfig(context.Context, *OidcIdpConfigUpdate) (*OidcIdpConfig, error) SearchIdps(context.Context, *IdpSearchRequest) (*IdpSearchResponse, error) GetDefaultLoginPolicy(context.Context, *empty.Empty) (*DefaultLoginPolicyView, error) - UpdateDefaultLoginPolicy(context.Context, *DefaultLoginPolicy) (*DefaultLoginPolicy, error) + UpdateDefaultLoginPolicy(context.Context, *DefaultLoginPolicyRequest) (*DefaultLoginPolicy, error) GetDefaultLoginPolicyIdpProviders(context.Context, *IdpProviderSearchRequest) (*IdpProviderSearchResponse, error) AddIdpProviderToDefaultLoginPolicy(context.Context, *IdpProviderID) (*IdpProviderID, error) RemoveIdpProviderFromDefaultLoginPolicy(context.Context, *IdpProviderID) (*empty.Empty, error) + GetDefaultPasswordComplexityPolicy(context.Context, *empty.Empty) (*DefaultPasswordComplexityPolicyView, error) + UpdateDefaultPasswordComplexityPolicy(context.Context, *DefaultPasswordComplexityPolicyRequest) (*DefaultPasswordComplexityPolicy, error) + GetDefaultPasswordAgePolicy(context.Context, *empty.Empty) (*DefaultPasswordAgePolicyView, error) + UpdateDefaultPasswordAgePolicy(context.Context, *DefaultPasswordAgePolicyRequest) (*DefaultPasswordAgePolicy, error) + GetDefaultPasswordLockoutPolicy(context.Context, *empty.Empty) (*DefaultPasswordLockoutPolicyView, error) + UpdateDefaultPasswordLockoutPolicy(context.Context, *DefaultPasswordLockoutPolicyRequest) (*DefaultPasswordLockoutPolicy, error) } // UnimplementedAdminServiceServer can be embedded to have forward compatible implementations. @@ -6877,17 +8248,23 @@ func (*UnimplementedAdminServiceServer) SearchOrgs(context.Context, *OrgSearchRe func (*UnimplementedAdminServiceServer) SetUpOrg(context.Context, *OrgSetUpRequest) (*OrgSetUpResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SetUpOrg not implemented") } -func (*UnimplementedAdminServiceServer) GetOrgIamPolicy(context.Context, *OrgIamPolicyID) (*OrgIamPolicy, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetOrgIamPolicy not implemented") +func (*UnimplementedAdminServiceServer) GetDefaultOrgIamPolicy(context.Context, *empty.Empty) (*OrgIamPolicyView, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDefaultOrgIAMPolicy not implemented") +} +func (*UnimplementedAdminServiceServer) UpdateDefaultOrgIamPolicy(context.Context, *OrgIamPolicyRequest) (*OrgIamPolicy, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateDefaultOrgIamPolicy not implemented") +} +func (*UnimplementedAdminServiceServer) GetOrgIamPolicy(context.Context, *OrgIamPolicyID) (*OrgIamPolicyView, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetOrgIAMPolicy not implemented") } func (*UnimplementedAdminServiceServer) CreateOrgIamPolicy(context.Context, *OrgIamPolicyRequest) (*OrgIamPolicy, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateOrgIamPolicy not implemented") + return nil, status.Errorf(codes.Unimplemented, "method CreateOrgIAMPolicy not implemented") } func (*UnimplementedAdminServiceServer) UpdateOrgIamPolicy(context.Context, *OrgIamPolicyRequest) (*OrgIamPolicy, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateOrgIamPolicy not implemented") } -func (*UnimplementedAdminServiceServer) DeleteOrgIamPolicy(context.Context, *OrgIamPolicyID) (*empty.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteOrgIamPolicy not implemented") +func (*UnimplementedAdminServiceServer) RemoveOrgIamPolicy(context.Context, *OrgIamPolicyID) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method RemoveOrgIAMPolicy not implemented") } func (*UnimplementedAdminServiceServer) GetIamMemberRoles(context.Context, *empty.Empty) (*IamMemberRoles, error) { return nil, status.Errorf(codes.Unimplemented, "method GetIamMemberRoles not implemented") @@ -6943,7 +8320,7 @@ func (*UnimplementedAdminServiceServer) SearchIdps(context.Context, *IdpSearchRe func (*UnimplementedAdminServiceServer) GetDefaultLoginPolicy(context.Context, *empty.Empty) (*DefaultLoginPolicyView, error) { return nil, status.Errorf(codes.Unimplemented, "method GetDefaultLoginPolicy not implemented") } -func (*UnimplementedAdminServiceServer) UpdateDefaultLoginPolicy(context.Context, *DefaultLoginPolicy) (*DefaultLoginPolicy, error) { +func (*UnimplementedAdminServiceServer) UpdateDefaultLoginPolicy(context.Context, *DefaultLoginPolicyRequest) (*DefaultLoginPolicy, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateDefaultLoginPolicy not implemented") } func (*UnimplementedAdminServiceServer) GetDefaultLoginPolicyIdpProviders(context.Context, *IdpProviderSearchRequest) (*IdpProviderSearchResponse, error) { @@ -6955,6 +8332,24 @@ func (*UnimplementedAdminServiceServer) AddIdpProviderToDefaultLoginPolicy(conte func (*UnimplementedAdminServiceServer) RemoveIdpProviderFromDefaultLoginPolicy(context.Context, *IdpProviderID) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method RemoveIdpProviderFromDefaultLoginPolicy not implemented") } +func (*UnimplementedAdminServiceServer) GetDefaultPasswordComplexityPolicy(context.Context, *empty.Empty) (*DefaultPasswordComplexityPolicyView, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDefaultPasswordComplexityPolicy not implemented") +} +func (*UnimplementedAdminServiceServer) UpdateDefaultPasswordComplexityPolicy(context.Context, *DefaultPasswordComplexityPolicyRequest) (*DefaultPasswordComplexityPolicy, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateDefaultPasswordComplexityPolicy not implemented") +} +func (*UnimplementedAdminServiceServer) GetDefaultPasswordAgePolicy(context.Context, *empty.Empty) (*DefaultPasswordAgePolicyView, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDefaultPasswordAgePolicy not implemented") +} +func (*UnimplementedAdminServiceServer) UpdateDefaultPasswordAgePolicy(context.Context, *DefaultPasswordAgePolicyRequest) (*DefaultPasswordAgePolicy, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateDefaultPasswordAgePolicy not implemented") +} +func (*UnimplementedAdminServiceServer) GetDefaultPasswordLockoutPolicy(context.Context, *empty.Empty) (*DefaultPasswordLockoutPolicyView, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDefaultPasswordLockoutPolicy not implemented") +} +func (*UnimplementedAdminServiceServer) UpdateDefaultPasswordLockoutPolicy(context.Context, *DefaultPasswordLockoutPolicyRequest) (*DefaultPasswordLockoutPolicy, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateDefaultPasswordLockoutPolicy not implemented") +} func RegisterAdminServiceServer(s *grpc.Server, srv AdminServiceServer) { s.RegisterService(&_AdminService_serviceDesc, srv) @@ -7086,6 +8481,42 @@ func _AdminService_SetUpOrg_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } +func _AdminService_GetDefaultOrgIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminServiceServer).GetDefaultOrgIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.admin.api.v1.AdminService/GetDefaultOrgIAMPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminServiceServer).GetDefaultOrgIamPolicy(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminService_UpdateDefaultOrgIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(OrgIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminServiceServer).UpdateDefaultOrgIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.admin.api.v1.AdminService/UpdateDefaultOrgIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminServiceServer).UpdateDefaultOrgIamPolicy(ctx, req.(*OrgIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _AdminService_GetOrgIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(OrgIamPolicyID) if err := dec(in); err != nil { @@ -7096,7 +8527,7 @@ func _AdminService_GetOrgIamPolicy_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/caos.zitadel.admin.api.v1.AdminService/GetOrgIamPolicy", + FullMethod: "/caos.zitadel.admin.api.v1.AdminService/GetOrgIAMPolicy", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(AdminServiceServer).GetOrgIamPolicy(ctx, req.(*OrgIamPolicyID)) @@ -7114,7 +8545,7 @@ func _AdminService_CreateOrgIamPolicy_Handler(srv interface{}, ctx context.Conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/caos.zitadel.admin.api.v1.AdminService/CreateOrgIamPolicy", + FullMethod: "/caos.zitadel.admin.api.v1.AdminService/CreateOrgIAMPolicy", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(AdminServiceServer).CreateOrgIamPolicy(ctx, req.(*OrgIamPolicyRequest)) @@ -7140,20 +8571,20 @@ func _AdminService_UpdateOrgIamPolicy_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } -func _AdminService_DeleteOrgIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _AdminService_RemoveOrgIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(OrgIamPolicyID) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(AdminServiceServer).DeleteOrgIamPolicy(ctx, in) + return srv.(AdminServiceServer).RemoveOrgIamPolicy(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/caos.zitadel.admin.api.v1.AdminService/DeleteOrgIamPolicy", + FullMethod: "/caos.zitadel.admin.api.v1.AdminService/RemoveOrgIAMPolicy", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AdminServiceServer).DeleteOrgIamPolicy(ctx, req.(*OrgIamPolicyID)) + return srv.(AdminServiceServer).RemoveOrgIamPolicy(ctx, req.(*OrgIamPolicyID)) } return interceptor(ctx, in, info, handler) } @@ -7483,7 +8914,7 @@ func _AdminService_GetDefaultLoginPolicy_Handler(srv interface{}, ctx context.Co } func _AdminService_UpdateDefaultLoginPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DefaultLoginPolicy) + in := new(DefaultLoginPolicyRequest) if err := dec(in); err != nil { return nil, err } @@ -7495,7 +8926,7 @@ func _AdminService_UpdateDefaultLoginPolicy_Handler(srv interface{}, ctx context FullMethod: "/caos.zitadel.admin.api.v1.AdminService/UpdateDefaultLoginPolicy", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AdminServiceServer).UpdateDefaultLoginPolicy(ctx, req.(*DefaultLoginPolicy)) + return srv.(AdminServiceServer).UpdateDefaultLoginPolicy(ctx, req.(*DefaultLoginPolicyRequest)) } return interceptor(ctx, in, info, handler) } @@ -7554,6 +8985,114 @@ func _AdminService_RemoveIdpProviderFromDefaultLoginPolicy_Handler(srv interface return interceptor(ctx, in, info, handler) } +func _AdminService_GetDefaultPasswordComplexityPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminServiceServer).GetDefaultPasswordComplexityPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.admin.api.v1.AdminService/GetDefaultPasswordComplexityPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminServiceServer).GetDefaultPasswordComplexityPolicy(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminService_UpdateDefaultPasswordComplexityPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DefaultPasswordComplexityPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminServiceServer).UpdateDefaultPasswordComplexityPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.admin.api.v1.AdminService/UpdateDefaultPasswordComplexityPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminServiceServer).UpdateDefaultPasswordComplexityPolicy(ctx, req.(*DefaultPasswordComplexityPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminService_GetDefaultPasswordAgePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminServiceServer).GetDefaultPasswordAgePolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.admin.api.v1.AdminService/GetDefaultPasswordAgePolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminServiceServer).GetDefaultPasswordAgePolicy(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminService_UpdateDefaultPasswordAgePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DefaultPasswordAgePolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminServiceServer).UpdateDefaultPasswordAgePolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.admin.api.v1.AdminService/UpdateDefaultPasswordAgePolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminServiceServer).UpdateDefaultPasswordAgePolicy(ctx, req.(*DefaultPasswordAgePolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminService_GetDefaultPasswordLockoutPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminServiceServer).GetDefaultPasswordLockoutPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.admin.api.v1.AdminService/GetDefaultPasswordLockoutPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminServiceServer).GetDefaultPasswordLockoutPolicy(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _AdminService_UpdateDefaultPasswordLockoutPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DefaultPasswordLockoutPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminServiceServer).UpdateDefaultPasswordLockoutPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.admin.api.v1.AdminService/UpdateDefaultPasswordLockoutPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminServiceServer).UpdateDefaultPasswordLockoutPolicy(ctx, req.(*DefaultPasswordLockoutPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _AdminService_serviceDesc = grpc.ServiceDesc{ ServiceName: "caos.zitadel.admin.api.v1.AdminService", HandlerType: (*AdminServiceServer)(nil), @@ -7587,11 +9126,19 @@ var _AdminService_serviceDesc = grpc.ServiceDesc{ Handler: _AdminService_SetUpOrg_Handler, }, { - MethodName: "GetOrgIamPolicy", + MethodName: "GetDefaultOrgIAMPolicy", + Handler: _AdminService_GetDefaultOrgIamPolicy_Handler, + }, + { + MethodName: "UpdateDefaultOrgIamPolicy", + Handler: _AdminService_UpdateDefaultOrgIamPolicy_Handler, + }, + { + MethodName: "GetOrgIAMPolicy", Handler: _AdminService_GetOrgIamPolicy_Handler, }, { - MethodName: "CreateOrgIamPolicy", + MethodName: "CreateOrgIAMPolicy", Handler: _AdminService_CreateOrgIamPolicy_Handler, }, { @@ -7599,8 +9146,8 @@ var _AdminService_serviceDesc = grpc.ServiceDesc{ Handler: _AdminService_UpdateOrgIamPolicy_Handler, }, { - MethodName: "DeleteOrgIamPolicy", - Handler: _AdminService_DeleteOrgIamPolicy_Handler, + MethodName: "RemoveOrgIAMPolicy", + Handler: _AdminService_RemoveOrgIamPolicy_Handler, }, { MethodName: "GetIamMemberRoles", @@ -7690,6 +9237,30 @@ var _AdminService_serviceDesc = grpc.ServiceDesc{ MethodName: "RemoveIdpProviderFromDefaultLoginPolicy", Handler: _AdminService_RemoveIdpProviderFromDefaultLoginPolicy_Handler, }, + { + MethodName: "GetDefaultPasswordComplexityPolicy", + Handler: _AdminService_GetDefaultPasswordComplexityPolicy_Handler, + }, + { + MethodName: "UpdateDefaultPasswordComplexityPolicy", + Handler: _AdminService_UpdateDefaultPasswordComplexityPolicy_Handler, + }, + { + MethodName: "GetDefaultPasswordAgePolicy", + Handler: _AdminService_GetDefaultPasswordAgePolicy_Handler, + }, + { + MethodName: "UpdateDefaultPasswordAgePolicy", + Handler: _AdminService_UpdateDefaultPasswordAgePolicy_Handler, + }, + { + MethodName: "GetDefaultPasswordLockoutPolicy", + Handler: _AdminService_GetDefaultPasswordLockoutPolicy_Handler, + }, + { + MethodName: "UpdateDefaultPasswordLockoutPolicy", + Handler: _AdminService_UpdateDefaultPasswordLockoutPolicy_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "admin.proto", diff --git a/pkg/grpc/admin/admin.pb.gw.go b/pkg/grpc/admin/admin.pb.gw.go index c011614ab9..515520c710 100644 --- a/pkg/grpc/admin/admin.pb.gw.go +++ b/pkg/grpc/admin/admin.pb.gw.go @@ -244,6 +244,58 @@ func local_request_AdminService_SetUpOrg_0(ctx context.Context, marshaler runtim } +func request_AdminService_GetDefaultOrgIamPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.GetDefaultOrgIamPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_AdminService_GetDefaultOrgIamPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server AdminServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.GetDefaultOrgIamPolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_AdminService_UpdateDefaultOrgIamPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq OrgIamPolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdateDefaultOrgIamPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_AdminService_UpdateDefaultOrgIamPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server AdminServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq OrgIamPolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdateDefaultOrgIamPolicy(ctx, &protoReq) + return msg, metadata, err + +} + func request_AdminService_GetOrgIamPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq OrgIamPolicyID var metadata runtime.ServerMetadata @@ -438,7 +490,7 @@ func local_request_AdminService_UpdateOrgIamPolicy_0(ctx context.Context, marsha } -func request_AdminService_DeleteOrgIamPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_AdminService_RemoveOrgIamPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq OrgIamPolicyID var metadata runtime.ServerMetadata @@ -460,12 +512,12 @@ func request_AdminService_DeleteOrgIamPolicy_0(ctx context.Context, marshaler ru return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org_id", err) } - msg, err := client.DeleteOrgIamPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.RemoveOrgIamPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_AdminService_DeleteOrgIamPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server AdminServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_AdminService_RemoveOrgIamPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server AdminServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq OrgIamPolicyID var metadata runtime.ServerMetadata @@ -487,7 +539,7 @@ func local_request_AdminService_DeleteOrgIamPolicy_0(ctx context.Context, marsha return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "org_id", err) } - msg, err := server.DeleteOrgIamPolicy(ctx, &protoReq) + msg, err := server.RemoveOrgIamPolicy(ctx, &protoReq) return msg, metadata, err } @@ -1387,7 +1439,7 @@ func local_request_AdminService_GetDefaultLoginPolicy_0(ctx context.Context, mar } func request_AdminService_UpdateDefaultLoginPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DefaultLoginPolicy + var protoReq DefaultLoginPolicyRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -1404,7 +1456,7 @@ func request_AdminService_UpdateDefaultLoginPolicy_0(ctx context.Context, marsha } func local_request_AdminService_UpdateDefaultLoginPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server AdminServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DefaultLoginPolicy + var protoReq DefaultLoginPolicyRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -1542,6 +1594,162 @@ func local_request_AdminService_RemoveIdpProviderFromDefaultLoginPolicy_0(ctx co } +func request_AdminService_GetDefaultPasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.GetDefaultPasswordComplexityPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_AdminService_GetDefaultPasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server AdminServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.GetDefaultPasswordComplexityPolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_AdminService_UpdateDefaultPasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DefaultPasswordComplexityPolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdateDefaultPasswordComplexityPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_AdminService_UpdateDefaultPasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server AdminServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DefaultPasswordComplexityPolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdateDefaultPasswordComplexityPolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_AdminService_GetDefaultPasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.GetDefaultPasswordAgePolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_AdminService_GetDefaultPasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, server AdminServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.GetDefaultPasswordAgePolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_AdminService_UpdateDefaultPasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DefaultPasswordAgePolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdateDefaultPasswordAgePolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_AdminService_UpdateDefaultPasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, server AdminServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DefaultPasswordAgePolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdateDefaultPasswordAgePolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_AdminService_GetDefaultPasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.GetDefaultPasswordLockoutPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_AdminService_GetDefaultPasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server AdminServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.GetDefaultPasswordLockoutPolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_AdminService_UpdateDefaultPasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client AdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DefaultPasswordLockoutPolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdateDefaultPasswordLockoutPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_AdminService_UpdateDefaultPasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server AdminServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DefaultPasswordLockoutPolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdateDefaultPasswordLockoutPolicy(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterAdminServiceHandlerServer registers the http handlers for service AdminService to "mux". // UnaryRPC :call AdminServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -1687,6 +1895,46 @@ func RegisterAdminServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("GET", pattern_AdminService_GetDefaultOrgIamPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_AdminService_GetDefaultOrgIamPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetDefaultOrgIamPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_AdminService_UpdateDefaultOrgIamPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_AdminService_UpdateDefaultOrgIamPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_UpdateDefaultOrgIamPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_AdminService_GetOrgIamPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1747,7 +1995,7 @@ func RegisterAdminServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu }) - mux.Handle("DELETE", pattern_AdminService_DeleteOrgIamPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_AdminService_RemoveOrgIamPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -1756,14 +2004,14 @@ func RegisterAdminServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_AdminService_DeleteOrgIamPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_AdminService_RemoveOrgIamPolicy_0(rctx, inboundMarshaler, server, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_DeleteOrgIamPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_RemoveOrgIamPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2207,6 +2455,126 @@ func RegisterAdminServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("GET", pattern_AdminService_GetDefaultPasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_AdminService_GetDefaultPasswordComplexityPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetDefaultPasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_AdminService_UpdateDefaultPasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_AdminService_UpdateDefaultPasswordComplexityPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_UpdateDefaultPasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_GetDefaultPasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_AdminService_GetDefaultPasswordAgePolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetDefaultPasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_AdminService_UpdateDefaultPasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_AdminService_UpdateDefaultPasswordAgePolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_UpdateDefaultPasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_GetDefaultPasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_AdminService_GetDefaultPasswordLockoutPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetDefaultPasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_AdminService_UpdateDefaultPasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_AdminService_UpdateDefaultPasswordLockoutPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_UpdateDefaultPasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -2388,6 +2756,46 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("GET", pattern_AdminService_GetDefaultOrgIamPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetDefaultOrgIamPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetDefaultOrgIamPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_AdminService_UpdateDefaultOrgIamPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_UpdateDefaultOrgIamPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_UpdateDefaultOrgIamPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_AdminService_GetOrgIamPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2448,7 +2856,7 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) - mux.Handle("DELETE", pattern_AdminService_DeleteOrgIamPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("DELETE", pattern_AdminService_RemoveOrgIamPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -2457,14 +2865,14 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_AdminService_DeleteOrgIamPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_AdminService_RemoveOrgIamPolicy_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_AdminService_DeleteOrgIamPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_AdminService_RemoveOrgIamPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2908,6 +3316,126 @@ func RegisterAdminServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("GET", pattern_AdminService_GetDefaultPasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetDefaultPasswordComplexityPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetDefaultPasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_AdminService_UpdateDefaultPasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_UpdateDefaultPasswordComplexityPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_UpdateDefaultPasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_GetDefaultPasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetDefaultPasswordAgePolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetDefaultPasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_AdminService_UpdateDefaultPasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_UpdateDefaultPasswordAgePolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_UpdateDefaultPasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_AdminService_GetDefaultPasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_GetDefaultPasswordLockoutPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_GetDefaultPasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_AdminService_UpdateDefaultPasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AdminService_UpdateDefaultPasswordLockoutPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AdminService_UpdateDefaultPasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -2926,13 +3454,17 @@ var ( pattern_AdminService_SetUpOrg_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"orgs", "_setup"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_AdminService_GetOrgIamPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"orgs", "org_id", "iampolicy"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_AdminService_GetDefaultOrgIamPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"orgs", "default", "policies", "orgiam"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_AdminService_CreateOrgIamPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"orgs", "org_id", "iampolicy"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_AdminService_UpdateDefaultOrgIamPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"orgs", "default", "policies", "orgiam"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_AdminService_UpdateOrgIamPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"orgs", "org_id", "iampolicy"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_AdminService_GetOrgIamPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3}, []string{"orgs", "org_id", "policies", "orgiam"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_AdminService_DeleteOrgIamPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"orgs", "org_id", "iampolicy"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_AdminService_CreateOrgIamPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3}, []string{"orgs", "org_id", "policies", "orgiam"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_AdminService_UpdateOrgIamPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3}, []string{"orgs", "org_id", "policies", "orgiam"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_AdminService_RemoveOrgIamPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3}, []string{"orgs", "org_id", "policies", "orgiam"}, "", runtime.AssumeColonVerbOpt(true))) pattern_AdminService_GetIamMemberRoles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"members", "roles"}, "", runtime.AssumeColonVerbOpt(true))) @@ -2977,6 +3509,18 @@ var ( pattern_AdminService_AddIdpProviderToDefaultLoginPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "login", "idpproviders"}, "", runtime.AssumeColonVerbOpt(true))) pattern_AdminService_RemoveIdpProviderFromDefaultLoginPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"policies", "login", "idpproviders", "idp_config_id"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_AdminService_GetDefaultPasswordComplexityPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "password", "complexity"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_AdminService_UpdateDefaultPasswordComplexityPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "password", "complexity"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_AdminService_GetDefaultPasswordAgePolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "password", "age"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_AdminService_UpdateDefaultPasswordAgePolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "password", "age"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_AdminService_GetDefaultPasswordLockoutPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "password", "lockout"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_AdminService_UpdateDefaultPasswordLockoutPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "password", "lockout"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( @@ -2994,13 +3538,17 @@ var ( forward_AdminService_SetUpOrg_0 = runtime.ForwardResponseMessage + forward_AdminService_GetDefaultOrgIamPolicy_0 = runtime.ForwardResponseMessage + + forward_AdminService_UpdateDefaultOrgIamPolicy_0 = runtime.ForwardResponseMessage + forward_AdminService_GetOrgIamPolicy_0 = runtime.ForwardResponseMessage forward_AdminService_CreateOrgIamPolicy_0 = runtime.ForwardResponseMessage forward_AdminService_UpdateOrgIamPolicy_0 = runtime.ForwardResponseMessage - forward_AdminService_DeleteOrgIamPolicy_0 = runtime.ForwardResponseMessage + forward_AdminService_RemoveOrgIamPolicy_0 = runtime.ForwardResponseMessage forward_AdminService_GetIamMemberRoles_0 = runtime.ForwardResponseMessage @@ -3045,4 +3593,16 @@ var ( forward_AdminService_AddIdpProviderToDefaultLoginPolicy_0 = runtime.ForwardResponseMessage forward_AdminService_RemoveIdpProviderFromDefaultLoginPolicy_0 = runtime.ForwardResponseMessage + + forward_AdminService_GetDefaultPasswordComplexityPolicy_0 = runtime.ForwardResponseMessage + + forward_AdminService_UpdateDefaultPasswordComplexityPolicy_0 = runtime.ForwardResponseMessage + + forward_AdminService_GetDefaultPasswordAgePolicy_0 = runtime.ForwardResponseMessage + + forward_AdminService_UpdateDefaultPasswordAgePolicy_0 = runtime.ForwardResponseMessage + + forward_AdminService_GetDefaultPasswordLockoutPolicy_0 = runtime.ForwardResponseMessage + + forward_AdminService_UpdateDefaultPasswordLockoutPolicy_0 = runtime.ForwardResponseMessage ) diff --git a/pkg/grpc/admin/admin.pb.validate.go b/pkg/grpc/admin/admin.pb.validate.go index 6f0501ecc4..7204e62517 100644 --- a/pkg/grpc/admin/admin.pb.validate.go +++ b/pkg/grpc/admin/admin.pb.validate.go @@ -1687,7 +1687,7 @@ var _ interface { ErrorName() string } = CreateOrgRequestValidationError{} -// Validate checks the field values on OrgIamPolicy with the rules defined in +// Validate checks the field values on OrgIAMPolicy with the rules defined in // the proto definition for this message. If any rules are violated, an error // is returned. func (m *OrgIamPolicy) Validate() error { @@ -1697,8 +1697,6 @@ func (m *OrgIamPolicy) Validate() error { // no validation rules for OrgId - // no validation rules for Description - // no validation rules for UserLoginMustBeDomain // no validation rules for Default @@ -1729,7 +1727,7 @@ func (m *OrgIamPolicy) Validate() error { } // OrgIamPolicyValidationError is the validation error returned by -// OrgIamPolicy.Validate if the designated constraints aren't met. +// OrgIAMPolicy.Validate if the designated constraints aren't met. type OrgIamPolicyValidationError struct { field string reason string @@ -1782,6 +1780,99 @@ var _ interface { ErrorName() string } = OrgIamPolicyValidationError{} +// Validate checks the field values on OrgIamPolicyView with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *OrgIamPolicyView) Validate() error { + if m == nil { + return nil + } + + // no validation rules for OrgId + + // no validation rules for UserLoginMustBeDomain + + // no validation rules for Default + + // no validation rules for Sequence + + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OrgIamPolicyViewValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OrgIamPolicyViewValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// OrgIamPolicyViewValidationError is the validation error returned by +// OrgIamPolicyView.Validate if the designated constraints aren't met. +type OrgIamPolicyViewValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e OrgIamPolicyViewValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e OrgIamPolicyViewValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e OrgIamPolicyViewValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e OrgIamPolicyViewValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e OrgIamPolicyViewValidationError) ErrorName() string { return "OrgIamPolicyViewValidationError" } + +// Error satisfies the builtin error interface +func (e OrgIamPolicyViewValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sOrgIamPolicyView.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = OrgIamPolicyViewValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = OrgIamPolicyViewValidationError{} + // Validate checks the field values on OrgIamPolicyRequest with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. @@ -4132,6 +4223,26 @@ func (m *DefaultLoginPolicy) Validate() error { // no validation rules for AllowExternalIdp + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultLoginPolicyValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultLoginPolicyValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } @@ -4191,6 +4302,79 @@ var _ interface { ErrorName() string } = DefaultLoginPolicyValidationError{} +// Validate checks the field values on DefaultLoginPolicyRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *DefaultLoginPolicyRequest) Validate() error { + if m == nil { + return nil + } + + // no validation rules for AllowUsernamePassword + + // no validation rules for AllowRegister + + // no validation rules for AllowExternalIdp + + return nil +} + +// DefaultLoginPolicyRequestValidationError is the validation error returned by +// DefaultLoginPolicyRequest.Validate if the designated constraints aren't met. +type DefaultLoginPolicyRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DefaultLoginPolicyRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DefaultLoginPolicyRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DefaultLoginPolicyRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DefaultLoginPolicyRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DefaultLoginPolicyRequestValidationError) ErrorName() string { + return "DefaultLoginPolicyRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e DefaultLoginPolicyRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDefaultLoginPolicyRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DefaultLoginPolicyRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DefaultLoginPolicyRequestValidationError{} + // Validate checks the field values on IdpProviderID with the rules defined in // the proto definition for this message. If any rules are violated, an error // is returned. @@ -4277,6 +4461,26 @@ func (m *DefaultLoginPolicyView) Validate() error { // no validation rules for AllowExternalIdp + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultLoginPolicyViewValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultLoginPolicyViewValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } @@ -4577,3 +4781,788 @@ var _ interface { Cause() error ErrorName() string } = IdpProviderSearchRequestValidationError{} + +// Validate checks the field values on DefaultPasswordComplexityPolicy with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *DefaultPasswordComplexityPolicy) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MinLength + + // no validation rules for HasUppercase + + // no validation rules for HasLowercase + + // no validation rules for HasNumber + + // no validation rules for HasSymbol + + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultPasswordComplexityPolicyValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultPasswordComplexityPolicyValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// DefaultPasswordComplexityPolicyValidationError is the validation error +// returned by DefaultPasswordComplexityPolicy.Validate if the designated +// constraints aren't met. +type DefaultPasswordComplexityPolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DefaultPasswordComplexityPolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DefaultPasswordComplexityPolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DefaultPasswordComplexityPolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DefaultPasswordComplexityPolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DefaultPasswordComplexityPolicyValidationError) ErrorName() string { + return "DefaultPasswordComplexityPolicyValidationError" +} + +// Error satisfies the builtin error interface +func (e DefaultPasswordComplexityPolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDefaultPasswordComplexityPolicy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DefaultPasswordComplexityPolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DefaultPasswordComplexityPolicyValidationError{} + +// Validate checks the field values on DefaultPasswordComplexityPolicyRequest +// with the rules defined in the proto definition for this message. If any +// rules are violated, an error is returned. +func (m *DefaultPasswordComplexityPolicyRequest) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MinLength + + // no validation rules for HasUppercase + + // no validation rules for HasLowercase + + // no validation rules for HasNumber + + // no validation rules for HasSymbol + + return nil +} + +// DefaultPasswordComplexityPolicyRequestValidationError is the validation +// error returned by DefaultPasswordComplexityPolicyRequest.Validate if the +// designated constraints aren't met. +type DefaultPasswordComplexityPolicyRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DefaultPasswordComplexityPolicyRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DefaultPasswordComplexityPolicyRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DefaultPasswordComplexityPolicyRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DefaultPasswordComplexityPolicyRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DefaultPasswordComplexityPolicyRequestValidationError) ErrorName() string { + return "DefaultPasswordComplexityPolicyRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e DefaultPasswordComplexityPolicyRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDefaultPasswordComplexityPolicyRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DefaultPasswordComplexityPolicyRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DefaultPasswordComplexityPolicyRequestValidationError{} + +// Validate checks the field values on DefaultPasswordComplexityPolicyView with +// the rules defined in the proto definition for this message. If any rules +// are violated, an error is returned. +func (m *DefaultPasswordComplexityPolicyView) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MinLength + + // no validation rules for HasUppercase + + // no validation rules for HasLowercase + + // no validation rules for HasNumber + + // no validation rules for HasSymbol + + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultPasswordComplexityPolicyViewValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultPasswordComplexityPolicyViewValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// DefaultPasswordComplexityPolicyViewValidationError is the validation error +// returned by DefaultPasswordComplexityPolicyView.Validate if the designated +// constraints aren't met. +type DefaultPasswordComplexityPolicyViewValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DefaultPasswordComplexityPolicyViewValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DefaultPasswordComplexityPolicyViewValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DefaultPasswordComplexityPolicyViewValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DefaultPasswordComplexityPolicyViewValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DefaultPasswordComplexityPolicyViewValidationError) ErrorName() string { + return "DefaultPasswordComplexityPolicyViewValidationError" +} + +// Error satisfies the builtin error interface +func (e DefaultPasswordComplexityPolicyViewValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDefaultPasswordComplexityPolicyView.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DefaultPasswordComplexityPolicyViewValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DefaultPasswordComplexityPolicyViewValidationError{} + +// Validate checks the field values on DefaultPasswordAgePolicy with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *DefaultPasswordAgePolicy) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MaxAgeDays + + // no validation rules for ExpireWarnDays + + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultPasswordAgePolicyValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultPasswordAgePolicyValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// DefaultPasswordAgePolicyValidationError is the validation error returned by +// DefaultPasswordAgePolicy.Validate if the designated constraints aren't met. +type DefaultPasswordAgePolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DefaultPasswordAgePolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DefaultPasswordAgePolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DefaultPasswordAgePolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DefaultPasswordAgePolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DefaultPasswordAgePolicyValidationError) ErrorName() string { + return "DefaultPasswordAgePolicyValidationError" +} + +// Error satisfies the builtin error interface +func (e DefaultPasswordAgePolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDefaultPasswordAgePolicy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DefaultPasswordAgePolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DefaultPasswordAgePolicyValidationError{} + +// Validate checks the field values on DefaultPasswordAgePolicyRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *DefaultPasswordAgePolicyRequest) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MaxAgeDays + + // no validation rules for ExpireWarnDays + + return nil +} + +// DefaultPasswordAgePolicyRequestValidationError is the validation error +// returned by DefaultPasswordAgePolicyRequest.Validate if the designated +// constraints aren't met. +type DefaultPasswordAgePolicyRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DefaultPasswordAgePolicyRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DefaultPasswordAgePolicyRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DefaultPasswordAgePolicyRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DefaultPasswordAgePolicyRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DefaultPasswordAgePolicyRequestValidationError) ErrorName() string { + return "DefaultPasswordAgePolicyRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e DefaultPasswordAgePolicyRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDefaultPasswordAgePolicyRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DefaultPasswordAgePolicyRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DefaultPasswordAgePolicyRequestValidationError{} + +// Validate checks the field values on DefaultPasswordAgePolicyView with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *DefaultPasswordAgePolicyView) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MaxAgeDays + + // no validation rules for ExpireWarnDays + + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultPasswordAgePolicyViewValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultPasswordAgePolicyViewValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// DefaultPasswordAgePolicyViewValidationError is the validation error returned +// by DefaultPasswordAgePolicyView.Validate if the designated constraints +// aren't met. +type DefaultPasswordAgePolicyViewValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DefaultPasswordAgePolicyViewValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DefaultPasswordAgePolicyViewValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DefaultPasswordAgePolicyViewValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DefaultPasswordAgePolicyViewValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DefaultPasswordAgePolicyViewValidationError) ErrorName() string { + return "DefaultPasswordAgePolicyViewValidationError" +} + +// Error satisfies the builtin error interface +func (e DefaultPasswordAgePolicyViewValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDefaultPasswordAgePolicyView.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DefaultPasswordAgePolicyViewValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DefaultPasswordAgePolicyViewValidationError{} + +// Validate checks the field values on DefaultPasswordLockoutPolicy with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *DefaultPasswordLockoutPolicy) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MaxAttempts + + // no validation rules for ShowLockoutFailure + + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultPasswordLockoutPolicyValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultPasswordLockoutPolicyValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// DefaultPasswordLockoutPolicyValidationError is the validation error returned +// by DefaultPasswordLockoutPolicy.Validate if the designated constraints +// aren't met. +type DefaultPasswordLockoutPolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DefaultPasswordLockoutPolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DefaultPasswordLockoutPolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DefaultPasswordLockoutPolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DefaultPasswordLockoutPolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DefaultPasswordLockoutPolicyValidationError) ErrorName() string { + return "DefaultPasswordLockoutPolicyValidationError" +} + +// Error satisfies the builtin error interface +func (e DefaultPasswordLockoutPolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDefaultPasswordLockoutPolicy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DefaultPasswordLockoutPolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DefaultPasswordLockoutPolicyValidationError{} + +// Validate checks the field values on DefaultPasswordLockoutPolicyRequest with +// the rules defined in the proto definition for this message. If any rules +// are violated, an error is returned. +func (m *DefaultPasswordLockoutPolicyRequest) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MaxAttempts + + // no validation rules for ShowLockoutFailure + + return nil +} + +// DefaultPasswordLockoutPolicyRequestValidationError is the validation error +// returned by DefaultPasswordLockoutPolicyRequest.Validate if the designated +// constraints aren't met. +type DefaultPasswordLockoutPolicyRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DefaultPasswordLockoutPolicyRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DefaultPasswordLockoutPolicyRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DefaultPasswordLockoutPolicyRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DefaultPasswordLockoutPolicyRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DefaultPasswordLockoutPolicyRequestValidationError) ErrorName() string { + return "DefaultPasswordLockoutPolicyRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e DefaultPasswordLockoutPolicyRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDefaultPasswordLockoutPolicyRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DefaultPasswordLockoutPolicyRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DefaultPasswordLockoutPolicyRequestValidationError{} + +// Validate checks the field values on DefaultPasswordLockoutPolicyView with +// the rules defined in the proto definition for this message. If any rules +// are violated, an error is returned. +func (m *DefaultPasswordLockoutPolicyView) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MaxAttempts + + // no validation rules for ShowLockoutFailure + + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultPasswordLockoutPolicyViewValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DefaultPasswordLockoutPolicyViewValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// DefaultPasswordLockoutPolicyViewValidationError is the validation error +// returned by DefaultPasswordLockoutPolicyView.Validate if the designated +// constraints aren't met. +type DefaultPasswordLockoutPolicyViewValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DefaultPasswordLockoutPolicyViewValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DefaultPasswordLockoutPolicyViewValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DefaultPasswordLockoutPolicyViewValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DefaultPasswordLockoutPolicyViewValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DefaultPasswordLockoutPolicyViewValidationError) ErrorName() string { + return "DefaultPasswordLockoutPolicyViewValidationError" +} + +// Error satisfies the builtin error interface +func (e DefaultPasswordLockoutPolicyViewValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDefaultPasswordLockoutPolicyView.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DefaultPasswordLockoutPolicyViewValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DefaultPasswordLockoutPolicyViewValidationError{} diff --git a/pkg/grpc/admin/admin.swagger.json b/pkg/grpc/admin/admin.swagger.json index 28328f86d7..4a10ecdca9 100644 --- a/pkg/grpc/admin/admin.swagger.json +++ b/pkg/grpc/admin/admin.swagger.json @@ -632,6 +632,59 @@ ] } }, + "/orgs/default/policies/orgiam": { + "get": { + "summary": "ORG_IAM_POLICY", + "operationId": "AdminService_GetDefaultOrgIamPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1OrgIamPolicyView" + } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } + } + }, + "tags": [ + "AdminService" + ] + }, + "put": { + "operationId": "AdminService_UpdateDefaultOrgIamPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1OrgIamPolicy" + } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1OrgIamPolicyRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, "/orgs/{id}": { "get": { "operationId": "AdminService_GetOrgByID", @@ -662,15 +715,14 @@ ] } }, - "/orgs/{org_id}/iampolicy": { + "/orgs/{org_id}/policies/orgiam": { "get": { - "summary": "ORG_IAM_POLICY", "operationId": "AdminService_GetOrgIamPolicy", "responses": { "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/v1OrgIamPolicy" + "$ref": "#/definitions/v1OrgIamPolicyView" } }, "default": { @@ -693,7 +745,7 @@ ] }, "delete": { - "operationId": "AdminService_DeleteOrgIamPolicy", + "operationId": "AdminService_RemoveOrgIamPolicy", "responses": { "200": { "description": "A successful response.", @@ -836,7 +888,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/v1DefaultLoginPolicy" + "$ref": "#/definitions/v1DefaultLoginPolicyRequest" } } ], @@ -939,6 +991,162 @@ ] } }, + "/policies/password/age": { + "get": { + "operationId": "AdminService_GetDefaultPasswordAgePolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1DefaultPasswordAgePolicyView" + } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } + } + }, + "tags": [ + "AdminService" + ] + }, + "put": { + "operationId": "AdminService_UpdateDefaultPasswordAgePolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1DefaultPasswordAgePolicy" + } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1DefaultPasswordAgePolicyRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/policies/password/complexity": { + "get": { + "operationId": "AdminService_GetDefaultPasswordComplexityPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1DefaultPasswordComplexityPolicyView" + } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } + } + }, + "tags": [ + "AdminService" + ] + }, + "put": { + "operationId": "AdminService_UpdateDefaultPasswordComplexityPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1DefaultPasswordComplexityPolicy" + } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1DefaultPasswordComplexityPolicyRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, + "/policies/password/lockout": { + "get": { + "operationId": "AdminService_GetDefaultPasswordLockoutPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1DefaultPasswordLockoutPolicyView" + } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } + } + }, + "tags": [ + "AdminService" + ] + }, + "put": { + "operationId": "AdminService_UpdateDefaultPasswordLockoutPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1DefaultPasswordLockoutPolicy" + } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1DefaultPasswordLockoutPolicyRequest" + } + } + ], + "tags": [ + "AdminService" + ] + } + }, "/ready": { "get": { "summary": "Ready returns status OK as soon as all dependent services are available", @@ -1205,6 +1413,31 @@ } }, "v1DefaultLoginPolicy": { + "type": "object", + "properties": { + "allow_username_password": { + "type": "boolean", + "format": "boolean" + }, + "allow_register": { + "type": "boolean", + "format": "boolean" + }, + "allow_external_idp": { + "type": "boolean", + "format": "boolean" + }, + "creation_date": { + "type": "string", + "format": "date-time" + }, + "change_date": { + "type": "string", + "format": "date-time" + } + } + }, + "v1DefaultLoginPolicyRequest": { "type": "object", "properties": { "allow_username_password": { @@ -1235,6 +1468,215 @@ "allow_external_idp": { "type": "boolean", "format": "boolean" + }, + "creation_date": { + "type": "string", + "format": "date-time" + }, + "change_date": { + "type": "string", + "format": "date-time" + } + } + }, + "v1DefaultPasswordAgePolicy": { + "type": "object", + "properties": { + "max_age_days": { + "type": "string", + "format": "uint64" + }, + "expire_warn_days": { + "type": "string", + "format": "uint64" + }, + "creation_date": { + "type": "string", + "format": "date-time" + }, + "change_date": { + "type": "string", + "format": "date-time" + } + } + }, + "v1DefaultPasswordAgePolicyRequest": { + "type": "object", + "properties": { + "max_age_days": { + "type": "string", + "format": "uint64" + }, + "expire_warn_days": { + "type": "string", + "format": "uint64" + } + } + }, + "v1DefaultPasswordAgePolicyView": { + "type": "object", + "properties": { + "max_age_days": { + "type": "string", + "format": "uint64" + }, + "expire_warn_days": { + "type": "string", + "format": "uint64" + }, + "creation_date": { + "type": "string", + "format": "date-time" + }, + "change_date": { + "type": "string", + "format": "date-time" + } + } + }, + "v1DefaultPasswordComplexityPolicy": { + "type": "object", + "properties": { + "min_length": { + "type": "string", + "format": "uint64" + }, + "has_uppercase": { + "type": "boolean", + "format": "boolean" + }, + "has_lowercase": { + "type": "boolean", + "format": "boolean" + }, + "has_number": { + "type": "boolean", + "format": "boolean" + }, + "has_symbol": { + "type": "boolean", + "format": "boolean" + }, + "creation_date": { + "type": "string", + "format": "date-time" + }, + "change_date": { + "type": "string", + "format": "date-time" + } + } + }, + "v1DefaultPasswordComplexityPolicyRequest": { + "type": "object", + "properties": { + "min_length": { + "type": "string", + "format": "uint64" + }, + "has_uppercase": { + "type": "boolean", + "format": "boolean" + }, + "has_lowercase": { + "type": "boolean", + "format": "boolean" + }, + "has_number": { + "type": "boolean", + "format": "boolean" + }, + "has_symbol": { + "type": "boolean", + "format": "boolean" + } + } + }, + "v1DefaultPasswordComplexityPolicyView": { + "type": "object", + "properties": { + "min_length": { + "type": "string", + "format": "uint64" + }, + "has_uppercase": { + "type": "boolean", + "format": "boolean" + }, + "has_lowercase": { + "type": "boolean", + "format": "boolean" + }, + "has_number": { + "type": "boolean", + "format": "boolean" + }, + "has_symbol": { + "type": "boolean", + "format": "boolean" + }, + "creation_date": { + "type": "string", + "format": "date-time" + }, + "change_date": { + "type": "string", + "format": "date-time" + } + } + }, + "v1DefaultPasswordLockoutPolicy": { + "type": "object", + "properties": { + "max_attempts": { + "type": "string", + "format": "uint64" + }, + "show_lockout_failure": { + "type": "boolean", + "format": "boolean" + }, + "creation_date": { + "type": "string", + "format": "date-time" + }, + "change_date": { + "type": "string", + "format": "date-time" + } + } + }, + "v1DefaultPasswordLockoutPolicyRequest": { + "type": "object", + "properties": { + "max_attempts": { + "type": "string", + "format": "uint64" + }, + "show_lockout_failure": { + "type": "boolean", + "format": "boolean" + } + } + }, + "v1DefaultPasswordLockoutPolicyView": { + "type": "object", + "properties": { + "max_attempts": { + "type": "string", + "format": "uint64" + }, + "show_lockout_failure": { + "type": "boolean", + "format": "boolean" + }, + "creation_date": { + "type": "string", + "format": "date-time" + }, + "change_date": { + "type": "string", + "format": "date-time" } } }, @@ -1925,9 +2367,6 @@ "org_id": { "type": "string" }, - "description": { - "type": "string" - }, "user_login_must_be_domain": { "type": "boolean", "format": "boolean" @@ -1965,6 +2404,34 @@ } } }, + "v1OrgIamPolicyView": { + "type": "object", + "properties": { + "org_id": { + "type": "string" + }, + "user_login_must_be_domain": { + "type": "boolean", + "format": "boolean" + }, + "default": { + "type": "boolean", + "format": "boolean" + }, + "sequence": { + "type": "string", + "format": "uint64" + }, + "creation_date": { + "type": "string", + "format": "date-time" + }, + "change_date": { + "type": "string", + "format": "date-time" + } + } + }, "v1OrgSearchKey": { "type": "string", "enum": [ diff --git a/pkg/grpc/admin/mock/admin.proto.mock.go b/pkg/grpc/admin/mock/admin.proto.mock.go index b4c8a030ee..fc8b65402b 100644 --- a/pkg/grpc/admin/mock/admin.proto.mock.go +++ b/pkg/grpc/admin/mock/admin.proto.mock.go @@ -137,24 +137,24 @@ func (mr *MockAdminServiceClientMockRecorder) CreateOidcIdp(arg0, arg1 interface return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOidcIdp", reflect.TypeOf((*MockAdminServiceClient)(nil).CreateOidcIdp), varargs...) } -// CreateOrgIamPolicy mocks base method +// CreateOrgIAMPolicy mocks base method func (m *MockAdminServiceClient) CreateOrgIamPolicy(arg0 context.Context, arg1 *admin.OrgIamPolicyRequest, arg2 ...grpc.CallOption) (*admin.OrgIamPolicy, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { varargs = append(varargs, a) } - ret := m.ctrl.Call(m, "CreateOrgIamPolicy", varargs...) + ret := m.ctrl.Call(m, "CreateOrgIAMPolicy", varargs...) ret0, _ := ret[0].(*admin.OrgIamPolicy) ret1, _ := ret[1].(error) return ret0, ret1 } -// CreateOrgIamPolicy indicates an expected call of CreateOrgIamPolicy +// CreateOrgIAMPolicy indicates an expected call of CreateOrgIAMPolicy func (mr *MockAdminServiceClientMockRecorder) CreateOrgIamPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() varargs := append([]interface{}{arg0, arg1}, arg2...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrgIamPolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).CreateOrgIamPolicy), varargs...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrgIAMPolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).CreateOrgIamPolicy), varargs...) } // DeactivateIdpConfig mocks base method @@ -177,26 +177,6 @@ func (mr *MockAdminServiceClientMockRecorder) DeactivateIdpConfig(arg0, arg1 int return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeactivateIdpConfig", reflect.TypeOf((*MockAdminServiceClient)(nil).DeactivateIdpConfig), varargs...) } -// DeleteOrgIamPolicy mocks base method -func (m *MockAdminServiceClient) DeleteOrgIamPolicy(arg0 context.Context, arg1 *admin.OrgIamPolicyID, arg2 ...grpc.CallOption) (*emptypb.Empty, error) { - m.ctrl.T.Helper() - varargs := []interface{}{arg0, arg1} - for _, a := range arg2 { - varargs = append(varargs, a) - } - ret := m.ctrl.Call(m, "DeleteOrgIamPolicy", varargs...) - ret0, _ := ret[0].(*emptypb.Empty) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// DeleteOrgIamPolicy indicates an expected call of DeleteOrgIamPolicy -func (mr *MockAdminServiceClientMockRecorder) DeleteOrgIamPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - varargs := append([]interface{}{arg0, arg1}, arg2...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteOrgIamPolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).DeleteOrgIamPolicy), varargs...) -} - // GetDefaultLoginPolicy mocks base method func (m *MockAdminServiceClient) GetDefaultLoginPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*admin.DefaultLoginPolicyView, error) { m.ctrl.T.Helper() @@ -237,6 +217,86 @@ func (mr *MockAdminServiceClientMockRecorder) GetDefaultLoginPolicyIdpProviders( return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefaultLoginPolicyIdpProviders", reflect.TypeOf((*MockAdminServiceClient)(nil).GetDefaultLoginPolicyIdpProviders), varargs...) } +// GetDefaultOrgIAMPolicy mocks base method +func (m *MockAdminServiceClient) GetDefaultOrgIamPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*admin.OrgIamPolicyView, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetDefaultOrgIAMPolicy", varargs...) + ret0, _ := ret[0].(*admin.OrgIamPolicyView) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetDefaultOrgIAMPolicy indicates an expected call of GetDefaultOrgIAMPolicy +func (mr *MockAdminServiceClientMockRecorder) GetDefaultOrgIamPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefaultOrgIAMPolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).GetDefaultOrgIamPolicy), varargs...) +} + +// GetDefaultPasswordAgePolicy mocks base method +func (m *MockAdminServiceClient) GetDefaultPasswordAgePolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*admin.DefaultPasswordAgePolicyView, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetDefaultPasswordAgePolicy", varargs...) + ret0, _ := ret[0].(*admin.DefaultPasswordAgePolicyView) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetDefaultPasswordAgePolicy indicates an expected call of GetDefaultPasswordAgePolicy +func (mr *MockAdminServiceClientMockRecorder) GetDefaultPasswordAgePolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefaultPasswordAgePolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).GetDefaultPasswordAgePolicy), varargs...) +} + +// GetDefaultPasswordComplexityPolicy mocks base method +func (m *MockAdminServiceClient) GetDefaultPasswordComplexityPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*admin.DefaultPasswordComplexityPolicyView, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetDefaultPasswordComplexityPolicy", varargs...) + ret0, _ := ret[0].(*admin.DefaultPasswordComplexityPolicyView) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetDefaultPasswordComplexityPolicy indicates an expected call of GetDefaultPasswordComplexityPolicy +func (mr *MockAdminServiceClientMockRecorder) GetDefaultPasswordComplexityPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefaultPasswordComplexityPolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).GetDefaultPasswordComplexityPolicy), varargs...) +} + +// GetDefaultPasswordLockoutPolicy mocks base method +func (m *MockAdminServiceClient) GetDefaultPasswordLockoutPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*admin.DefaultPasswordLockoutPolicyView, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetDefaultPasswordLockoutPolicy", varargs...) + ret0, _ := ret[0].(*admin.DefaultPasswordLockoutPolicyView) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetDefaultPasswordLockoutPolicy indicates an expected call of GetDefaultPasswordLockoutPolicy +func (mr *MockAdminServiceClientMockRecorder) GetDefaultPasswordLockoutPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefaultPasswordLockoutPolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).GetDefaultPasswordLockoutPolicy), varargs...) +} + // GetFailedEvents mocks base method func (m *MockAdminServiceClient) GetFailedEvents(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*admin.FailedEvents, error) { m.ctrl.T.Helper() @@ -297,24 +357,24 @@ func (mr *MockAdminServiceClientMockRecorder) GetOrgByID(arg0, arg1 interface{}, return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOrgByID", reflect.TypeOf((*MockAdminServiceClient)(nil).GetOrgByID), varargs...) } -// GetOrgIamPolicy mocks base method -func (m *MockAdminServiceClient) GetOrgIamPolicy(arg0 context.Context, arg1 *admin.OrgIamPolicyID, arg2 ...grpc.CallOption) (*admin.OrgIamPolicy, error) { +// GetOrgIAMPolicy mocks base method +func (m *MockAdminServiceClient) GetOrgIamPolicy(arg0 context.Context, arg1 *admin.OrgIamPolicyID, arg2 ...grpc.CallOption) (*admin.OrgIamPolicyView, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { varargs = append(varargs, a) } - ret := m.ctrl.Call(m, "GetOrgIamPolicy", varargs...) - ret0, _ := ret[0].(*admin.OrgIamPolicy) + ret := m.ctrl.Call(m, "GetOrgIAMPolicy", varargs...) + ret0, _ := ret[0].(*admin.OrgIamPolicyView) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetOrgIamPolicy indicates an expected call of GetOrgIamPolicy +// GetOrgIAMPolicy indicates an expected call of GetOrgIAMPolicy func (mr *MockAdminServiceClientMockRecorder) GetOrgIamPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() varargs := append([]interface{}{arg0, arg1}, arg2...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOrgIamPolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).GetOrgIamPolicy), varargs...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOrgIAMPolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).GetOrgIamPolicy), varargs...) } // GetViews mocks base method @@ -517,6 +577,26 @@ func (mr *MockAdminServiceClientMockRecorder) RemoveIdpProviderFromDefaultLoginP return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveIdpProviderFromDefaultLoginPolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).RemoveIdpProviderFromDefaultLoginPolicy), varargs...) } +// RemoveOrgIAMPolicy mocks base method +func (m *MockAdminServiceClient) RemoveOrgIamPolicy(arg0 context.Context, arg1 *admin.OrgIamPolicyID, arg2 ...grpc.CallOption) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "RemoveOrgIAMPolicy", varargs...) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// RemoveOrgIAMPolicy indicates an expected call of RemoveOrgIAMPolicy +func (mr *MockAdminServiceClientMockRecorder) RemoveOrgIamPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveOrgIAMPolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).RemoveOrgIamPolicy), varargs...) +} + // SearchIamMembers mocks base method func (m *MockAdminServiceClient) SearchIamMembers(arg0 context.Context, arg1 *admin.IamMemberSearchRequest, arg2 ...grpc.CallOption) (*admin.IamMemberSearchResponse, error) { m.ctrl.T.Helper() @@ -598,7 +678,7 @@ func (mr *MockAdminServiceClientMockRecorder) SetUpOrg(arg0, arg1 interface{}, a } // UpdateDefaultLoginPolicy mocks base method -func (m *MockAdminServiceClient) UpdateDefaultLoginPolicy(arg0 context.Context, arg1 *admin.DefaultLoginPolicy, arg2 ...grpc.CallOption) (*admin.DefaultLoginPolicy, error) { +func (m *MockAdminServiceClient) UpdateDefaultLoginPolicy(arg0 context.Context, arg1 *admin.DefaultLoginPolicyRequest, arg2 ...grpc.CallOption) (*admin.DefaultLoginPolicy, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { @@ -617,6 +697,86 @@ func (mr *MockAdminServiceClientMockRecorder) UpdateDefaultLoginPolicy(arg0, arg return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDefaultLoginPolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).UpdateDefaultLoginPolicy), varargs...) } +// UpdateDefaultOrgIamPolicy mocks base method +func (m *MockAdminServiceClient) UpdateDefaultOrgIamPolicy(arg0 context.Context, arg1 *admin.OrgIamPolicyRequest, arg2 ...grpc.CallOption) (*admin.OrgIamPolicy, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "UpdateDefaultOrgIamPolicy", varargs...) + ret0, _ := ret[0].(*admin.OrgIamPolicy) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateDefaultOrgIamPolicy indicates an expected call of UpdateDefaultOrgIamPolicy +func (mr *MockAdminServiceClientMockRecorder) UpdateDefaultOrgIamPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDefaultOrgIamPolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).UpdateDefaultOrgIamPolicy), varargs...) +} + +// UpdateDefaultPasswordAgePolicy mocks base method +func (m *MockAdminServiceClient) UpdateDefaultPasswordAgePolicy(arg0 context.Context, arg1 *admin.DefaultPasswordAgePolicyRequest, arg2 ...grpc.CallOption) (*admin.DefaultPasswordAgePolicy, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "UpdateDefaultPasswordAgePolicy", varargs...) + ret0, _ := ret[0].(*admin.DefaultPasswordAgePolicy) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateDefaultPasswordAgePolicy indicates an expected call of UpdateDefaultPasswordAgePolicy +func (mr *MockAdminServiceClientMockRecorder) UpdateDefaultPasswordAgePolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDefaultPasswordAgePolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).UpdateDefaultPasswordAgePolicy), varargs...) +} + +// UpdateDefaultPasswordComplexityPolicy mocks base method +func (m *MockAdminServiceClient) UpdateDefaultPasswordComplexityPolicy(arg0 context.Context, arg1 *admin.DefaultPasswordComplexityPolicyRequest, arg2 ...grpc.CallOption) (*admin.DefaultPasswordComplexityPolicy, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "UpdateDefaultPasswordComplexityPolicy", varargs...) + ret0, _ := ret[0].(*admin.DefaultPasswordComplexityPolicy) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateDefaultPasswordComplexityPolicy indicates an expected call of UpdateDefaultPasswordComplexityPolicy +func (mr *MockAdminServiceClientMockRecorder) UpdateDefaultPasswordComplexityPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDefaultPasswordComplexityPolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).UpdateDefaultPasswordComplexityPolicy), varargs...) +} + +// UpdateDefaultPasswordLockoutPolicy mocks base method +func (m *MockAdminServiceClient) UpdateDefaultPasswordLockoutPolicy(arg0 context.Context, arg1 *admin.DefaultPasswordLockoutPolicyRequest, arg2 ...grpc.CallOption) (*admin.DefaultPasswordLockoutPolicy, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "UpdateDefaultPasswordLockoutPolicy", varargs...) + ret0, _ := ret[0].(*admin.DefaultPasswordLockoutPolicy) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateDefaultPasswordLockoutPolicy indicates an expected call of UpdateDefaultPasswordLockoutPolicy +func (mr *MockAdminServiceClientMockRecorder) UpdateDefaultPasswordLockoutPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDefaultPasswordLockoutPolicy", reflect.TypeOf((*MockAdminServiceClient)(nil).UpdateDefaultPasswordLockoutPolicy), varargs...) +} + // UpdateIdpConfig mocks base method func (m *MockAdminServiceClient) UpdateIdpConfig(arg0 context.Context, arg1 *admin.IdpUpdate, arg2 ...grpc.CallOption) (*admin.Idp, error) { m.ctrl.T.Helper() diff --git a/pkg/grpc/admin/proto/admin.proto b/pkg/grpc/admin/proto/admin.proto index 22d5afea36..be9c09cee0 100644 --- a/pkg/grpc/admin/proto/admin.proto +++ b/pkg/grpc/admin/proto/admin.proto @@ -100,9 +100,30 @@ service AdminService { } //ORG_IAM_POLICY - rpc GetOrgIamPolicy(OrgIamPolicyID) returns (OrgIamPolicy) { + rpc GetDefaultOrgIamPolicy(google.protobuf.Empty) returns (OrgIamPolicyView) { option (google.api.http) = { - get: "/orgs/{org_id}/iampolicy" + get: "/orgs/default/policies/orgiam" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "iam.policy.read" + }; + } + + rpc UpdateDefaultOrgIamPolicy(OrgIamPolicyRequest) returns (OrgIamPolicy) { + option (google.api.http) = { + put: "/orgs/default/policies/orgiam" + body: "*" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "iam.policy.write" + }; + } + + rpc GetOrgIamPolicy(OrgIamPolicyID) returns (OrgIamPolicyView) { + option (google.api.http) = { + get: "/orgs/{org_id}/policies/orgiam" }; option (caos.zitadel.utils.v1.auth_option) = { @@ -112,7 +133,7 @@ service AdminService { rpc CreateOrgIamPolicy(OrgIamPolicyRequest) returns (OrgIamPolicy) { option (google.api.http) = { - post: "/orgs/{org_id}/iampolicy" + post: "/orgs/{org_id}/policies/orgiam" body: "*" }; @@ -123,7 +144,7 @@ service AdminService { rpc UpdateOrgIamPolicy(OrgIamPolicyRequest) returns (OrgIamPolicy) { option (google.api.http) = { - put: "/orgs/{org_id}/iampolicy" + put: "/orgs/{org_id}/policies/orgiam" body: "*" }; @@ -132,9 +153,9 @@ service AdminService { }; } - rpc DeleteOrgIamPolicy(OrgIamPolicyID) returns (google.protobuf.Empty) { + rpc RemoveOrgIamPolicy(OrgIamPolicyID) returns (google.protobuf.Empty) { option (google.api.http) = { - delete: "/orgs/{org_id}/iampolicy" + delete: "/orgs/{org_id}/policies/orgiam" }; option (caos.zitadel.utils.v1.auth_option) = { @@ -331,7 +352,7 @@ service AdminService { }; } - rpc UpdateDefaultLoginPolicy(DefaultLoginPolicy) returns (DefaultLoginPolicy) { + rpc UpdateDefaultLoginPolicy(DefaultLoginPolicyRequest) returns (DefaultLoginPolicy) { option (google.api.http) = { put: "/policies/login" body: "*" @@ -373,6 +394,69 @@ service AdminService { permission: "iam.policy.write" }; } + + rpc GetDefaultPasswordComplexityPolicy(google.protobuf.Empty) returns (DefaultPasswordComplexityPolicyView) { + option (google.api.http) = { + get: "/policies/password/complexity" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "iam.policy.read" + }; + } + + rpc UpdateDefaultPasswordComplexityPolicy(DefaultPasswordComplexityPolicyRequest) returns (DefaultPasswordComplexityPolicy) { + option (google.api.http) = { + put: "/policies/password/complexity" + body: "*" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "iam.policy.write" + }; + } + + rpc GetDefaultPasswordAgePolicy(google.protobuf.Empty) returns (DefaultPasswordAgePolicyView) { + option (google.api.http) = { + get: "/policies/password/age" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "iam.policy.read" + }; + } + + rpc UpdateDefaultPasswordAgePolicy(DefaultPasswordAgePolicyRequest) returns (DefaultPasswordAgePolicy) { + option (google.api.http) = { + put: "/policies/password/age" + body: "*" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "iam.policy.write" + }; + } + + rpc GetDefaultPasswordLockoutPolicy(google.protobuf.Empty) returns (DefaultPasswordLockoutPolicyView) { + option (google.api.http) = { + get: "/policies/password/lockout" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "iam.policy.read" + }; + } + + rpc UpdateDefaultPasswordLockoutPolicy(DefaultPasswordLockoutPolicyRequest) returns (DefaultPasswordLockoutPolicy) { + option (google.api.http) = { + put: "/policies/password/lockout" + body: "*" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "iam.policy.write" + }; + } } message OrgID { @@ -561,12 +645,20 @@ message CreateOrgRequest { message OrgIamPolicy { string org_id = 1; - string description = 2; - bool user_login_must_be_domain = 3; - bool default = 4; - uint64 sequence = 5; - google.protobuf.Timestamp creation_date = 6; - google.protobuf.Timestamp change_date = 7; + bool user_login_must_be_domain = 2; + bool default = 3; + uint64 sequence = 4; + google.protobuf.Timestamp creation_date = 5; + google.protobuf.Timestamp change_date = 6; +} + +message OrgIamPolicyView { + string org_id = 1; + bool user_login_must_be_domain = 2; + bool default = 3; + uint64 sequence = 4; + google.protobuf.Timestamp creation_date = 5; + google.protobuf.Timestamp change_date = 6; } message OrgIamPolicyRequest { @@ -810,6 +902,14 @@ message DefaultLoginPolicy { bool allow_username_password = 1; bool allow_register = 2; bool allow_external_idp = 3; + google.protobuf.Timestamp creation_date = 4; + google.protobuf.Timestamp change_date = 5; +} + +message DefaultLoginPolicyRequest { + bool allow_username_password = 1; + bool allow_register = 2; + bool allow_external_idp = 3; } message IdpProviderID { @@ -820,6 +920,8 @@ message DefaultLoginPolicyView { bool allow_username_password = 1; bool allow_register = 2; bool allow_external_idp = 3; + google.protobuf.Timestamp creation_date = 4; + google.protobuf.Timestamp change_date = 5; } message IdpProviderView { @@ -847,3 +949,69 @@ message IdpProviderSearchRequest { uint64 offset = 1; uint64 limit = 2; } + +message DefaultPasswordComplexityPolicy { + uint64 min_length = 1; + bool has_uppercase = 2; + bool has_lowercase = 3; + bool has_number = 4; + bool has_symbol = 5; + google.protobuf.Timestamp creation_date = 6; + google.protobuf.Timestamp change_date = 7; +} + +message DefaultPasswordComplexityPolicyRequest { + uint64 min_length = 1; + bool has_uppercase = 2; + bool has_lowercase = 3; + bool has_number = 4; + bool has_symbol = 5; +} + +message DefaultPasswordComplexityPolicyView { + uint64 min_length = 1; + bool has_uppercase = 2; + bool has_lowercase = 3; + bool has_number = 4; + bool has_symbol = 5; + google.protobuf.Timestamp creation_date = 6; + google.protobuf.Timestamp change_date = 7; +} + +message DefaultPasswordAgePolicy { + uint64 max_age_days = 1; + uint64 expire_warn_days = 2; + google.protobuf.Timestamp creation_date = 3; + google.protobuf.Timestamp change_date = 4; +} + +message DefaultPasswordAgePolicyRequest { + uint64 max_age_days = 1; + uint64 expire_warn_days = 2; +} + +message DefaultPasswordAgePolicyView { + uint64 max_age_days = 1; + uint64 expire_warn_days = 2; + google.protobuf.Timestamp creation_date = 3; + google.protobuf.Timestamp change_date = 4; +} + +message DefaultPasswordLockoutPolicy { + uint64 max_attempts = 1; + bool show_lockout_failure = 2; + google.protobuf.Timestamp creation_date = 3; + google.protobuf.Timestamp change_date = 4; +} + +message DefaultPasswordLockoutPolicyRequest { + uint64 max_attempts = 1; + bool show_lockout_failure = 2; +} + +message DefaultPasswordLockoutPolicyView { + uint64 max_attempts = 1; + bool show_lockout_failure = 2; + google.protobuf.Timestamp creation_date = 3; + google.protobuf.Timestamp change_date = 4; +} \ No newline at end of file diff --git a/pkg/grpc/management/management.pb.authoptions.go b/pkg/grpc/management/management.pb.authoptions.go index a98e2f810c..a6832c7cbb 100644 --- a/pkg/grpc/management/management.pb.authoptions.go +++ b/pkg/grpc/management/management.pb.authoptions.go @@ -189,71 +189,6 @@ var ManagementService_AuthMethods = authz.MethodMapping{ CheckParam: "", }, - "/caos.zitadel.management.api.v1.ManagementService/GetPasswordComplexityPolicy": authz.Option{ - Permission: "policy.read", - CheckParam: "", - }, - - "/caos.zitadel.management.api.v1.ManagementService/GetDefaultPasswordComplexityPolicy": authz.Option{ - Permission: "policy.read", - CheckParam: "", - }, - - "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordComplexityPolicy": authz.Option{ - Permission: "policy.write", - CheckParam: "", - }, - - "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordComplexityPolicy": authz.Option{ - Permission: "policy.write", - CheckParam: "", - }, - - "/caos.zitadel.management.api.v1.ManagementService/DeletePasswordComplexityPolicy": authz.Option{ - Permission: "policy.delete", - CheckParam: "", - }, - - "/caos.zitadel.management.api.v1.ManagementService/GetPasswordAgePolicy": authz.Option{ - Permission: "policy.read", - CheckParam: "", - }, - - "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordAgePolicy": authz.Option{ - Permission: "policy.write", - CheckParam: "", - }, - - "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordAgePolicy": authz.Option{ - Permission: "policy.write", - CheckParam: "", - }, - - "/caos.zitadel.management.api.v1.ManagementService/DeletePasswordAgePolicy": authz.Option{ - Permission: "policy.delete", - CheckParam: "", - }, - - "/caos.zitadel.management.api.v1.ManagementService/GetPasswordLockoutPolicy": authz.Option{ - Permission: "policy.read", - CheckParam: "", - }, - - "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordLockoutPolicy": authz.Option{ - Permission: "policy.write", - CheckParam: "", - }, - - "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordLockoutPolicy": authz.Option{ - Permission: "policy.write", - CheckParam: "", - }, - - "/caos.zitadel.management.api.v1.ManagementService/DeletePasswordLockoutPolicy": authz.Option{ - Permission: "policy.delete", - CheckParam: "", - }, - "/caos.zitadel.management.api.v1.ManagementService/CreateOrg": authz.Option{ Permission: "org.create", CheckParam: "", @@ -639,6 +574,11 @@ var ManagementService_AuthMethods = authz.MethodMapping{ CheckParam: "", }, + "/caos.zitadel.management.api.v1.ManagementService/GetDefaultLoginPolicy": authz.Option{ + Permission: "policy.read", + CheckParam: "", + }, + "/caos.zitadel.management.api.v1.ManagementService/CreateLoginPolicy": authz.Option{ Permission: "policy.write", CheckParam: "", @@ -668,4 +608,79 @@ var ManagementService_AuthMethods = authz.MethodMapping{ Permission: "policy.write", CheckParam: "", }, + + "/caos.zitadel.management.api.v1.ManagementService/GetPasswordComplexityPolicy": authz.Option{ + Permission: "policy.read", + CheckParam: "", + }, + + "/caos.zitadel.management.api.v1.ManagementService/GetDefaultPasswordComplexityPolicy": authz.Option{ + Permission: "policy.read", + CheckParam: "", + }, + + "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordComplexityPolicy": authz.Option{ + Permission: "policy.write", + CheckParam: "", + }, + + "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordComplexityPolicy": authz.Option{ + Permission: "policy.write", + CheckParam: "", + }, + + "/caos.zitadel.management.api.v1.ManagementService/RemovePasswordComplexityPolicy": authz.Option{ + Permission: "policy.delete", + CheckParam: "", + }, + + "/caos.zitadel.management.api.v1.ManagementService/GetPasswordAgePolicy": authz.Option{ + Permission: "policy.read", + CheckParam: "", + }, + + "/caos.zitadel.management.api.v1.ManagementService/GetDefaultPasswordAgePolicy": authz.Option{ + Permission: "policy.read", + CheckParam: "", + }, + + "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordAgePolicy": authz.Option{ + Permission: "policy.write", + CheckParam: "", + }, + + "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordAgePolicy": authz.Option{ + Permission: "policy.write", + CheckParam: "", + }, + + "/caos.zitadel.management.api.v1.ManagementService/RemovePasswordAgePolicy": authz.Option{ + Permission: "policy.delete", + CheckParam: "", + }, + + "/caos.zitadel.management.api.v1.ManagementService/GetPasswordLockoutPolicy": authz.Option{ + Permission: "policy.read", + CheckParam: "", + }, + + "/caos.zitadel.management.api.v1.ManagementService/GetDefaultPasswordLockoutPolicy": authz.Option{ + Permission: "policy.read", + CheckParam: "", + }, + + "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordLockoutPolicy": authz.Option{ + Permission: "policy.write", + CheckParam: "", + }, + + "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordLockoutPolicy": authz.Option{ + Permission: "policy.write", + CheckParam: "", + }, + + "/caos.zitadel.management.api.v1.ManagementService/RemovePasswordLockoutPolicy": authz.Option{ + Permission: "policy.delete", + CheckParam: "", + }, } diff --git a/pkg/grpc/management/management.pb.go b/pkg/grpc/management/management.pb.go index 4017d64d21..2166f9ff35 100644 --- a/pkg/grpc/management/management.pb.go +++ b/pkg/grpc/management/management.pb.go @@ -5785,16 +5785,17 @@ func (x *SetPasswordNotificationRequest) GetType() NotificationType { return NotificationType_NOTIFICATIONTYPE_EMAIL } -type PasswordComplexityPolicyID struct { +type OrgIamPolicyView struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + UserLoginMustBeDomain bool `protobuf:"varint,1,opt,name=user_login_must_be_domain,json=userLoginMustBeDomain,proto3" json:"user_login_must_be_domain,omitempty"` + Default bool `protobuf:"varint,2,opt,name=default,proto3" json:"default,omitempty"` } -func (x *PasswordComplexityPolicyID) Reset() { - *x = PasswordComplexityPolicyID{} +func (x *OrgIamPolicyView) Reset() { + *x = OrgIamPolicyView{} if protoimpl.UnsafeEnabled { mi := &file_management_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5802,13 +5803,13 @@ func (x *PasswordComplexityPolicyID) Reset() { } } -func (x *PasswordComplexityPolicyID) String() string { +func (x *OrgIamPolicyView) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PasswordComplexityPolicyID) ProtoMessage() {} +func (*OrgIamPolicyView) ProtoMessage() {} -func (x *PasswordComplexityPolicyID) ProtoReflect() protoreflect.Message { +func (x *OrgIamPolicyView) ProtoReflect() protoreflect.Message { mi := &file_management_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5820,984 +5821,19 @@ func (x *PasswordComplexityPolicyID) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PasswordComplexityPolicyID.ProtoReflect.Descriptor instead. -func (*PasswordComplexityPolicyID) Descriptor() ([]byte, []int) { +// Deprecated: Use OrgIamPolicyView.ProtoReflect.Descriptor instead. +func (*OrgIamPolicyView) Descriptor() ([]byte, []int) { return file_management_proto_rawDescGZIP(), []int{47} } -func (x *PasswordComplexityPolicyID) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type PasswordComplexityPolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - State PolicyState `protobuf:"varint,3,opt,name=state,proto3,enum=caos.zitadel.management.api.v1.PolicyState" json:"state,omitempty"` - CreationDate *timestamp.Timestamp `protobuf:"bytes,4,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` - ChangeDate *timestamp.Timestamp `protobuf:"bytes,5,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` - MinLength uint64 `protobuf:"varint,6,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` - HasLowercase bool `protobuf:"varint,7,opt,name=has_lowercase,json=hasLowercase,proto3" json:"has_lowercase,omitempty"` - HasUppercase bool `protobuf:"varint,8,opt,name=has_uppercase,json=hasUppercase,proto3" json:"has_uppercase,omitempty"` - HasNumber bool `protobuf:"varint,9,opt,name=has_number,json=hasNumber,proto3" json:"has_number,omitempty"` - HasSymbol bool `protobuf:"varint,10,opt,name=has_symbol,json=hasSymbol,proto3" json:"has_symbol,omitempty"` - Sequence uint64 `protobuf:"varint,11,opt,name=sequence,proto3" json:"sequence,omitempty"` - IsDefault bool `protobuf:"varint,12,opt,name=is_default,json=isDefault,proto3" json:"is_default,omitempty"` -} - -func (x *PasswordComplexityPolicy) Reset() { - *x = PasswordComplexityPolicy{} - if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[48] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PasswordComplexityPolicy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PasswordComplexityPolicy) ProtoMessage() {} - -func (x *PasswordComplexityPolicy) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[48] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PasswordComplexityPolicy.ProtoReflect.Descriptor instead. -func (*PasswordComplexityPolicy) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{48} -} - -func (x *PasswordComplexityPolicy) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PasswordComplexityPolicy) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *PasswordComplexityPolicy) GetState() PolicyState { - if x != nil { - return x.State - } - return PolicyState_POLICYSTATE_UNSPECIFIED -} - -func (x *PasswordComplexityPolicy) GetCreationDate() *timestamp.Timestamp { - if x != nil { - return x.CreationDate - } - return nil -} - -func (x *PasswordComplexityPolicy) GetChangeDate() *timestamp.Timestamp { - if x != nil { - return x.ChangeDate - } - return nil -} - -func (x *PasswordComplexityPolicy) GetMinLength() uint64 { - if x != nil { - return x.MinLength - } - return 0 -} - -func (x *PasswordComplexityPolicy) GetHasLowercase() bool { - if x != nil { - return x.HasLowercase - } - return false -} - -func (x *PasswordComplexityPolicy) GetHasUppercase() bool { - if x != nil { - return x.HasUppercase - } - return false -} - -func (x *PasswordComplexityPolicy) GetHasNumber() bool { - if x != nil { - return x.HasNumber - } - return false -} - -func (x *PasswordComplexityPolicy) GetHasSymbol() bool { - if x != nil { - return x.HasSymbol - } - return false -} - -func (x *PasswordComplexityPolicy) GetSequence() uint64 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *PasswordComplexityPolicy) GetIsDefault() bool { - if x != nil { - return x.IsDefault - } - return false -} - -type PasswordComplexityPolicyCreate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - MinLength uint64 `protobuf:"varint,2,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` - HasLowercase bool `protobuf:"varint,3,opt,name=has_lowercase,json=hasLowercase,proto3" json:"has_lowercase,omitempty"` - HasUppercase bool `protobuf:"varint,4,opt,name=has_uppercase,json=hasUppercase,proto3" json:"has_uppercase,omitempty"` - HasNumber bool `protobuf:"varint,5,opt,name=has_number,json=hasNumber,proto3" json:"has_number,omitempty"` - HasSymbol bool `protobuf:"varint,6,opt,name=has_symbol,json=hasSymbol,proto3" json:"has_symbol,omitempty"` -} - -func (x *PasswordComplexityPolicyCreate) Reset() { - *x = PasswordComplexityPolicyCreate{} - if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[49] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PasswordComplexityPolicyCreate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PasswordComplexityPolicyCreate) ProtoMessage() {} - -func (x *PasswordComplexityPolicyCreate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[49] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PasswordComplexityPolicyCreate.ProtoReflect.Descriptor instead. -func (*PasswordComplexityPolicyCreate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{49} -} - -func (x *PasswordComplexityPolicyCreate) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *PasswordComplexityPolicyCreate) GetMinLength() uint64 { - if x != nil { - return x.MinLength - } - return 0 -} - -func (x *PasswordComplexityPolicyCreate) GetHasLowercase() bool { - if x != nil { - return x.HasLowercase - } - return false -} - -func (x *PasswordComplexityPolicyCreate) GetHasUppercase() bool { - if x != nil { - return x.HasUppercase - } - return false -} - -func (x *PasswordComplexityPolicyCreate) GetHasNumber() bool { - if x != nil { - return x.HasNumber - } - return false -} - -func (x *PasswordComplexityPolicyCreate) GetHasSymbol() bool { - if x != nil { - return x.HasSymbol - } - return false -} - -type PasswordComplexityPolicyUpdate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` //TODO: do we need id? - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - MinLength uint64 `protobuf:"varint,3,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` - HasLowercase bool `protobuf:"varint,4,opt,name=has_lowercase,json=hasLowercase,proto3" json:"has_lowercase,omitempty"` - HasUppercase bool `protobuf:"varint,5,opt,name=has_uppercase,json=hasUppercase,proto3" json:"has_uppercase,omitempty"` - HasNumber bool `protobuf:"varint,6,opt,name=has_number,json=hasNumber,proto3" json:"has_number,omitempty"` - HasSymbol bool `protobuf:"varint,7,opt,name=has_symbol,json=hasSymbol,proto3" json:"has_symbol,omitempty"` -} - -func (x *PasswordComplexityPolicyUpdate) Reset() { - *x = PasswordComplexityPolicyUpdate{} - if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[50] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PasswordComplexityPolicyUpdate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PasswordComplexityPolicyUpdate) ProtoMessage() {} - -func (x *PasswordComplexityPolicyUpdate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[50] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PasswordComplexityPolicyUpdate.ProtoReflect.Descriptor instead. -func (*PasswordComplexityPolicyUpdate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{50} -} - -func (x *PasswordComplexityPolicyUpdate) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PasswordComplexityPolicyUpdate) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *PasswordComplexityPolicyUpdate) GetMinLength() uint64 { - if x != nil { - return x.MinLength - } - return 0 -} - -func (x *PasswordComplexityPolicyUpdate) GetHasLowercase() bool { - if x != nil { - return x.HasLowercase - } - return false -} - -func (x *PasswordComplexityPolicyUpdate) GetHasUppercase() bool { - if x != nil { - return x.HasUppercase - } - return false -} - -func (x *PasswordComplexityPolicyUpdate) GetHasNumber() bool { - if x != nil { - return x.HasNumber - } - return false -} - -func (x *PasswordComplexityPolicyUpdate) GetHasSymbol() bool { - if x != nil { - return x.HasSymbol - } - return false -} - -type PasswordAgePolicyID struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *PasswordAgePolicyID) Reset() { - *x = PasswordAgePolicyID{} - if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[51] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PasswordAgePolicyID) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PasswordAgePolicyID) ProtoMessage() {} - -func (x *PasswordAgePolicyID) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[51] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PasswordAgePolicyID.ProtoReflect.Descriptor instead. -func (*PasswordAgePolicyID) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{51} -} - -func (x *PasswordAgePolicyID) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type PasswordAgePolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` //TODO: do we need id? - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - State PolicyState `protobuf:"varint,3,opt,name=state,proto3,enum=caos.zitadel.management.api.v1.PolicyState" json:"state,omitempty"` - CreationDate *timestamp.Timestamp `protobuf:"bytes,4,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` - ChangeDate *timestamp.Timestamp `protobuf:"bytes,5,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` - MaxAgeDays uint64 `protobuf:"varint,6,opt,name=max_age_days,json=maxAgeDays,proto3" json:"max_age_days,omitempty"` - ExpireWarnDays uint64 `protobuf:"varint,7,opt,name=expire_warn_days,json=expireWarnDays,proto3" json:"expire_warn_days,omitempty"` - Sequence uint64 `protobuf:"varint,8,opt,name=sequence,proto3" json:"sequence,omitempty"` - IsDefault bool `protobuf:"varint,9,opt,name=is_default,json=isDefault,proto3" json:"is_default,omitempty"` -} - -func (x *PasswordAgePolicy) Reset() { - *x = PasswordAgePolicy{} - if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[52] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PasswordAgePolicy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PasswordAgePolicy) ProtoMessage() {} - -func (x *PasswordAgePolicy) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[52] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PasswordAgePolicy.ProtoReflect.Descriptor instead. -func (*PasswordAgePolicy) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{52} -} - -func (x *PasswordAgePolicy) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PasswordAgePolicy) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *PasswordAgePolicy) GetState() PolicyState { - if x != nil { - return x.State - } - return PolicyState_POLICYSTATE_UNSPECIFIED -} - -func (x *PasswordAgePolicy) GetCreationDate() *timestamp.Timestamp { - if x != nil { - return x.CreationDate - } - return nil -} - -func (x *PasswordAgePolicy) GetChangeDate() *timestamp.Timestamp { - if x != nil { - return x.ChangeDate - } - return nil -} - -func (x *PasswordAgePolicy) GetMaxAgeDays() uint64 { - if x != nil { - return x.MaxAgeDays - } - return 0 -} - -func (x *PasswordAgePolicy) GetExpireWarnDays() uint64 { - if x != nil { - return x.ExpireWarnDays - } - return 0 -} - -func (x *PasswordAgePolicy) GetSequence() uint64 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *PasswordAgePolicy) GetIsDefault() bool { - if x != nil { - return x.IsDefault - } - return false -} - -type PasswordAgePolicyCreate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - MaxAgeDays uint64 `protobuf:"varint,2,opt,name=max_age_days,json=maxAgeDays,proto3" json:"max_age_days,omitempty"` - ExpireWarnDays uint64 `protobuf:"varint,3,opt,name=expire_warn_days,json=expireWarnDays,proto3" json:"expire_warn_days,omitempty"` -} - -func (x *PasswordAgePolicyCreate) Reset() { - *x = PasswordAgePolicyCreate{} - if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[53] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PasswordAgePolicyCreate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PasswordAgePolicyCreate) ProtoMessage() {} - -func (x *PasswordAgePolicyCreate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[53] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PasswordAgePolicyCreate.ProtoReflect.Descriptor instead. -func (*PasswordAgePolicyCreate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{53} -} - -func (x *PasswordAgePolicyCreate) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *PasswordAgePolicyCreate) GetMaxAgeDays() uint64 { - if x != nil { - return x.MaxAgeDays - } - return 0 -} - -func (x *PasswordAgePolicyCreate) GetExpireWarnDays() uint64 { - if x != nil { - return x.ExpireWarnDays - } - return 0 -} - -type PasswordAgePolicyUpdate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` //TODO: do we need id? - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - MaxAgeDays uint64 `protobuf:"varint,3,opt,name=max_age_days,json=maxAgeDays,proto3" json:"max_age_days,omitempty"` - ExpireWarnDays uint64 `protobuf:"varint,4,opt,name=expire_warn_days,json=expireWarnDays,proto3" json:"expire_warn_days,omitempty"` -} - -func (x *PasswordAgePolicyUpdate) Reset() { - *x = PasswordAgePolicyUpdate{} - if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[54] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PasswordAgePolicyUpdate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PasswordAgePolicyUpdate) ProtoMessage() {} - -func (x *PasswordAgePolicyUpdate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[54] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PasswordAgePolicyUpdate.ProtoReflect.Descriptor instead. -func (*PasswordAgePolicyUpdate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{54} -} - -func (x *PasswordAgePolicyUpdate) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PasswordAgePolicyUpdate) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *PasswordAgePolicyUpdate) GetMaxAgeDays() uint64 { - if x != nil { - return x.MaxAgeDays - } - return 0 -} - -func (x *PasswordAgePolicyUpdate) GetExpireWarnDays() uint64 { - if x != nil { - return x.ExpireWarnDays - } - return 0 -} - -type PasswordLockoutPolicyID struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` //TODO: why do we need this? -} - -func (x *PasswordLockoutPolicyID) Reset() { - *x = PasswordLockoutPolicyID{} - if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[55] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PasswordLockoutPolicyID) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PasswordLockoutPolicyID) ProtoMessage() {} - -func (x *PasswordLockoutPolicyID) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[55] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PasswordLockoutPolicyID.ProtoReflect.Descriptor instead. -func (*PasswordLockoutPolicyID) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{55} -} - -func (x *PasswordLockoutPolicyID) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type PasswordLockoutPolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` //TODO: why do we need this? - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - State PolicyState `protobuf:"varint,3,opt,name=state,proto3,enum=caos.zitadel.management.api.v1.PolicyState" json:"state,omitempty"` - CreationDate *timestamp.Timestamp `protobuf:"bytes,4,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` - ChangeDate *timestamp.Timestamp `protobuf:"bytes,5,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` - MaxAttempts uint64 `protobuf:"varint,6,opt,name=max_attempts,json=maxAttempts,proto3" json:"max_attempts,omitempty"` - ShowLockOutFailures bool `protobuf:"varint,7,opt,name=show_lock_out_failures,json=showLockOutFailures,proto3" json:"show_lock_out_failures,omitempty"` - Sequence uint64 `protobuf:"varint,8,opt,name=sequence,proto3" json:"sequence,omitempty"` - IsDefault bool `protobuf:"varint,9,opt,name=is_default,json=isDefault,proto3" json:"is_default,omitempty"` -} - -func (x *PasswordLockoutPolicy) Reset() { - *x = PasswordLockoutPolicy{} - if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[56] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PasswordLockoutPolicy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PasswordLockoutPolicy) ProtoMessage() {} - -func (x *PasswordLockoutPolicy) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[56] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PasswordLockoutPolicy.ProtoReflect.Descriptor instead. -func (*PasswordLockoutPolicy) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{56} -} - -func (x *PasswordLockoutPolicy) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PasswordLockoutPolicy) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *PasswordLockoutPolicy) GetState() PolicyState { - if x != nil { - return x.State - } - return PolicyState_POLICYSTATE_UNSPECIFIED -} - -func (x *PasswordLockoutPolicy) GetCreationDate() *timestamp.Timestamp { - if x != nil { - return x.CreationDate - } - return nil -} - -func (x *PasswordLockoutPolicy) GetChangeDate() *timestamp.Timestamp { - if x != nil { - return x.ChangeDate - } - return nil -} - -func (x *PasswordLockoutPolicy) GetMaxAttempts() uint64 { - if x != nil { - return x.MaxAttempts - } - return 0 -} - -func (x *PasswordLockoutPolicy) GetShowLockOutFailures() bool { - if x != nil { - return x.ShowLockOutFailures - } - return false -} - -func (x *PasswordLockoutPolicy) GetSequence() uint64 { - if x != nil { - return x.Sequence - } - return 0 -} - -func (x *PasswordLockoutPolicy) GetIsDefault() bool { - if x != nil { - return x.IsDefault - } - return false -} - -type PasswordLockoutPolicyCreate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - MaxAttempts uint64 `protobuf:"varint,2,opt,name=max_attempts,json=maxAttempts,proto3" json:"max_attempts,omitempty"` - ShowLockOutFailures bool `protobuf:"varint,3,opt,name=show_lock_out_failures,json=showLockOutFailures,proto3" json:"show_lock_out_failures,omitempty"` -} - -func (x *PasswordLockoutPolicyCreate) Reset() { - *x = PasswordLockoutPolicyCreate{} - if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[57] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PasswordLockoutPolicyCreate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PasswordLockoutPolicyCreate) ProtoMessage() {} - -func (x *PasswordLockoutPolicyCreate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[57] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PasswordLockoutPolicyCreate.ProtoReflect.Descriptor instead. -func (*PasswordLockoutPolicyCreate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{57} -} - -func (x *PasswordLockoutPolicyCreate) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *PasswordLockoutPolicyCreate) GetMaxAttempts() uint64 { - if x != nil { - return x.MaxAttempts - } - return 0 -} - -func (x *PasswordLockoutPolicyCreate) GetShowLockOutFailures() bool { - if x != nil { - return x.ShowLockOutFailures - } - return false -} - -type PasswordLockoutPolicyUpdate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` //TODO: do we need id? - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - MaxAttempts uint64 `protobuf:"varint,3,opt,name=max_attempts,json=maxAttempts,proto3" json:"max_attempts,omitempty"` - ShowLockOutFailures bool `protobuf:"varint,4,opt,name=show_lock_out_failures,json=showLockOutFailures,proto3" json:"show_lock_out_failures,omitempty"` -} - -func (x *PasswordLockoutPolicyUpdate) Reset() { - *x = PasswordLockoutPolicyUpdate{} - if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[58] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PasswordLockoutPolicyUpdate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PasswordLockoutPolicyUpdate) ProtoMessage() {} - -func (x *PasswordLockoutPolicyUpdate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[58] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PasswordLockoutPolicyUpdate.ProtoReflect.Descriptor instead. -func (*PasswordLockoutPolicyUpdate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{58} -} - -func (x *PasswordLockoutPolicyUpdate) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PasswordLockoutPolicyUpdate) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *PasswordLockoutPolicyUpdate) GetMaxAttempts() uint64 { - if x != nil { - return x.MaxAttempts - } - return 0 -} - -func (x *PasswordLockoutPolicyUpdate) GetShowLockOutFailures() bool { - if x != nil { - return x.ShowLockOutFailures - } - return false -} - -type OrgIamPolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OrgId string `protobuf:"bytes,1,opt,name=org_id,json=orgId,proto3" json:"org_id,omitempty"` //TODO: do we need id? - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - UserLoginMustBeDomain bool `protobuf:"varint,3,opt,name=user_login_must_be_domain,json=userLoginMustBeDomain,proto3" json:"user_login_must_be_domain,omitempty"` - Default bool `protobuf:"varint,4,opt,name=default,proto3" json:"default,omitempty"` -} - -func (x *OrgIamPolicy) Reset() { - *x = OrgIamPolicy{} - if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[59] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OrgIamPolicy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OrgIamPolicy) ProtoMessage() {} - -func (x *OrgIamPolicy) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[59] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OrgIamPolicy.ProtoReflect.Descriptor instead. -func (*OrgIamPolicy) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{59} -} - -func (x *OrgIamPolicy) GetOrgId() string { - if x != nil { - return x.OrgId - } - return "" -} - -func (x *OrgIamPolicy) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *OrgIamPolicy) GetUserLoginMustBeDomain() bool { +func (x *OrgIamPolicyView) GetUserLoginMustBeDomain() bool { if x != nil { return x.UserLoginMustBeDomain } return false } -func (x *OrgIamPolicy) GetDefault() bool { +func (x *OrgIamPolicyView) GetDefault() bool { if x != nil { return x.Default } @@ -6815,7 +5851,7 @@ type OrgCreateRequest struct { func (x *OrgCreateRequest) Reset() { *x = OrgCreateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[60] + mi := &file_management_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6828,7 +5864,7 @@ func (x *OrgCreateRequest) String() string { func (*OrgCreateRequest) ProtoMessage() {} func (x *OrgCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[60] + mi := &file_management_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6841,7 +5877,7 @@ func (x *OrgCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgCreateRequest.ProtoReflect.Descriptor instead. func (*OrgCreateRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{60} + return file_management_proto_rawDescGZIP(), []int{48} } func (x *OrgCreateRequest) GetName() string { @@ -6867,7 +5903,7 @@ type Org struct { func (x *Org) Reset() { *x = Org{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[61] + mi := &file_management_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6880,7 +5916,7 @@ func (x *Org) String() string { func (*Org) ProtoMessage() {} func (x *Org) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[61] + mi := &file_management_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6893,7 +5929,7 @@ func (x *Org) ProtoReflect() protoreflect.Message { // Deprecated: Use Org.ProtoReflect.Descriptor instead. func (*Org) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{61} + return file_management_proto_rawDescGZIP(), []int{49} } func (x *Org) GetId() string { @@ -6954,7 +5990,7 @@ type OrgView struct { func (x *OrgView) Reset() { *x = OrgView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[62] + mi := &file_management_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6967,7 +6003,7 @@ func (x *OrgView) String() string { func (*OrgView) ProtoMessage() {} func (x *OrgView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[62] + mi := &file_management_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6980,7 +6016,7 @@ func (x *OrgView) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgView.ProtoReflect.Descriptor instead. func (*OrgView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{62} + return file_management_proto_rawDescGZIP(), []int{50} } func (x *OrgView) GetId() string { @@ -7036,7 +6072,7 @@ type Domain struct { func (x *Domain) Reset() { *x = Domain{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[63] + mi := &file_management_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7049,7 +6085,7 @@ func (x *Domain) String() string { func (*Domain) ProtoMessage() {} func (x *Domain) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[63] + mi := &file_management_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7062,7 +6098,7 @@ func (x *Domain) ProtoReflect() protoreflect.Message { // Deprecated: Use Domain.ProtoReflect.Descriptor instead. func (*Domain) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{63} + return file_management_proto_rawDescGZIP(), []int{51} } func (x *Domain) GetDomain() string { @@ -7089,7 +6125,7 @@ type OrgDomain struct { func (x *OrgDomain) Reset() { *x = OrgDomain{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[64] + mi := &file_management_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7102,7 +6138,7 @@ func (x *OrgDomain) String() string { func (*OrgDomain) ProtoMessage() {} func (x *OrgDomain) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[64] + mi := &file_management_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7115,7 +6151,7 @@ func (x *OrgDomain) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgDomain.ProtoReflect.Descriptor instead. func (*OrgDomain) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{64} + return file_management_proto_rawDescGZIP(), []int{52} } func (x *OrgDomain) GetOrgId() string { @@ -7185,7 +6221,7 @@ type OrgDomainView struct { func (x *OrgDomainView) Reset() { *x = OrgDomainView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[65] + mi := &file_management_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7198,7 +6234,7 @@ func (x *OrgDomainView) String() string { func (*OrgDomainView) ProtoMessage() {} func (x *OrgDomainView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[65] + mi := &file_management_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7211,7 +6247,7 @@ func (x *OrgDomainView) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgDomainView.ProtoReflect.Descriptor instead. func (*OrgDomainView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{65} + return file_management_proto_rawDescGZIP(), []int{53} } func (x *OrgDomainView) GetOrgId() string { @@ -7281,7 +6317,7 @@ type AddOrgDomainRequest struct { func (x *AddOrgDomainRequest) Reset() { *x = AddOrgDomainRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[66] + mi := &file_management_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7294,7 +6330,7 @@ func (x *AddOrgDomainRequest) String() string { func (*AddOrgDomainRequest) ProtoMessage() {} func (x *AddOrgDomainRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[66] + mi := &file_management_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7307,7 +6343,7 @@ func (x *AddOrgDomainRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AddOrgDomainRequest.ProtoReflect.Descriptor instead. func (*AddOrgDomainRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{66} + return file_management_proto_rawDescGZIP(), []int{54} } func (x *AddOrgDomainRequest) GetDomain() string { @@ -7329,7 +6365,7 @@ type OrgDomainValidationRequest struct { func (x *OrgDomainValidationRequest) Reset() { *x = OrgDomainValidationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[67] + mi := &file_management_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7342,7 +6378,7 @@ func (x *OrgDomainValidationRequest) String() string { func (*OrgDomainValidationRequest) ProtoMessage() {} func (x *OrgDomainValidationRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[67] + mi := &file_management_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7355,7 +6391,7 @@ func (x *OrgDomainValidationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgDomainValidationRequest.ProtoReflect.Descriptor instead. func (*OrgDomainValidationRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{67} + return file_management_proto_rawDescGZIP(), []int{55} } func (x *OrgDomainValidationRequest) GetDomain() string { @@ -7384,7 +6420,7 @@ type OrgDomainValidationResponse struct { func (x *OrgDomainValidationResponse) Reset() { *x = OrgDomainValidationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[68] + mi := &file_management_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7397,7 +6433,7 @@ func (x *OrgDomainValidationResponse) String() string { func (*OrgDomainValidationResponse) ProtoMessage() {} func (x *OrgDomainValidationResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[68] + mi := &file_management_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7410,7 +6446,7 @@ func (x *OrgDomainValidationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgDomainValidationResponse.ProtoReflect.Descriptor instead. func (*OrgDomainValidationResponse) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{68} + return file_management_proto_rawDescGZIP(), []int{56} } func (x *OrgDomainValidationResponse) GetToken() string { @@ -7438,7 +6474,7 @@ type ValidateOrgDomainRequest struct { func (x *ValidateOrgDomainRequest) Reset() { *x = ValidateOrgDomainRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[69] + mi := &file_management_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7451,7 +6487,7 @@ func (x *ValidateOrgDomainRequest) String() string { func (*ValidateOrgDomainRequest) ProtoMessage() {} func (x *ValidateOrgDomainRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[69] + mi := &file_management_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7464,7 +6500,7 @@ func (x *ValidateOrgDomainRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateOrgDomainRequest.ProtoReflect.Descriptor instead. func (*ValidateOrgDomainRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{69} + return file_management_proto_rawDescGZIP(), []int{57} } func (x *ValidateOrgDomainRequest) GetDomain() string { @@ -7485,7 +6521,7 @@ type PrimaryOrgDomainRequest struct { func (x *PrimaryOrgDomainRequest) Reset() { *x = PrimaryOrgDomainRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[70] + mi := &file_management_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7498,7 +6534,7 @@ func (x *PrimaryOrgDomainRequest) String() string { func (*PrimaryOrgDomainRequest) ProtoMessage() {} func (x *PrimaryOrgDomainRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[70] + mi := &file_management_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7511,7 +6547,7 @@ func (x *PrimaryOrgDomainRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PrimaryOrgDomainRequest.ProtoReflect.Descriptor instead. func (*PrimaryOrgDomainRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{70} + return file_management_proto_rawDescGZIP(), []int{58} } func (x *PrimaryOrgDomainRequest) GetDomain() string { @@ -7532,7 +6568,7 @@ type RemoveOrgDomainRequest struct { func (x *RemoveOrgDomainRequest) Reset() { *x = RemoveOrgDomainRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[71] + mi := &file_management_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7545,7 +6581,7 @@ func (x *RemoveOrgDomainRequest) String() string { func (*RemoveOrgDomainRequest) ProtoMessage() {} func (x *RemoveOrgDomainRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[71] + mi := &file_management_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7558,7 +6594,7 @@ func (x *RemoveOrgDomainRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveOrgDomainRequest.ProtoReflect.Descriptor instead. func (*RemoveOrgDomainRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{71} + return file_management_proto_rawDescGZIP(), []int{59} } func (x *RemoveOrgDomainRequest) GetDomain() string { @@ -7584,7 +6620,7 @@ type OrgDomainSearchResponse struct { func (x *OrgDomainSearchResponse) Reset() { *x = OrgDomainSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[72] + mi := &file_management_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7597,7 +6633,7 @@ func (x *OrgDomainSearchResponse) String() string { func (*OrgDomainSearchResponse) ProtoMessage() {} func (x *OrgDomainSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[72] + mi := &file_management_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7610,7 +6646,7 @@ func (x *OrgDomainSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgDomainSearchResponse.ProtoReflect.Descriptor instead. func (*OrgDomainSearchResponse) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{72} + return file_management_proto_rawDescGZIP(), []int{60} } func (x *OrgDomainSearchResponse) GetOffset() uint64 { @@ -7668,7 +6704,7 @@ type OrgDomainSearchRequest struct { func (x *OrgDomainSearchRequest) Reset() { *x = OrgDomainSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[73] + mi := &file_management_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7681,7 +6717,7 @@ func (x *OrgDomainSearchRequest) String() string { func (*OrgDomainSearchRequest) ProtoMessage() {} func (x *OrgDomainSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[73] + mi := &file_management_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7694,7 +6730,7 @@ func (x *OrgDomainSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgDomainSearchRequest.ProtoReflect.Descriptor instead. func (*OrgDomainSearchRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{73} + return file_management_proto_rawDescGZIP(), []int{61} } func (x *OrgDomainSearchRequest) GetOffset() uint64 { @@ -7731,7 +6767,7 @@ type OrgDomainSearchQuery struct { func (x *OrgDomainSearchQuery) Reset() { *x = OrgDomainSearchQuery{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[74] + mi := &file_management_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7744,7 +6780,7 @@ func (x *OrgDomainSearchQuery) String() string { func (*OrgDomainSearchQuery) ProtoMessage() {} func (x *OrgDomainSearchQuery) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[74] + mi := &file_management_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7757,7 +6793,7 @@ func (x *OrgDomainSearchQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgDomainSearchQuery.ProtoReflect.Descriptor instead. func (*OrgDomainSearchQuery) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{74} + return file_management_proto_rawDescGZIP(), []int{62} } func (x *OrgDomainSearchQuery) GetKey() OrgDomainSearchKey { @@ -7792,7 +6828,7 @@ type OrgMemberRoles struct { func (x *OrgMemberRoles) Reset() { *x = OrgMemberRoles{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[75] + mi := &file_management_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7805,7 +6841,7 @@ func (x *OrgMemberRoles) String() string { func (*OrgMemberRoles) ProtoMessage() {} func (x *OrgMemberRoles) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[75] + mi := &file_management_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7818,7 +6854,7 @@ func (x *OrgMemberRoles) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgMemberRoles.ProtoReflect.Descriptor instead. func (*OrgMemberRoles) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{75} + return file_management_proto_rawDescGZIP(), []int{63} } func (x *OrgMemberRoles) GetRoles() []string { @@ -7843,7 +6879,7 @@ type OrgMember struct { func (x *OrgMember) Reset() { *x = OrgMember{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[76] + mi := &file_management_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7856,7 +6892,7 @@ func (x *OrgMember) String() string { func (*OrgMember) ProtoMessage() {} func (x *OrgMember) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[76] + mi := &file_management_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7869,7 +6905,7 @@ func (x *OrgMember) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgMember.ProtoReflect.Descriptor instead. func (*OrgMember) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{76} + return file_management_proto_rawDescGZIP(), []int{64} } func (x *OrgMember) GetUserId() string { @@ -7919,7 +6955,7 @@ type AddOrgMemberRequest struct { func (x *AddOrgMemberRequest) Reset() { *x = AddOrgMemberRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[77] + mi := &file_management_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7932,7 +6968,7 @@ func (x *AddOrgMemberRequest) String() string { func (*AddOrgMemberRequest) ProtoMessage() {} func (x *AddOrgMemberRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[77] + mi := &file_management_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7945,7 +6981,7 @@ func (x *AddOrgMemberRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AddOrgMemberRequest.ProtoReflect.Descriptor instead. func (*AddOrgMemberRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{77} + return file_management_proto_rawDescGZIP(), []int{65} } func (x *AddOrgMemberRequest) GetUserId() string { @@ -7974,7 +7010,7 @@ type ChangeOrgMemberRequest struct { func (x *ChangeOrgMemberRequest) Reset() { *x = ChangeOrgMemberRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[78] + mi := &file_management_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7987,7 +7023,7 @@ func (x *ChangeOrgMemberRequest) String() string { func (*ChangeOrgMemberRequest) ProtoMessage() {} func (x *ChangeOrgMemberRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[78] + mi := &file_management_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8000,7 +7036,7 @@ func (x *ChangeOrgMemberRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeOrgMemberRequest.ProtoReflect.Descriptor instead. func (*ChangeOrgMemberRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{78} + return file_management_proto_rawDescGZIP(), []int{66} } func (x *ChangeOrgMemberRequest) GetUserId() string { @@ -8028,7 +7064,7 @@ type RemoveOrgMemberRequest struct { func (x *RemoveOrgMemberRequest) Reset() { *x = RemoveOrgMemberRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[79] + mi := &file_management_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8041,7 +7077,7 @@ func (x *RemoveOrgMemberRequest) String() string { func (*RemoveOrgMemberRequest) ProtoMessage() {} func (x *RemoveOrgMemberRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[79] + mi := &file_management_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8054,7 +7090,7 @@ func (x *RemoveOrgMemberRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveOrgMemberRequest.ProtoReflect.Descriptor instead. func (*RemoveOrgMemberRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{79} + return file_management_proto_rawDescGZIP(), []int{67} } func (x *RemoveOrgMemberRequest) GetUserId() string { @@ -8080,7 +7116,7 @@ type OrgMemberSearchResponse struct { func (x *OrgMemberSearchResponse) Reset() { *x = OrgMemberSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[80] + mi := &file_management_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8093,7 +7129,7 @@ func (x *OrgMemberSearchResponse) String() string { func (*OrgMemberSearchResponse) ProtoMessage() {} func (x *OrgMemberSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[80] + mi := &file_management_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8106,7 +7142,7 @@ func (x *OrgMemberSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgMemberSearchResponse.ProtoReflect.Descriptor instead. func (*OrgMemberSearchResponse) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{80} + return file_management_proto_rawDescGZIP(), []int{68} } func (x *OrgMemberSearchResponse) GetOffset() uint64 { @@ -8171,7 +7207,7 @@ type OrgMemberView struct { func (x *OrgMemberView) Reset() { *x = OrgMemberView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[81] + mi := &file_management_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8184,7 +7220,7 @@ func (x *OrgMemberView) String() string { func (*OrgMemberView) ProtoMessage() {} func (x *OrgMemberView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[81] + mi := &file_management_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8197,7 +7233,7 @@ func (x *OrgMemberView) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgMemberView.ProtoReflect.Descriptor instead. func (*OrgMemberView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{81} + return file_management_proto_rawDescGZIP(), []int{69} } func (x *OrgMemberView) GetUserId() string { @@ -8283,7 +7319,7 @@ type OrgMemberSearchRequest struct { func (x *OrgMemberSearchRequest) Reset() { *x = OrgMemberSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[82] + mi := &file_management_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8296,7 +7332,7 @@ func (x *OrgMemberSearchRequest) String() string { func (*OrgMemberSearchRequest) ProtoMessage() {} func (x *OrgMemberSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[82] + mi := &file_management_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8309,7 +7345,7 @@ func (x *OrgMemberSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgMemberSearchRequest.ProtoReflect.Descriptor instead. func (*OrgMemberSearchRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{82} + return file_management_proto_rawDescGZIP(), []int{70} } func (x *OrgMemberSearchRequest) GetOffset() uint64 { @@ -8346,7 +7382,7 @@ type OrgMemberSearchQuery struct { func (x *OrgMemberSearchQuery) Reset() { *x = OrgMemberSearchQuery{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[83] + mi := &file_management_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8359,7 +7395,7 @@ func (x *OrgMemberSearchQuery) String() string { func (*OrgMemberSearchQuery) ProtoMessage() {} func (x *OrgMemberSearchQuery) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[83] + mi := &file_management_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8372,7 +7408,7 @@ func (x *OrgMemberSearchQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgMemberSearchQuery.ProtoReflect.Descriptor instead. func (*OrgMemberSearchQuery) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{83} + return file_management_proto_rawDescGZIP(), []int{71} } func (x *OrgMemberSearchQuery) GetKey() OrgMemberSearchKey { @@ -8407,7 +7443,7 @@ type ProjectCreateRequest struct { func (x *ProjectCreateRequest) Reset() { *x = ProjectCreateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[84] + mi := &file_management_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8420,7 +7456,7 @@ func (x *ProjectCreateRequest) String() string { func (*ProjectCreateRequest) ProtoMessage() {} func (x *ProjectCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[84] + mi := &file_management_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8433,7 +7469,7 @@ func (x *ProjectCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectCreateRequest.ProtoReflect.Descriptor instead. func (*ProjectCreateRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{84} + return file_management_proto_rawDescGZIP(), []int{72} } func (x *ProjectCreateRequest) GetName() string { @@ -8455,7 +7491,7 @@ type ProjectUpdateRequest struct { func (x *ProjectUpdateRequest) Reset() { *x = ProjectUpdateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[85] + mi := &file_management_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8468,7 +7504,7 @@ func (x *ProjectUpdateRequest) String() string { func (*ProjectUpdateRequest) ProtoMessage() {} func (x *ProjectUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[85] + mi := &file_management_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8481,7 +7517,7 @@ func (x *ProjectUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectUpdateRequest.ProtoReflect.Descriptor instead. func (*ProjectUpdateRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{85} + return file_management_proto_rawDescGZIP(), []int{73} } func (x *ProjectUpdateRequest) GetId() string { @@ -8514,7 +7550,7 @@ type ProjectSearchResponse struct { func (x *ProjectSearchResponse) Reset() { *x = ProjectSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[86] + mi := &file_management_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8527,7 +7563,7 @@ func (x *ProjectSearchResponse) String() string { func (*ProjectSearchResponse) ProtoMessage() {} func (x *ProjectSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[86] + mi := &file_management_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8540,7 +7576,7 @@ func (x *ProjectSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectSearchResponse.ProtoReflect.Descriptor instead. func (*ProjectSearchResponse) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{86} + return file_management_proto_rawDescGZIP(), []int{74} } func (x *ProjectSearchResponse) GetOffset() uint64 { @@ -8602,7 +7638,7 @@ type ProjectView struct { func (x *ProjectView) Reset() { *x = ProjectView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[87] + mi := &file_management_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8615,7 +7651,7 @@ func (x *ProjectView) String() string { func (*ProjectView) ProtoMessage() {} func (x *ProjectView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[87] + mi := &file_management_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8628,7 +7664,7 @@ func (x *ProjectView) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectView.ProtoReflect.Descriptor instead. func (*ProjectView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{87} + return file_management_proto_rawDescGZIP(), []int{75} } func (x *ProjectView) GetProjectId() string { @@ -8693,7 +7729,7 @@ type ProjectSearchRequest struct { func (x *ProjectSearchRequest) Reset() { *x = ProjectSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[88] + mi := &file_management_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8706,7 +7742,7 @@ func (x *ProjectSearchRequest) String() string { func (*ProjectSearchRequest) ProtoMessage() {} func (x *ProjectSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[88] + mi := &file_management_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8719,7 +7755,7 @@ func (x *ProjectSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectSearchRequest.ProtoReflect.Descriptor instead. func (*ProjectSearchRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{88} + return file_management_proto_rawDescGZIP(), []int{76} } func (x *ProjectSearchRequest) GetOffset() uint64 { @@ -8756,7 +7792,7 @@ type ProjectSearchQuery struct { func (x *ProjectSearchQuery) Reset() { *x = ProjectSearchQuery{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[89] + mi := &file_management_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8769,7 +7805,7 @@ func (x *ProjectSearchQuery) String() string { func (*ProjectSearchQuery) ProtoMessage() {} func (x *ProjectSearchQuery) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[89] + mi := &file_management_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8782,7 +7818,7 @@ func (x *ProjectSearchQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectSearchQuery.ProtoReflect.Descriptor instead. func (*ProjectSearchQuery) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{89} + return file_management_proto_rawDescGZIP(), []int{77} } func (x *ProjectSearchQuery) GetKey() ProjectSearchKey { @@ -8817,7 +7853,7 @@ type Projects struct { func (x *Projects) Reset() { *x = Projects{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[90] + mi := &file_management_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8830,7 +7866,7 @@ func (x *Projects) String() string { func (*Projects) ProtoMessage() {} func (x *Projects) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[90] + mi := &file_management_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8843,7 +7879,7 @@ func (x *Projects) ProtoReflect() protoreflect.Message { // Deprecated: Use Projects.ProtoReflect.Descriptor instead. func (*Projects) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{90} + return file_management_proto_rawDescGZIP(), []int{78} } func (x *Projects) GetProjects() []*Project { @@ -8869,7 +7905,7 @@ type Project struct { func (x *Project) Reset() { *x = Project{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[91] + mi := &file_management_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8882,7 +7918,7 @@ func (x *Project) String() string { func (*Project) ProtoMessage() {} func (x *Project) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[91] + mi := &file_management_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8895,7 +7931,7 @@ func (x *Project) ProtoReflect() protoreflect.Message { // Deprecated: Use Project.ProtoReflect.Descriptor instead. func (*Project) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{91} + return file_management_proto_rawDescGZIP(), []int{79} } func (x *Project) GetId() string { @@ -8951,7 +7987,7 @@ type ProjectMemberRoles struct { func (x *ProjectMemberRoles) Reset() { *x = ProjectMemberRoles{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[92] + mi := &file_management_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8964,7 +8000,7 @@ func (x *ProjectMemberRoles) String() string { func (*ProjectMemberRoles) ProtoMessage() {} func (x *ProjectMemberRoles) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[92] + mi := &file_management_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8977,7 +8013,7 @@ func (x *ProjectMemberRoles) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectMemberRoles.ProtoReflect.Descriptor instead. func (*ProjectMemberRoles) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{92} + return file_management_proto_rawDescGZIP(), []int{80} } func (x *ProjectMemberRoles) GetRoles() []string { @@ -9002,7 +8038,7 @@ type ProjectMember struct { func (x *ProjectMember) Reset() { *x = ProjectMember{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[93] + mi := &file_management_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9015,7 +8051,7 @@ func (x *ProjectMember) String() string { func (*ProjectMember) ProtoMessage() {} func (x *ProjectMember) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[93] + mi := &file_management_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9028,7 +8064,7 @@ func (x *ProjectMember) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectMember.ProtoReflect.Descriptor instead. func (*ProjectMember) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{93} + return file_management_proto_rawDescGZIP(), []int{81} } func (x *ProjectMember) GetUserId() string { @@ -9079,7 +8115,7 @@ type ProjectMemberAdd struct { func (x *ProjectMemberAdd) Reset() { *x = ProjectMemberAdd{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[94] + mi := &file_management_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9092,7 +8128,7 @@ func (x *ProjectMemberAdd) String() string { func (*ProjectMemberAdd) ProtoMessage() {} func (x *ProjectMemberAdd) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[94] + mi := &file_management_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9105,7 +8141,7 @@ func (x *ProjectMemberAdd) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectMemberAdd.ProtoReflect.Descriptor instead. func (*ProjectMemberAdd) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{94} + return file_management_proto_rawDescGZIP(), []int{82} } func (x *ProjectMemberAdd) GetId() string { @@ -9142,7 +8178,7 @@ type ProjectMemberChange struct { func (x *ProjectMemberChange) Reset() { *x = ProjectMemberChange{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[95] + mi := &file_management_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9155,7 +8191,7 @@ func (x *ProjectMemberChange) String() string { func (*ProjectMemberChange) ProtoMessage() {} func (x *ProjectMemberChange) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[95] + mi := &file_management_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9168,7 +8204,7 @@ func (x *ProjectMemberChange) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectMemberChange.ProtoReflect.Descriptor instead. func (*ProjectMemberChange) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{95} + return file_management_proto_rawDescGZIP(), []int{83} } func (x *ProjectMemberChange) GetId() string { @@ -9204,7 +8240,7 @@ type ProjectMemberRemove struct { func (x *ProjectMemberRemove) Reset() { *x = ProjectMemberRemove{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[96] + mi := &file_management_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9217,7 +8253,7 @@ func (x *ProjectMemberRemove) String() string { func (*ProjectMemberRemove) ProtoMessage() {} func (x *ProjectMemberRemove) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[96] + mi := &file_management_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9230,7 +8266,7 @@ func (x *ProjectMemberRemove) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectMemberRemove.ProtoReflect.Descriptor instead. func (*ProjectMemberRemove) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{96} + return file_management_proto_rawDescGZIP(), []int{84} } func (x *ProjectMemberRemove) GetId() string { @@ -9261,7 +8297,7 @@ type ProjectRoleAdd struct { func (x *ProjectRoleAdd) Reset() { *x = ProjectRoleAdd{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[97] + mi := &file_management_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9274,7 +8310,7 @@ func (x *ProjectRoleAdd) String() string { func (*ProjectRoleAdd) ProtoMessage() {} func (x *ProjectRoleAdd) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[97] + mi := &file_management_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9287,7 +8323,7 @@ func (x *ProjectRoleAdd) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectRoleAdd.ProtoReflect.Descriptor instead. func (*ProjectRoleAdd) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{97} + return file_management_proto_rawDescGZIP(), []int{85} } func (x *ProjectRoleAdd) GetId() string { @@ -9330,7 +8366,7 @@ type ProjectRoleAddBulk struct { func (x *ProjectRoleAddBulk) Reset() { *x = ProjectRoleAddBulk{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[98] + mi := &file_management_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9343,7 +8379,7 @@ func (x *ProjectRoleAddBulk) String() string { func (*ProjectRoleAddBulk) ProtoMessage() {} func (x *ProjectRoleAddBulk) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[98] + mi := &file_management_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9356,7 +8392,7 @@ func (x *ProjectRoleAddBulk) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectRoleAddBulk.ProtoReflect.Descriptor instead. func (*ProjectRoleAddBulk) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{98} + return file_management_proto_rawDescGZIP(), []int{86} } func (x *ProjectRoleAddBulk) GetId() string { @@ -9387,7 +8423,7 @@ type ProjectRoleChange struct { func (x *ProjectRoleChange) Reset() { *x = ProjectRoleChange{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[99] + mi := &file_management_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9400,7 +8436,7 @@ func (x *ProjectRoleChange) String() string { func (*ProjectRoleChange) ProtoMessage() {} func (x *ProjectRoleChange) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[99] + mi := &file_management_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9413,7 +8449,7 @@ func (x *ProjectRoleChange) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectRoleChange.ProtoReflect.Descriptor instead. func (*ProjectRoleChange) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{99} + return file_management_proto_rawDescGZIP(), []int{87} } func (x *ProjectRoleChange) GetId() string { @@ -9461,7 +8497,7 @@ type ProjectRole struct { func (x *ProjectRole) Reset() { *x = ProjectRole{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[100] + mi := &file_management_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9474,7 +8510,7 @@ func (x *ProjectRole) String() string { func (*ProjectRole) ProtoMessage() {} func (x *ProjectRole) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[100] + mi := &file_management_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9487,7 +8523,7 @@ func (x *ProjectRole) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectRole.ProtoReflect.Descriptor instead. func (*ProjectRole) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{100} + return file_management_proto_rawDescGZIP(), []int{88} } func (x *ProjectRole) GetProjectId() string { @@ -9555,7 +8591,7 @@ type ProjectRoleView struct { func (x *ProjectRoleView) Reset() { *x = ProjectRoleView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[101] + mi := &file_management_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9568,7 +8604,7 @@ func (x *ProjectRoleView) String() string { func (*ProjectRoleView) ProtoMessage() {} func (x *ProjectRoleView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[101] + mi := &file_management_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9581,7 +8617,7 @@ func (x *ProjectRoleView) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectRoleView.ProtoReflect.Descriptor instead. func (*ProjectRoleView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{101} + return file_management_proto_rawDescGZIP(), []int{89} } func (x *ProjectRoleView) GetProjectId() string { @@ -9638,7 +8674,7 @@ type ProjectRoleRemove struct { func (x *ProjectRoleRemove) Reset() { *x = ProjectRoleRemove{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[102] + mi := &file_management_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9651,7 +8687,7 @@ func (x *ProjectRoleRemove) String() string { func (*ProjectRoleRemove) ProtoMessage() {} func (x *ProjectRoleRemove) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[102] + mi := &file_management_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9664,7 +8700,7 @@ func (x *ProjectRoleRemove) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectRoleRemove.ProtoReflect.Descriptor instead. func (*ProjectRoleRemove) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{102} + return file_management_proto_rawDescGZIP(), []int{90} } func (x *ProjectRoleRemove) GetId() string { @@ -9697,7 +8733,7 @@ type ProjectRoleSearchResponse struct { func (x *ProjectRoleSearchResponse) Reset() { *x = ProjectRoleSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[103] + mi := &file_management_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9710,7 +8746,7 @@ func (x *ProjectRoleSearchResponse) String() string { func (*ProjectRoleSearchResponse) ProtoMessage() {} func (x *ProjectRoleSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[103] + mi := &file_management_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9723,7 +8759,7 @@ func (x *ProjectRoleSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectRoleSearchResponse.ProtoReflect.Descriptor instead. func (*ProjectRoleSearchResponse) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{103} + return file_management_proto_rawDescGZIP(), []int{91} } func (x *ProjectRoleSearchResponse) GetOffset() uint64 { @@ -9782,7 +8818,7 @@ type ProjectRoleSearchRequest struct { func (x *ProjectRoleSearchRequest) Reset() { *x = ProjectRoleSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[104] + mi := &file_management_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9795,7 +8831,7 @@ func (x *ProjectRoleSearchRequest) String() string { func (*ProjectRoleSearchRequest) ProtoMessage() {} func (x *ProjectRoleSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[104] + mi := &file_management_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9808,7 +8844,7 @@ func (x *ProjectRoleSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectRoleSearchRequest.ProtoReflect.Descriptor instead. func (*ProjectRoleSearchRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{104} + return file_management_proto_rawDescGZIP(), []int{92} } func (x *ProjectRoleSearchRequest) GetProjectId() string { @@ -9852,7 +8888,7 @@ type ProjectRoleSearchQuery struct { func (x *ProjectRoleSearchQuery) Reset() { *x = ProjectRoleSearchQuery{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[105] + mi := &file_management_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9865,7 +8901,7 @@ func (x *ProjectRoleSearchQuery) String() string { func (*ProjectRoleSearchQuery) ProtoMessage() {} func (x *ProjectRoleSearchQuery) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[105] + mi := &file_management_proto_msgTypes[93] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9878,7 +8914,7 @@ func (x *ProjectRoleSearchQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectRoleSearchQuery.ProtoReflect.Descriptor instead. func (*ProjectRoleSearchQuery) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{105} + return file_management_proto_rawDescGZIP(), []int{93} } func (x *ProjectRoleSearchQuery) GetKey() ProjectRoleSearchKey { @@ -9922,7 +8958,7 @@ type ProjectMemberView struct { func (x *ProjectMemberView) Reset() { *x = ProjectMemberView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[106] + mi := &file_management_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9935,7 +8971,7 @@ func (x *ProjectMemberView) String() string { func (*ProjectMemberView) ProtoMessage() {} func (x *ProjectMemberView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[106] + mi := &file_management_proto_msgTypes[94] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9948,7 +8984,7 @@ func (x *ProjectMemberView) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectMemberView.ProtoReflect.Descriptor instead. func (*ProjectMemberView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{106} + return file_management_proto_rawDescGZIP(), []int{94} } func (x *ProjectMemberView) GetUserId() string { @@ -10037,7 +9073,7 @@ type ProjectMemberSearchResponse struct { func (x *ProjectMemberSearchResponse) Reset() { *x = ProjectMemberSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[107] + mi := &file_management_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10050,7 +9086,7 @@ func (x *ProjectMemberSearchResponse) String() string { func (*ProjectMemberSearchResponse) ProtoMessage() {} func (x *ProjectMemberSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[107] + mi := &file_management_proto_msgTypes[95] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10063,7 +9099,7 @@ func (x *ProjectMemberSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectMemberSearchResponse.ProtoReflect.Descriptor instead. func (*ProjectMemberSearchResponse) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{107} + return file_management_proto_rawDescGZIP(), []int{95} } func (x *ProjectMemberSearchResponse) GetOffset() uint64 { @@ -10122,7 +9158,7 @@ type ProjectMemberSearchRequest struct { func (x *ProjectMemberSearchRequest) Reset() { *x = ProjectMemberSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[108] + mi := &file_management_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10135,7 +9171,7 @@ func (x *ProjectMemberSearchRequest) String() string { func (*ProjectMemberSearchRequest) ProtoMessage() {} func (x *ProjectMemberSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[108] + mi := &file_management_proto_msgTypes[96] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10148,7 +9184,7 @@ func (x *ProjectMemberSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectMemberSearchRequest.ProtoReflect.Descriptor instead. func (*ProjectMemberSearchRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{108} + return file_management_proto_rawDescGZIP(), []int{96} } func (x *ProjectMemberSearchRequest) GetProjectId() string { @@ -10192,7 +9228,7 @@ type ProjectMemberSearchQuery struct { func (x *ProjectMemberSearchQuery) Reset() { *x = ProjectMemberSearchQuery{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[109] + mi := &file_management_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10205,7 +9241,7 @@ func (x *ProjectMemberSearchQuery) String() string { func (*ProjectMemberSearchQuery) ProtoMessage() {} func (x *ProjectMemberSearchQuery) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[109] + mi := &file_management_proto_msgTypes[97] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10218,7 +9254,7 @@ func (x *ProjectMemberSearchQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectMemberSearchQuery.ProtoReflect.Descriptor instead. func (*ProjectMemberSearchQuery) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{109} + return file_management_proto_rawDescGZIP(), []int{97} } func (x *ProjectMemberSearchQuery) GetKey() ProjectMemberSearchKey { @@ -10261,7 +9297,7 @@ type Application struct { func (x *Application) Reset() { *x = Application{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[110] + mi := &file_management_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10274,7 +9310,7 @@ func (x *Application) String() string { func (*Application) ProtoMessage() {} func (x *Application) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[110] + mi := &file_management_proto_msgTypes[98] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10287,7 +9323,7 @@ func (x *Application) ProtoReflect() protoreflect.Message { // Deprecated: Use Application.ProtoReflect.Descriptor instead. func (*Application) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{110} + return file_management_proto_rawDescGZIP(), []int{98} } func (x *Application) GetId() string { @@ -10369,7 +9405,7 @@ type ApplicationUpdate struct { func (x *ApplicationUpdate) Reset() { *x = ApplicationUpdate{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[111] + mi := &file_management_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10382,7 +9418,7 @@ func (x *ApplicationUpdate) String() string { func (*ApplicationUpdate) ProtoMessage() {} func (x *ApplicationUpdate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[111] + mi := &file_management_proto_msgTypes[99] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10395,7 +9431,7 @@ func (x *ApplicationUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationUpdate.ProtoReflect.Descriptor instead. func (*ApplicationUpdate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{111} + return file_management_proto_rawDescGZIP(), []int{99} } func (x *ApplicationUpdate) GetProjectId() string { @@ -10441,7 +9477,7 @@ type OIDCConfig struct { func (x *OIDCConfig) Reset() { *x = OIDCConfig{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[112] + mi := &file_management_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10454,7 +9490,7 @@ func (x *OIDCConfig) String() string { func (*OIDCConfig) ProtoMessage() {} func (x *OIDCConfig) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[112] + mi := &file_management_proto_msgTypes[100] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10467,7 +9503,7 @@ func (x *OIDCConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use OIDCConfig.ProtoReflect.Descriptor instead. func (*OIDCConfig) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{112} + return file_management_proto_rawDescGZIP(), []int{100} } func (x *OIDCConfig) GetRedirectUris() []string { @@ -10574,7 +9610,7 @@ type OIDCApplicationCreate struct { func (x *OIDCApplicationCreate) Reset() { *x = OIDCApplicationCreate{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[113] + mi := &file_management_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10587,7 +9623,7 @@ func (x *OIDCApplicationCreate) String() string { func (*OIDCApplicationCreate) ProtoMessage() {} func (x *OIDCApplicationCreate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[113] + mi := &file_management_proto_msgTypes[101] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10600,7 +9636,7 @@ func (x *OIDCApplicationCreate) ProtoReflect() protoreflect.Message { // Deprecated: Use OIDCApplicationCreate.ProtoReflect.Descriptor instead. func (*OIDCApplicationCreate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{113} + return file_management_proto_rawDescGZIP(), []int{101} } func (x *OIDCApplicationCreate) GetProjectId() string { @@ -10692,7 +9728,7 @@ type OIDCConfigUpdate struct { func (x *OIDCConfigUpdate) Reset() { *x = OIDCConfigUpdate{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[114] + mi := &file_management_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10705,7 +9741,7 @@ func (x *OIDCConfigUpdate) String() string { func (*OIDCConfigUpdate) ProtoMessage() {} func (x *OIDCConfigUpdate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[114] + mi := &file_management_proto_msgTypes[102] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10718,7 +9754,7 @@ func (x *OIDCConfigUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use OIDCConfigUpdate.ProtoReflect.Descriptor instead. func (*OIDCConfigUpdate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{114} + return file_management_proto_rawDescGZIP(), []int{102} } func (x *OIDCConfigUpdate) GetProjectId() string { @@ -10795,7 +9831,7 @@ type ClientSecret struct { func (x *ClientSecret) Reset() { *x = ClientSecret{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[115] + mi := &file_management_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10808,7 +9844,7 @@ func (x *ClientSecret) String() string { func (*ClientSecret) ProtoMessage() {} func (x *ClientSecret) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[115] + mi := &file_management_proto_msgTypes[103] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10821,7 +9857,7 @@ func (x *ClientSecret) ProtoReflect() protoreflect.Message { // Deprecated: Use ClientSecret.ProtoReflect.Descriptor instead. func (*ClientSecret) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{115} + return file_management_proto_rawDescGZIP(), []int{103} } func (x *ClientSecret) GetClientSecret() string { @@ -10850,7 +9886,7 @@ type ApplicationView struct { func (x *ApplicationView) Reset() { *x = ApplicationView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[116] + mi := &file_management_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10863,7 +9899,7 @@ func (x *ApplicationView) String() string { func (*ApplicationView) ProtoMessage() {} func (x *ApplicationView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[116] + mi := &file_management_proto_msgTypes[104] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10876,7 +9912,7 @@ func (x *ApplicationView) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationView.ProtoReflect.Descriptor instead. func (*ApplicationView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{116} + return file_management_proto_rawDescGZIP(), []int{104} } func (x *ApplicationView) GetId() string { @@ -10961,7 +9997,7 @@ type ApplicationSearchResponse struct { func (x *ApplicationSearchResponse) Reset() { *x = ApplicationSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[117] + mi := &file_management_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10974,7 +10010,7 @@ func (x *ApplicationSearchResponse) String() string { func (*ApplicationSearchResponse) ProtoMessage() {} func (x *ApplicationSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[117] + mi := &file_management_proto_msgTypes[105] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10987,7 +10023,7 @@ func (x *ApplicationSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationSearchResponse.ProtoReflect.Descriptor instead. func (*ApplicationSearchResponse) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{117} + return file_management_proto_rawDescGZIP(), []int{105} } func (x *ApplicationSearchResponse) GetOffset() uint64 { @@ -11046,7 +10082,7 @@ type ApplicationSearchRequest struct { func (x *ApplicationSearchRequest) Reset() { *x = ApplicationSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[118] + mi := &file_management_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11059,7 +10095,7 @@ func (x *ApplicationSearchRequest) String() string { func (*ApplicationSearchRequest) ProtoMessage() {} func (x *ApplicationSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[118] + mi := &file_management_proto_msgTypes[106] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11072,7 +10108,7 @@ func (x *ApplicationSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationSearchRequest.ProtoReflect.Descriptor instead. func (*ApplicationSearchRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{118} + return file_management_proto_rawDescGZIP(), []int{106} } func (x *ApplicationSearchRequest) GetProjectId() string { @@ -11116,7 +10152,7 @@ type ApplicationSearchQuery struct { func (x *ApplicationSearchQuery) Reset() { *x = ApplicationSearchQuery{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[119] + mi := &file_management_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11129,7 +10165,7 @@ func (x *ApplicationSearchQuery) String() string { func (*ApplicationSearchQuery) ProtoMessage() {} func (x *ApplicationSearchQuery) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[119] + mi := &file_management_proto_msgTypes[107] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11142,7 +10178,7 @@ func (x *ApplicationSearchQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplicationSearchQuery.ProtoReflect.Descriptor instead. func (*ApplicationSearchQuery) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{119} + return file_management_proto_rawDescGZIP(), []int{107} } func (x *ApplicationSearchQuery) GetKey() ApplicationSearchKey { @@ -11184,7 +10220,7 @@ type ProjectGrant struct { func (x *ProjectGrant) Reset() { *x = ProjectGrant{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[120] + mi := &file_management_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11197,7 +10233,7 @@ func (x *ProjectGrant) String() string { func (*ProjectGrant) ProtoMessage() {} func (x *ProjectGrant) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[120] + mi := &file_management_proto_msgTypes[108] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11210,7 +10246,7 @@ func (x *ProjectGrant) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrant.ProtoReflect.Descriptor instead. func (*ProjectGrant) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{120} + return file_management_proto_rawDescGZIP(), []int{108} } func (x *ProjectGrant) GetId() string { @@ -11282,7 +10318,7 @@ type ProjectGrantCreate struct { func (x *ProjectGrantCreate) Reset() { *x = ProjectGrantCreate{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[121] + mi := &file_management_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11295,7 +10331,7 @@ func (x *ProjectGrantCreate) String() string { func (*ProjectGrantCreate) ProtoMessage() {} func (x *ProjectGrantCreate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[121] + mi := &file_management_proto_msgTypes[109] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11308,7 +10344,7 @@ func (x *ProjectGrantCreate) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantCreate.ProtoReflect.Descriptor instead. func (*ProjectGrantCreate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{121} + return file_management_proto_rawDescGZIP(), []int{109} } func (x *ProjectGrantCreate) GetProjectId() string { @@ -11345,7 +10381,7 @@ type ProjectGrantUpdate struct { func (x *ProjectGrantUpdate) Reset() { *x = ProjectGrantUpdate{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[122] + mi := &file_management_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11358,7 +10394,7 @@ func (x *ProjectGrantUpdate) String() string { func (*ProjectGrantUpdate) ProtoMessage() {} func (x *ProjectGrantUpdate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[122] + mi := &file_management_proto_msgTypes[110] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11371,7 +10407,7 @@ func (x *ProjectGrantUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantUpdate.ProtoReflect.Descriptor instead. func (*ProjectGrantUpdate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{122} + return file_management_proto_rawDescGZIP(), []int{110} } func (x *ProjectGrantUpdate) GetProjectId() string { @@ -11407,7 +10443,7 @@ type ProjectGrantID struct { func (x *ProjectGrantID) Reset() { *x = ProjectGrantID{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[123] + mi := &file_management_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11420,7 +10456,7 @@ func (x *ProjectGrantID) String() string { func (*ProjectGrantID) ProtoMessage() {} func (x *ProjectGrantID) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[123] + mi := &file_management_proto_msgTypes[111] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11433,7 +10469,7 @@ func (x *ProjectGrantID) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantID.ProtoReflect.Descriptor instead. func (*ProjectGrantID) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{123} + return file_management_proto_rawDescGZIP(), []int{111} } func (x *ProjectGrantID) GetProjectId() string { @@ -11472,7 +10508,7 @@ type ProjectGrantView struct { func (x *ProjectGrantView) Reset() { *x = ProjectGrantView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[124] + mi := &file_management_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11485,7 +10521,7 @@ func (x *ProjectGrantView) String() string { func (*ProjectGrantView) ProtoMessage() {} func (x *ProjectGrantView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[124] + mi := &file_management_proto_msgTypes[112] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11498,7 +10534,7 @@ func (x *ProjectGrantView) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantView.ProtoReflect.Descriptor instead. func (*ProjectGrantView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{124} + return file_management_proto_rawDescGZIP(), []int{112} } func (x *ProjectGrantView) GetId() string { @@ -11601,7 +10637,7 @@ type ProjectGrantSearchResponse struct { func (x *ProjectGrantSearchResponse) Reset() { *x = ProjectGrantSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[125] + mi := &file_management_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11614,7 +10650,7 @@ func (x *ProjectGrantSearchResponse) String() string { func (*ProjectGrantSearchResponse) ProtoMessage() {} func (x *ProjectGrantSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[125] + mi := &file_management_proto_msgTypes[113] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11627,7 +10663,7 @@ func (x *ProjectGrantSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantSearchResponse.ProtoReflect.Descriptor instead. func (*ProjectGrantSearchResponse) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{125} + return file_management_proto_rawDescGZIP(), []int{113} } func (x *ProjectGrantSearchResponse) GetOffset() uint64 { @@ -11685,7 +10721,7 @@ type GrantedProjectSearchRequest struct { func (x *GrantedProjectSearchRequest) Reset() { *x = GrantedProjectSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[126] + mi := &file_management_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11698,7 +10734,7 @@ func (x *GrantedProjectSearchRequest) String() string { func (*GrantedProjectSearchRequest) ProtoMessage() {} func (x *GrantedProjectSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[126] + mi := &file_management_proto_msgTypes[114] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11711,7 +10747,7 @@ func (x *GrantedProjectSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantedProjectSearchRequest.ProtoReflect.Descriptor instead. func (*GrantedProjectSearchRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{126} + return file_management_proto_rawDescGZIP(), []int{114} } func (x *GrantedProjectSearchRequest) GetOffset() uint64 { @@ -11749,7 +10785,7 @@ type ProjectGrantSearchRequest struct { func (x *ProjectGrantSearchRequest) Reset() { *x = ProjectGrantSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[127] + mi := &file_management_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11762,7 +10798,7 @@ func (x *ProjectGrantSearchRequest) String() string { func (*ProjectGrantSearchRequest) ProtoMessage() {} func (x *ProjectGrantSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[127] + mi := &file_management_proto_msgTypes[115] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11775,7 +10811,7 @@ func (x *ProjectGrantSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantSearchRequest.ProtoReflect.Descriptor instead. func (*ProjectGrantSearchRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{127} + return file_management_proto_rawDescGZIP(), []int{115} } func (x *ProjectGrantSearchRequest) GetProjectId() string { @@ -11819,7 +10855,7 @@ type ProjectGrantSearchQuery struct { func (x *ProjectGrantSearchQuery) Reset() { *x = ProjectGrantSearchQuery{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[128] + mi := &file_management_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11832,7 +10868,7 @@ func (x *ProjectGrantSearchQuery) String() string { func (*ProjectGrantSearchQuery) ProtoMessage() {} func (x *ProjectGrantSearchQuery) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[128] + mi := &file_management_proto_msgTypes[116] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11845,7 +10881,7 @@ func (x *ProjectGrantSearchQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantSearchQuery.ProtoReflect.Descriptor instead. func (*ProjectGrantSearchQuery) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{128} + return file_management_proto_rawDescGZIP(), []int{116} } func (x *ProjectGrantSearchQuery) GetKey() ProjectGrantSearchKey { @@ -11880,7 +10916,7 @@ type ProjectGrantMemberRoles struct { func (x *ProjectGrantMemberRoles) Reset() { *x = ProjectGrantMemberRoles{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[129] + mi := &file_management_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11893,7 +10929,7 @@ func (x *ProjectGrantMemberRoles) String() string { func (*ProjectGrantMemberRoles) ProtoMessage() {} func (x *ProjectGrantMemberRoles) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[129] + mi := &file_management_proto_msgTypes[117] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11906,7 +10942,7 @@ func (x *ProjectGrantMemberRoles) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantMemberRoles.ProtoReflect.Descriptor instead. func (*ProjectGrantMemberRoles) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{129} + return file_management_proto_rawDescGZIP(), []int{117} } func (x *ProjectGrantMemberRoles) GetRoles() []string { @@ -11931,7 +10967,7 @@ type ProjectGrantMember struct { func (x *ProjectGrantMember) Reset() { *x = ProjectGrantMember{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[130] + mi := &file_management_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11944,7 +10980,7 @@ func (x *ProjectGrantMember) String() string { func (*ProjectGrantMember) ProtoMessage() {} func (x *ProjectGrantMember) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[130] + mi := &file_management_proto_msgTypes[118] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11957,7 +10993,7 @@ func (x *ProjectGrantMember) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantMember.ProtoReflect.Descriptor instead. func (*ProjectGrantMember) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{130} + return file_management_proto_rawDescGZIP(), []int{118} } func (x *ProjectGrantMember) GetUserId() string { @@ -12009,7 +11045,7 @@ type ProjectGrantMemberAdd struct { func (x *ProjectGrantMemberAdd) Reset() { *x = ProjectGrantMemberAdd{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[131] + mi := &file_management_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12022,7 +11058,7 @@ func (x *ProjectGrantMemberAdd) String() string { func (*ProjectGrantMemberAdd) ProtoMessage() {} func (x *ProjectGrantMemberAdd) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[131] + mi := &file_management_proto_msgTypes[119] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12035,7 +11071,7 @@ func (x *ProjectGrantMemberAdd) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantMemberAdd.ProtoReflect.Descriptor instead. func (*ProjectGrantMemberAdd) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{131} + return file_management_proto_rawDescGZIP(), []int{119} } func (x *ProjectGrantMemberAdd) GetProjectId() string { @@ -12080,7 +11116,7 @@ type ProjectGrantMemberChange struct { func (x *ProjectGrantMemberChange) Reset() { *x = ProjectGrantMemberChange{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[132] + mi := &file_management_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12093,7 +11129,7 @@ func (x *ProjectGrantMemberChange) String() string { func (*ProjectGrantMemberChange) ProtoMessage() {} func (x *ProjectGrantMemberChange) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[132] + mi := &file_management_proto_msgTypes[120] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12106,7 +11142,7 @@ func (x *ProjectGrantMemberChange) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantMemberChange.ProtoReflect.Descriptor instead. func (*ProjectGrantMemberChange) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{132} + return file_management_proto_rawDescGZIP(), []int{120} } func (x *ProjectGrantMemberChange) GetProjectId() string { @@ -12150,7 +11186,7 @@ type ProjectGrantMemberRemove struct { func (x *ProjectGrantMemberRemove) Reset() { *x = ProjectGrantMemberRemove{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[133] + mi := &file_management_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12163,7 +11199,7 @@ func (x *ProjectGrantMemberRemove) String() string { func (*ProjectGrantMemberRemove) ProtoMessage() {} func (x *ProjectGrantMemberRemove) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[133] + mi := &file_management_proto_msgTypes[121] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12176,7 +11212,7 @@ func (x *ProjectGrantMemberRemove) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantMemberRemove.ProtoReflect.Descriptor instead. func (*ProjectGrantMemberRemove) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{133} + return file_management_proto_rawDescGZIP(), []int{121} } func (x *ProjectGrantMemberRemove) GetProjectId() string { @@ -12220,7 +11256,7 @@ type ProjectGrantMemberView struct { func (x *ProjectGrantMemberView) Reset() { *x = ProjectGrantMemberView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[134] + mi := &file_management_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12233,7 +11269,7 @@ func (x *ProjectGrantMemberView) String() string { func (*ProjectGrantMemberView) ProtoMessage() {} func (x *ProjectGrantMemberView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[134] + mi := &file_management_proto_msgTypes[122] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12246,7 +11282,7 @@ func (x *ProjectGrantMemberView) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantMemberView.ProtoReflect.Descriptor instead. func (*ProjectGrantMemberView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{134} + return file_management_proto_rawDescGZIP(), []int{122} } func (x *ProjectGrantMemberView) GetUserId() string { @@ -12335,7 +11371,7 @@ type ProjectGrantMemberSearchResponse struct { func (x *ProjectGrantMemberSearchResponse) Reset() { *x = ProjectGrantMemberSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[135] + mi := &file_management_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12348,7 +11384,7 @@ func (x *ProjectGrantMemberSearchResponse) String() string { func (*ProjectGrantMemberSearchResponse) ProtoMessage() {} func (x *ProjectGrantMemberSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[135] + mi := &file_management_proto_msgTypes[123] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12361,7 +11397,7 @@ func (x *ProjectGrantMemberSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantMemberSearchResponse.ProtoReflect.Descriptor instead. func (*ProjectGrantMemberSearchResponse) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{135} + return file_management_proto_rawDescGZIP(), []int{123} } func (x *ProjectGrantMemberSearchResponse) GetOffset() uint64 { @@ -12421,7 +11457,7 @@ type ProjectGrantMemberSearchRequest struct { func (x *ProjectGrantMemberSearchRequest) Reset() { *x = ProjectGrantMemberSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[136] + mi := &file_management_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12434,7 +11470,7 @@ func (x *ProjectGrantMemberSearchRequest) String() string { func (*ProjectGrantMemberSearchRequest) ProtoMessage() {} func (x *ProjectGrantMemberSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[136] + mi := &file_management_proto_msgTypes[124] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12447,7 +11483,7 @@ func (x *ProjectGrantMemberSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantMemberSearchRequest.ProtoReflect.Descriptor instead. func (*ProjectGrantMemberSearchRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{136} + return file_management_proto_rawDescGZIP(), []int{124} } func (x *ProjectGrantMemberSearchRequest) GetProjectId() string { @@ -12498,7 +11534,7 @@ type ProjectGrantMemberSearchQuery struct { func (x *ProjectGrantMemberSearchQuery) Reset() { *x = ProjectGrantMemberSearchQuery{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[137] + mi := &file_management_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12511,7 +11547,7 @@ func (x *ProjectGrantMemberSearchQuery) String() string { func (*ProjectGrantMemberSearchQuery) ProtoMessage() {} func (x *ProjectGrantMemberSearchQuery) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[137] + mi := &file_management_proto_msgTypes[125] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12524,7 +11560,7 @@ func (x *ProjectGrantMemberSearchQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectGrantMemberSearchQuery.ProtoReflect.Descriptor instead. func (*ProjectGrantMemberSearchQuery) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{137} + return file_management_proto_rawDescGZIP(), []int{125} } func (x *ProjectGrantMemberSearchQuery) GetKey() ProjectGrantMemberSearchKey { @@ -12568,7 +11604,7 @@ type UserGrant struct { func (x *UserGrant) Reset() { *x = UserGrant{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[138] + mi := &file_management_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12581,7 +11617,7 @@ func (x *UserGrant) String() string { func (*UserGrant) ProtoMessage() {} func (x *UserGrant) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[138] + mi := &file_management_proto_msgTypes[126] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12594,7 +11630,7 @@ func (x *UserGrant) ProtoReflect() protoreflect.Message { // Deprecated: Use UserGrant.ProtoReflect.Descriptor instead. func (*UserGrant) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{138} + return file_management_proto_rawDescGZIP(), []int{126} } func (x *UserGrant) GetId() string { @@ -12681,7 +11717,7 @@ type UserGrantCreate struct { func (x *UserGrantCreate) Reset() { *x = UserGrantCreate{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[139] + mi := &file_management_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12694,7 +11730,7 @@ func (x *UserGrantCreate) String() string { func (*UserGrantCreate) ProtoMessage() {} func (x *UserGrantCreate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[139] + mi := &file_management_proto_msgTypes[127] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12707,7 +11743,7 @@ func (x *UserGrantCreate) ProtoReflect() protoreflect.Message { // Deprecated: Use UserGrantCreate.ProtoReflect.Descriptor instead. func (*UserGrantCreate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{139} + return file_management_proto_rawDescGZIP(), []int{127} } func (x *UserGrantCreate) GetUserId() string { @@ -12751,7 +11787,7 @@ type UserGrantUpdate struct { func (x *UserGrantUpdate) Reset() { *x = UserGrantUpdate{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[140] + mi := &file_management_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12764,7 +11800,7 @@ func (x *UserGrantUpdate) String() string { func (*UserGrantUpdate) ProtoMessage() {} func (x *UserGrantUpdate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[140] + mi := &file_management_proto_msgTypes[128] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12777,7 +11813,7 @@ func (x *UserGrantUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use UserGrantUpdate.ProtoReflect.Descriptor instead. func (*UserGrantUpdate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{140} + return file_management_proto_rawDescGZIP(), []int{128} } func (x *UserGrantUpdate) GetUserId() string { @@ -12812,7 +11848,7 @@ type UserGrantRemoveBulk struct { func (x *UserGrantRemoveBulk) Reset() { *x = UserGrantRemoveBulk{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[141] + mi := &file_management_proto_msgTypes[129] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12825,7 +11861,7 @@ func (x *UserGrantRemoveBulk) String() string { func (*UserGrantRemoveBulk) ProtoMessage() {} func (x *UserGrantRemoveBulk) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[141] + mi := &file_management_proto_msgTypes[129] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12838,7 +11874,7 @@ func (x *UserGrantRemoveBulk) ProtoReflect() protoreflect.Message { // Deprecated: Use UserGrantRemoveBulk.ProtoReflect.Descriptor instead. func (*UserGrantRemoveBulk) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{141} + return file_management_proto_rawDescGZIP(), []int{129} } func (x *UserGrantRemoveBulk) GetIds() []string { @@ -12860,7 +11896,7 @@ type UserGrantID struct { func (x *UserGrantID) Reset() { *x = UserGrantID{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[142] + mi := &file_management_proto_msgTypes[130] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12873,7 +11909,7 @@ func (x *UserGrantID) String() string { func (*UserGrantID) ProtoMessage() {} func (x *UserGrantID) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[142] + mi := &file_management_proto_msgTypes[130] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12886,7 +11922,7 @@ func (x *UserGrantID) ProtoReflect() protoreflect.Message { // Deprecated: Use UserGrantID.ProtoReflect.Descriptor instead. func (*UserGrantID) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{142} + return file_management_proto_rawDescGZIP(), []int{130} } func (x *UserGrantID) GetUserId() string { @@ -12932,7 +11968,7 @@ type UserGrantView struct { func (x *UserGrantView) Reset() { *x = UserGrantView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[143] + mi := &file_management_proto_msgTypes[131] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12945,7 +11981,7 @@ func (x *UserGrantView) String() string { func (*UserGrantView) ProtoMessage() {} func (x *UserGrantView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[143] + mi := &file_management_proto_msgTypes[131] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12958,7 +11994,7 @@ func (x *UserGrantView) ProtoReflect() protoreflect.Message { // Deprecated: Use UserGrantView.ProtoReflect.Descriptor instead. func (*UserGrantView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{143} + return file_management_proto_rawDescGZIP(), []int{131} } func (x *UserGrantView) GetId() string { @@ -13110,7 +12146,7 @@ type UserGrantSearchResponse struct { func (x *UserGrantSearchResponse) Reset() { *x = UserGrantSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[144] + mi := &file_management_proto_msgTypes[132] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13123,7 +12159,7 @@ func (x *UserGrantSearchResponse) String() string { func (*UserGrantSearchResponse) ProtoMessage() {} func (x *UserGrantSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[144] + mi := &file_management_proto_msgTypes[132] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13136,7 +12172,7 @@ func (x *UserGrantSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UserGrantSearchResponse.ProtoReflect.Descriptor instead. func (*UserGrantSearchResponse) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{144} + return file_management_proto_rawDescGZIP(), []int{132} } func (x *UserGrantSearchResponse) GetOffset() uint64 { @@ -13194,7 +12230,7 @@ type UserGrantSearchRequest struct { func (x *UserGrantSearchRequest) Reset() { *x = UserGrantSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[145] + mi := &file_management_proto_msgTypes[133] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13207,7 +12243,7 @@ func (x *UserGrantSearchRequest) String() string { func (*UserGrantSearchRequest) ProtoMessage() {} func (x *UserGrantSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[145] + mi := &file_management_proto_msgTypes[133] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13220,7 +12256,7 @@ func (x *UserGrantSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UserGrantSearchRequest.ProtoReflect.Descriptor instead. func (*UserGrantSearchRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{145} + return file_management_proto_rawDescGZIP(), []int{133} } func (x *UserGrantSearchRequest) GetOffset() uint64 { @@ -13257,7 +12293,7 @@ type UserGrantSearchQuery struct { func (x *UserGrantSearchQuery) Reset() { *x = UserGrantSearchQuery{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[146] + mi := &file_management_proto_msgTypes[134] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13270,7 +12306,7 @@ func (x *UserGrantSearchQuery) String() string { func (*UserGrantSearchQuery) ProtoMessage() {} func (x *UserGrantSearchQuery) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[146] + mi := &file_management_proto_msgTypes[134] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13283,7 +12319,7 @@ func (x *UserGrantSearchQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use UserGrantSearchQuery.ProtoReflect.Descriptor instead. func (*UserGrantSearchQuery) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{146} + return file_management_proto_rawDescGZIP(), []int{134} } func (x *UserGrantSearchQuery) GetKey() UserGrantSearchKey { @@ -13323,7 +12359,7 @@ type UserMembershipSearchResponse struct { func (x *UserMembershipSearchResponse) Reset() { *x = UserMembershipSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[147] + mi := &file_management_proto_msgTypes[135] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13336,7 +12372,7 @@ func (x *UserMembershipSearchResponse) String() string { func (*UserMembershipSearchResponse) ProtoMessage() {} func (x *UserMembershipSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[147] + mi := &file_management_proto_msgTypes[135] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13349,7 +12385,7 @@ func (x *UserMembershipSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UserMembershipSearchResponse.ProtoReflect.Descriptor instead. func (*UserMembershipSearchResponse) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{147} + return file_management_proto_rawDescGZIP(), []int{135} } func (x *UserMembershipSearchResponse) GetOffset() uint64 { @@ -13408,7 +12444,7 @@ type UserMembershipSearchRequest struct { func (x *UserMembershipSearchRequest) Reset() { *x = UserMembershipSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[148] + mi := &file_management_proto_msgTypes[136] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13421,7 +12457,7 @@ func (x *UserMembershipSearchRequest) String() string { func (*UserMembershipSearchRequest) ProtoMessage() {} func (x *UserMembershipSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[148] + mi := &file_management_proto_msgTypes[136] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13434,7 +12470,7 @@ func (x *UserMembershipSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UserMembershipSearchRequest.ProtoReflect.Descriptor instead. func (*UserMembershipSearchRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{148} + return file_management_proto_rawDescGZIP(), []int{136} } func (x *UserMembershipSearchRequest) GetUserId() string { @@ -13478,7 +12514,7 @@ type UserMembershipSearchQuery struct { func (x *UserMembershipSearchQuery) Reset() { *x = UserMembershipSearchQuery{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[149] + mi := &file_management_proto_msgTypes[137] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13491,7 +12527,7 @@ func (x *UserMembershipSearchQuery) String() string { func (*UserMembershipSearchQuery) ProtoMessage() {} func (x *UserMembershipSearchQuery) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[149] + mi := &file_management_proto_msgTypes[137] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13504,7 +12540,7 @@ func (x *UserMembershipSearchQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use UserMembershipSearchQuery.ProtoReflect.Descriptor instead. func (*UserMembershipSearchQuery) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{149} + return file_management_proto_rawDescGZIP(), []int{137} } func (x *UserMembershipSearchQuery) GetKey() UserMembershipSearchKey { @@ -13548,7 +12584,7 @@ type UserMembershipView struct { func (x *UserMembershipView) Reset() { *x = UserMembershipView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[150] + mi := &file_management_proto_msgTypes[138] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13561,7 +12597,7 @@ func (x *UserMembershipView) String() string { func (*UserMembershipView) ProtoMessage() {} func (x *UserMembershipView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[150] + mi := &file_management_proto_msgTypes[138] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13574,7 +12610,7 @@ func (x *UserMembershipView) ProtoReflect() protoreflect.Message { // Deprecated: Use UserMembershipView.ProtoReflect.Descriptor instead. func (*UserMembershipView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{150} + return file_management_proto_rawDescGZIP(), []int{138} } func (x *UserMembershipView) GetUserId() string { @@ -13658,7 +12694,7 @@ type IdpID struct { func (x *IdpID) Reset() { *x = IdpID{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[151] + mi := &file_management_proto_msgTypes[139] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13671,7 +12707,7 @@ func (x *IdpID) String() string { func (*IdpID) ProtoMessage() {} func (x *IdpID) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[151] + mi := &file_management_proto_msgTypes[139] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13684,7 +12720,7 @@ func (x *IdpID) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpID.ProtoReflect.Descriptor instead. func (*IdpID) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{151} + return file_management_proto_rawDescGZIP(), []int{139} } func (x *IdpID) GetId() string { @@ -13714,7 +12750,7 @@ type Idp struct { func (x *Idp) Reset() { *x = Idp{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[152] + mi := &file_management_proto_msgTypes[140] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13727,7 +12763,7 @@ func (x *Idp) String() string { func (*Idp) ProtoMessage() {} func (x *Idp) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[152] + mi := &file_management_proto_msgTypes[140] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13740,7 +12776,7 @@ func (x *Idp) ProtoReflect() protoreflect.Message { // Deprecated: Use Idp.ProtoReflect.Descriptor instead. func (*Idp) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{152} + return file_management_proto_rawDescGZIP(), []int{140} } func (x *Idp) GetId() string { @@ -13829,7 +12865,7 @@ type IdpUpdate struct { func (x *IdpUpdate) Reset() { *x = IdpUpdate{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[153] + mi := &file_management_proto_msgTypes[141] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13842,7 +12878,7 @@ func (x *IdpUpdate) String() string { func (*IdpUpdate) ProtoMessage() {} func (x *IdpUpdate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[153] + mi := &file_management_proto_msgTypes[141] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13855,7 +12891,7 @@ func (x *IdpUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpUpdate.ProtoReflect.Descriptor instead. func (*IdpUpdate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{153} + return file_management_proto_rawDescGZIP(), []int{141} } func (x *IdpUpdate) GetId() string { @@ -13895,7 +12931,7 @@ type OidcIdpConfig struct { func (x *OidcIdpConfig) Reset() { *x = OidcIdpConfig{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[154] + mi := &file_management_proto_msgTypes[142] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13908,7 +12944,7 @@ func (x *OidcIdpConfig) String() string { func (*OidcIdpConfig) ProtoMessage() {} func (x *OidcIdpConfig) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[154] + mi := &file_management_proto_msgTypes[142] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13921,7 +12957,7 @@ func (x *OidcIdpConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use OidcIdpConfig.ProtoReflect.Descriptor instead. func (*OidcIdpConfig) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{154} + return file_management_proto_rawDescGZIP(), []int{142} } func (x *OidcIdpConfig) GetClientId() string { @@ -13984,7 +13020,7 @@ type OidcIdpConfigCreate struct { func (x *OidcIdpConfigCreate) Reset() { *x = OidcIdpConfigCreate{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[155] + mi := &file_management_proto_msgTypes[143] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13997,7 +13033,7 @@ func (x *OidcIdpConfigCreate) String() string { func (*OidcIdpConfigCreate) ProtoMessage() {} func (x *OidcIdpConfigCreate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[155] + mi := &file_management_proto_msgTypes[143] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14010,7 +13046,7 @@ func (x *OidcIdpConfigCreate) ProtoReflect() protoreflect.Message { // Deprecated: Use OidcIdpConfigCreate.ProtoReflect.Descriptor instead. func (*OidcIdpConfigCreate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{155} + return file_management_proto_rawDescGZIP(), []int{143} } func (x *OidcIdpConfigCreate) GetName() string { @@ -14086,7 +13122,7 @@ type OidcIdpConfigUpdate struct { func (x *OidcIdpConfigUpdate) Reset() { *x = OidcIdpConfigUpdate{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[156] + mi := &file_management_proto_msgTypes[144] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14099,7 +13135,7 @@ func (x *OidcIdpConfigUpdate) String() string { func (*OidcIdpConfigUpdate) ProtoMessage() {} func (x *OidcIdpConfigUpdate) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[156] + mi := &file_management_proto_msgTypes[144] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14112,7 +13148,7 @@ func (x *OidcIdpConfigUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use OidcIdpConfigUpdate.ProtoReflect.Descriptor instead. func (*OidcIdpConfigUpdate) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{156} + return file_management_proto_rawDescGZIP(), []int{144} } func (x *OidcIdpConfigUpdate) GetIdpId() string { @@ -14180,7 +13216,7 @@ type IdpSearchResponse struct { func (x *IdpSearchResponse) Reset() { *x = IdpSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[157] + mi := &file_management_proto_msgTypes[145] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14193,7 +13229,7 @@ func (x *IdpSearchResponse) String() string { func (*IdpSearchResponse) ProtoMessage() {} func (x *IdpSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[157] + mi := &file_management_proto_msgTypes[145] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14206,7 +13242,7 @@ func (x *IdpSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpSearchResponse.ProtoReflect.Descriptor instead. func (*IdpSearchResponse) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{157} + return file_management_proto_rawDescGZIP(), []int{145} } func (x *IdpSearchResponse) GetOffset() uint64 { @@ -14272,7 +13308,7 @@ type IdpView struct { func (x *IdpView) Reset() { *x = IdpView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[158] + mi := &file_management_proto_msgTypes[146] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14285,7 +13321,7 @@ func (x *IdpView) String() string { func (*IdpView) ProtoMessage() {} func (x *IdpView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[158] + mi := &file_management_proto_msgTypes[146] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14298,7 +13334,7 @@ func (x *IdpView) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpView.ProtoReflect.Descriptor instead. func (*IdpView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{158} + return file_management_proto_rawDescGZIP(), []int{146} } func (x *IdpView) GetId() string { @@ -14396,7 +13432,7 @@ type OidcIdpConfigView struct { func (x *OidcIdpConfigView) Reset() { *x = OidcIdpConfigView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[159] + mi := &file_management_proto_msgTypes[147] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14409,7 +13445,7 @@ func (x *OidcIdpConfigView) String() string { func (*OidcIdpConfigView) ProtoMessage() {} func (x *OidcIdpConfigView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[159] + mi := &file_management_proto_msgTypes[147] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14422,7 +13458,7 @@ func (x *OidcIdpConfigView) ProtoReflect() protoreflect.Message { // Deprecated: Use OidcIdpConfigView.ProtoReflect.Descriptor instead. func (*OidcIdpConfigView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{159} + return file_management_proto_rawDescGZIP(), []int{147} } func (x *OidcIdpConfigView) GetClientId() string { @@ -14473,7 +13509,7 @@ type IdpSearchRequest struct { func (x *IdpSearchRequest) Reset() { *x = IdpSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[160] + mi := &file_management_proto_msgTypes[148] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14486,7 +13522,7 @@ func (x *IdpSearchRequest) String() string { func (*IdpSearchRequest) ProtoMessage() {} func (x *IdpSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[160] + mi := &file_management_proto_msgTypes[148] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14499,7 +13535,7 @@ func (x *IdpSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpSearchRequest.ProtoReflect.Descriptor instead. func (*IdpSearchRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{160} + return file_management_proto_rawDescGZIP(), []int{148} } func (x *IdpSearchRequest) GetOffset() uint64 { @@ -14536,7 +13572,7 @@ type IdpSearchQuery struct { func (x *IdpSearchQuery) Reset() { *x = IdpSearchQuery{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[161] + mi := &file_management_proto_msgTypes[149] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14549,7 +13585,7 @@ func (x *IdpSearchQuery) String() string { func (*IdpSearchQuery) ProtoMessage() {} func (x *IdpSearchQuery) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[161] + mi := &file_management_proto_msgTypes[149] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14562,7 +13598,7 @@ func (x *IdpSearchQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpSearchQuery.ProtoReflect.Descriptor instead. func (*IdpSearchQuery) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{161} + return file_management_proto_rawDescGZIP(), []int{149} } func (x *IdpSearchQuery) GetKey() IdpSearchKey { @@ -14591,15 +13627,17 @@ type LoginPolicy struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AllowUsernamePassword bool `protobuf:"varint,1,opt,name=allow_username_password,json=allowUsernamePassword,proto3" json:"allow_username_password,omitempty"` - AllowRegister bool `protobuf:"varint,2,opt,name=allow_register,json=allowRegister,proto3" json:"allow_register,omitempty"` - AllowExternalIdp bool `protobuf:"varint,3,opt,name=allow_external_idp,json=allowExternalIdp,proto3" json:"allow_external_idp,omitempty"` + AllowUsernamePassword bool `protobuf:"varint,1,opt,name=allow_username_password,json=allowUsernamePassword,proto3" json:"allow_username_password,omitempty"` + AllowRegister bool `protobuf:"varint,2,opt,name=allow_register,json=allowRegister,proto3" json:"allow_register,omitempty"` + AllowExternalIdp bool `protobuf:"varint,3,opt,name=allow_external_idp,json=allowExternalIdp,proto3" json:"allow_external_idp,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,4,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,5,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` } func (x *LoginPolicy) Reset() { *x = LoginPolicy{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[162] + mi := &file_management_proto_msgTypes[150] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14612,7 +13650,7 @@ func (x *LoginPolicy) String() string { func (*LoginPolicy) ProtoMessage() {} func (x *LoginPolicy) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[162] + mi := &file_management_proto_msgTypes[150] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14625,7 +13663,7 @@ func (x *LoginPolicy) ProtoReflect() protoreflect.Message { // Deprecated: Use LoginPolicy.ProtoReflect.Descriptor instead. func (*LoginPolicy) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{162} + return file_management_proto_rawDescGZIP(), []int{150} } func (x *LoginPolicy) GetAllowUsernamePassword() bool { @@ -14649,7 +13687,21 @@ func (x *LoginPolicy) GetAllowExternalIdp() bool { return false } -type LoginPolicyAdd struct { +func (x *LoginPolicy) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *LoginPolicy) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + +type LoginPolicyRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -14659,23 +13711,23 @@ type LoginPolicyAdd struct { AllowExternalIdp bool `protobuf:"varint,3,opt,name=allow_external_idp,json=allowExternalIdp,proto3" json:"allow_external_idp,omitempty"` } -func (x *LoginPolicyAdd) Reset() { - *x = LoginPolicyAdd{} +func (x *LoginPolicyRequest) Reset() { + *x = LoginPolicyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[163] + mi := &file_management_proto_msgTypes[151] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LoginPolicyAdd) String() string { +func (x *LoginPolicyRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LoginPolicyAdd) ProtoMessage() {} +func (*LoginPolicyRequest) ProtoMessage() {} -func (x *LoginPolicyAdd) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[163] +func (x *LoginPolicyRequest) ProtoReflect() protoreflect.Message { + mi := &file_management_proto_msgTypes[151] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14686,26 +13738,26 @@ func (x *LoginPolicyAdd) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LoginPolicyAdd.ProtoReflect.Descriptor instead. -func (*LoginPolicyAdd) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{163} +// Deprecated: Use LoginPolicyRequest.ProtoReflect.Descriptor instead. +func (*LoginPolicyRequest) Descriptor() ([]byte, []int) { + return file_management_proto_rawDescGZIP(), []int{151} } -func (x *LoginPolicyAdd) GetAllowUsernamePassword() bool { +func (x *LoginPolicyRequest) GetAllowUsernamePassword() bool { if x != nil { return x.AllowUsernamePassword } return false } -func (x *LoginPolicyAdd) GetAllowRegister() bool { +func (x *LoginPolicyRequest) GetAllowRegister() bool { if x != nil { return x.AllowRegister } return false } -func (x *LoginPolicyAdd) GetAllowExternalIdp() bool { +func (x *LoginPolicyRequest) GetAllowExternalIdp() bool { if x != nil { return x.AllowExternalIdp } @@ -14723,7 +13775,7 @@ type IdpProviderID struct { func (x *IdpProviderID) Reset() { *x = IdpProviderID{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[164] + mi := &file_management_proto_msgTypes[152] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14736,7 +13788,7 @@ func (x *IdpProviderID) String() string { func (*IdpProviderID) ProtoMessage() {} func (x *IdpProviderID) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[164] + mi := &file_management_proto_msgTypes[152] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14749,7 +13801,7 @@ func (x *IdpProviderID) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpProviderID.ProtoReflect.Descriptor instead. func (*IdpProviderID) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{164} + return file_management_proto_rawDescGZIP(), []int{152} } func (x *IdpProviderID) GetIdpConfigId() string { @@ -14771,7 +13823,7 @@ type IdpProviderAdd struct { func (x *IdpProviderAdd) Reset() { *x = IdpProviderAdd{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[165] + mi := &file_management_proto_msgTypes[153] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14784,7 +13836,7 @@ func (x *IdpProviderAdd) String() string { func (*IdpProviderAdd) ProtoMessage() {} func (x *IdpProviderAdd) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[165] + mi := &file_management_proto_msgTypes[153] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14797,7 +13849,7 @@ func (x *IdpProviderAdd) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpProviderAdd.ProtoReflect.Descriptor instead. func (*IdpProviderAdd) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{165} + return file_management_proto_rawDescGZIP(), []int{153} } func (x *IdpProviderAdd) GetIdpConfigId() string { @@ -14826,7 +13878,7 @@ type IdpProvider struct { func (x *IdpProvider) Reset() { *x = IdpProvider{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[166] + mi := &file_management_proto_msgTypes[154] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14839,7 +13891,7 @@ func (x *IdpProvider) String() string { func (*IdpProvider) ProtoMessage() {} func (x *IdpProvider) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[166] + mi := &file_management_proto_msgTypes[154] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14852,7 +13904,7 @@ func (x *IdpProvider) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpProvider.ProtoReflect.Descriptor instead. func (*IdpProvider) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{166} + return file_management_proto_rawDescGZIP(), []int{154} } func (x *IdpProvider) GetIdpConfigId() string { @@ -14874,16 +13926,18 @@ type LoginPolicyView struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Default bool `protobuf:"varint,1,opt,name=default,proto3" json:"default,omitempty"` - AllowUsernamePassword bool `protobuf:"varint,2,opt,name=allow_username_password,json=allowUsernamePassword,proto3" json:"allow_username_password,omitempty"` - AllowRegister bool `protobuf:"varint,3,opt,name=allow_register,json=allowRegister,proto3" json:"allow_register,omitempty"` - AllowExternalIdp bool `protobuf:"varint,4,opt,name=allow_external_idp,json=allowExternalIdp,proto3" json:"allow_external_idp,omitempty"` + Default bool `protobuf:"varint,1,opt,name=default,proto3" json:"default,omitempty"` + AllowUsernamePassword bool `protobuf:"varint,2,opt,name=allow_username_password,json=allowUsernamePassword,proto3" json:"allow_username_password,omitempty"` + AllowRegister bool `protobuf:"varint,3,opt,name=allow_register,json=allowRegister,proto3" json:"allow_register,omitempty"` + AllowExternalIdp bool `protobuf:"varint,4,opt,name=allow_external_idp,json=allowExternalIdp,proto3" json:"allow_external_idp,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,5,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,6,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` } func (x *LoginPolicyView) Reset() { *x = LoginPolicyView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[167] + mi := &file_management_proto_msgTypes[155] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14896,7 +13950,7 @@ func (x *LoginPolicyView) String() string { func (*LoginPolicyView) ProtoMessage() {} func (x *LoginPolicyView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[167] + mi := &file_management_proto_msgTypes[155] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14909,7 +13963,7 @@ func (x *LoginPolicyView) ProtoReflect() protoreflect.Message { // Deprecated: Use LoginPolicyView.ProtoReflect.Descriptor instead. func (*LoginPolicyView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{167} + return file_management_proto_rawDescGZIP(), []int{155} } func (x *LoginPolicyView) GetDefault() bool { @@ -14940,6 +13994,20 @@ func (x *LoginPolicyView) GetAllowExternalIdp() bool { return false } +func (x *LoginPolicyView) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *LoginPolicyView) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + type IdpProviderView struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -14953,7 +14021,7 @@ type IdpProviderView struct { func (x *IdpProviderView) Reset() { *x = IdpProviderView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[168] + mi := &file_management_proto_msgTypes[156] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14966,7 +14034,7 @@ func (x *IdpProviderView) String() string { func (*IdpProviderView) ProtoMessage() {} func (x *IdpProviderView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[168] + mi := &file_management_proto_msgTypes[156] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14979,7 +14047,7 @@ func (x *IdpProviderView) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpProviderView.ProtoReflect.Descriptor instead. func (*IdpProviderView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{168} + return file_management_proto_rawDescGZIP(), []int{156} } func (x *IdpProviderView) GetIdpConfigId() string { @@ -15019,7 +14087,7 @@ type IdpProviderSearchResponse struct { func (x *IdpProviderSearchResponse) Reset() { *x = IdpProviderSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[169] + mi := &file_management_proto_msgTypes[157] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15032,7 +14100,7 @@ func (x *IdpProviderSearchResponse) String() string { func (*IdpProviderSearchResponse) ProtoMessage() {} func (x *IdpProviderSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[169] + mi := &file_management_proto_msgTypes[157] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15045,7 +14113,7 @@ func (x *IdpProviderSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpProviderSearchResponse.ProtoReflect.Descriptor instead. func (*IdpProviderSearchResponse) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{169} + return file_management_proto_rawDescGZIP(), []int{157} } func (x *IdpProviderSearchResponse) GetOffset() uint64 { @@ -15102,7 +14170,7 @@ type IdpProviderSearchRequest struct { func (x *IdpProviderSearchRequest) Reset() { *x = IdpProviderSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[170] + mi := &file_management_proto_msgTypes[158] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15115,7 +14183,7 @@ func (x *IdpProviderSearchRequest) String() string { func (*IdpProviderSearchRequest) ProtoMessage() {} func (x *IdpProviderSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[170] + mi := &file_management_proto_msgTypes[158] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15128,7 +14196,7 @@ func (x *IdpProviderSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use IdpProviderSearchRequest.ProtoReflect.Descriptor instead. func (*IdpProviderSearchRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{170} + return file_management_proto_rawDescGZIP(), []int{158} } func (x *IdpProviderSearchRequest) GetOffset() uint64 { @@ -15158,7 +14226,7 @@ type ExternalIDPSearchRequest struct { func (x *ExternalIDPSearchRequest) Reset() { *x = ExternalIDPSearchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[171] + mi := &file_management_proto_msgTypes[159] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15171,7 +14239,7 @@ func (x *ExternalIDPSearchRequest) String() string { func (*ExternalIDPSearchRequest) ProtoMessage() {} func (x *ExternalIDPSearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[171] + mi := &file_management_proto_msgTypes[159] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15184,7 +14252,7 @@ func (x *ExternalIDPSearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExternalIDPSearchRequest.ProtoReflect.Descriptor instead. func (*ExternalIDPSearchRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{171} + return file_management_proto_rawDescGZIP(), []int{159} } func (x *ExternalIDPSearchRequest) GetOffset() uint64 { @@ -15224,7 +14292,7 @@ type ExternalIDPSearchResponse struct { func (x *ExternalIDPSearchResponse) Reset() { *x = ExternalIDPSearchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[172] + mi := &file_management_proto_msgTypes[160] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15237,7 +14305,7 @@ func (x *ExternalIDPSearchResponse) String() string { func (*ExternalIDPSearchResponse) ProtoMessage() {} func (x *ExternalIDPSearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[172] + mi := &file_management_proto_msgTypes[160] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15250,7 +14318,7 @@ func (x *ExternalIDPSearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExternalIDPSearchResponse.ProtoReflect.Descriptor instead. func (*ExternalIDPSearchResponse) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{172} + return file_management_proto_rawDescGZIP(), []int{160} } func (x *ExternalIDPSearchResponse) GetOffset() uint64 { @@ -15312,7 +14380,7 @@ type ExternalIDPView struct { func (x *ExternalIDPView) Reset() { *x = ExternalIDPView{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[173] + mi := &file_management_proto_msgTypes[161] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15325,7 +14393,7 @@ func (x *ExternalIDPView) String() string { func (*ExternalIDPView) ProtoMessage() {} func (x *ExternalIDPView) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[173] + mi := &file_management_proto_msgTypes[161] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15338,7 +14406,7 @@ func (x *ExternalIDPView) ProtoReflect() protoreflect.Message { // Deprecated: Use ExternalIDPView.ProtoReflect.Descriptor instead. func (*ExternalIDPView) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{173} + return file_management_proto_rawDescGZIP(), []int{161} } func (x *ExternalIDPView) GetUserId() string { @@ -15403,7 +14471,7 @@ type ExternalIDPRemoveRequest struct { func (x *ExternalIDPRemoveRequest) Reset() { *x = ExternalIDPRemoveRequest{} if protoimpl.UnsafeEnabled { - mi := &file_management_proto_msgTypes[174] + mi := &file_management_proto_msgTypes[162] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15416,7 +14484,7 @@ func (x *ExternalIDPRemoveRequest) String() string { func (*ExternalIDPRemoveRequest) ProtoMessage() {} func (x *ExternalIDPRemoveRequest) ProtoReflect() protoreflect.Message { - mi := &file_management_proto_msgTypes[174] + mi := &file_management_proto_msgTypes[162] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15429,7 +14497,7 @@ func (x *ExternalIDPRemoveRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExternalIDPRemoveRequest.ProtoReflect.Descriptor instead. func (*ExternalIDPRemoveRequest) Descriptor() ([]byte, []int) { - return file_management_proto_rawDescGZIP(), []int{174} + return file_management_proto_rawDescGZIP(), []int{162} } func (x *ExternalIDPRemoveRequest) GetUserId() string { @@ -15453,6 +14521,741 @@ func (x *ExternalIDPRemoveRequest) GetExternalUserId() string { return "" } +type PasswordComplexityPolicy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MinLength uint64 `protobuf:"varint,1,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + HasLowercase bool `protobuf:"varint,2,opt,name=has_lowercase,json=hasLowercase,proto3" json:"has_lowercase,omitempty"` + HasUppercase bool `protobuf:"varint,3,opt,name=has_uppercase,json=hasUppercase,proto3" json:"has_uppercase,omitempty"` + HasNumber bool `protobuf:"varint,4,opt,name=has_number,json=hasNumber,proto3" json:"has_number,omitempty"` + HasSymbol bool `protobuf:"varint,5,opt,name=has_symbol,json=hasSymbol,proto3" json:"has_symbol,omitempty"` + Sequence uint64 `protobuf:"varint,6,opt,name=sequence,proto3" json:"sequence,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,7,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,8,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` +} + +func (x *PasswordComplexityPolicy) Reset() { + *x = PasswordComplexityPolicy{} + if protoimpl.UnsafeEnabled { + mi := &file_management_proto_msgTypes[163] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PasswordComplexityPolicy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PasswordComplexityPolicy) ProtoMessage() {} + +func (x *PasswordComplexityPolicy) ProtoReflect() protoreflect.Message { + mi := &file_management_proto_msgTypes[163] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PasswordComplexityPolicy.ProtoReflect.Descriptor instead. +func (*PasswordComplexityPolicy) Descriptor() ([]byte, []int) { + return file_management_proto_rawDescGZIP(), []int{163} +} + +func (x *PasswordComplexityPolicy) GetMinLength() uint64 { + if x != nil { + return x.MinLength + } + return 0 +} + +func (x *PasswordComplexityPolicy) GetHasLowercase() bool { + if x != nil { + return x.HasLowercase + } + return false +} + +func (x *PasswordComplexityPolicy) GetHasUppercase() bool { + if x != nil { + return x.HasUppercase + } + return false +} + +func (x *PasswordComplexityPolicy) GetHasNumber() bool { + if x != nil { + return x.HasNumber + } + return false +} + +func (x *PasswordComplexityPolicy) GetHasSymbol() bool { + if x != nil { + return x.HasSymbol + } + return false +} + +func (x *PasswordComplexityPolicy) GetSequence() uint64 { + if x != nil { + return x.Sequence + } + return 0 +} + +func (x *PasswordComplexityPolicy) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *PasswordComplexityPolicy) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + +type PasswordComplexityPolicyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MinLength uint64 `protobuf:"varint,1,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + HasLowercase bool `protobuf:"varint,2,opt,name=has_lowercase,json=hasLowercase,proto3" json:"has_lowercase,omitempty"` + HasUppercase bool `protobuf:"varint,3,opt,name=has_uppercase,json=hasUppercase,proto3" json:"has_uppercase,omitempty"` + HasNumber bool `protobuf:"varint,4,opt,name=has_number,json=hasNumber,proto3" json:"has_number,omitempty"` + HasSymbol bool `protobuf:"varint,5,opt,name=has_symbol,json=hasSymbol,proto3" json:"has_symbol,omitempty"` +} + +func (x *PasswordComplexityPolicyRequest) Reset() { + *x = PasswordComplexityPolicyRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_management_proto_msgTypes[164] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PasswordComplexityPolicyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PasswordComplexityPolicyRequest) ProtoMessage() {} + +func (x *PasswordComplexityPolicyRequest) ProtoReflect() protoreflect.Message { + mi := &file_management_proto_msgTypes[164] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PasswordComplexityPolicyRequest.ProtoReflect.Descriptor instead. +func (*PasswordComplexityPolicyRequest) Descriptor() ([]byte, []int) { + return file_management_proto_rawDescGZIP(), []int{164} +} + +func (x *PasswordComplexityPolicyRequest) GetMinLength() uint64 { + if x != nil { + return x.MinLength + } + return 0 +} + +func (x *PasswordComplexityPolicyRequest) GetHasLowercase() bool { + if x != nil { + return x.HasLowercase + } + return false +} + +func (x *PasswordComplexityPolicyRequest) GetHasUppercase() bool { + if x != nil { + return x.HasUppercase + } + return false +} + +func (x *PasswordComplexityPolicyRequest) GetHasNumber() bool { + if x != nil { + return x.HasNumber + } + return false +} + +func (x *PasswordComplexityPolicyRequest) GetHasSymbol() bool { + if x != nil { + return x.HasSymbol + } + return false +} + +type PasswordComplexityPolicyView struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Default bool `protobuf:"varint,1,opt,name=default,proto3" json:"default,omitempty"` + MinLength uint64 `protobuf:"varint,2,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + HasLowercase bool `protobuf:"varint,3,opt,name=has_lowercase,json=hasLowercase,proto3" json:"has_lowercase,omitempty"` + HasUppercase bool `protobuf:"varint,4,opt,name=has_uppercase,json=hasUppercase,proto3" json:"has_uppercase,omitempty"` + HasNumber bool `protobuf:"varint,5,opt,name=has_number,json=hasNumber,proto3" json:"has_number,omitempty"` + HasSymbol bool `protobuf:"varint,6,opt,name=has_symbol,json=hasSymbol,proto3" json:"has_symbol,omitempty"` + Sequence uint64 `protobuf:"varint,7,opt,name=sequence,proto3" json:"sequence,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,8,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,9,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` +} + +func (x *PasswordComplexityPolicyView) Reset() { + *x = PasswordComplexityPolicyView{} + if protoimpl.UnsafeEnabled { + mi := &file_management_proto_msgTypes[165] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PasswordComplexityPolicyView) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PasswordComplexityPolicyView) ProtoMessage() {} + +func (x *PasswordComplexityPolicyView) ProtoReflect() protoreflect.Message { + mi := &file_management_proto_msgTypes[165] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PasswordComplexityPolicyView.ProtoReflect.Descriptor instead. +func (*PasswordComplexityPolicyView) Descriptor() ([]byte, []int) { + return file_management_proto_rawDescGZIP(), []int{165} +} + +func (x *PasswordComplexityPolicyView) GetDefault() bool { + if x != nil { + return x.Default + } + return false +} + +func (x *PasswordComplexityPolicyView) GetMinLength() uint64 { + if x != nil { + return x.MinLength + } + return 0 +} + +func (x *PasswordComplexityPolicyView) GetHasLowercase() bool { + if x != nil { + return x.HasLowercase + } + return false +} + +func (x *PasswordComplexityPolicyView) GetHasUppercase() bool { + if x != nil { + return x.HasUppercase + } + return false +} + +func (x *PasswordComplexityPolicyView) GetHasNumber() bool { + if x != nil { + return x.HasNumber + } + return false +} + +func (x *PasswordComplexityPolicyView) GetHasSymbol() bool { + if x != nil { + return x.HasSymbol + } + return false +} + +func (x *PasswordComplexityPolicyView) GetSequence() uint64 { + if x != nil { + return x.Sequence + } + return 0 +} + +func (x *PasswordComplexityPolicyView) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *PasswordComplexityPolicyView) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + +type PasswordAgePolicy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MaxAgeDays uint64 `protobuf:"varint,1,opt,name=max_age_days,json=maxAgeDays,proto3" json:"max_age_days,omitempty"` + ExpireWarnDays uint64 `protobuf:"varint,2,opt,name=expire_warn_days,json=expireWarnDays,proto3" json:"expire_warn_days,omitempty"` + Sequence uint64 `protobuf:"varint,3,opt,name=sequence,proto3" json:"sequence,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,4,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,5,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` +} + +func (x *PasswordAgePolicy) Reset() { + *x = PasswordAgePolicy{} + if protoimpl.UnsafeEnabled { + mi := &file_management_proto_msgTypes[166] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PasswordAgePolicy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PasswordAgePolicy) ProtoMessage() {} + +func (x *PasswordAgePolicy) ProtoReflect() protoreflect.Message { + mi := &file_management_proto_msgTypes[166] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PasswordAgePolicy.ProtoReflect.Descriptor instead. +func (*PasswordAgePolicy) Descriptor() ([]byte, []int) { + return file_management_proto_rawDescGZIP(), []int{166} +} + +func (x *PasswordAgePolicy) GetMaxAgeDays() uint64 { + if x != nil { + return x.MaxAgeDays + } + return 0 +} + +func (x *PasswordAgePolicy) GetExpireWarnDays() uint64 { + if x != nil { + return x.ExpireWarnDays + } + return 0 +} + +func (x *PasswordAgePolicy) GetSequence() uint64 { + if x != nil { + return x.Sequence + } + return 0 +} + +func (x *PasswordAgePolicy) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *PasswordAgePolicy) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + +type PasswordAgePolicyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MaxAgeDays uint64 `protobuf:"varint,1,opt,name=max_age_days,json=maxAgeDays,proto3" json:"max_age_days,omitempty"` + ExpireWarnDays uint64 `protobuf:"varint,2,opt,name=expire_warn_days,json=expireWarnDays,proto3" json:"expire_warn_days,omitempty"` +} + +func (x *PasswordAgePolicyRequest) Reset() { + *x = PasswordAgePolicyRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_management_proto_msgTypes[167] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PasswordAgePolicyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PasswordAgePolicyRequest) ProtoMessage() {} + +func (x *PasswordAgePolicyRequest) ProtoReflect() protoreflect.Message { + mi := &file_management_proto_msgTypes[167] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PasswordAgePolicyRequest.ProtoReflect.Descriptor instead. +func (*PasswordAgePolicyRequest) Descriptor() ([]byte, []int) { + return file_management_proto_rawDescGZIP(), []int{167} +} + +func (x *PasswordAgePolicyRequest) GetMaxAgeDays() uint64 { + if x != nil { + return x.MaxAgeDays + } + return 0 +} + +func (x *PasswordAgePolicyRequest) GetExpireWarnDays() uint64 { + if x != nil { + return x.ExpireWarnDays + } + return 0 +} + +type PasswordAgePolicyView struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Default bool `protobuf:"varint,1,opt,name=default,proto3" json:"default,omitempty"` + MaxAgeDays uint64 `protobuf:"varint,2,opt,name=max_age_days,json=maxAgeDays,proto3" json:"max_age_days,omitempty"` + ExpireWarnDays uint64 `protobuf:"varint,3,opt,name=expire_warn_days,json=expireWarnDays,proto3" json:"expire_warn_days,omitempty"` + Sequence uint64 `protobuf:"varint,4,opt,name=sequence,proto3" json:"sequence,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,5,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,6,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` +} + +func (x *PasswordAgePolicyView) Reset() { + *x = PasswordAgePolicyView{} + if protoimpl.UnsafeEnabled { + mi := &file_management_proto_msgTypes[168] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PasswordAgePolicyView) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PasswordAgePolicyView) ProtoMessage() {} + +func (x *PasswordAgePolicyView) ProtoReflect() protoreflect.Message { + mi := &file_management_proto_msgTypes[168] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PasswordAgePolicyView.ProtoReflect.Descriptor instead. +func (*PasswordAgePolicyView) Descriptor() ([]byte, []int) { + return file_management_proto_rawDescGZIP(), []int{168} +} + +func (x *PasswordAgePolicyView) GetDefault() bool { + if x != nil { + return x.Default + } + return false +} + +func (x *PasswordAgePolicyView) GetMaxAgeDays() uint64 { + if x != nil { + return x.MaxAgeDays + } + return 0 +} + +func (x *PasswordAgePolicyView) GetExpireWarnDays() uint64 { + if x != nil { + return x.ExpireWarnDays + } + return 0 +} + +func (x *PasswordAgePolicyView) GetSequence() uint64 { + if x != nil { + return x.Sequence + } + return 0 +} + +func (x *PasswordAgePolicyView) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *PasswordAgePolicyView) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + +type PasswordLockoutPolicy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MaxAttempts uint64 `protobuf:"varint,1,opt,name=max_attempts,json=maxAttempts,proto3" json:"max_attempts,omitempty"` + ShowLockoutFailure bool `protobuf:"varint,2,opt,name=show_lockout_failure,json=showLockoutFailure,proto3" json:"show_lockout_failure,omitempty"` + Sequence uint64 `protobuf:"varint,3,opt,name=sequence,proto3" json:"sequence,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,4,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,5,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` +} + +func (x *PasswordLockoutPolicy) Reset() { + *x = PasswordLockoutPolicy{} + if protoimpl.UnsafeEnabled { + mi := &file_management_proto_msgTypes[169] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PasswordLockoutPolicy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PasswordLockoutPolicy) ProtoMessage() {} + +func (x *PasswordLockoutPolicy) ProtoReflect() protoreflect.Message { + mi := &file_management_proto_msgTypes[169] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PasswordLockoutPolicy.ProtoReflect.Descriptor instead. +func (*PasswordLockoutPolicy) Descriptor() ([]byte, []int) { + return file_management_proto_rawDescGZIP(), []int{169} +} + +func (x *PasswordLockoutPolicy) GetMaxAttempts() uint64 { + if x != nil { + return x.MaxAttempts + } + return 0 +} + +func (x *PasswordLockoutPolicy) GetShowLockoutFailure() bool { + if x != nil { + return x.ShowLockoutFailure + } + return false +} + +func (x *PasswordLockoutPolicy) GetSequence() uint64 { + if x != nil { + return x.Sequence + } + return 0 +} + +func (x *PasswordLockoutPolicy) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *PasswordLockoutPolicy) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + +type PasswordLockoutPolicyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MaxAttempts uint64 `protobuf:"varint,1,opt,name=max_attempts,json=maxAttempts,proto3" json:"max_attempts,omitempty"` + ShowLockoutFailure bool `protobuf:"varint,2,opt,name=show_lockout_failure,json=showLockoutFailure,proto3" json:"show_lockout_failure,omitempty"` +} + +func (x *PasswordLockoutPolicyRequest) Reset() { + *x = PasswordLockoutPolicyRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_management_proto_msgTypes[170] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PasswordLockoutPolicyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PasswordLockoutPolicyRequest) ProtoMessage() {} + +func (x *PasswordLockoutPolicyRequest) ProtoReflect() protoreflect.Message { + mi := &file_management_proto_msgTypes[170] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PasswordLockoutPolicyRequest.ProtoReflect.Descriptor instead. +func (*PasswordLockoutPolicyRequest) Descriptor() ([]byte, []int) { + return file_management_proto_rawDescGZIP(), []int{170} +} + +func (x *PasswordLockoutPolicyRequest) GetMaxAttempts() uint64 { + if x != nil { + return x.MaxAttempts + } + return 0 +} + +func (x *PasswordLockoutPolicyRequest) GetShowLockoutFailure() bool { + if x != nil { + return x.ShowLockoutFailure + } + return false +} + +type PasswordLockoutPolicyView struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Default bool `protobuf:"varint,1,opt,name=default,proto3" json:"default,omitempty"` + MaxAttempts uint64 `protobuf:"varint,2,opt,name=max_attempts,json=maxAttempts,proto3" json:"max_attempts,omitempty"` + ShowLockoutFailure bool `protobuf:"varint,3,opt,name=show_lockout_failure,json=showLockoutFailure,proto3" json:"show_lockout_failure,omitempty"` + Sequence uint64 `protobuf:"varint,4,opt,name=sequence,proto3" json:"sequence,omitempty"` + CreationDate *timestamp.Timestamp `protobuf:"bytes,5,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"` + ChangeDate *timestamp.Timestamp `protobuf:"bytes,6,opt,name=change_date,json=changeDate,proto3" json:"change_date,omitempty"` +} + +func (x *PasswordLockoutPolicyView) Reset() { + *x = PasswordLockoutPolicyView{} + if protoimpl.UnsafeEnabled { + mi := &file_management_proto_msgTypes[171] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PasswordLockoutPolicyView) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PasswordLockoutPolicyView) ProtoMessage() {} + +func (x *PasswordLockoutPolicyView) ProtoReflect() protoreflect.Message { + mi := &file_management_proto_msgTypes[171] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PasswordLockoutPolicyView.ProtoReflect.Descriptor instead. +func (*PasswordLockoutPolicyView) Descriptor() ([]byte, []int) { + return file_management_proto_rawDescGZIP(), []int{171} +} + +func (x *PasswordLockoutPolicyView) GetDefault() bool { + if x != nil { + return x.Default + } + return false +} + +func (x *PasswordLockoutPolicyView) GetMaxAttempts() uint64 { + if x != nil { + return x.MaxAttempts + } + return 0 +} + +func (x *PasswordLockoutPolicyView) GetShowLockoutFailure() bool { + if x != nil { + return x.ShowLockoutFailure + } + return false +} + +func (x *PasswordLockoutPolicyView) GetSequence() uint64 { + if x != nil { + return x.Sequence + } + return 0 +} + +func (x *PasswordLockoutPolicyView) GetCreationDate() *timestamp.Timestamp { + if x != nil { + return x.CreationDate + } + return nil +} + +func (x *PasswordLockoutPolicyView) GetChangeDate() *timestamp.Timestamp { + if x != nil { + return x.ChangeDate + } + return nil +} + var File_management_proto protoreflect.FileDescriptor var file_management_proto_rawDesc = []byte{ @@ -16141,496 +15944,284 @@ var file_management_proto_rawDesc = []byte{ 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2c, 0x0a, 0x1a, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, - 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x44, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xef, 0x03, 0x0a, 0x18, 0x50, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, - 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, - 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, - 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x68, 0x61, 0x73, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x12, 0x23, 0x0a, - 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x75, 0x70, 0x70, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x55, 0x70, 0x70, 0x65, 0x72, 0x63, 0x61, - 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x09, 0x69, 0x73, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0xf3, 0x01, 0x0a, 0x1e, - 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, - 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2a, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0xf4, 0x03, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, - 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, - 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x61, 0x73, - 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x68, 0x61, 0x73, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x75, 0x70, 0x70, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x55, 0x70, 0x70, 0x65, 0x72, 0x63, - 0x61, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, 0x53, 0x79, 0x6d, 0x62, 0x6f, - 0x6c, 0x22, 0x83, 0x02, 0x0a, 0x1e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, - 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x2a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x18, 0xf4, 0x03, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, - 0x23, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x4c, 0x6f, 0x77, 0x65, 0x72, - 0x63, 0x61, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x75, 0x70, 0x70, 0x65, - 0x72, 0x63, 0x61, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, - 0x55, 0x70, 0x70, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, - 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, - 0x61, 0x73, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, - 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, - 0x73, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x22, 0x25, 0x0a, 0x13, 0x50, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x44, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x8d, - 0x03, 0x0a, 0x11, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x74, 0x61, + 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x66, 0x0a, 0x10, 0x4f, + 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, + 0x38, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x6d, 0x75, + 0x73, 0x74, 0x5f, 0x62, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x4d, 0x75, 0x73, + 0x74, 0x42, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x22, 0x32, 0x0a, 0x10, 0x4f, 0x72, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, + 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x83, 0x02, 0x0a, 0x03, 0x4f, 0x72, 0x67, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x3e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x4f, 0x72, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, + 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x87, 0x02, + 0x0a, 0x07, 0x4f, 0x72, 0x67, 0x56, 0x69, 0x65, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, - 0x67, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6d, - 0x61, 0x78, 0x41, 0x67, 0x65, 0x44, 0x61, 0x79, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x70, - 0x69, 0x72, 0x65, 0x5f, 0x77, 0x61, 0x72, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x57, 0x61, 0x72, 0x6e, 0x44, - 0x61, 0x79, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x91, - 0x01, 0x0a, 0x17, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0xf4, 0x03, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x67, - 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6d, 0x61, - 0x78, 0x41, 0x67, 0x65, 0x44, 0x61, 0x79, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x70, 0x69, - 0x72, 0x65, 0x5f, 0x77, 0x61, 0x72, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x57, 0x61, 0x72, 0x6e, 0x44, 0x61, - 0x79, 0x73, 0x22, 0xa1, 0x01, 0x0a, 0x17, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, - 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2a, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0xf4, 0x03, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x6d, 0x61, - 0x78, 0x5f, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x41, 0x67, 0x65, 0x44, 0x61, 0x79, 0x73, 0x12, 0x28, 0x0a, 0x10, - 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x77, 0x61, 0x72, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x57, 0x61, - 0x72, 0x6e, 0x44, 0x61, 0x79, 0x73, 0x22, 0x29, 0x0a, 0x17, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, - 0x44, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x9d, 0x03, 0x0a, 0x15, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, - 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, - 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, - 0x73, 0x12, 0x33, 0x0a, 0x16, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6f, - 0x75, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x13, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x6f, 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x46, 0x61, - 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x22, 0xa1, 0x01, 0x0a, 0x1b, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, - 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x12, 0x2a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x18, 0xf4, 0x03, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, - 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, - 0x12, 0x33, 0x0a, 0x16, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6f, 0x75, - 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x13, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x6f, 0x63, 0x6b, 0x4f, 0x75, 0x74, 0x46, 0x61, 0x69, - 0x6c, 0x75, 0x72, 0x65, 0x73, 0x22, 0xb1, 0x01, 0x0a, 0x1b, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2a, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, - 0x03, 0x18, 0xf4, 0x03, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x41, 0x74, 0x74, 0x65, - 0x6d, 0x70, 0x74, 0x73, 0x12, 0x33, 0x0a, 0x16, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6c, 0x6f, 0x63, - 0x6b, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x6f, 0x63, 0x6b, 0x4f, 0x75, - 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x22, 0x9b, 0x01, 0x0a, 0x0c, 0x4f, 0x72, - 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, - 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, - 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x69, - 0x6e, 0x5f, 0x6d, 0x75, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x4d, 0x75, 0x73, 0x74, 0x42, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x32, 0x0a, 0x10, 0x4f, 0x72, 0x67, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, - 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x83, 0x02, 0x0a, 0x03, - 0x4f, 0x72, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, - 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x22, 0x87, 0x02, 0x0a, 0x07, 0x4f, 0x72, 0x67, 0x56, 0x69, 0x65, 0x77, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, - 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, - 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x29, 0x0a, 0x06, 0x44, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1f, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, - 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x8a, 0x02, 0x0a, 0x09, 0x4f, 0x72, 0x67, 0x44, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x0d, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x22, 0xf0, 0x02, 0x0a, 0x0d, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x0d, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, - 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x60, 0x0a, 0x0f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, - 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x39, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x4f, 0x72, 0x67, - 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, - 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, - 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x22, 0x97, 0x01, 0x0a, 0x1a, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x22, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x06, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x55, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x45, 0x0a, 0x1b, 0x4f, - 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, - 0x72, 0x6c, 0x22, 0x3e, 0x0a, 0x18, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, - 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, - 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, - 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x22, 0x3a, 0x0a, 0x17, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x4f, 0x72, 0x67, - 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, - 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, - 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x39, - 0x0a, 0x16, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0xa3, 0x02, 0x0a, 0x17, 0x4f, 0x72, - 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x45, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, - 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, - 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, - 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, - 0x96, 0x01, 0x0a, 0x16, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x4e, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, + 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, + 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x29, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x12, 0x1f, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x22, 0x8a, 0x02, 0x0a, 0x09, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, + 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x69, + 0x6d, 0x61, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x70, 0x72, 0x69, 0x6d, + 0x61, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, + 0xf0, 0x02, 0x0a, 0x0d, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x69, 0x65, + 0x77, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, + 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x70, 0x72, 0x69, + 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x60, 0x0a, 0x0f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x44, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x14, 0x4f, 0x72, 0x67, - 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x4e, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, + 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x22, 0x39, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x06, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, + 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x97, 0x01, + 0x0a, 0x1a, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x06, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, + 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x12, 0x55, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, - 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x44, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, - 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x26, 0x0a, - 0x0e, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0xd4, 0x01, 0x0a, 0x09, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, - 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x4d, 0x0a, 0x13, - 0x41, 0x64, 0x64, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x50, 0x0a, 0x16, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x3a, 0x0a, - 0x16, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xa3, 0x02, 0x0a, 0x17, 0x4f, 0x72, - 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x45, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, - 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, - 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, - 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, - 0xea, 0x02, 0x0a, 0x0d, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x56, 0x69, 0x65, - 0x77, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, - 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, - 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, - 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, - 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x96, 0x01, 0x0a, - 0x16, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x4e, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, - 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x14, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x4e, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, - 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, - 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x36, 0x0a, 0x14, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0x4f, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x22, 0x9f, 0x02, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x43, - 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, - 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc5, 0x02, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, + 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x45, 0x0a, 0x1b, 0x4f, 0x72, 0x67, 0x44, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x10, 0x0a, 0x03, + 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x3e, + 0x0a, 0x18, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x06, 0x64, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, + 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3a, + 0x0a, 0x17, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x39, 0x0a, 0x16, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x64, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0xa3, 0x02, 0x0a, 0x17, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x45, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x69, 0x65, + 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, + 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, - 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x92, 0x01, - 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, + 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x96, 0x01, 0x0a, 0x16, + 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x12, 0x4c, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x69, 0x6d, 0x69, 0x74, 0x12, 0x4e, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x22, 0xbe, 0x01, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x4c, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, - 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, - 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x14, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x4e, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x44, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, + 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x4f, 0x72, 0x67, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, + 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, + 0x73, 0x22, 0xd4, 0x01, 0x0a, 0x09, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x3b, + 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x4d, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x4f, + 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x50, 0x0a, 0x16, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x3a, 0x0a, 0x16, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, + 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xa3, 0x02, 0x0a, 0x17, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x45, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x56, 0x69, 0x65, + 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, + 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, + 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xea, 0x02, 0x0a, 0x0d, + 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x12, 0x17, 0x0a, + 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0b, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, + 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, + 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x16, 0x4f, 0x72, 0x67, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x4e, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, + 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x14, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x4e, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x4f, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, - 0x43, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x22, 0x8b, 0x02, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, + 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x06, 0x6d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x36, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, + 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x4f, + 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, + 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0x9f, 0x02, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, + 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x22, 0xc5, 0x02, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x56, 0x69, 0x65, + 0x77, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, @@ -16644,649 +16235,159 @@ var file_management_proto_rawDesc = []byte{ 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x22, 0x2a, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0xd8, - 0x01, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, - 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x10, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, 0x17, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, - 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x66, - 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, - 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x50, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x17, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, - 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x74, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x82, - 0x01, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x41, 0x64, - 0x64, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x53, - 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, - 0x6c, 0x65, 0x41, 0x64, 0x64, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, - 0x6c, 0x65, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x6f, 0x6c, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x19, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x21, 0x0a, - 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x91, 0x02, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, - 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0xd8, 0x01, 0x0a, 0x0f, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, 0x12, 0x1d, - 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1a, 0x0a, + 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x92, 0x01, 0x0a, 0x14, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x12, 0x4c, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xbe, + 0x01, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x4c, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x4f, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x08, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x22, 0x8b, 0x02, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x42, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x47, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0xa7, - 0x02, 0x0a, 0x19, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x47, 0x0a, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc2, 0x01, 0x0a, 0x18, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, - 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x50, 0x0a, 0x07, 0x71, - 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xc6, 0x01, - 0x0a, 0x16, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x50, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, - 0x6c, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x06, 0x6d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xee, 0x02, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x12, 0x17, 0x0a, 0x07, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, + 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x2a, + 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, + 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0xd8, 0x01, 0x0a, 0x0d, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, - 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xab, 0x02, 0x0a, 0x1b, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, - 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc6, 0x01, 0x0a, 0x1a, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x52, 0x0a, 0x07, 0x71, 0x75, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xca, - 0x01, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x52, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x44, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xe8, 0x02, 0x0a, 0x0b, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4d, 0x0a, - 0x0b, 0x6f, 0x69, 0x64, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, - 0x52, 0x0a, 0x6f, 0x69, 0x64, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, - 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x74, 0x0a, 0x11, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0a, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, - 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xf6, 0x05, 0x0a, - 0x0a, 0x4f, 0x49, 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x72, - 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x69, 0x73, - 0x12, 0x57, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4e, 0x0a, 0x0b, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2d, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x49, 0x44, 0x43, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x67, - 0x72, 0x61, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x5c, 0x0a, 0x10, 0x61, - 0x75, 0x74, 0x68, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x75, 0x74, 0x68, 0x4d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x4d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x6f, 0x73, - 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x5f, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x5f, 0x75, 0x72, 0x69, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x70, 0x6f, - 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x55, 0x72, 0x69, 0x73, 0x12, 0x45, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x6e, - 0x6f, 0x6e, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6e, 0x6f, 0x6e, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, - 0x6e, 0x74, 0x12, 0x56, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, - 0x5f, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, - 0x63, 0x65, 0x50, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x65, - 0x76, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, - 0x76, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x88, 0x05, 0x0a, 0x15, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, - 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, - 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, - 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x69, 0x73, 0x12, 0x57, 0x0a, 0x0e, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4e, 0x0a, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x5c, 0x0a, 0x10, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, - 0x75, 0x74, 0x5f, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x73, - 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x70, 0x6f, 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x6f, - 0x75, 0x74, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x69, 0x73, 0x12, 0x45, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x76, 0x4d, 0x6f, 0x64, 0x65, - 0x22, 0xcc, 0x04, 0x0a, 0x10, 0x4f, 0x49, 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, - 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x2e, 0x0a, - 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, - 0x0d, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, - 0x69, 0x73, 0x12, 0x57, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4e, 0x0a, 0x0b, 0x67, - 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0e, - 0x32, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x0a, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x5c, 0x0a, 0x10, 0x61, - 0x75, 0x74, 0x68, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x75, 0x74, 0x68, 0x4d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x4d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x6f, 0x73, - 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x5f, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x5f, 0x75, 0x72, 0x69, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x70, 0x6f, - 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x55, 0x72, 0x69, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x76, 0x4d, 0x6f, 0x64, 0x65, 0x22, - 0x33, 0x0a, 0x0c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, - 0x23, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x22, 0xec, 0x02, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4d, 0x0a, 0x0b, 0x6f, 0x69, - 0x64, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x0a, 0x6f, - 0x69, 0x64, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x22, 0xa7, 0x02, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x47, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, - 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, - 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, - 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, - 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc2, 0x01, - 0x0a, 0x18, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x12, 0x50, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x66, 0x0a, 0x13, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, + 0x65, 0x73, 0x22, 0x50, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x22, 0x74, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x6f, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x82, 0x01, 0x0a, 0x12, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6c, + 0x6b, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x53, 0x0a, 0x0d, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x16, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x50, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x44, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xe3, 0x02, 0x0a, 0x0c, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x67, - 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x4f, 0x72, 0x67, 0x49, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x47, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x41, 0x64, + 0x64, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, + 0x80, 0x01, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x22, 0x91, 0x02, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, + 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x22, 0x88, 0x01, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, - 0x12, 0x2d, 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x72, 0x67, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x0c, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x4f, 0x72, 0x67, 0x49, 0x64, 0x12, - 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x72, 0x0a, 0x12, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, - 0x22, 0x51, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x02, 0x69, 0x64, 0x22, 0x8b, 0x04, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x65, 0x64, 0x5f, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x4f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x28, 0x0a, - 0x10, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, - 0x4f, 0x72, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, - 0x6b, 0x65, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, - 0x4b, 0x65, 0x79, 0x73, 0x12, 0x47, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, - 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, - 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, - 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0xa9, 0x02, 0x0a, 0x1a, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x48, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x56, - 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, - 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, - 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, - 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x99, 0x01, - 0x0a, 0x1b, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, - 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x4c, 0x0a, 0x07, 0x71, - 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x19, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, - 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x51, 0x0a, - 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x22, 0xc8, 0x01, 0x0a, 0x17, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x51, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0xd8, 0x01, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x64, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, + 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x65, 0x22, 0x47, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x19, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0xa7, 0x02, 0x0a, 0x19, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x47, 0x0a, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x44, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2f, 0x0a, 0x17, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0xdd, 0x01, 0x0a, - 0x12, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, - 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x9b, 0x01, 0x0a, - 0x15, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x22, - 0x0a, 0x08, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x18, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, - 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, - 0x22, 0x0a, 0x08, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x88, 0x01, 0x0a, 0x18, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, - 0x12, 0x22, 0x0a, 0x08, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xf3, 0x02, 0x0a, 0x16, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x56, 0x69, 0x65, - 0x77, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, - 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, - 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, - 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb5, 0x02, 0x0a, - 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x4e, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, @@ -17294,28 +16395,24 @@ var file_management_proto_rawDesc = []byte{ 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x22, 0xf4, 0x01, 0x0a, 0x1f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, - 0x12, 0x22, 0x0a, 0x08, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x12, 0x57, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xd4, 0x01, 0x0a, 0x1d, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x57, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, + 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc2, 0x01, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x50, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x16, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x50, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, @@ -17323,67 +16420,357 @@ var file_management_proto_rawDesc = []byte{ 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x82, 0x03, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, - 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x44, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x63, 0x61, + 0x75, 0x65, 0x22, 0xee, 0x02, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, + 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0xab, 0x02, 0x0a, 0x1b, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, + 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x22, 0xc6, 0x01, 0x0a, 0x1a, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x52, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xca, 0x01, 0x0a, 0x18, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x52, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x06, 0x6d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xe8, 0x02, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4d, 0x0a, 0x0b, 0x6f, 0x69, 0x64, + 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x4f, 0x49, 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x69, + 0x64, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x22, 0x74, 0x0a, 0x11, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, + 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, + 0xc8, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xf6, 0x05, 0x0a, 0x0a, 0x4f, 0x49, 0x44, + 0x43, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, + 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x69, 0x73, 0x12, 0x57, 0x0a, 0x0e, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4e, 0x0a, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x67, 0x72, 0x61, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x5c, 0x0a, 0x10, 0x61, 0x75, 0x74, 0x68, 0x5f, + 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x6c, 0x6f, + 0x67, 0x6f, 0x75, 0x74, 0x5f, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, + 0x69, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x70, 0x6f, 0x73, 0x74, 0x4c, 0x6f, + 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x69, 0x73, + 0x12, 0x45, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x6f, 0x6e, 0x65, 0x5f, + 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0d, 0x6e, 0x6f, 0x6e, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x74, 0x12, 0x56, + 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, + 0x62, 0x6c, 0x65, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x12, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, + 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x76, 0x4d, 0x6f, 0x64, + 0x65, 0x22, 0x88, 0x05, 0x0a, 0x15, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0a, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, + 0x75, 0x72, 0x69, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x69, 0x73, 0x12, 0x57, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, + 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x73, 0x12, 0x4e, 0x0a, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, + 0x43, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x5c, 0x0a, 0x10, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, + 0x43, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x0e, 0x61, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x39, 0x0a, 0x19, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x5f, 0x72, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x73, 0x18, 0x08, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x16, 0x70, 0x6f, 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x69, 0x73, 0x12, 0x45, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, + 0x43, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x76, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xcc, 0x04, 0x0a, + 0x10, 0x4f, 0x49, 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x0e, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x69, 0x73, 0x12, 0x57, + 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4e, 0x0a, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x63, + 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, + 0x44, 0x43, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x67, 0x72, 0x61, + 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x5c, 0x0a, 0x10, 0x61, 0x75, 0x74, 0x68, 0x5f, + 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x6c, 0x6f, + 0x67, 0x6f, 0x75, 0x74, 0x5f, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, + 0x69, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x70, 0x6f, 0x73, 0x74, 0x4c, 0x6f, + 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x69, 0x73, + 0x12, 0x19, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x76, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x33, 0x0a, 0x0c, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x22, 0xec, 0x02, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x56, 0x69, 0x65, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, + 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, + 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4d, 0x0a, 0x0b, 0x6f, 0x69, 0x64, 0x63, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, + 0x43, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x69, 0x64, 0x63, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, + 0xa7, 0x02, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x47, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc2, 0x01, 0x0a, 0x18, 0x41, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x50, 0x0a, 0x07, + 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xc6, + 0x01, 0x0a, 0x16, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x50, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x06, 0x6d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xe3, 0x02, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x6e, 0x74, + 0x65, 0x64, 0x5f, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x4f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x1b, 0x0a, + 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x47, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, - 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x93, 0x01, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x07, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, - 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x6b, 0x65, - 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x4b, 0x65, - 0x79, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x69, 0x0a, - 0x0f, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x88, 0x01, + 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, + 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x0e, + 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x67, + 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x4f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, - 0x72, 0x6f, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x31, 0x0a, 0x13, 0x55, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x75, 0x6c, 0x6b, 0x12, - 0x1a, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, - 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x0b, 0x55, - 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, - 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x9c, 0x05, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x61, 0x6e, 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x6b, - 0x65, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x4b, - 0x65, 0x79, 0x73, 0x12, 0x44, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x74, 0x61, + 0x72, 0x6f, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x72, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x26, + 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x51, 0x0a, 0x0e, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x26, + 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, + 0x8b, 0x04, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x56, 0x69, 0x65, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x6f, + 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x72, 0x61, + 0x6e, 0x74, 0x65, 0x64, 0x4f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x67, 0x72, 0x61, + 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x4f, 0x72, 0x67, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, + 0x12, 0x47, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, @@ -17392,1769 +16779,2039 @@ var file_management_proto_rawDesc = []byte{ 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x67, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x67, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x72, 0x67, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, - 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x49, 0x64, 0x22, 0xa3, 0x02, 0x0a, 0x17, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x45, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x56, 0x69, 0x65, 0x77, - 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, - 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x96, 0x01, 0x0a, 0x16, 0x55, - 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x4e, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x14, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x4e, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4e, 0x0a, 0x06, - 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, - 0x01, 0x02, 0x18, 0x00, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0xad, 0x02, 0x0a, 0x1c, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x12, 0x4a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x68, 0x69, 0x70, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x22, 0xc2, 0x01, 0x0a, 0x1b, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x12, 0x53, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x68, 0x69, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, - 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xd6, 0x01, 0x0a, 0x19, 0x55, 0x73, 0x65, 0x72, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x53, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, - 0x69, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4e, 0x0a, 0x06, 0x6d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, + 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x2e, 0x0a, + 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa9, 0x02, + 0x0a, 0x1a, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x48, 0x0a, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x99, 0x01, 0x0a, 0x1b, 0x47, 0x72, + 0x61, 0x6e, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x4c, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x19, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, + 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x51, 0x0a, 0x07, 0x71, 0x75, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, - 0x18, 0x00, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0xb4, 0x03, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x68, 0x69, 0x70, 0x56, 0x69, 0x65, 0x77, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x4b, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xc8, 0x01, 0x0a, + 0x17, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x51, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, - 0x0c, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x49, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, - 0x6c, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, + 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x06, 0x6d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2f, 0x0a, 0x17, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, + 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0xdd, 0x01, 0x0a, 0x12, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x3b, + 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, + 0x64, 0x64, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, + 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x08, 0x67, 0x72, + 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x20, + 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, + 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x08, 0x67, + 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x88, 0x01, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, + 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x08, + 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, + 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x64, 0x22, 0xf3, 0x02, 0x0a, 0x16, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, + 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x12, 0x17, 0x0a, + 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, + 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, + 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb5, 0x02, 0x0a, 0x20, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x4e, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, + 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, + 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x22, 0xf4, 0x01, 0x0a, 0x1f, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, + 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x08, + 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x57, + 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x3d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, + 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xd4, 0x01, 0x0a, 0x1d, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x57, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x44, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x82, + 0x03, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, + 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x67, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, + 0x6f, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, + 0x72, 0x6f, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x44, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, + 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, + 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x61, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, + 0x74, 0x49, 0x64, 0x22, 0x93, 0x01, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, + 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0a, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x19, + 0x0a, 0x08, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x69, 0x0a, 0x0f, 0x55, 0x73, 0x65, + 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x07, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, + 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, + 0x4b, 0x65, 0x79, 0x73, 0x22, 0x31, 0x0a, 0x13, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x1a, 0x0a, 0x03, 0x69, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x48, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, + 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x9c, 0x05, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x56, + 0x69, 0x65, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, + 0x6f, 0x72, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, + 0x67, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, + 0x44, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, - 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x22, 0x20, 0x0a, 0x05, 0x49, 0x64, 0x70, 0x49, 0x44, - 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0xfe, 0x02, 0x0a, 0x03, 0x49, 0x64, - 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x3e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, + 0x69, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x6f, 0x72, 0x67, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x6f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x21, 0x0a, 0x0c, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x77, 0x6e, + 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x64, + 0x22, 0xa3, 0x02, 0x0a, 0x17, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x45, 0x0a, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, + 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, + 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, + 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x96, 0x01, 0x0a, 0x16, 0x55, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x4e, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, - 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, + 0xcc, 0x01, 0x0a, 0x14, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x4e, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, + 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4e, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x18, 0x00, + 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xad, + 0x02, 0x0a, 0x1c, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, + 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, + 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x12, 0x4a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, + 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, + 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, + 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, + 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc2, + 0x01, 0x0a, 0x1b, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, + 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, + 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x53, + 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x39, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, + 0x69, 0x65, 0x73, 0x22, 0xd6, 0x01, 0x0a, 0x19, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x12, 0x53, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, + 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4e, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x18, 0x00, 0x52, 0x06, + 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb4, 0x03, 0x0a, + 0x12, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x56, + 0x69, 0x65, 0x77, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x0b, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x2a, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x67, 0x67, + 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, + 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, + 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, + 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, + 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x6f, 0x5f, 0x73, 0x72, 0x63, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x6f, 0x53, 0x72, 0x63, 0x12, 0x50, - 0x0a, 0x0b, 0x6f, 0x69, 0x64, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x77, + 0x6e, 0x65, 0x72, 0x22, 0x20, 0x0a, 0x05, 0x49, 0x64, 0x70, 0x49, 0x44, 0x12, 0x17, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, + 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0xfe, 0x02, 0x0a, 0x03, 0x49, 0x64, 0x70, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, + 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, + 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, + 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, + 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x6f, 0x5f, 0x73, 0x72, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x6f, 0x53, 0x72, 0x63, 0x12, 0x50, 0x0a, 0x0b, 0x6f, 0x69, + 0x64, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, + 0x52, 0x0a, 0x6f, 0x69, 0x64, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, + 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x69, 0x64, 0x70, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x5f, 0x0a, 0x09, 0x49, 0x64, 0x70, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, + 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, + 0x6c, 0x6f, 0x67, 0x6f, 0x5f, 0x73, 0x72, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, + 0x6c, 0x6f, 0x67, 0x6f, 0x53, 0x72, 0x63, 0x22, 0xc9, 0x02, 0x0a, 0x0d, 0x4f, 0x69, 0x64, 0x63, + 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x69, + 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, + 0x75, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x18, 0x69, + 0x64, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, + 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, + 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, + 0x15, 0x69, 0x64, 0x70, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x4d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x5b, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, + 0x69, 0x6e, 0x67, 0x22, 0xae, 0x03, 0x0a, 0x13, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, + 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, + 0x6f, 0x67, 0x6f, 0x5f, 0x73, 0x72, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, + 0x6f, 0x67, 0x6f, 0x53, 0x72, 0x63, 0x12, 0x27, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, + 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x2f, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, + 0xc8, 0x01, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x12, 0x22, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x06, 0x69, 0x73, + 0x73, 0x75, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x18, + 0x69, 0x64, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x52, 0x15, 0x69, 0x64, 0x70, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, + 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x5b, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0x22, 0x87, 0x03, 0x0a, 0x13, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x06, + 0x69, 0x64, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x69, 0x64, 0x70, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x09, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x08, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x22, 0x0a, 0x06, 0x69, 0x73, + 0x73, 0x75, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, + 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x18, 0x69, 0x64, 0x70, 0x5f, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, + 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, + 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x15, 0x69, 0x64, 0x70, 0x44, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x12, 0x5b, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, + 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, + 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0f, 0x75, + 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x97, + 0x02, 0x0a, 0x11, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3f, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xe1, 0x03, 0x0a, 0x07, 0x49, 0x64, 0x70, + 0x56, 0x69, 0x65, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x69, 0x64, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x0c, 0x0a, 0x0a, - 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x5f, 0x0a, 0x09, 0x49, 0x64, - 0x70, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, - 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x6f, 0x5f, 0x73, 0x72, 0x63, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x6f, 0x53, 0x72, 0x63, 0x22, 0xc9, 0x02, 0x0a, 0x0d, - 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, 0x0a, - 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, + 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, + 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x6f, 0x5f, 0x73, + 0x72, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x6f, 0x53, 0x72, + 0x63, 0x12, 0x54, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x54, 0x0a, 0x0b, 0x6f, 0x69, 0x64, 0x63, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, + 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x69, + 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x69, 0x65, 0x77, 0x48, + 0x00, 0x52, 0x0a, 0x6f, 0x69, 0x64, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, + 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x69, 0x64, 0x70, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0xa8, 0x02, 0x0a, + 0x11, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x69, + 0x65, 0x77, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x18, 0x69, 0x64, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x15, 0x69, 0x64, 0x70, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x5b, 0x0a, 0x10, 0x75, 0x73, - 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x06, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, - 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0xae, 0x03, 0x0a, 0x13, 0x4f, 0x69, 0x64, 0x63, - 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, - 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, - 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x6f, 0x5f, 0x73, 0x72, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x6f, 0x53, 0x72, 0x63, 0x12, 0x27, 0x0a, 0x09, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, - 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, - 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x12, 0x22, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, - 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, - 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, - 0x12, 0x69, 0x0a, 0x18, 0x69, 0x64, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x52, 0x15, 0x69, 0x64, 0x70, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x5b, 0x0a, 0x10, 0x75, - 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, - 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x87, 0x03, 0x0a, 0x13, 0x4f, 0x69, 0x64, - 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x12, 0x1e, 0x0a, 0x06, 0x69, 0x64, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x69, 0x64, 0x70, 0x49, 0x64, - 0x12, 0x27, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, - 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x22, - 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, - 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, - 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x18, 0x69, 0x64, - 0x70, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, - 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, - 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x15, - 0x69, 0x64, 0x70, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, - 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x5b, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, - 0x6e, 0x67, 0x22, 0x97, 0x02, 0x0a, 0x11, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3f, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x56, 0x69, - 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, - 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, - 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, - 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xe1, 0x03, 0x0a, - 0x07, 0x49, 0x64, 0x70, 0x56, 0x69, 0x65, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, - 0x67, 0x6f, 0x5f, 0x73, 0x72, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x6f, - 0x67, 0x6f, 0x53, 0x72, 0x63, 0x12, 0x54, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, - 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x54, 0x0a, 0x0b, 0x6f, - 0x69, 0x64, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, - 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x69, 0x64, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x11, 0x0a, - 0x0f, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x69, 0x65, 0x77, - 0x22, 0xa8, 0x02, 0x0a, 0x11, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x56, 0x69, 0x65, 0x77, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, - 0x70, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x18, 0x69, 0x64, 0x70, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, - 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x15, 0x69, 0x64, 0x70, 0x44, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x5b, - 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, - 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, - 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, - 0x6e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x8a, 0x01, 0x0a, 0x10, - 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x48, - 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xb6, 0x01, 0x0a, 0x0e, 0x49, 0x64, 0x70, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x0b, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, - 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x15, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x70, 0x22, 0x9d, - 0x01, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x64, - 0x64, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, - 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x15, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x70, 0x22, 0x3c, - 0x0a, 0x0d, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x12, - 0x2b, 0x0a, 0x0d, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x0b, 0x69, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x22, 0xa7, 0x01, 0x0a, - 0x0e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, - 0x2e, 0x0a, 0x0d, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, - 0xc8, 0x01, 0x52, 0x0b, 0x69, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, - 0x65, 0x0a, 0x11, 0x69, 0x64, 0x70, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, - 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x0f, 0x69, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x0b, 0x49, 0x64, 0x70, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, - 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x5b, 0x0a, 0x11, 0x69, 0x64, - 0x70, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x69, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x0f, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x18, 0x0a, 0x07, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, 0x73, 0x65, - 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x0a, - 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, - 0x64, 0x70, 0x22, 0x86, 0x01, 0x0a, 0x0f, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, - 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, - 0x70, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xa7, 0x02, 0x0a, 0x19, - 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x47, 0x0a, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, - 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x48, 0x0a, 0x18, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, - 0x61, 0x0a, 0x18, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x22, 0xa7, 0x02, 0x0a, 0x19, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, - 0x44, 0x50, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x47, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x8a, 0x01, 0x0a, 0x10, 0x49, 0x64, 0x70, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x71, 0x75, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x22, 0xb6, 0x01, 0x0a, 0x0e, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, + 0x65, 0x79, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x44, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x56, 0x69, - 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, - 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, - 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, + 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x98, 0x02, + 0x0a, 0x0b, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x36, 0x0a, + 0x17, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, + 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x12, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, + 0x64, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x70, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, - 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xce, 0x02, 0x0a, - 0x0f, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x56, 0x69, 0x65, 0x77, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x70, - 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x69, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x28, 0x0a, - 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x64, 0x70, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x64, 0x70, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x55, 0x73, 0x65, 0x72, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, 0xa1, 0x01, 0x0a, 0x12, 0x4c, 0x6f, 0x67, + 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x36, 0x0a, 0x17, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x15, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x50, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2c, + 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x5f, 0x69, 0x64, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x70, 0x22, 0x3c, 0x0a, 0x0d, + 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x12, 0x2b, 0x0a, + 0x0d, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x69, + 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x22, 0xa7, 0x01, 0x0a, 0x0e, 0x49, + 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, 0x2e, 0x0a, + 0x0d, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0xc8, 0x01, + 0x52, 0x0b, 0x69, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x65, 0x0a, + 0x11, 0x69, 0x64, 0x70, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, + 0x02, 0x20, 0x00, 0x52, 0x0f, 0x69, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x0b, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x70, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x5b, 0x0a, 0x11, 0x69, 0x64, 0x70, 0x5f, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x69, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x54, 0x79, 0x70, 0x65, 0x22, 0xb6, 0x02, 0x0a, 0x0f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x75, 0x73, 0x65, + 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x70, + 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, + 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, - 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, 0x81, 0x01, - 0x0a, 0x18, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x2a, 0x58, 0x0a, 0x0c, 0x49, 0x61, 0x6d, 0x53, 0x65, 0x74, 0x75, 0x70, 0x53, 0x74, 0x65, - 0x70, 0x12, 0x1c, 0x0a, 0x18, 0x69, 0x61, 0x6d, 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, 0x5f, 0x73, - 0x74, 0x65, 0x70, 0x5f, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x14, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, 0x5f, 0x73, 0x74, 0x65, - 0x70, 0x5f, 0x31, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x5f, 0x73, 0x65, 0x74, - 0x75, 0x70, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x32, 0x10, 0x02, 0x2a, 0xaf, 0x01, 0x0a, 0x09, - 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x53, 0x45, - 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x53, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, - 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x55, 0x53, - 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, - 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x53, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x53, 0x45, - 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x04, 0x12, - 0x15, 0x0a, 0x11, 0x55, 0x53, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x55, 0x53, - 0x50, 0x45, 0x4e, 0x44, 0x10, 0x05, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x53, 0x45, 0x52, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x10, 0x06, 0x2a, 0x58, 0x0a, - 0x06, 0x47, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x12, 0x47, 0x45, 0x4e, 0x44, 0x45, - 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x11, 0x0a, 0x0d, 0x47, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x46, 0x45, 0x4d, 0x41, 0x4c, 0x45, - 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x4d, 0x41, 0x4c, - 0x45, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x47, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x44, 0x49, - 0x56, 0x45, 0x52, 0x53, 0x45, 0x10, 0x03, 0x2a, 0x41, 0x0a, 0x0e, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x41, 0x43, - 0x48, 0x49, 0x4e, 0x45, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, - 0x4b, 0x45, 0x59, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x01, 0x2a, 0x8d, 0x02, 0x0a, 0x0d, 0x55, - 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x19, - 0x55, 0x53, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x55, - 0x53, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x53, 0x45, - 0x52, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x55, 0x53, 0x45, 0x52, - 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, - 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x55, 0x53, 0x45, 0x52, 0x53, 0x45, - 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, - 0x45, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x55, 0x53, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, - 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x4e, 0x49, 0x43, 0x4b, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x04, - 0x12, 0x1e, 0x0a, 0x1a, 0x55, 0x53, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, - 0x59, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x05, - 0x12, 0x17, 0x0a, 0x13, 0x55, 0x53, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, - 0x59, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x53, 0x45, - 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x10, 0x07, 0x12, 0x16, 0x0a, 0x12, 0x55, 0x53, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, - 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x08, 0x2a, 0xea, 0x02, 0x0a, 0x0c, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x17, 0x0a, 0x13, 0x53, - 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x45, 0x51, 0x55, 0x41, - 0x4c, 0x53, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, - 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x53, 0x5f, 0x57, 0x49, 0x54, 0x48, - 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, 0x54, 0x48, - 0x4f, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, 0x02, 0x12, 0x23, 0x0a, - 0x1f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x45, 0x51, - 0x55, 0x41, 0x4c, 0x53, 0x5f, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x45, - 0x10, 0x03, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, 0x54, 0x48, - 0x4f, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x53, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x49, - 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x45, 0x10, 0x04, 0x12, 0x25, 0x0a, 0x21, - 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x43, 0x4f, 0x4e, - 0x54, 0x41, 0x49, 0x4e, 0x53, 0x5f, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x5f, 0x43, 0x41, 0x53, - 0x45, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, 0x54, - 0x48, 0x4f, 0x44, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x06, - 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, - 0x5f, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x07, 0x12, + 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, 0x86, + 0x01, 0x0a, 0x0f, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x56, 0x69, + 0x65, 0x77, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x70, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xa7, 0x02, 0x0a, 0x19, 0x49, 0x64, 0x70, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x47, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, + 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x22, 0x48, 0x0a, 0x18, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x61, 0x0a, 0x18, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xa7, + 0x02, 0x0a, 0x19, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x47, 0x0a, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x56, 0x69, 0x65, 0x77, 0x52, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x53, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x76, 0x69, 0x65, 0x77, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xce, 0x02, 0x0a, 0x0f, 0x45, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x56, 0x69, 0x65, 0x77, 0x12, 0x17, 0x0a, 0x07, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, + 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, + 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x64, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x64, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3b, + 0x0a, 0x1a, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x17, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, + 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x18, 0x45, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0xdb, 0x02, + 0x0a, 0x18, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, + 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x61, 0x73, + 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x68, 0x61, 0x73, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x12, 0x23, + 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x75, 0x70, 0x70, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x55, 0x70, 0x70, 0x65, 0x72, 0x63, + 0x61, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, 0x53, 0x79, 0x6d, 0x62, 0x6f, + 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x3f, 0x0a, + 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, + 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, 0xc8, 0x01, 0x0a, 0x1f, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, + 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x23, + 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x63, + 0x61, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x75, 0x70, 0x70, 0x65, 0x72, + 0x63, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x55, + 0x70, 0x70, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, + 0x73, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, 0x73, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, + 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x22, 0xf9, 0x02, 0x0a, 0x1c, 0x50, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x4c, 0x6f, 0x77, 0x65, + 0x72, 0x63, 0x61, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x75, 0x70, 0x70, + 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, + 0x73, 0x55, 0x70, 0x70, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, + 0x73, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x68, 0x61, 0x73, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, + 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, + 0x61, 0x73, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, + 0x64, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, + 0x74, 0x65, 0x22, 0xf9, 0x01, 0x0a, 0x11, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, + 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x20, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, + 0x61, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, + 0x6d, 0x61, 0x78, 0x41, 0x67, 0x65, 0x44, 0x61, 0x79, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x78, + 0x70, 0x69, 0x72, 0x65, 0x5f, 0x77, 0x61, 0x72, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x57, 0x61, 0x72, 0x6e, + 0x44, 0x61, 0x79, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, + 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, 0x66, + 0x0a, 0x18, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x6d, 0x61, + 0x78, 0x5f, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x41, 0x67, 0x65, 0x44, 0x61, 0x79, 0x73, 0x12, 0x28, 0x0a, 0x10, + 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x77, 0x61, 0x72, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x57, 0x61, + 0x72, 0x6e, 0x44, 0x61, 0x79, 0x73, 0x22, 0x97, 0x02, 0x0a, 0x15, 0x50, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, + 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x20, 0x0a, 0x0c, 0x6d, 0x61, + 0x78, 0x5f, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x41, 0x67, 0x65, 0x44, 0x61, 0x79, 0x73, 0x12, 0x28, 0x0a, 0x10, + 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x77, 0x61, 0x72, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x57, 0x61, + 0x72, 0x6e, 0x44, 0x61, 0x79, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, + 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, + 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, + 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, + 0x22, 0x86, 0x02, 0x0a, 0x15, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, + 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, + 0x78, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x30, 0x0a, + 0x14, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x66, 0x61, + 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x68, 0x6f, + 0x77, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x22, 0x73, 0x0a, 0x1c, 0x50, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, + 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0b, 0x6d, 0x61, 0x78, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, + 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x66, 0x61, 0x69, + 0x6c, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x68, 0x6f, 0x77, + 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x22, 0xa4, + 0x02, 0x0a, 0x19, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, + 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x18, 0x0a, 0x07, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x74, + 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61, + 0x78, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x68, 0x6f, + 0x77, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x6f, 0x63, + 0x6b, 0x6f, 0x75, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, + 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, + 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x44, 0x61, 0x74, 0x65, 0x2a, 0x58, 0x0a, 0x0c, 0x49, 0x61, 0x6d, 0x53, 0x65, 0x74, 0x75, + 0x70, 0x53, 0x74, 0x65, 0x70, 0x12, 0x1c, 0x0a, 0x18, 0x69, 0x61, 0x6d, 0x5f, 0x73, 0x65, 0x74, + 0x75, 0x70, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x69, 0x61, 0x6d, 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, + 0x5f, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x31, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x69, 0x61, 0x6d, + 0x5f, 0x73, 0x65, 0x74, 0x75, 0x70, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x32, 0x10, 0x02, 0x2a, + 0xaf, 0x01, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x19, 0x0a, + 0x15, 0x55, 0x53, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x53, 0x45, 0x52, + 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x16, + 0x0a, 0x12, 0x55, 0x53, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x41, 0x43, + 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x53, 0x45, 0x52, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x14, 0x0a, + 0x10, 0x55, 0x53, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x4b, 0x45, + 0x44, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x53, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x53, 0x55, 0x53, 0x50, 0x45, 0x4e, 0x44, 0x10, 0x05, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x53, + 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x10, + 0x06, 0x2a, 0x58, 0x0a, 0x06, 0x47, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x12, 0x47, + 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x47, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x46, 0x45, + 0x4d, 0x41, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x45, 0x4e, 0x44, 0x45, 0x52, + 0x5f, 0x4d, 0x41, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x47, 0x45, 0x4e, 0x44, 0x45, + 0x52, 0x5f, 0x44, 0x49, 0x56, 0x45, 0x52, 0x53, 0x45, 0x10, 0x03, 0x2a, 0x41, 0x0a, 0x0e, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, + 0x16, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x41, 0x43, + 0x48, 0x49, 0x4e, 0x45, 0x4b, 0x45, 0x59, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x01, 0x2a, 0x8d, + 0x02, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, + 0x12, 0x1d, 0x0a, 0x19, 0x55, 0x53, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, + 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x1b, 0x0a, 0x17, 0x55, 0x53, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, + 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, + 0x55, 0x53, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x49, + 0x52, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x55, 0x53, + 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x4c, 0x41, 0x53, 0x54, + 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x55, 0x53, 0x45, 0x52, 0x53, + 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x4e, 0x49, 0x43, 0x4b, 0x5f, 0x4e, 0x41, + 0x4d, 0x45, 0x10, 0x04, 0x12, 0x1e, 0x0a, 0x1a, 0x55, 0x53, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, + 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x5f, 0x4e, 0x41, + 0x4d, 0x45, 0x10, 0x05, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x53, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, + 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x06, 0x12, 0x17, 0x0a, + 0x13, 0x55, 0x53, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x10, 0x07, 0x12, 0x16, 0x0a, 0x12, 0x55, 0x53, 0x45, 0x52, 0x53, 0x45, + 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x08, 0x2a, 0xea, + 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, + 0x17, 0x0a, 0x13, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, + 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x45, 0x41, 0x52, + 0x43, 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x53, 0x5f, + 0x57, 0x49, 0x54, 0x48, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, + 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, + 0x02, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, + 0x44, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x5f, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x5f, + 0x43, 0x41, 0x53, 0x45, 0x10, 0x03, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, + 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x53, 0x5f, 0x57, 0x49, + 0x54, 0x48, 0x5f, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x45, 0x10, 0x04, + 0x12, 0x25, 0x0a, 0x21, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, + 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x5f, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, + 0x5f, 0x43, 0x41, 0x53, 0x45, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, 0x41, 0x52, 0x43, + 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x51, 0x55, 0x41, + 0x4c, 0x53, 0x10, 0x06, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, + 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, + 0x4e, 0x10, 0x07, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, 0x54, + 0x48, 0x4f, 0x44, 0x5f, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x08, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, - 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x08, 0x12, 0x1a, 0x0a, 0x16, 0x53, - 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x49, 0x53, 0x5f, 0x4f, - 0x4e, 0x45, 0x5f, 0x4f, 0x46, 0x10, 0x09, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x45, 0x41, 0x52, 0x43, - 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4e, - 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, 0x0a, 0x2a, 0x44, 0x0a, 0x07, 0x4d, 0x66, 0x61, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x46, 0x41, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4d, - 0x46, 0x41, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x4d, 0x53, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, - 0x4d, 0x46, 0x41, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x54, 0x50, 0x10, 0x02, 0x2a, 0x66, 0x0a, - 0x08, 0x4d, 0x46, 0x41, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x46, 0x41, - 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x4d, 0x46, 0x41, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x4e, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4d, - 0x46, 0x41, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x02, 0x12, - 0x14, 0x0a, 0x10, 0x4d, 0x46, 0x41, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, - 0x56, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x48, 0x0a, 0x10, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x4e, 0x4f, 0x54, - 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4d, - 0x41, 0x49, 0x4c, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x4d, 0x53, 0x10, 0x01, 0x2a, - 0x75, 0x0a, 0x0b, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1b, - 0x0a, 0x17, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x50, - 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, - 0x45, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x17, 0x0a, - 0x13, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, - 0x45, 0x54, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x50, 0x0a, 0x08, 0x4f, 0x72, 0x67, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x4f, 0x52, 0x47, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, - 0x4f, 0x52, 0x47, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, - 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4f, 0x52, 0x47, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, - 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x2a, 0x85, 0x01, 0x0a, 0x17, 0x4f, 0x72, 0x67, - 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x4f, 0x52, 0x47, 0x44, 0x4f, 0x4d, 0x41, 0x49, - 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x20, 0x0a, - 0x1c, 0x4f, 0x52, 0x47, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x10, 0x01, 0x12, - 0x1f, 0x0a, 0x1b, 0x4f, 0x52, 0x47, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, - 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x4e, 0x53, 0x10, 0x02, - 0x2a, 0x57, 0x0a, 0x12, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x1e, 0x4f, 0x52, 0x47, 0x44, 0x4f, 0x4d, - 0x41, 0x49, 0x4e, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x4f, 0x52, + 0x49, 0x53, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x4f, 0x46, 0x10, 0x09, 0x12, 0x1e, 0x0a, 0x1a, 0x53, + 0x45, 0x41, 0x52, 0x43, 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, + 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, 0x0a, 0x2a, 0x44, 0x0a, 0x07, 0x4d, + 0x66, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x46, 0x41, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x0f, 0x0a, 0x0b, 0x4d, 0x46, 0x41, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x4d, 0x53, 0x10, 0x01, + 0x12, 0x0f, 0x0a, 0x0b, 0x4d, 0x46, 0x41, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x54, 0x50, 0x10, + 0x02, 0x2a, 0x66, 0x0a, 0x08, 0x4d, 0x46, 0x41, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, + 0x14, 0x4d, 0x46, 0x41, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x4d, 0x46, 0x41, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x01, 0x12, + 0x12, 0x0a, 0x0e, 0x4d, 0x46, 0x41, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, + 0x59, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x46, 0x41, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x48, 0x0a, 0x10, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, + 0x16, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x4e, 0x4f, 0x54, + 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x4d, + 0x53, 0x10, 0x01, 0x2a, 0x75, 0x0a, 0x0b, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x16, 0x0a, 0x12, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, + 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x4f, 0x4c, 0x49, 0x43, + 0x59, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, + 0x02, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x50, 0x0a, 0x08, 0x4f, 0x72, + 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x4f, 0x52, 0x47, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x13, 0x0a, 0x0f, 0x4f, 0x52, 0x47, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, + 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4f, 0x52, 0x47, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x2a, 0x85, 0x01, 0x0a, + 0x17, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x4f, 0x52, 0x47, 0x44, + 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x20, 0x0a, 0x1c, 0x4f, 0x52, 0x47, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x56, 0x41, + 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x48, 0x54, 0x54, + 0x50, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x4f, 0x52, 0x47, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, + 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, + 0x4e, 0x53, 0x10, 0x02, 0x2a, 0x57, 0x0a, 0x12, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x1e, 0x4f, 0x52, 0x47, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, - 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x10, 0x01, 0x2a, 0xbb, 0x01, 0x0a, 0x12, 0x4f, 0x72, - 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, - 0x12, 0x22, 0x0a, 0x1e, 0x4f, 0x52, 0x47, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, - 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x4f, 0x52, 0x47, 0x4d, 0x45, 0x4d, 0x42, 0x45, - 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, - 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x4f, 0x52, 0x47, 0x4d, 0x45, - 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x4c, 0x41, - 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x4f, 0x52, 0x47, - 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, - 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x03, 0x12, 0x1e, 0x0a, 0x1a, 0x4f, 0x52, 0x47, 0x4d, 0x45, - 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x53, - 0x45, 0x52, 0x5f, 0x49, 0x44, 0x10, 0x04, 0x2a, 0x57, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x1c, 0x50, - 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, - 0x1d, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, - 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, - 0x2a, 0x60, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, - 0x0a, 0x13, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, - 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x50, 0x52, 0x4f, 0x4a, 0x45, - 0x43, 0x54, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, - 0x10, 0x02, 0x2a, 0x81, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, - 0x6c, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x20, 0x50, - 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, - 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x52, 0x4f, 0x4c, 0x45, - 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x01, 0x12, - 0x25, 0x0a, 0x21, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x45, - 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x5f, - 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x02, 0x2a, 0xf9, 0x01, 0x0a, 0x16, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, - 0x79, 0x12, 0x26, 0x0a, 0x22, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x4d, 0x45, 0x4d, 0x42, - 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x4f, - 0x4a, 0x45, 0x43, 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, - 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, - 0x12, 0x24, 0x0a, 0x20, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, - 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x5f, - 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, - 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, - 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x03, 0x12, 0x22, 0x0a, 0x1e, 0x50, 0x52, 0x4f, 0x4a, - 0x45, 0x43, 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, - 0x45, 0x59, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x49, 0x44, 0x10, 0x04, 0x12, 0x24, 0x0a, 0x20, - 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, - 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4e, 0x41, 0x4d, 0x45, - 0x10, 0x05, 0x2a, 0x50, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, - 0x0a, 0x14, 0x41, 0x50, 0x50, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x50, 0x50, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x15, 0x0a, - 0x11, 0x41, 0x50, 0x50, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, - 0x56, 0x45, 0x10, 0x02, 0x2a, 0x1b, 0x0a, 0x0b, 0x4f, 0x49, 0x44, 0x43, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x49, 0x44, 0x43, 0x56, 0x31, 0x5f, 0x30, 0x10, - 0x00, 0x2a, 0x71, 0x0a, 0x10, 0x4f, 0x49, 0x44, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x4f, 0x49, 0x44, 0x43, 0x52, 0x45, 0x53, - 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x00, - 0x12, 0x1d, 0x0a, 0x19, 0x4f, 0x49, 0x44, 0x43, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0x01, 0x12, - 0x23, 0x0a, 0x1f, 0x4f, 0x49, 0x44, 0x43, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x5f, 0x54, 0x4f, 0x4b, - 0x45, 0x4e, 0x10, 0x02, 0x2a, 0x72, 0x0a, 0x0d, 0x4f, 0x49, 0x44, 0x43, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x20, 0x4f, 0x49, 0x44, 0x43, 0x47, 0x52, 0x41, - 0x4e, 0x54, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x4f, - 0x49, 0x44, 0x43, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4d, 0x50, - 0x4c, 0x49, 0x43, 0x49, 0x54, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x4f, 0x49, 0x44, 0x43, 0x47, - 0x52, 0x41, 0x4e, 0x54, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x46, 0x52, 0x45, 0x53, 0x48, - 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0x02, 0x2a, 0x76, 0x0a, 0x13, 0x4f, 0x49, 0x44, 0x43, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x1b, 0x0a, 0x17, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x57, 0x45, 0x42, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, - 0x4f, 0x49, 0x44, 0x43, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x10, 0x01, - 0x12, 0x1e, 0x0a, 0x1a, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, - 0x2a, 0x6c, 0x0a, 0x12, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x55, - 0x54, 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, - 0x49, 0x43, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x55, 0x54, 0x48, - 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x10, - 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x55, 0x54, 0x48, 0x4d, 0x45, 0x54, - 0x48, 0x4f, 0x44, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x2a, 0x5f, - 0x0a, 0x14, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x20, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x45, 0x52, 0x41, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, - 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x45, 0x41, 0x52, 0x43, - 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x50, 0x50, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x2a, - 0x74, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, - 0x52, 0x41, 0x4e, 0x54, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x4a, 0x45, - 0x43, 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, - 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, - 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, - 0x49, 0x56, 0x45, 0x10, 0x02, 0x2a, 0x8a, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, - 0x25, 0x0a, 0x21, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, - 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, - 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, - 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x22, - 0x0a, 0x1e, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x45, - 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, - 0x10, 0x02, 0x2a, 0x9c, 0x02, 0x0a, 0x1b, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, - 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, - 0x65, 0x79, 0x12, 0x2b, 0x0a, 0x27, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, - 0x4e, 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, - 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x2a, 0x0a, 0x26, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x4d, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, + 0x0a, 0x19, 0x4f, 0x52, 0x47, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x53, 0x45, 0x41, 0x52, 0x43, + 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x10, 0x01, 0x2a, 0xbb, 0x01, + 0x0a, 0x12, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x4b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x1e, 0x4f, 0x52, 0x47, 0x4d, 0x45, 0x4d, 0x42, 0x45, + 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x4f, 0x52, 0x47, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x46, - 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x50, - 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, - 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x5f, - 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, + 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x4f, + 0x52, 0x47, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, + 0x59, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x1c, 0x0a, + 0x18, 0x4f, 0x52, 0x47, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, + 0x4b, 0x45, 0x59, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x03, 0x12, 0x1e, 0x0a, 0x1a, 0x4f, + 0x52, 0x47, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, + 0x59, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x49, 0x44, 0x10, 0x04, 0x2a, 0x57, 0x0a, 0x10, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, + 0x20, 0x0a, 0x1c, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, + 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x53, 0x45, 0x41, 0x52, + 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4e, 0x41, + 0x4d, 0x45, 0x10, 0x01, 0x2a, 0x60, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x50, + 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x41, 0x43, + 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x2a, 0x81, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, + 0x24, 0x0a, 0x20, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x45, + 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, + 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x4b, 0x45, + 0x59, 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x52, 0x4f, + 0x4c, 0x45, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x44, 0x49, 0x53, 0x50, + 0x4c, 0x41, 0x59, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x02, 0x2a, 0xf9, 0x01, 0x0a, 0x16, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x22, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, + 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, + 0x21, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, + 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4e, 0x41, + 0x4d, 0x45, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x4d, + 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x4c, + 0x41, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x52, + 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, + 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x03, 0x12, 0x22, 0x0a, 0x1e, + 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, + 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x49, 0x44, 0x10, 0x04, + 0x12, 0x24, 0x0a, 0x20, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, + 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, + 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x05, 0x2a, 0x50, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x50, 0x50, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, + 0x41, 0x50, 0x50, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, + 0x01, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x50, 0x50, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, + 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x2a, 0x1b, 0x0a, 0x0b, 0x4f, 0x49, 0x44, 0x43, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x49, 0x44, 0x43, 0x56, + 0x31, 0x5f, 0x30, 0x10, 0x00, 0x2a, 0x71, 0x0a, 0x10, 0x4f, 0x49, 0x44, 0x43, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x4f, 0x49, 0x44, + 0x43, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, + 0x44, 0x45, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x4f, 0x49, 0x44, 0x43, 0x52, 0x45, 0x53, 0x50, + 0x4f, 0x4e, 0x53, 0x45, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x4f, 0x4b, 0x45, + 0x4e, 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x4f, 0x49, 0x44, 0x43, 0x52, 0x45, 0x53, 0x50, 0x4f, + 0x4e, 0x53, 0x45, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, + 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0x02, 0x2a, 0x72, 0x0a, 0x0d, 0x4f, 0x49, 0x44, 0x43, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x20, 0x4f, 0x49, 0x44, + 0x43, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x4f, + 0x52, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x00, 0x12, + 0x1a, 0x0a, 0x16, 0x4f, 0x49, 0x44, 0x43, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x4f, + 0x49, 0x44, 0x43, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x46, + 0x52, 0x45, 0x53, 0x48, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0x02, 0x2a, 0x76, 0x0a, 0x13, + 0x4f, 0x49, 0x44, 0x43, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x50, 0x50, 0x4c, 0x49, + 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x57, 0x45, 0x42, 0x10, 0x00, + 0x12, 0x22, 0x0a, 0x1e, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x47, 0x45, + 0x4e, 0x54, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x50, 0x50, 0x4c, + 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x54, 0x49, + 0x56, 0x45, 0x10, 0x02, 0x2a, 0x6c, 0x0a, 0x12, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x75, 0x74, 0x68, + 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x4f, 0x49, + 0x44, 0x43, 0x41, 0x55, 0x54, 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x4f, 0x49, 0x44, 0x43, + 0x41, 0x55, 0x54, 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, + 0x4f, 0x53, 0x54, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x55, 0x54, + 0x48, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, + 0x10, 0x02, 0x2a, 0x5f, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x20, 0x41, 0x50, + 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x45, 0x52, 0x41, 0x43, 0x48, 0x4b, + 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x21, 0x0a, 0x1d, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, + 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x50, 0x50, 0x5f, 0x4e, 0x41, 0x4d, + 0x45, 0x10, 0x01, 0x2a, 0x74, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, + 0x61, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x50, 0x52, 0x4f, 0x4a, + 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x50, + 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x50, 0x52, 0x4f, + 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, + 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x2a, 0x8a, 0x01, 0x0a, 0x15, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x4b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, + 0x41, 0x4e, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x50, 0x52, + 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, + 0x4b, 0x45, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, + 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, + 0x4e, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x52, 0x4f, 0x4c, 0x45, + 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x02, 0x2a, 0x9c, 0x02, 0x0a, 0x1b, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x2b, 0x0a, 0x27, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, - 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x03, 0x12, 0x27, 0x0a, - 0x23, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x4d, 0x45, 0x4d, - 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x53, 0x45, - 0x52, 0x5f, 0x49, 0x44, 0x10, 0x04, 0x12, 0x29, 0x0a, 0x25, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, - 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, - 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, - 0x05, 0x2a, 0x68, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x55, 0x53, 0x45, 0x52, 0x47, 0x52, 0x41, 0x4e, 0x54, - 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x53, 0x45, 0x52, 0x47, 0x52, 0x41, 0x4e, 0x54, - 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x1b, - 0x0a, 0x17, 0x55, 0x53, 0x45, 0x52, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x2a, 0xdc, 0x01, 0x0a, 0x12, - 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, - 0x65, 0x79, 0x12, 0x22, 0x0a, 0x1e, 0x55, 0x53, 0x45, 0x52, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, - 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x55, 0x53, 0x45, 0x52, 0x47, 0x52, - 0x41, 0x4e, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x50, 0x52, 0x4f, - 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x44, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x55, 0x53, 0x45, - 0x52, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, - 0x55, 0x53, 0x45, 0x52, 0x5f, 0x49, 0x44, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x55, 0x53, 0x45, - 0x52, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, - 0x4f, 0x52, 0x47, 0x5f, 0x49, 0x44, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x55, 0x53, 0x45, 0x52, - 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x52, - 0x4f, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x04, 0x12, 0x1f, 0x0a, 0x1b, 0x55, 0x53, 0x45, - 0x52, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, - 0x47, 0x52, 0x41, 0x4e, 0x54, 0x5f, 0x49, 0x44, 0x10, 0x05, 0x2a, 0x8b, 0x01, 0x0a, 0x17, 0x55, - 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x23, 0x55, 0x53, 0x45, 0x52, 0x4d, 0x45, - 0x4d, 0x42, 0x45, 0x52, 0x53, 0x48, 0x49, 0x50, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, - 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x20, 0x0a, 0x1c, 0x55, 0x53, 0x45, 0x52, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x48, 0x49, - 0x50, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, - 0x01, 0x12, 0x25, 0x0a, 0x21, 0x55, 0x53, 0x45, 0x52, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, - 0x48, 0x49, 0x50, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x4f, 0x42, 0x4a, - 0x45, 0x43, 0x54, 0x5f, 0x49, 0x44, 0x10, 0x02, 0x2a, 0x7b, 0x0a, 0x0a, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, - 0x16, 0x0a, 0x12, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x52, - 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x4d, 0x45, 0x4d, 0x42, 0x45, - 0x52, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x47, 0x52, - 0x41, 0x4e, 0x54, 0x10, 0x03, 0x2a, 0x62, 0x0a, 0x08, 0x49, 0x64, 0x70, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x44, 0x50, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x44, 0x50, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, - 0x49, 0x44, 0x50, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, - 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x2a, 0x79, 0x0a, 0x10, 0x4f, 0x49, 0x44, - 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x20, 0x0a, - 0x1c, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x46, 0x49, 0x45, 0x4c, - 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x27, 0x0a, 0x23, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x46, 0x49, - 0x45, 0x4c, 0x44, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x45, 0x52, 0x52, 0x45, 0x44, 0x5f, 0x55, 0x53, - 0x45, 0x52, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x49, 0x44, 0x43, - 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x45, 0x4d, 0x41, - 0x49, 0x4c, 0x10, 0x02, 0x2a, 0x83, 0x01, 0x0a, 0x0c, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x44, 0x50, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x44, 0x50, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, - 0x4b, 0x45, 0x59, 0x5f, 0x49, 0x44, 0x50, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x49, - 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x44, 0x50, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, - 0x4b, 0x45, 0x59, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x44, - 0x50, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, - 0x44, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x03, 0x2a, 0x46, 0x0a, 0x07, 0x49, 0x64, - 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x44, 0x50, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, - 0x0a, 0x0c, 0x49, 0x44, 0x50, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x49, 0x44, 0x43, 0x10, 0x01, - 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x44, 0x50, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x41, 0x4d, 0x4c, - 0x10, 0x02, 0x2a, 0x67, 0x0a, 0x0f, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x44, 0x50, 0x50, 0x52, 0x4f, 0x56, - 0x49, 0x44, 0x45, 0x52, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x44, 0x50, 0x50, 0x52, 0x4f, - 0x56, 0x49, 0x44, 0x45, 0x52, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, - 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x44, 0x50, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, - 0x52, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x52, 0x47, 0x10, 0x02, 0x2a, 0x5a, 0x0a, 0x0b, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x52, - 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x52, 0x4f, 0x4a, 0x45, - 0x43, 0x54, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x57, 0x4e, 0x45, 0x44, 0x10, 0x01, 0x12, 0x17, - 0x0a, 0x13, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x52, - 0x41, 0x4e, 0x54, 0x45, 0x44, 0x10, 0x02, 0x32, 0xa9, 0xb5, 0x01, 0x0a, 0x11, 0x4d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4b, - 0x0a, 0x07, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x0a, 0x12, 0x08, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x12, 0x47, 0x0a, 0x05, 0x52, - 0x65, 0x61, 0x64, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x0e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x08, 0x12, 0x06, 0x2f, 0x72, - 0x65, 0x61, 0x64, 0x79, 0x12, 0x4e, 0x0a, 0x08, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x44, 0x10, 0x00, 0x12, 0x2a, 0x0a, 0x26, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, + 0x41, 0x4e, 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, + 0x45, 0x59, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, + 0x29, 0x0a, 0x25, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x4d, + 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x4c, + 0x41, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, + 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, + 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, + 0x03, 0x12, 0x27, 0x0a, 0x23, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, 0x4e, + 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, + 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x49, 0x44, 0x10, 0x04, 0x12, 0x29, 0x0a, 0x25, 0x50, 0x52, + 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, + 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4e, + 0x41, 0x4d, 0x45, 0x10, 0x05, 0x2a, 0x68, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x55, 0x53, 0x45, 0x52, 0x47, + 0x52, 0x41, 0x4e, 0x54, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x53, 0x45, 0x52, 0x47, + 0x52, 0x41, 0x4e, 0x54, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, + 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x55, 0x53, 0x45, 0x52, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x2a, + 0xdc, 0x01, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x1e, 0x55, 0x53, 0x45, 0x52, 0x47, 0x52, + 0x41, 0x4e, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x55, 0x53, + 0x45, 0x52, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, + 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x44, 0x10, 0x01, 0x12, 0x1e, 0x0a, + 0x1a, 0x55, 0x53, 0x45, 0x52, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, + 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x49, 0x44, 0x10, 0x02, 0x12, 0x1d, 0x0a, + 0x19, 0x55, 0x53, 0x45, 0x52, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, + 0x4b, 0x45, 0x59, 0x5f, 0x4f, 0x52, 0x47, 0x5f, 0x49, 0x44, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, + 0x55, 0x53, 0x45, 0x52, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, + 0x45, 0x59, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x04, 0x12, 0x1f, 0x0a, + 0x1b, 0x55, 0x53, 0x45, 0x52, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, + 0x4b, 0x45, 0x59, 0x5f, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x5f, 0x49, 0x44, 0x10, 0x05, 0x2a, 0x8b, + 0x01, 0x0a, 0x17, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, + 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x23, 0x55, 0x53, + 0x45, 0x52, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x48, 0x49, 0x50, 0x53, 0x45, 0x41, 0x52, + 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, 0x55, 0x53, 0x45, 0x52, 0x4d, 0x45, 0x4d, 0x42, 0x45, + 0x52, 0x53, 0x48, 0x49, 0x50, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x55, 0x53, 0x45, 0x52, 0x4d, 0x45, 0x4d, + 0x42, 0x45, 0x52, 0x53, 0x48, 0x49, 0x50, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, + 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x49, 0x44, 0x10, 0x02, 0x2a, 0x7b, 0x0a, 0x0a, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x45, + 0x4d, 0x42, 0x45, 0x52, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x53, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x4d, + 0x45, 0x4d, 0x42, 0x45, 0x52, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, + 0x54, 0x5f, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x10, 0x03, 0x2a, 0x62, 0x0a, 0x08, 0x49, 0x64, 0x70, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x44, 0x50, 0x43, 0x4f, 0x4e, 0x46, + 0x49, 0x47, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x44, 0x50, 0x43, 0x4f, 0x4e, 0x46, + 0x49, 0x47, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, + 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x44, 0x50, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x2a, 0x79, 0x0a, + 0x10, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x12, 0x20, 0x0a, 0x1c, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, + 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x27, 0x0a, 0x23, 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x41, 0x50, 0x50, 0x49, + 0x4e, 0x47, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x45, 0x52, 0x52, 0x45, + 0x44, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, + 0x4f, 0x49, 0x44, 0x43, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x46, 0x49, 0x45, 0x4c, 0x44, + 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x02, 0x2a, 0x83, 0x01, 0x0a, 0x0c, 0x49, 0x64, 0x70, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x44, 0x50, + 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x44, 0x50, 0x53, 0x45, + 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x49, 0x44, 0x50, 0x5f, 0x43, 0x4f, 0x4e, 0x46, + 0x49, 0x47, 0x5f, 0x49, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x44, 0x50, 0x53, 0x45, + 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x1e, + 0x0a, 0x1a, 0x49, 0x44, 0x50, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x4b, 0x45, 0x59, 0x5f, 0x50, + 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x03, 0x2a, 0x46, + 0x0a, 0x07, 0x49, 0x64, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x44, 0x50, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x44, 0x50, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x49, + 0x44, 0x43, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x44, 0x50, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x53, 0x41, 0x4d, 0x4c, 0x10, 0x02, 0x2a, 0x67, 0x0a, 0x0f, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x44, 0x50, + 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x44, + 0x50, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x59, + 0x53, 0x54, 0x45, 0x4d, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x44, 0x50, 0x50, 0x52, 0x4f, + 0x56, 0x49, 0x44, 0x45, 0x52, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x52, 0x47, 0x10, 0x02, 0x2a, + 0x5a, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, + 0x0a, 0x17, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x50, + 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x57, 0x4e, 0x45, 0x44, + 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x45, 0x44, 0x10, 0x02, 0x32, 0xc4, 0xb9, 0x01, 0x0a, + 0x11, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x4b, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x10, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x12, + 0x47, 0x0a, 0x05, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x0e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x08, + 0x12, 0x06, 0x2f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x12, 0x4e, 0x0a, 0x08, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x6c, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x5a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x22, + 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2f, 0x64, 0x6f, 0x63, 0x73, 0x12, 0x66, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x22, 0x11, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x12, 0x09, 0x2f, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x6c, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x5a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2b, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x5a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x22, 0x15, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2f, 0x64, 0x6f, - 0x63, 0x73, 0x12, 0x66, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x49, 0x61, 0x6d, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x61, 0x6d, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x06, 0x12, 0x04, 0x2f, 0x69, 0x61, 0x6d, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x61, 0x75, 0x74, - 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x9e, 0x01, 0x0a, 0x0c, 0x49, - 0x73, 0x55, 0x73, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x75, 0x73, 0x65, - 0x72, 0x73, 0x2f, 0x5f, 0x69, 0x73, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x82, 0xb5, 0x18, 0x0b, - 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x83, 0x01, 0x0a, 0x0b, - 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x44, 0x12, 0x26, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x44, 0x1a, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x22, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, - 0x64, 0x12, 0xa9, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x12, 0x29, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x56, - 0x69, 0x65, 0x77, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x67, 0x6c, - 0x6f, 0x62, 0x61, 0x6c, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x5f, 0x62, 0x79, 0x6c, 0x6f, - 0x67, 0x69, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x9e, 0x01, - 0x0a, 0x0b, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x31, 0x2e, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x61, 0x6d, 0x22, 0x1f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x06, 0x12, 0x04, 0x2f, 0x69, 0x61, 0x6d, 0x82, 0xb5, 0x18, 0x0f, 0x0a, + 0x0d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x9e, + 0x01, 0x0a, 0x0c, 0x49, 0x73, 0x55, 0x73, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, + 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, + 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x5f, 0x69, 0x73, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, + 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, + 0x83, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x49, 0x44, 0x12, + 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x56, 0x69, 0x65, + 0x77, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x75, 0x73, 0x65, 0x72, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xa9, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x42, 0x79, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x47, 0x6c, 0x6f, 0x62, + 0x61, 0x6c, 0x12, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x28, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x75, - 0x73, 0x65, 0x72, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, - 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x90, - 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x31, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x22, 0x06, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x3a, 0x01, - 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x12, 0x9a, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x55, 0x73, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x2c, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1c, 0x1a, 0x17, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, - 0x5f, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, - 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x9a, - 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x73, 0x65, 0x72, 0x56, 0x69, 0x65, 0x77, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, + 0x1a, 0x2f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x5f, + 0x62, 0x79, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xb5, 0x18, 0x12, 0x0a, + 0x10, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x72, 0x65, 0x61, + 0x64, 0x12, 0x9e, 0x01, 0x0a, 0x0b, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, + 0x73, 0x12, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x1a, - 0x17, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x72, 0x65, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, - 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x08, - 0x4c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, + 0x22, 0x0e, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x12, 0x90, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0b, 0x22, 0x06, 0x2f, 0x75, 0x73, 0x65, + 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x9a, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x1a, 0x11, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, - 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x92, 0x01, 0x0a, - 0x0a, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x44, 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x1a, 0x13, 0x2f, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x3a, 0x01, - 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x12, 0x72, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, - 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x2a, 0x0b, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0d, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x91, 0x01, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x1a, 0x17, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, + 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x12, 0x9a, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0x2a, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xae, 0x01, 0x0a, 0x0d, 0x41, 0x64, - 0x64, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x34, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, - 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, - 0x22, 0x15, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x97, 0x01, 0x0a, 0x10, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x12, - 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x20, 0x2a, 0x1e, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, - 0x5f, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x12, 0xbf, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x37, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2f, 0x5f, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xab, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x4b, 0x65, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x56, 0x69, 0x65, 0x77, 0x22, 0x35, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2f, 0x7b, 0x6b, 0x65, - 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x72, 0x65, 0x61, 0x64, 0x12, 0x95, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, - 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, - 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x82, 0xb5, 0x18, - 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xaa, 0x01, 0x0a, - 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x12, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, + 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1c, 0x1a, 0x17, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x2f, 0x5f, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, + 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, + 0x8e, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, - 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x18, 0x1a, 0x13, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x70, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, - 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x0c, 0x47, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x44, 0x1a, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x56, 0x69, 0x65, - 0x77, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x82, 0xb5, 0x18, 0x0b, - 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x95, 0x01, 0x0a, 0x12, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x55, 0x73, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x39, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x55, 0x73, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x6e, - 0x61, 0x6d, 0x65, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x12, 0xa2, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x55, 0x73, - 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x36, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, - 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x65, 0x72, 0x49, 0x44, 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x1a, 0x11, 0x2f, 0x75, 0x73, 0x65, + 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x3a, 0x01, 0x2a, + 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x12, 0x92, 0x01, 0x0a, 0x0a, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, + 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x16, 0x1a, 0x11, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, - 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x9f, 0x01, 0x0a, 0x1b, 0x52, 0x65, 0x73, - 0x65, 0x6e, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x69, 0x6c, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x1a, 0x13, 0x2f, + 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x75, 0x6e, 0x6c, 0x6f, + 0x63, 0x6b, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x72, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, + 0x73, 0x65, 0x72, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x2a, 0x0b, 0x2f, 0x75, 0x73, + 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0d, 0x0a, 0x0b, 0x75, 0x73, + 0x65, 0x72, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x91, 0x01, 0x0a, 0x0b, 0x55, 0x73, + 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x73, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x75, 0x73, 0x65, 0x72, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x82, 0xb5, + 0x18, 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xae, 0x01, + 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x12, + 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x41, 0x64, 0x64, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, + 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x97, + 0x01, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x4b, 0x65, 0x79, 0x12, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x49, + 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x2a, 0x1e, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2f, + 0x7b, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, + 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xbf, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x37, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x4b, 0x65, 0x79, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x75, 0x73, 0x65, 0x72, + 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x73, + 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0b, 0x0a, + 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xab, 0x01, 0x0a, 0x0d, 0x47, + 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x33, 0x2e, 0x63, + 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x56, 0x69, 0x65, + 0x77, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x75, 0x73, 0x65, 0x72, + 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x65, 0x79, 0x73, + 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x95, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x26, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x49, 0x44, 0x1a, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x56, 0x69, 0x65, 0x77, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x75, + 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, + 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x2e, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x1a, 0x13, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, + 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x8f, 0x01, + 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x26, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, + 0x6c, 0x56, 0x69, 0x65, 0x77, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, + 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, + 0x95, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x55, 0x73, 0x65, 0x72, 0x55, 0x73, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, + 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x16, 0x12, 0x14, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x75, + 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xa2, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x36, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x2c, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x1a, 0x11, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, + 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x9f, 0x01, 0x0a, + 0x1b, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x69, 0x6c, 0x12, 0x26, 0x2e, 0x63, + 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x40, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x25, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x2f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x2f, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x76, + 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x01, 0x2a, 0x82, 0xb5, + 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x8f, + 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, + 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x68, 0x6f, + 0x6e, 0x65, 0x56, 0x69, 0x65, 0x77, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, + 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x68, 0x6f, 0x6e, + 0x65, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x12, 0xa2, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, + 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x36, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, + 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, + 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x1a, + 0x11, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x68, 0x6f, + 0x6e, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x7c, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x55, + 0x73, 0x65, 0x72, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, - 0x22, 0x25, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x6d, - 0x61, 0x69, 0x6c, 0x2f, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x76, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x0c, 0x47, - 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x26, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x44, 0x1a, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, + 0x2a, 0x11, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x68, + 0x6f, 0x6e, 0x65, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x12, 0x9f, 0x01, 0x0a, 0x1b, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x50, 0x68, + 0x6f, 0x6e, 0x65, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x56, 0x69, - 0x65, 0x77, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x75, 0x73, 0x65, - 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x82, 0xb5, 0x18, - 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xa2, 0x01, 0x0a, - 0x0f, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x68, 0x6f, 0x6e, 0x65, - 0x12, 0x36, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x68, 0x6f, 0x6e, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x68, - 0x6f, 0x6e, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x1a, 0x11, 0x2f, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x3a, 0x01, - 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x12, 0x7c, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, - 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x2a, 0x11, 0x2f, 0x75, - 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x82, - 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, - 0x9f, 0x01, 0x0a, 0x1b, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x25, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x2f, 0x5f, 0x72, 0x65, 0x73, 0x65, - 0x6e, 0x64, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x01, - 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x12, 0x95, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x2f, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, - 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x22, 0x2a, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x2f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x1a, 0x13, - 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x12, 0x34, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x1a, 0x13, 0x2f, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x12, 0xce, 0x01, 0x0a, 0x16, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, - 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x73, 0x12, 0x38, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x49, 0x44, 0x50, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x25, 0x2f, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x72, 0x65, 0x61, 0x64, 0x12, 0xbf, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x45, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x12, 0x38, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x58, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x42, 0x2a, 0x40, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, - 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x4d, 0x66, 0x61, 0x73, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, - 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x2c, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x27, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x2f, 0x6d, 0x66, 0x61, 0x73, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xbb, 0x01, 0x0a, 0x1b, 0x53, 0x65, 0x6e, 0x64, 0x53, 0x65, - 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x44, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x22, 0x29, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x5f, 0x73, 0x65, 0x6e, - 0x64, 0x73, 0x65, 0x74, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x12, 0x9a, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x69, - 0x61, 0x6c, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x2f, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x2f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x3a, 0x01, 0x2a, - 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x12, 0xdd, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x73, 0x12, 0x3b, 0x2e, 0x63, 0x61, 0x6f, + 0x70, 0x74, 0x79, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x25, 0x2f, 0x75, 0x73, + 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x2f, 0x5f, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, + 0x1a, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, + 0x77, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x75, 0x73, 0x65, 0x72, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x82, 0xb5, + 0x18, 0x0b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xaa, 0x01, + 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, + 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x18, 0x1a, 0x13, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, + 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x12, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x1a, + 0x13, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xce, 0x01, 0x0a, 0x16, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, + 0x50, 0x73, 0x12, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, + 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, + 0x25, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x5f, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x75, + 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xbf, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x12, 0x38, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x50, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x58, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x2a, 0x40, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, + 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x0b, 0x47, + 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x66, 0x61, 0x73, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x16, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, - 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x2e, 0x72, 0x65, 0x61, 0x64, - 0x12, 0xa8, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x2f, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x82, 0xb5, 0x18, 0x0d, 0x0a, 0x0b, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xb7, 0x01, 0x0a, 0x22, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x38, 0x2e, 0x63, 0x61, 0x6f, + 0x49, 0x44, 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x73, + 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x66, 0x61, 0x73, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, + 0x75, 0x73, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xbb, 0x01, 0x0a, 0x1b, 0x53, 0x65, + 0x6e, 0x64, 0x53, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x22, 0x29, 0x2f, 0x75, 0x73, 0x65, 0x72, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, + 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x73, 0x65, 0x74, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x9a, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x2f, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, + 0x20, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x12, 0xdd, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, + 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x73, 0x12, 0x3b, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x29, 0x22, 0x24, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x73, 0x2f, + 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x16, 0x0a, 0x14, + 0x75, 0x73, 0x65, 0x72, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x12, 0x84, 0x01, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, + 0x72, 0x67, 0x12, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x0a, 0x22, 0x05, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, + 0x0a, 0x6f, 0x72, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x0a, + 0x4f, 0x72, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x2f, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x82, 0xb5, 0x18, 0x0d, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xd7, 0x01, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, - 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x2f, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, - 0x0e, 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, - 0xd7, 0x01, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x12, 0x3e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x1a, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x3b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x23, 0x1a, 0x1e, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x78, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xaf, 0x01, 0x0a, 0x1e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3a, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x73, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x6f, 0x72, 0x67, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x82, 0xb5, + 0x18, 0x0a, 0x0a, 0x08, 0x6f, 0x72, 0x67, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x6b, 0x0a, 0x08, + 0x47, 0x65, 0x74, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x2a, 0x1e, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x14, - 0x47, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x31, 0x2e, 0x63, + 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x56, 0x69, 0x65, 0x77, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x0a, 0x12, 0x08, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x82, 0xb5, 0x18, 0x0a, 0x0a, + 0x08, 0x6f, 0x72, 0x67, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x9c, 0x01, 0x0a, 0x14, 0x47, 0x65, + 0x74, 0x4f, 0x72, 0x67, 0x42, 0x79, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x47, 0x6c, 0x6f, 0x62, + 0x61, 0x6c, 0x12, 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x56, + 0x69, 0x65, 0x77, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x67, 0x6c, + 0x6f, 0x62, 0x61, 0x6c, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x5f, 0x62, 0x79, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x82, 0xb5, 0x18, 0x11, 0x0a, 0x0f, 0x6f, 0x72, 0x67, 0x2e, 0x67, 0x6c, 0x6f, + 0x62, 0x61, 0x6c, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x7e, 0x0a, 0x0f, 0x44, 0x65, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, + 0x1a, 0x14, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x5f, 0x64, 0x65, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x6f, + 0x72, 0x67, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x7e, 0x0a, 0x0f, 0x52, 0x65, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, + 0x1a, 0x14, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x5f, 0x72, 0x65, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x6f, + 0x72, 0x67, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xb8, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, + 0x36, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, + 0x6d, 0x65, 0x2f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0a, 0x0a, 0x08, 0x6f, 0x72, 0x67, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x12, 0x9c, 0x01, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x4d, 0x79, 0x4f, 0x72, 0x67, + 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x4f, 0x72, 0x67, 0x44, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, + 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, + 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, + 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x6f, 0x72, 0x67, 0x2e, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x12, 0xdf, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, + 0x79, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x3b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x45, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x22, 0x2b, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x7d, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x6f, 0x72, 0x67, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x12, 0xad, 0x01, 0x0a, 0x13, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, - 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, - 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x61, 0x67, 0x65, - 0x82, 0xb5, 0x18, 0x0d, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x61, - 0x64, 0x12, 0xbb, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x37, 0x2e, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x44, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, + 0x2f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x7d, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x6f, 0x72, 0x67, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x12, 0xa3, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x4d, 0x79, 0x50, 0x72, + 0x69, 0x6d, 0x61, 0x72, 0x79, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x37, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x22, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, + 0x65, 0x2f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x7d, 0x2f, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x82, 0xb5, 0x18, 0x0b, 0x0a, + 0x09, 0x6f, 0x72, 0x67, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x11, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x12, 0x36, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, + 0x6d, 0x65, 0x2f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x7d, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x6f, 0x72, 0x67, 0x2e, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x49, + 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, + 0x65, 0x77, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x6f, 0x72, 0x67, + 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x69, 0x61, 0x6d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x82, 0xb5, + 0x18, 0x0f, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x64, 0x12, 0x8d, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, + 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x82, 0xb5, 0x18, 0x11, + 0x0a, 0x0f, 0x6f, 0x72, 0x67, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, + 0x64, 0x12, 0xa3, 0x01, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x6f, + 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x3a, 0x01, + 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x6f, 0x72, 0x67, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xb3, 0x01, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x36, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x1a, 0x1a, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, + 0x6d, 0x65, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x6f, 0x72, 0x67, + 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x9e, 0x01, + 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x36, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x72, 0x67, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x6f, 0x72, + 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x13, 0x0a, 0x11, 0x6f, 0x72, 0x67, + 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xbf, + 0x01, 0x0a, 0x12, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x36, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, + 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, + 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x11, 0x0a, + 0x0f, 0x6f, 0x72, 0x67, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x12, 0x9a, 0x01, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0x30, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x82, 0xb5, 0x18, 0x0e, 0x0a, + 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xad, 0x01, + 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x12, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, + 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x93, 0x01, + 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x79, 0x49, 0x44, 0x12, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, - 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1c, 0x22, 0x17, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x61, 0x67, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, - 0x0e, 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, - 0xbb, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x37, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x1a, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, - 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x1a, - 0x17, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x61, 0x67, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, - 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x9a, 0x01, - 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x44, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, - 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x73, 0x2f, 0x61, 0x67, 0x65, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x9f, 0x01, 0x0a, 0x18, 0x47, - 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, - 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x35, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, - 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x73, 0x2f, 0x6c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x82, 0xb5, 0x18, 0x0d, 0x0a, - 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xcb, 0x01, 0x0a, - 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, - 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3b, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x35, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1b, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x6c, 0x6f, - 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xcb, 0x01, 0x0a, 0x1b, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, - 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3b, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x35, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x38, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x1a, 0x1b, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, - 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x6c, 0x6f, 0x63, 0x6b, - 0x6f, 0x75, 0x74, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xa6, 0x01, 0x0a, 0x1b, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, - 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x37, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, - 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1d, 0x2a, 0x1b, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x2f, 0x6c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x82, 0xb5, - 0x18, 0x0f, 0x0a, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x12, 0x84, 0x01, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x12, - 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4f, 0x72, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x22, 0x05, - 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0c, 0x0a, 0x0a, 0x6f, 0x72, - 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x0a, 0x4f, 0x72, 0x67, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, - 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, - 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x82, 0xb5, 0x18, 0x0a, 0x0a, - 0x08, 0x6f, 0x72, 0x67, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x6b, 0x0a, 0x08, 0x47, 0x65, 0x74, - 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x27, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, - 0x72, 0x67, 0x56, 0x69, 0x65, 0x77, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, - 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x82, 0xb5, 0x18, 0x0a, 0x0a, 0x08, 0x6f, 0x72, - 0x67, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x9c, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4f, 0x72, - 0x67, 0x42, 0x79, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x12, - 0x26, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x56, 0x69, 0x65, 0x77, - 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x67, 0x6c, 0x6f, 0x62, 0x61, - 0x6c, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x5f, 0x62, 0x79, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, - 0x82, 0xb5, 0x18, 0x11, 0x0a, 0x0f, 0x6f, 0x72, 0x67, 0x2e, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, - 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x7e, 0x0a, 0x0f, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x1a, 0x14, 0x2f, - 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x5f, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x6f, 0x72, 0x67, 0x2e, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x7e, 0x0a, 0x0f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x1a, 0x14, 0x2f, - 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x5f, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x6f, 0x72, 0x67, 0x2e, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xb8, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x36, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, - 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, - 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, - 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0a, 0x0a, 0x08, 0x6f, 0x72, 0x67, 0x2e, 0x72, 0x65, 0x61, 0x64, - 0x12, 0x9c, 0x01, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x12, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x6f, 0x72, - 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x3a, 0x01, 0x2a, - 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x6f, 0x72, 0x67, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, - 0xdf, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x4f, 0x72, - 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x3a, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, - 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x30, 0x22, 0x2b, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x64, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x7d, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, - 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x6f, 0x72, 0x67, 0x2e, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x12, 0xad, 0x01, 0x0a, 0x13, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x79, - 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x44, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x7d, 0x2f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x3a, - 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x6f, 0x72, 0x67, 0x2e, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x12, 0xa3, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x4d, 0x79, 0x50, 0x72, 0x69, 0x6d, 0x61, - 0x72, 0x79, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x37, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x24, 0x22, 0x22, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x64, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x7d, 0x2f, - 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x6f, 0x72, - 0x67, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x36, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x72, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x30, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, - 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x7d, - 0x82, 0xb5, 0x18, 0x0b, 0x0a, 0x09, 0x6f, 0x72, 0x67, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, - 0x88, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2c, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, - 0x72, 0x67, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x2d, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x69, 0x61, - 0x6d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x61, 0x75, 0x74, - 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x8d, 0x01, 0x0a, 0x11, 0x47, - 0x65, 0x74, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, - 0x12, 0x13, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, - 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x82, 0xb5, 0x18, 0x11, 0x0a, 0x0f, 0x6f, 0x72, 0x67, 0x2e, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xa3, 0x01, 0x0a, 0x0e, 0x41, - 0x64, 0x64, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x33, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x64, 0x64, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x31, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, - 0x6f, 0x72, 0x67, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x12, 0xb3, 0x01, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x79, 0x4f, 0x72, 0x67, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x36, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, - 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, - 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1f, 0x1a, 0x1a, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, - 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x6f, 0x72, 0x67, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x9e, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x36, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, - 0x82, 0xb5, 0x18, 0x13, 0x0a, 0x11, 0x6f, 0x72, 0x67, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xbf, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x4d, 0x79, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x36, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, - 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x67, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, - 0x65, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x11, 0x0a, 0x0f, 0x6f, 0x72, 0x67, 0x2e, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x9a, 0x01, 0x0a, 0x0e, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x73, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x73, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xad, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x35, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x93, 0x01, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x42, 0x79, 0x49, 0x44, 0x12, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, - 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x44, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x56, 0x69, 0x65, 0x77, 0x22, 0x2c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x02, 0x49, 0x64, 0x12, 0x98, 0x01, 0x0a, - 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x34, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x28, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x22, 0x09, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x10, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0xa0, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, - 0x1a, 0x0e, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x13, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x02, 0x49, 0x64, 0x12, 0xa5, 0x01, 0x0a, 0x11, 0x44, - 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x1a, 0x27, 0x2e, 0x63, 0x61, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x56, 0x69, 0x65, 0x77, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, + 0x12, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, + 0x02, 0x49, 0x64, 0x12, 0x98, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x1a, 0x1a, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x64, 0x65, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x13, 0x0a, - 0x0d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x02, - 0x49, 0x64, 0x12, 0xa5, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x49, 0x44, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3c, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1f, 0x1a, 0x1a, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x13, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x02, 0x49, 0x64, 0x12, 0x82, 0x01, 0x0a, 0x0d, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x29, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x2a, 0x0e, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x14, 0x0a, 0x0e, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x02, 0x49, 0x64, 0x12, - 0xc7, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, - 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x3b, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x6a, 0x65, 0x63, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x22, 0x09, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x10, 0x0a, 0x0e, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0xa0, + 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x34, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x5f, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xbe, 0x01, 0x0a, 0x15, 0x47, 0x65, - 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, - 0x79, 0x49, 0x44, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x49, 0x44, 0x1a, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x56, 0x69, 0x65, 0x77, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x12, 0x29, 0x2f, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x9d, 0x01, 0x0a, 0x15, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, - 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x32, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, - 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x72, 0x6f, 0x6c, 0x65, - 0x73, 0x82, 0xb5, 0x18, 0x15, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xe6, 0x01, 0x0a, 0x14, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x12, 0x3a, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x3b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x26, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, - 0xb5, 0x18, 0x20, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x49, 0x64, 0x12, 0xb4, 0x01, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x64, 0x64, 0x1a, 0x2d, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1b, 0x22, 0x16, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1a, - 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x02, 0x49, 0x64, 0x12, 0xc4, 0x01, 0x0a, 0x13, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x1a, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, + 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x1a, 0x0e, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x13, 0x0a, 0x0d, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x02, 0x49, + 0x64, 0x12, 0xa5, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x1a, 0x20, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, + 0x49, 0x44, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1f, 0x1a, 0x1a, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, + 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x13, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x02, 0x49, 0x64, 0x12, 0xa5, 0x01, 0x0a, 0x11, 0x52, 0x65, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x1a, 0x1a, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x72, 0x65, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x13, 0x0a, 0x0d, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x02, 0x49, + 0x64, 0x12, 0x82, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x2a, 0x0e, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, + 0x18, 0x14, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x12, 0x02, 0x49, 0x64, 0x12, 0xc7, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x12, 0x3b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1d, 0x22, 0x18, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, + 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x12, 0xbe, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x79, 0x49, 0x44, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x30, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x56, 0x69, 0x65, 0x77, 0x22, 0x43, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2b, 0x12, 0x29, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, + 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x72, 0x65, 0x61, + 0x64, 0x12, 0x9d, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, + 0x17, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x82, 0xb5, 0x18, 0x15, 0x0a, 0x13, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, + 0x64, 0x12, 0xe6, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x3a, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x26, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x20, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, + 0x09, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xb4, 0x01, 0x0a, 0x10, 0x41, + 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x64, + 0x64, 0x1a, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1a, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x02, 0x49, - 0x64, 0x12, 0xab, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, + 0x64, 0x12, 0xc4, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x2a, 0x20, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, - 0x82, 0xb5, 0x18, 0x1b, 0x0a, 0x15, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x02, 0x49, 0x64, 0x12, - 0xdc, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, - 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x39, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x1a, 0x2d, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x49, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x1a, 0x20, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1a, 0x0a, 0x14, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x12, 0x02, 0x49, 0x64, 0x12, 0xab, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x65, - 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1e, - 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x72, - 0x65, 0x61, 0x64, 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xaa, - 0x01, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, - 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x47, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x2a, 0x20, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x1b, 0x0a, 0x15, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x12, 0x02, 0x49, 0x64, 0x12, 0xdc, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x38, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1e, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x6f, + 0x6c, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x18, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x02, + 0x49, 0x64, 0x12, 0xa3, 0x01, 0x0a, 0x12, 0x42, 0x75, 0x6c, 0x6b, 0x41, 0x64, 0x64, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x42, 0x75, 0x6c, 0x6b, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x6f, + 0x6c, 0x65, 0x73, 0x2f, 0x5f, 0x62, 0x75, 0x6c, 0x6b, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x18, + 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x12, 0x02, 0x49, 0x64, 0x12, 0xb6, 0x01, 0x0a, 0x11, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x31, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x41, 0x64, - 0x64, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x22, 0x3b, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x82, - 0xb5, 0x18, 0x18, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x72, 0x6f, 0x6c, - 0x65, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x02, 0x49, 0x64, 0x12, 0xa3, 0x01, 0x0a, 0x12, - 0x42, 0x75, 0x6c, 0x6b, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, - 0x6c, 0x65, 0x12, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x41, - 0x64, 0x64, 0x42, 0x75, 0x6c, 0x6b, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x41, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1a, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x5f, 0x62, 0x75, - 0x6c, 0x6b, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x18, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x22, 0x41, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x1a, 0x1a, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x6b, 0x65, + 0x79, 0x7d, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x18, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x02, 0x49, - 0x64, 0x12, 0xb6, 0x01, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6a, + 0x64, 0x12, 0x9f, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, + 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, + 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x82, 0xb5, 0x18, 0x19, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, + 0x02, 0x49, 0x64, 0x12, 0xe2, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x1a, - 0x1a, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, - 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x3a, 0x01, 0x2a, 0x82, 0xb5, - 0x18, 0x18, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x72, 0x6f, 0x6c, 0x65, - 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x02, 0x49, 0x64, 0x12, 0x9f, 0x01, 0x0a, 0x11, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, - 0x12, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3f, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x82, - 0xb5, 0x18, 0x19, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x72, 0x6f, 0x6c, - 0x65, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x02, 0x49, 0x64, 0x12, 0xe2, 0x01, 0x0a, - 0x12, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, - 0x22, 0x2b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x22, 0x2b, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x5f, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1d, 0x0a, 0x10, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x09, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xc4, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x49, 0x44, 0x12, 0x2d, 0x2e, 0x63, + 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x1a, 0x2f, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x22, 0x51, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, + 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, + 0x18, 0x1d, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, + 0xb8, 0x01, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0x4a, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x73, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x73, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xd2, 0x01, 0x0a, 0x15, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, + 0x22, 0x28, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, - 0x82, 0xb5, 0x18, 0x1d, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x64, 0x12, 0xc4, 0x01, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x42, 0x79, 0x49, 0x44, 0x12, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6f, 0x69, 0x64, 0x63, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, + 0x1e, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, + 0xca, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x44, 0x1a, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x69, 0x65, 0x77, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, + 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x1a, 0x28, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x1d, 0x0a, 0x10, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x09, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xb8, 0x01, 0x0a, 0x12, 0x41, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, - 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0x4a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, - 0x2c, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x73, 0x65, - 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x82, 0xb5, 0x18, - 0x12, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, - 0x65, 0x61, 0x64, 0x12, 0xd2, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x49, - 0x44, 0x43, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, - 0x49, 0x44, 0x43, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x28, 0x2f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6f, - 0x69, 0x64, 0x63, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1e, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x09, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xca, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x55, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x1a, 0x28, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1e, 0x0a, 0x11, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xd6, 0x01, 0x0a, + 0x15, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x1a, 0x34, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1e, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xd6, 0x01, 0x0a, 0x15, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, + 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xd6, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, @@ -19164,474 +18821,644 @@ var file_management_proto_rawDesc = []byte{ 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x1a, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x64, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1e, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xd6, - 0x01, 0x0a, 0x15, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x1a, 0x34, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1e, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x09, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xaf, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x2a, 0x28, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x1f, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x09, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xe9, 0x01, 0x0a, 0x1b, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, - 0x49, 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x2a, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, - 0x43, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x1a, - 0x3f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6f, 0x69, 0x64, 0x63, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1e, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xef, 0x01, 0x0a, 0x1a, 0x52, 0x65, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x4f, 0x49, 0x44, 0x43, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x12, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x69, 0x74, 0x65, 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xaf, + 0x01, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x44, 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x22, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x1a, 0x47, 0x2f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x2f, 0x6f, 0x69, 0x64, 0x63, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x5f, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1e, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x09, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xe1, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, - 0x39, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x63, 0x61, 0x6f, + 0x6e, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x53, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2a, 0x2a, 0x28, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, + 0x1f, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, + 0x12, 0xe9, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x49, 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x1a, 0x2a, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x6c, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x1a, 0x3f, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6f, 0x69, 0x64, + 0x63, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1e, 0x0a, 0x11, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xef, 0x01, 0x0a, + 0x1a, 0x52, 0x65, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4f, 0x49, 0x44, 0x43, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x2d, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x25, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x5f, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1f, 0x0a, 0x12, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x64, - 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xb8, 0x01, 0x0a, 0x10, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x42, 0x79, 0x49, 0x44, - 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x44, - 0x1a, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x56, 0x69, - 0x65, 0x77, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, - 0x18, 0x14, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xb9, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x32, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, + 0x1a, 0x47, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x6f, 0x69, 0x64, 0x63, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1e, + 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0xe1, + 0x01, 0x0a, 0x13, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x39, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x3a, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x22, - 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x15, 0x0a, 0x13, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x12, 0xbe, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x2c, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x22, 0x46, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x27, 0x1a, 0x22, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x15, 0x0a, 0x13, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x12, 0xca, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2e, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x2c, - 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x22, 0x52, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x33, 0x1a, 0x2e, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x15, 0x0a, 0x13, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x12, 0xca, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x50, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x25, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, + 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, + 0xb5, 0x18, 0x1f, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, + 0x6e, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x09, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x64, 0x12, 0xb8, 0x01, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, + 0x61, 0x6e, 0x74, 0x42, 0x79, 0x49, 0x44, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x56, 0x69, 0x65, 0x77, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x24, 0x12, 0x22, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x14, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xb9, 0x01, + 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x12, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, + 0x82, 0xb5, 0x18, 0x15, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, + 0x61, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xbe, 0x01, 0x0a, 0x12, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x12, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x1a, 0x22, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, + 0x2a, 0x82, 0xb5, 0x18, 0x15, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, + 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xca, 0x01, 0x0a, 0x16, 0x44, + 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, + 0x61, 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, + 0x61, 0x6e, 0x74, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x1a, 0x2e, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, + 0x5f, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, + 0x18, 0x15, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, + 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xca, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x49, 0x44, 0x1a, 0x2c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x1a, 0x2e, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x72, 0x65, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x15, 0x0a, + 0x13, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x12, 0xa2, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x2c, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x33, 0x1a, 0x2e, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x15, 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xa2, 0x01, - 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x44, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x24, 0x2a, 0x22, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x16, 0x0a, 0x14, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x12, 0xb4, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, - 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x37, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, - 0x65, 0x73, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x82, 0xb5, 0x18, 0x1b, 0x0a, 0x19, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x82, 0x02, 0x0a, 0x19, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x3f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x62, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x3d, 0x22, 0x38, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, - 0xb5, 0x18, 0x1b, 0x0a, 0x19, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xdf, - 0x01, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x35, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x64, 0x64, 0x1a, - 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x22, 0x5b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x30, 0x2f, 0x70, 0x72, + 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x2a, 0x22, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, - 0x82, 0xb5, 0x18, 0x1c, 0x0a, 0x1a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, - 0x61, 0x6e, 0x74, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x12, 0xef, 0x01, 0x0a, 0x18, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x38, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x1a, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x65, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x3f, 0x1a, 0x3a, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x3a, - 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1c, 0x0a, 0x1a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x12, 0xd1, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, - 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x63, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x2a, 0x3a, 0x2f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x1d, 0x0a, 0x1b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xba, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x36, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, - 0x18, 0x11, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x72, - 0x65, 0x61, 0x64, 0x12, 0xa6, 0x01, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x42, 0x79, 0x49, 0x44, 0x12, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x49, 0x44, 0x1a, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x56, 0x69, 0x65, - 0x77, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x11, 0x0a, 0x0f, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xa7, 0x01, 0x0a, - 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x12, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x1a, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x22, 0x38, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, - 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xac, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x29, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x1a, 0x1c, - 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x82, - 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xb8, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2b, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x29, 0x2e, 0x63, 0x61, 0x6f, - 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x1a, 0x28, 0x2f, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x64, 0x65, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x12, 0xb8, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x55, - 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x61, 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, - 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x1a, 0x28, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, - 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x0f, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, - 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x2a, 0x1c, 0x2f, 0x75, - 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, - 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x13, 0x0a, 0x11, - 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x12, 0x98, 0x01, 0x0a, 0x13, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x75, 0x6c, 0x6b, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x12, - 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x5f, 0x62, 0x75, - 0x6c, 0x6b, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x13, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x2e, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x87, 0x01, 0x0a, - 0x07, 0x49, 0x64, 0x70, 0x42, 0x79, 0x49, 0x44, 0x12, 0x25, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x49, 0x44, 0x1a, - 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x64, 0x70, 0x56, 0x69, 0x65, 0x77, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, - 0x12, 0x12, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x2e, 0x69, 0x64, - 0x70, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x9b, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x12, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, - 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x23, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, - 0x64, 0x70, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x6f, 0x72, 0x67, - 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x6f, 0x69, 0x64, 0x63, 0x3a, 0x01, - 0x2a, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x6f, 0x72, 0x67, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, - 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x1a, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, - 0x1a, 0x12, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x6f, 0x72, 0x67, - 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x9f, 0x01, 0x0a, 0x13, 0x44, - 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x25, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, - 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x49, 0x44, 0x1a, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, - 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x22, 0x3c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x1a, 0x1e, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, - 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x64, 0x65, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x6f, - 0x72, 0x67, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x9f, 0x01, 0x0a, - 0x13, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x49, 0x64, 0x70, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, - 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x49, 0x44, 0x1a, 0x23, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, - 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x1a, 0x1e, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, - 0x6d, 0x65, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x72, 0x65, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0f, 0x0a, - 0x0d, 0x6f, 0x72, 0x67, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x7f, - 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x25, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, + 0xb5, 0x18, 0x16, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, + 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xb4, 0x01, 0x0a, 0x1a, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x2a, 0x12, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, - 0x6d, 0x65, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0f, - 0x0a, 0x0d, 0x6f, 0x72, 0x67, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, - 0xba, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, - 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, - 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x2d, 0x2e, 0x63, - 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x69, - 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x3f, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x26, 0x1a, 0x21, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x69, 0x64, - 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6f, 0x69, 0x64, 0x63, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x6f, - 0x72, 0x67, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xa5, 0x01, 0x0a, - 0x0a, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x49, 0x64, 0x70, 0x73, 0x12, 0x30, 0x2e, 0x63, 0x61, - 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, - 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, - 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, - 0x6d, 0x65, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, - 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x2e, 0x69, 0x64, 0x70, 0x2e, - 0x72, 0x65, 0x61, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, - 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, - 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x69, - 0x6e, 0x82, 0xb5, 0x18, 0x0d, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, - 0x61, 0x64, 0x12, 0xa6, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67, - 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x64, 0x64, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, - 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, - 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xa3, 0x01, 0x0a, 0x11, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x12, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x2b, + 0x1a, 0x37, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x20, 0x12, 0x1e, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x61, + 0x6e, 0x74, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x72, 0x6f, 0x6c, 0x65, + 0x73, 0x82, 0xb5, 0x18, 0x1b, 0x0a, 0x19, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, + 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, + 0x12, 0x82, 0x02, 0x0a, 0x19, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x3f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x34, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1c, 0x1a, 0x17, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x82, - 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x12, 0x77, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x6e, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x40, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x62, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x22, 0x38, 0x2f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1b, 0x0a, 0x19, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xdf, 0x01, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x35, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x41, 0x64, 0x64, 0x1a, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x5b, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x35, 0x22, 0x30, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, + 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1c, 0x0a, 0x1a, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xef, 0x01, 0x0a, 0x18, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x1a, 0x32, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x1a, 0x3a, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x61, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x1c, 0x0a, 0x1a, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xd1, 0x01, 0x0a, 0x18, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x63, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, + 0x2a, 0x3a, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, + 0x7b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x1d, + 0x0a, 0x1b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xba, 0x01, + 0x0a, 0x10, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x73, 0x12, 0x36, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x75, 0x73, + 0x65, 0x72, 0x73, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x11, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x2e, + 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xa6, 0x01, 0x0a, 0x0d, 0x55, + 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x42, 0x79, 0x49, 0x44, 0x12, 0x2b, 0x2e, 0x63, + 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x56, 0x69, 0x65, 0x77, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, + 0x12, 0x1c, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, + 0x18, 0x11, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x12, 0xa7, 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, + 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x61, 0x6e, 0x74, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x75, 0x73, + 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, + 0x61, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x75, 0x73, 0x65, + 0x72, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xac, 0x01, + 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x1a, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x22, 0x3d, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x1a, 0x1c, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, + 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xb8, 0x01, 0x0a, + 0x13, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, + 0x44, 0x1a, 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x22, 0x49, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2d, 0x1a, 0x28, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x2f, 0x5f, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, + 0x2a, 0x82, 0xb5, 0x18, 0x12, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x61, 0x6e, + 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xb8, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, + 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x1a, 0x29, 0x2e, 0x63, + 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x1a, + 0x28, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x72, + 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x12, + 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3b, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1e, 0x2a, 0x1c, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x82, 0xb5, 0x18, 0x13, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x61, 0x6e, + 0x74, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x13, 0x42, 0x75, 0x6c, + 0x6b, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x12, 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x42, 0x75, 0x6c, 0x6b, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x34, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x12, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x67, 0x72, 0x61, + 0x6e, 0x74, 0x73, 0x2f, 0x5f, 0x62, 0x75, 0x6c, 0x6b, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x13, + 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x07, 0x49, 0x64, 0x70, 0x42, 0x79, 0x49, 0x44, 0x12, + 0x25, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x64, 0x70, 0x49, 0x44, 0x1a, 0x27, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x56, 0x69, 0x65, 0x77, 0x22, + 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, + 0x65, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0e, 0x0a, + 0x0c, 0x6f, 0x72, 0x67, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x9b, 0x01, + 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x12, + 0x33, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x1a, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x17, 0x22, 0x12, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x69, 0x64, 0x70, 0x73, + 0x2f, 0x6f, 0x69, 0x64, 0x63, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x6f, 0x72, + 0x67, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x0f, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x29, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x64, 0x70, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x23, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x22, + 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x1a, 0x12, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, + 0x65, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x82, 0xb5, + 0x18, 0x0f, 0x0a, 0x0d, 0x6f, 0x72, 0x67, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x12, 0x9f, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x49, 0x44, + 0x1a, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x64, 0x70, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x1a, 0x1e, 0x2f, + 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x2f, 0x5f, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, + 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x6f, 0x72, 0x67, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x12, 0x9f, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, + 0x49, 0x44, 0x1a, 0x23, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x1a, + 0x1e, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x2f, 0x5f, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, + 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x6f, 0x72, 0x67, 0x2e, 0x69, 0x64, 0x70, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x7f, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, + 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x49, 0x44, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x2a, + 0x12, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x6f, 0x72, 0x67, 0x2e, 0x69, 0x64, 0x70, + 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xba, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x33, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x1a, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, + 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x69, 0x64, 0x63, 0x49, 0x64, 0x70, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x1a, 0x21, 0x2f, 0x6f, 0x72, 0x67, + 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x70, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x6f, 0x69, 0x64, 0x63, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a, 0x01, 0x2a, + 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x6f, 0x72, 0x67, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x12, 0xa5, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x49, 0x64, + 0x70, 0x73, 0x12, 0x30, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, + 0x15, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x69, 0x64, 0x70, 0x73, 0x2f, 0x5f, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x6f, + 0x72, 0x67, 0x2e, 0x69, 0x64, 0x70, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x0e, + 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, - 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, - 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xdb, 0x01, 0x0a, 0x1a, 0x47, - 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x70, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, + 0x17, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, + 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x82, 0xb5, 0x18, 0x0d, 0x0a, 0x0b, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x97, 0x01, 0x0a, 0x15, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2f, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, + 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x22, 0x35, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x67, + 0x69, 0x6e, 0x82, 0xb5, 0x18, 0x0d, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, + 0x65, 0x61, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, + 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, + 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, + 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1c, 0x22, 0x17, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x82, 0xb5, + 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x32, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, + 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x1a, + 0x17, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, + 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, + 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x77, 0x0a, + 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x6f, 0x72, 0x67, + 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, + 0x67, 0x69, 0x6e, 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xdb, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x4c, 0x6f, + 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x39, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x31, 0x22, 0x2c, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2f, 0x69, 0x64, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0d, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x72, 0x65, 0x61, 0x64, 0x12, 0xbd, 0x01, 0x0a, 0x1b, 0x41, 0x64, 0x64, 0x49, 0x64, 0x70, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x41, 0x64, 0x64, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, + 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x6f, 0x72, 0x67, 0x73, + 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x67, + 0x69, 0x6e, 0x2f, 0x69, 0x64, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x3a, + 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x12, 0xb9, 0x01, 0x0a, 0x20, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, + 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x4c, 0x6f, + 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2d, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, - 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x22, 0x2c, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, - 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2f, - 0x69, 0x64, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x5f, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0d, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xbd, 0x01, 0x0a, 0x1b, 0x41, 0x64, 0x64, - 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x6f, 0x4c, 0x6f, 0x67, - 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x2a, 0x34, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, + 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x67, 0x69, + 0x6e, 0x2f, 0x69, 0x64, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x82, 0xb5, + 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x12, 0xb3, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x3c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x41, 0x64, 0x64, 0x1a, 0x2b, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, - 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, - 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, - 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2f, 0x69, 0x64, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xb9, 0x01, 0x0a, 0x20, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x49, 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x46, 0x72, - 0x6f, 0x6d, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2d, 0x2e, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, + 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, + 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x78, 0x69, 0x74, 0x79, 0x82, 0xb5, 0x18, 0x0d, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xbf, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x3c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, + 0x69, 0x65, 0x77, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x6f, 0x72, + 0x67, 0x73, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x82, 0xb5, 0x18, 0x0d, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xdf, 0x01, 0x0a, 0x1e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3f, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, + 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x25, + 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, + 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x78, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xdf, 0x01, 0x0a, 0x1e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3f, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, - 0x64, 0x70, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x1a, 0x16, 0x2e, 0x67, + 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, + 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, + 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, + 0x1a, 0x25, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x92, 0x01, 0x0a, + 0x1e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x2a, 0x25, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, + 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x74, 0x79, 0x82, 0xb5, + 0x18, 0x0f, 0x0a, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x12, 0x9e, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x35, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, + 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x20, 0x12, 0x1e, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x61, 0x67, + 0x65, 0x82, 0xb5, 0x18, 0x0d, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, + 0x61, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x35, 0x2e, 0x63, 0x61, 0x6f, + 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, 0x65, + 0x77, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x6f, 0x72, 0x67, 0x73, + 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, + 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x61, 0x67, 0x65, 0x82, 0xb5, + 0x18, 0x0d, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, + 0xc3, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x38, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, + 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, + 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, + 0x22, 0x1e, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x61, 0x67, 0x65, + 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xc3, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x12, 0x38, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, + 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x3b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x1a, 0x1e, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, + 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x2f, 0x61, 0x67, 0x65, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x17, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x41, 0x67, + 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x2a, + 0x1e, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, + 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x61, 0x67, 0x65, 0x82, + 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x39, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, + 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x69, + 0x65, 0x77, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x6f, 0x72, 0x67, + 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x6c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x82, 0xb5, + 0x18, 0x0d, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, + 0xb6, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x39, 0x2e, 0x63, 0x61, + 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x56, 0x69, 0x65, 0x77, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, + 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2f, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, + 0x6c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x82, 0xb5, 0x18, 0x0d, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x12, 0xd3, 0x01, 0x0a, 0x1b, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, + 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3c, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, + 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, + 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x3f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x2f, 0x6c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x3a, 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, + 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0xd3, + 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3c, + 0x2e, 0x63, 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, + 0x61, 0x6f, 0x73, 0x2e, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2e, 0x6d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x1a, 0x22, 0x2f, 0x6f, 0x72, + 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x70, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x6c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x3a, + 0x01, 0x2a, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x1b, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x2a, 0x34, 0x2f, 0x6f, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x2a, 0x22, 0x2f, 0x6f, 0x72, 0x67, 0x73, 0x2f, 0x6d, 0x65, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, - 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2f, 0x69, 0x64, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, - 0x64, 0x7d, 0x82, 0xb5, 0x18, 0x0e, 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x42, 0xc5, 0x01, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x61, 0x6f, 0x73, 0x2f, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, - 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x92, 0x41, 0x94, 0x01, 0x12, 0x47, 0x0a, 0x0e, 0x4d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x41, 0x50, 0x49, 0x22, 0x30, 0x12, 0x2e, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x61, 0x6f, 0x73, 0x2f, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2f, 0x70, 0x6b, - 0x67, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x32, 0x03, 0x30, 0x2e, - 0x31, 0x2a, 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x6c, 0x6f, 0x63, 0x6b, 0x6f, 0x75, 0x74, + 0x82, 0xb5, 0x18, 0x0f, 0x0a, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x42, 0xc5, 0x01, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x61, 0x6f, 0x73, 0x2f, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2f, + 0x70, 0x6b, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x92, 0x41, 0x94, 0x01, 0x12, 0x47, 0x0a, 0x0e, 0x4d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x41, 0x50, 0x49, 0x22, 0x30, 0x12, 0x2e, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x63, 0x61, 0x6f, 0x73, 0x2f, 0x7a, 0x69, 0x74, 0x61, 0x64, 0x65, 0x6c, 0x2f, 0x70, 0x6b, 0x67, + 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x32, 0x03, 0x30, 0x2e, 0x31, + 0x2a, 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -19647,7 +19474,7 @@ func file_management_proto_rawDescGZIP() []byte { } var file_management_proto_enumTypes = make([]protoimpl.EnumInfo, 38) -var file_management_proto_msgTypes = make([]protoimpl.MessageInfo, 175) +var file_management_proto_msgTypes = make([]protoimpl.MessageInfo, 172) var file_management_proto_goTypes = []interface{}{ (IamSetupStep)(0), // 0: caos.zitadel.management.api.v1.IamSetupStep (UserState)(0), // 1: caos.zitadel.management.api.v1.UserState @@ -19734,642 +19561,652 @@ var file_management_proto_goTypes = []interface{}{ (*MultiFactor)(nil), // 82: caos.zitadel.management.api.v1.MultiFactor (*PasswordRequest)(nil), // 83: caos.zitadel.management.api.v1.PasswordRequest (*SetPasswordNotificationRequest)(nil), // 84: caos.zitadel.management.api.v1.SetPasswordNotificationRequest - (*PasswordComplexityPolicyID)(nil), // 85: caos.zitadel.management.api.v1.PasswordComplexityPolicyID - (*PasswordComplexityPolicy)(nil), // 86: caos.zitadel.management.api.v1.PasswordComplexityPolicy - (*PasswordComplexityPolicyCreate)(nil), // 87: caos.zitadel.management.api.v1.PasswordComplexityPolicyCreate - (*PasswordComplexityPolicyUpdate)(nil), // 88: caos.zitadel.management.api.v1.PasswordComplexityPolicyUpdate - (*PasswordAgePolicyID)(nil), // 89: caos.zitadel.management.api.v1.PasswordAgePolicyID - (*PasswordAgePolicy)(nil), // 90: caos.zitadel.management.api.v1.PasswordAgePolicy - (*PasswordAgePolicyCreate)(nil), // 91: caos.zitadel.management.api.v1.PasswordAgePolicyCreate - (*PasswordAgePolicyUpdate)(nil), // 92: caos.zitadel.management.api.v1.PasswordAgePolicyUpdate - (*PasswordLockoutPolicyID)(nil), // 93: caos.zitadel.management.api.v1.PasswordLockoutPolicyID - (*PasswordLockoutPolicy)(nil), // 94: caos.zitadel.management.api.v1.PasswordLockoutPolicy - (*PasswordLockoutPolicyCreate)(nil), // 95: caos.zitadel.management.api.v1.PasswordLockoutPolicyCreate - (*PasswordLockoutPolicyUpdate)(nil), // 96: caos.zitadel.management.api.v1.PasswordLockoutPolicyUpdate - (*OrgIamPolicy)(nil), // 97: caos.zitadel.management.api.v1.OrgIamPolicy - (*OrgCreateRequest)(nil), // 98: caos.zitadel.management.api.v1.OrgCreateRequest - (*Org)(nil), // 99: caos.zitadel.management.api.v1.Org - (*OrgView)(nil), // 100: caos.zitadel.management.api.v1.OrgView - (*Domain)(nil), // 101: caos.zitadel.management.api.v1.Domain - (*OrgDomain)(nil), // 102: caos.zitadel.management.api.v1.OrgDomain - (*OrgDomainView)(nil), // 103: caos.zitadel.management.api.v1.OrgDomainView - (*AddOrgDomainRequest)(nil), // 104: caos.zitadel.management.api.v1.AddOrgDomainRequest - (*OrgDomainValidationRequest)(nil), // 105: caos.zitadel.management.api.v1.OrgDomainValidationRequest - (*OrgDomainValidationResponse)(nil), // 106: caos.zitadel.management.api.v1.OrgDomainValidationResponse - (*ValidateOrgDomainRequest)(nil), // 107: caos.zitadel.management.api.v1.ValidateOrgDomainRequest - (*PrimaryOrgDomainRequest)(nil), // 108: caos.zitadel.management.api.v1.PrimaryOrgDomainRequest - (*RemoveOrgDomainRequest)(nil), // 109: caos.zitadel.management.api.v1.RemoveOrgDomainRequest - (*OrgDomainSearchResponse)(nil), // 110: caos.zitadel.management.api.v1.OrgDomainSearchResponse - (*OrgDomainSearchRequest)(nil), // 111: caos.zitadel.management.api.v1.OrgDomainSearchRequest - (*OrgDomainSearchQuery)(nil), // 112: caos.zitadel.management.api.v1.OrgDomainSearchQuery - (*OrgMemberRoles)(nil), // 113: caos.zitadel.management.api.v1.OrgMemberRoles - (*OrgMember)(nil), // 114: caos.zitadel.management.api.v1.OrgMember - (*AddOrgMemberRequest)(nil), // 115: caos.zitadel.management.api.v1.AddOrgMemberRequest - (*ChangeOrgMemberRequest)(nil), // 116: caos.zitadel.management.api.v1.ChangeOrgMemberRequest - (*RemoveOrgMemberRequest)(nil), // 117: caos.zitadel.management.api.v1.RemoveOrgMemberRequest - (*OrgMemberSearchResponse)(nil), // 118: caos.zitadel.management.api.v1.OrgMemberSearchResponse - (*OrgMemberView)(nil), // 119: caos.zitadel.management.api.v1.OrgMemberView - (*OrgMemberSearchRequest)(nil), // 120: caos.zitadel.management.api.v1.OrgMemberSearchRequest - (*OrgMemberSearchQuery)(nil), // 121: caos.zitadel.management.api.v1.OrgMemberSearchQuery - (*ProjectCreateRequest)(nil), // 122: caos.zitadel.management.api.v1.ProjectCreateRequest - (*ProjectUpdateRequest)(nil), // 123: caos.zitadel.management.api.v1.ProjectUpdateRequest - (*ProjectSearchResponse)(nil), // 124: caos.zitadel.management.api.v1.ProjectSearchResponse - (*ProjectView)(nil), // 125: caos.zitadel.management.api.v1.ProjectView - (*ProjectSearchRequest)(nil), // 126: caos.zitadel.management.api.v1.ProjectSearchRequest - (*ProjectSearchQuery)(nil), // 127: caos.zitadel.management.api.v1.ProjectSearchQuery - (*Projects)(nil), // 128: caos.zitadel.management.api.v1.Projects - (*Project)(nil), // 129: caos.zitadel.management.api.v1.Project - (*ProjectMemberRoles)(nil), // 130: caos.zitadel.management.api.v1.ProjectMemberRoles - (*ProjectMember)(nil), // 131: caos.zitadel.management.api.v1.ProjectMember - (*ProjectMemberAdd)(nil), // 132: caos.zitadel.management.api.v1.ProjectMemberAdd - (*ProjectMemberChange)(nil), // 133: caos.zitadel.management.api.v1.ProjectMemberChange - (*ProjectMemberRemove)(nil), // 134: caos.zitadel.management.api.v1.ProjectMemberRemove - (*ProjectRoleAdd)(nil), // 135: caos.zitadel.management.api.v1.ProjectRoleAdd - (*ProjectRoleAddBulk)(nil), // 136: caos.zitadel.management.api.v1.ProjectRoleAddBulk - (*ProjectRoleChange)(nil), // 137: caos.zitadel.management.api.v1.ProjectRoleChange - (*ProjectRole)(nil), // 138: caos.zitadel.management.api.v1.ProjectRole - (*ProjectRoleView)(nil), // 139: caos.zitadel.management.api.v1.ProjectRoleView - (*ProjectRoleRemove)(nil), // 140: caos.zitadel.management.api.v1.ProjectRoleRemove - (*ProjectRoleSearchResponse)(nil), // 141: caos.zitadel.management.api.v1.ProjectRoleSearchResponse - (*ProjectRoleSearchRequest)(nil), // 142: caos.zitadel.management.api.v1.ProjectRoleSearchRequest - (*ProjectRoleSearchQuery)(nil), // 143: caos.zitadel.management.api.v1.ProjectRoleSearchQuery - (*ProjectMemberView)(nil), // 144: caos.zitadel.management.api.v1.ProjectMemberView - (*ProjectMemberSearchResponse)(nil), // 145: caos.zitadel.management.api.v1.ProjectMemberSearchResponse - (*ProjectMemberSearchRequest)(nil), // 146: caos.zitadel.management.api.v1.ProjectMemberSearchRequest - (*ProjectMemberSearchQuery)(nil), // 147: caos.zitadel.management.api.v1.ProjectMemberSearchQuery - (*Application)(nil), // 148: caos.zitadel.management.api.v1.Application - (*ApplicationUpdate)(nil), // 149: caos.zitadel.management.api.v1.ApplicationUpdate - (*OIDCConfig)(nil), // 150: caos.zitadel.management.api.v1.OIDCConfig - (*OIDCApplicationCreate)(nil), // 151: caos.zitadel.management.api.v1.OIDCApplicationCreate - (*OIDCConfigUpdate)(nil), // 152: caos.zitadel.management.api.v1.OIDCConfigUpdate - (*ClientSecret)(nil), // 153: caos.zitadel.management.api.v1.ClientSecret - (*ApplicationView)(nil), // 154: caos.zitadel.management.api.v1.ApplicationView - (*ApplicationSearchResponse)(nil), // 155: caos.zitadel.management.api.v1.ApplicationSearchResponse - (*ApplicationSearchRequest)(nil), // 156: caos.zitadel.management.api.v1.ApplicationSearchRequest - (*ApplicationSearchQuery)(nil), // 157: caos.zitadel.management.api.v1.ApplicationSearchQuery - (*ProjectGrant)(nil), // 158: caos.zitadel.management.api.v1.ProjectGrant - (*ProjectGrantCreate)(nil), // 159: caos.zitadel.management.api.v1.ProjectGrantCreate - (*ProjectGrantUpdate)(nil), // 160: caos.zitadel.management.api.v1.ProjectGrantUpdate - (*ProjectGrantID)(nil), // 161: caos.zitadel.management.api.v1.ProjectGrantID - (*ProjectGrantView)(nil), // 162: caos.zitadel.management.api.v1.ProjectGrantView - (*ProjectGrantSearchResponse)(nil), // 163: caos.zitadel.management.api.v1.ProjectGrantSearchResponse - (*GrantedProjectSearchRequest)(nil), // 164: caos.zitadel.management.api.v1.GrantedProjectSearchRequest - (*ProjectGrantSearchRequest)(nil), // 165: caos.zitadel.management.api.v1.ProjectGrantSearchRequest - (*ProjectGrantSearchQuery)(nil), // 166: caos.zitadel.management.api.v1.ProjectGrantSearchQuery - (*ProjectGrantMemberRoles)(nil), // 167: caos.zitadel.management.api.v1.ProjectGrantMemberRoles - (*ProjectGrantMember)(nil), // 168: caos.zitadel.management.api.v1.ProjectGrantMember - (*ProjectGrantMemberAdd)(nil), // 169: caos.zitadel.management.api.v1.ProjectGrantMemberAdd - (*ProjectGrantMemberChange)(nil), // 170: caos.zitadel.management.api.v1.ProjectGrantMemberChange - (*ProjectGrantMemberRemove)(nil), // 171: caos.zitadel.management.api.v1.ProjectGrantMemberRemove - (*ProjectGrantMemberView)(nil), // 172: caos.zitadel.management.api.v1.ProjectGrantMemberView - (*ProjectGrantMemberSearchResponse)(nil), // 173: caos.zitadel.management.api.v1.ProjectGrantMemberSearchResponse - (*ProjectGrantMemberSearchRequest)(nil), // 174: caos.zitadel.management.api.v1.ProjectGrantMemberSearchRequest - (*ProjectGrantMemberSearchQuery)(nil), // 175: caos.zitadel.management.api.v1.ProjectGrantMemberSearchQuery - (*UserGrant)(nil), // 176: caos.zitadel.management.api.v1.UserGrant - (*UserGrantCreate)(nil), // 177: caos.zitadel.management.api.v1.UserGrantCreate - (*UserGrantUpdate)(nil), // 178: caos.zitadel.management.api.v1.UserGrantUpdate - (*UserGrantRemoveBulk)(nil), // 179: caos.zitadel.management.api.v1.UserGrantRemoveBulk - (*UserGrantID)(nil), // 180: caos.zitadel.management.api.v1.UserGrantID - (*UserGrantView)(nil), // 181: caos.zitadel.management.api.v1.UserGrantView - (*UserGrantSearchResponse)(nil), // 182: caos.zitadel.management.api.v1.UserGrantSearchResponse - (*UserGrantSearchRequest)(nil), // 183: caos.zitadel.management.api.v1.UserGrantSearchRequest - (*UserGrantSearchQuery)(nil), // 184: caos.zitadel.management.api.v1.UserGrantSearchQuery - (*UserMembershipSearchResponse)(nil), // 185: caos.zitadel.management.api.v1.UserMembershipSearchResponse - (*UserMembershipSearchRequest)(nil), // 186: caos.zitadel.management.api.v1.UserMembershipSearchRequest - (*UserMembershipSearchQuery)(nil), // 187: caos.zitadel.management.api.v1.UserMembershipSearchQuery - (*UserMembershipView)(nil), // 188: caos.zitadel.management.api.v1.UserMembershipView - (*IdpID)(nil), // 189: caos.zitadel.management.api.v1.IdpID - (*Idp)(nil), // 190: caos.zitadel.management.api.v1.Idp - (*IdpUpdate)(nil), // 191: caos.zitadel.management.api.v1.IdpUpdate - (*OidcIdpConfig)(nil), // 192: caos.zitadel.management.api.v1.OidcIdpConfig - (*OidcIdpConfigCreate)(nil), // 193: caos.zitadel.management.api.v1.OidcIdpConfigCreate - (*OidcIdpConfigUpdate)(nil), // 194: caos.zitadel.management.api.v1.OidcIdpConfigUpdate - (*IdpSearchResponse)(nil), // 195: caos.zitadel.management.api.v1.IdpSearchResponse - (*IdpView)(nil), // 196: caos.zitadel.management.api.v1.IdpView - (*OidcIdpConfigView)(nil), // 197: caos.zitadel.management.api.v1.OidcIdpConfigView - (*IdpSearchRequest)(nil), // 198: caos.zitadel.management.api.v1.IdpSearchRequest - (*IdpSearchQuery)(nil), // 199: caos.zitadel.management.api.v1.IdpSearchQuery - (*LoginPolicy)(nil), // 200: caos.zitadel.management.api.v1.LoginPolicy - (*LoginPolicyAdd)(nil), // 201: caos.zitadel.management.api.v1.LoginPolicyAdd - (*IdpProviderID)(nil), // 202: caos.zitadel.management.api.v1.IdpProviderID - (*IdpProviderAdd)(nil), // 203: caos.zitadel.management.api.v1.IdpProviderAdd - (*IdpProvider)(nil), // 204: caos.zitadel.management.api.v1.IdpProvider - (*LoginPolicyView)(nil), // 205: caos.zitadel.management.api.v1.LoginPolicyView - (*IdpProviderView)(nil), // 206: caos.zitadel.management.api.v1.IdpProviderView - (*IdpProviderSearchResponse)(nil), // 207: caos.zitadel.management.api.v1.IdpProviderSearchResponse - (*IdpProviderSearchRequest)(nil), // 208: caos.zitadel.management.api.v1.IdpProviderSearchRequest - (*ExternalIDPSearchRequest)(nil), // 209: caos.zitadel.management.api.v1.ExternalIDPSearchRequest - (*ExternalIDPSearchResponse)(nil), // 210: caos.zitadel.management.api.v1.ExternalIDPSearchResponse - (*ExternalIDPView)(nil), // 211: caos.zitadel.management.api.v1.ExternalIDPView - (*ExternalIDPRemoveRequest)(nil), // 212: caos.zitadel.management.api.v1.ExternalIDPRemoveRequest - (*timestamp.Timestamp)(nil), // 213: google.protobuf.Timestamp - (*message.LocalizedMessage)(nil), // 214: caos.zitadel.api.v1.LocalizedMessage - (*_struct.Struct)(nil), // 215: google.protobuf.Struct - (*empty.Empty)(nil), // 216: google.protobuf.Empty + (*OrgIamPolicyView)(nil), // 85: caos.zitadel.management.api.v1.OrgIamPolicyView + (*OrgCreateRequest)(nil), // 86: caos.zitadel.management.api.v1.OrgCreateRequest + (*Org)(nil), // 87: caos.zitadel.management.api.v1.Org + (*OrgView)(nil), // 88: caos.zitadel.management.api.v1.OrgView + (*Domain)(nil), // 89: caos.zitadel.management.api.v1.Domain + (*OrgDomain)(nil), // 90: caos.zitadel.management.api.v1.OrgDomain + (*OrgDomainView)(nil), // 91: caos.zitadel.management.api.v1.OrgDomainView + (*AddOrgDomainRequest)(nil), // 92: caos.zitadel.management.api.v1.AddOrgDomainRequest + (*OrgDomainValidationRequest)(nil), // 93: caos.zitadel.management.api.v1.OrgDomainValidationRequest + (*OrgDomainValidationResponse)(nil), // 94: caos.zitadel.management.api.v1.OrgDomainValidationResponse + (*ValidateOrgDomainRequest)(nil), // 95: caos.zitadel.management.api.v1.ValidateOrgDomainRequest + (*PrimaryOrgDomainRequest)(nil), // 96: caos.zitadel.management.api.v1.PrimaryOrgDomainRequest + (*RemoveOrgDomainRequest)(nil), // 97: caos.zitadel.management.api.v1.RemoveOrgDomainRequest + (*OrgDomainSearchResponse)(nil), // 98: caos.zitadel.management.api.v1.OrgDomainSearchResponse + (*OrgDomainSearchRequest)(nil), // 99: caos.zitadel.management.api.v1.OrgDomainSearchRequest + (*OrgDomainSearchQuery)(nil), // 100: caos.zitadel.management.api.v1.OrgDomainSearchQuery + (*OrgMemberRoles)(nil), // 101: caos.zitadel.management.api.v1.OrgMemberRoles + (*OrgMember)(nil), // 102: caos.zitadel.management.api.v1.OrgMember + (*AddOrgMemberRequest)(nil), // 103: caos.zitadel.management.api.v1.AddOrgMemberRequest + (*ChangeOrgMemberRequest)(nil), // 104: caos.zitadel.management.api.v1.ChangeOrgMemberRequest + (*RemoveOrgMemberRequest)(nil), // 105: caos.zitadel.management.api.v1.RemoveOrgMemberRequest + (*OrgMemberSearchResponse)(nil), // 106: caos.zitadel.management.api.v1.OrgMemberSearchResponse + (*OrgMemberView)(nil), // 107: caos.zitadel.management.api.v1.OrgMemberView + (*OrgMemberSearchRequest)(nil), // 108: caos.zitadel.management.api.v1.OrgMemberSearchRequest + (*OrgMemberSearchQuery)(nil), // 109: caos.zitadel.management.api.v1.OrgMemberSearchQuery + (*ProjectCreateRequest)(nil), // 110: caos.zitadel.management.api.v1.ProjectCreateRequest + (*ProjectUpdateRequest)(nil), // 111: caos.zitadel.management.api.v1.ProjectUpdateRequest + (*ProjectSearchResponse)(nil), // 112: caos.zitadel.management.api.v1.ProjectSearchResponse + (*ProjectView)(nil), // 113: caos.zitadel.management.api.v1.ProjectView + (*ProjectSearchRequest)(nil), // 114: caos.zitadel.management.api.v1.ProjectSearchRequest + (*ProjectSearchQuery)(nil), // 115: caos.zitadel.management.api.v1.ProjectSearchQuery + (*Projects)(nil), // 116: caos.zitadel.management.api.v1.Projects + (*Project)(nil), // 117: caos.zitadel.management.api.v1.Project + (*ProjectMemberRoles)(nil), // 118: caos.zitadel.management.api.v1.ProjectMemberRoles + (*ProjectMember)(nil), // 119: caos.zitadel.management.api.v1.ProjectMember + (*ProjectMemberAdd)(nil), // 120: caos.zitadel.management.api.v1.ProjectMemberAdd + (*ProjectMemberChange)(nil), // 121: caos.zitadel.management.api.v1.ProjectMemberChange + (*ProjectMemberRemove)(nil), // 122: caos.zitadel.management.api.v1.ProjectMemberRemove + (*ProjectRoleAdd)(nil), // 123: caos.zitadel.management.api.v1.ProjectRoleAdd + (*ProjectRoleAddBulk)(nil), // 124: caos.zitadel.management.api.v1.ProjectRoleAddBulk + (*ProjectRoleChange)(nil), // 125: caos.zitadel.management.api.v1.ProjectRoleChange + (*ProjectRole)(nil), // 126: caos.zitadel.management.api.v1.ProjectRole + (*ProjectRoleView)(nil), // 127: caos.zitadel.management.api.v1.ProjectRoleView + (*ProjectRoleRemove)(nil), // 128: caos.zitadel.management.api.v1.ProjectRoleRemove + (*ProjectRoleSearchResponse)(nil), // 129: caos.zitadel.management.api.v1.ProjectRoleSearchResponse + (*ProjectRoleSearchRequest)(nil), // 130: caos.zitadel.management.api.v1.ProjectRoleSearchRequest + (*ProjectRoleSearchQuery)(nil), // 131: caos.zitadel.management.api.v1.ProjectRoleSearchQuery + (*ProjectMemberView)(nil), // 132: caos.zitadel.management.api.v1.ProjectMemberView + (*ProjectMemberSearchResponse)(nil), // 133: caos.zitadel.management.api.v1.ProjectMemberSearchResponse + (*ProjectMemberSearchRequest)(nil), // 134: caos.zitadel.management.api.v1.ProjectMemberSearchRequest + (*ProjectMemberSearchQuery)(nil), // 135: caos.zitadel.management.api.v1.ProjectMemberSearchQuery + (*Application)(nil), // 136: caos.zitadel.management.api.v1.Application + (*ApplicationUpdate)(nil), // 137: caos.zitadel.management.api.v1.ApplicationUpdate + (*OIDCConfig)(nil), // 138: caos.zitadel.management.api.v1.OIDCConfig + (*OIDCApplicationCreate)(nil), // 139: caos.zitadel.management.api.v1.OIDCApplicationCreate + (*OIDCConfigUpdate)(nil), // 140: caos.zitadel.management.api.v1.OIDCConfigUpdate + (*ClientSecret)(nil), // 141: caos.zitadel.management.api.v1.ClientSecret + (*ApplicationView)(nil), // 142: caos.zitadel.management.api.v1.ApplicationView + (*ApplicationSearchResponse)(nil), // 143: caos.zitadel.management.api.v1.ApplicationSearchResponse + (*ApplicationSearchRequest)(nil), // 144: caos.zitadel.management.api.v1.ApplicationSearchRequest + (*ApplicationSearchQuery)(nil), // 145: caos.zitadel.management.api.v1.ApplicationSearchQuery + (*ProjectGrant)(nil), // 146: caos.zitadel.management.api.v1.ProjectGrant + (*ProjectGrantCreate)(nil), // 147: caos.zitadel.management.api.v1.ProjectGrantCreate + (*ProjectGrantUpdate)(nil), // 148: caos.zitadel.management.api.v1.ProjectGrantUpdate + (*ProjectGrantID)(nil), // 149: caos.zitadel.management.api.v1.ProjectGrantID + (*ProjectGrantView)(nil), // 150: caos.zitadel.management.api.v1.ProjectGrantView + (*ProjectGrantSearchResponse)(nil), // 151: caos.zitadel.management.api.v1.ProjectGrantSearchResponse + (*GrantedProjectSearchRequest)(nil), // 152: caos.zitadel.management.api.v1.GrantedProjectSearchRequest + (*ProjectGrantSearchRequest)(nil), // 153: caos.zitadel.management.api.v1.ProjectGrantSearchRequest + (*ProjectGrantSearchQuery)(nil), // 154: caos.zitadel.management.api.v1.ProjectGrantSearchQuery + (*ProjectGrantMemberRoles)(nil), // 155: caos.zitadel.management.api.v1.ProjectGrantMemberRoles + (*ProjectGrantMember)(nil), // 156: caos.zitadel.management.api.v1.ProjectGrantMember + (*ProjectGrantMemberAdd)(nil), // 157: caos.zitadel.management.api.v1.ProjectGrantMemberAdd + (*ProjectGrantMemberChange)(nil), // 158: caos.zitadel.management.api.v1.ProjectGrantMemberChange + (*ProjectGrantMemberRemove)(nil), // 159: caos.zitadel.management.api.v1.ProjectGrantMemberRemove + (*ProjectGrantMemberView)(nil), // 160: caos.zitadel.management.api.v1.ProjectGrantMemberView + (*ProjectGrantMemberSearchResponse)(nil), // 161: caos.zitadel.management.api.v1.ProjectGrantMemberSearchResponse + (*ProjectGrantMemberSearchRequest)(nil), // 162: caos.zitadel.management.api.v1.ProjectGrantMemberSearchRequest + (*ProjectGrantMemberSearchQuery)(nil), // 163: caos.zitadel.management.api.v1.ProjectGrantMemberSearchQuery + (*UserGrant)(nil), // 164: caos.zitadel.management.api.v1.UserGrant + (*UserGrantCreate)(nil), // 165: caos.zitadel.management.api.v1.UserGrantCreate + (*UserGrantUpdate)(nil), // 166: caos.zitadel.management.api.v1.UserGrantUpdate + (*UserGrantRemoveBulk)(nil), // 167: caos.zitadel.management.api.v1.UserGrantRemoveBulk + (*UserGrantID)(nil), // 168: caos.zitadel.management.api.v1.UserGrantID + (*UserGrantView)(nil), // 169: caos.zitadel.management.api.v1.UserGrantView + (*UserGrantSearchResponse)(nil), // 170: caos.zitadel.management.api.v1.UserGrantSearchResponse + (*UserGrantSearchRequest)(nil), // 171: caos.zitadel.management.api.v1.UserGrantSearchRequest + (*UserGrantSearchQuery)(nil), // 172: caos.zitadel.management.api.v1.UserGrantSearchQuery + (*UserMembershipSearchResponse)(nil), // 173: caos.zitadel.management.api.v1.UserMembershipSearchResponse + (*UserMembershipSearchRequest)(nil), // 174: caos.zitadel.management.api.v1.UserMembershipSearchRequest + (*UserMembershipSearchQuery)(nil), // 175: caos.zitadel.management.api.v1.UserMembershipSearchQuery + (*UserMembershipView)(nil), // 176: caos.zitadel.management.api.v1.UserMembershipView + (*IdpID)(nil), // 177: caos.zitadel.management.api.v1.IdpID + (*Idp)(nil), // 178: caos.zitadel.management.api.v1.Idp + (*IdpUpdate)(nil), // 179: caos.zitadel.management.api.v1.IdpUpdate + (*OidcIdpConfig)(nil), // 180: caos.zitadel.management.api.v1.OidcIdpConfig + (*OidcIdpConfigCreate)(nil), // 181: caos.zitadel.management.api.v1.OidcIdpConfigCreate + (*OidcIdpConfigUpdate)(nil), // 182: caos.zitadel.management.api.v1.OidcIdpConfigUpdate + (*IdpSearchResponse)(nil), // 183: caos.zitadel.management.api.v1.IdpSearchResponse + (*IdpView)(nil), // 184: caos.zitadel.management.api.v1.IdpView + (*OidcIdpConfigView)(nil), // 185: caos.zitadel.management.api.v1.OidcIdpConfigView + (*IdpSearchRequest)(nil), // 186: caos.zitadel.management.api.v1.IdpSearchRequest + (*IdpSearchQuery)(nil), // 187: caos.zitadel.management.api.v1.IdpSearchQuery + (*LoginPolicy)(nil), // 188: caos.zitadel.management.api.v1.LoginPolicy + (*LoginPolicyRequest)(nil), // 189: caos.zitadel.management.api.v1.LoginPolicyRequest + (*IdpProviderID)(nil), // 190: caos.zitadel.management.api.v1.IdpProviderID + (*IdpProviderAdd)(nil), // 191: caos.zitadel.management.api.v1.IdpProviderAdd + (*IdpProvider)(nil), // 192: caos.zitadel.management.api.v1.IdpProvider + (*LoginPolicyView)(nil), // 193: caos.zitadel.management.api.v1.LoginPolicyView + (*IdpProviderView)(nil), // 194: caos.zitadel.management.api.v1.IdpProviderView + (*IdpProviderSearchResponse)(nil), // 195: caos.zitadel.management.api.v1.IdpProviderSearchResponse + (*IdpProviderSearchRequest)(nil), // 196: caos.zitadel.management.api.v1.IdpProviderSearchRequest + (*ExternalIDPSearchRequest)(nil), // 197: caos.zitadel.management.api.v1.ExternalIDPSearchRequest + (*ExternalIDPSearchResponse)(nil), // 198: caos.zitadel.management.api.v1.ExternalIDPSearchResponse + (*ExternalIDPView)(nil), // 199: caos.zitadel.management.api.v1.ExternalIDPView + (*ExternalIDPRemoveRequest)(nil), // 200: caos.zitadel.management.api.v1.ExternalIDPRemoveRequest + (*PasswordComplexityPolicy)(nil), // 201: caos.zitadel.management.api.v1.PasswordComplexityPolicy + (*PasswordComplexityPolicyRequest)(nil), // 202: caos.zitadel.management.api.v1.PasswordComplexityPolicyRequest + (*PasswordComplexityPolicyView)(nil), // 203: caos.zitadel.management.api.v1.PasswordComplexityPolicyView + (*PasswordAgePolicy)(nil), // 204: caos.zitadel.management.api.v1.PasswordAgePolicy + (*PasswordAgePolicyRequest)(nil), // 205: caos.zitadel.management.api.v1.PasswordAgePolicyRequest + (*PasswordAgePolicyView)(nil), // 206: caos.zitadel.management.api.v1.PasswordAgePolicyView + (*PasswordLockoutPolicy)(nil), // 207: caos.zitadel.management.api.v1.PasswordLockoutPolicy + (*PasswordLockoutPolicyRequest)(nil), // 208: caos.zitadel.management.api.v1.PasswordLockoutPolicyRequest + (*PasswordLockoutPolicyView)(nil), // 209: caos.zitadel.management.api.v1.PasswordLockoutPolicyView + (*timestamp.Timestamp)(nil), // 210: google.protobuf.Timestamp + (*message.LocalizedMessage)(nil), // 211: caos.zitadel.api.v1.LocalizedMessage + (*_struct.Struct)(nil), // 212: google.protobuf.Struct + (*empty.Empty)(nil), // 213: google.protobuf.Empty } var file_management_proto_depIdxs = []int32{ 0, // 0: caos.zitadel.management.api.v1.Iam.set_up_done:type_name -> caos.zitadel.management.api.v1.IamSetupStep 0, // 1: caos.zitadel.management.api.v1.Iam.set_up_started:type_name -> caos.zitadel.management.api.v1.IamSetupStep 42, // 2: caos.zitadel.management.api.v1.Changes.changes:type_name -> caos.zitadel.management.api.v1.Change - 213, // 3: caos.zitadel.management.api.v1.Change.change_date:type_name -> google.protobuf.Timestamp - 214, // 4: caos.zitadel.management.api.v1.Change.event_type:type_name -> caos.zitadel.api.v1.LocalizedMessage - 215, // 5: caos.zitadel.management.api.v1.Change.data:type_name -> google.protobuf.Struct + 210, // 3: caos.zitadel.management.api.v1.Change.change_date:type_name -> google.protobuf.Timestamp + 211, // 4: caos.zitadel.management.api.v1.Change.event_type:type_name -> caos.zitadel.api.v1.LocalizedMessage + 212, // 5: caos.zitadel.management.api.v1.Change.data:type_name -> google.protobuf.Struct 50, // 6: caos.zitadel.management.api.v1.CreateUserRequest.human:type_name -> caos.zitadel.management.api.v1.CreateHumanRequest 51, // 7: caos.zitadel.management.api.v1.CreateUserRequest.machine:type_name -> caos.zitadel.management.api.v1.CreateMachineRequest 2, // 8: caos.zitadel.management.api.v1.CreateHumanRequest.gender:type_name -> caos.zitadel.management.api.v1.Gender 1, // 9: caos.zitadel.management.api.v1.UserResponse.state:type_name -> caos.zitadel.management.api.v1.UserState - 213, // 10: caos.zitadel.management.api.v1.UserResponse.creation_date:type_name -> google.protobuf.Timestamp - 213, // 11: caos.zitadel.management.api.v1.UserResponse.change_date:type_name -> google.protobuf.Timestamp + 210, // 10: caos.zitadel.management.api.v1.UserResponse.creation_date:type_name -> google.protobuf.Timestamp + 210, // 11: caos.zitadel.management.api.v1.UserResponse.change_date:type_name -> google.protobuf.Timestamp 54, // 12: caos.zitadel.management.api.v1.UserResponse.human:type_name -> caos.zitadel.management.api.v1.HumanResponse 56, // 13: caos.zitadel.management.api.v1.UserResponse.machine:type_name -> caos.zitadel.management.api.v1.MachineResponse 1, // 14: caos.zitadel.management.api.v1.UserView.state:type_name -> caos.zitadel.management.api.v1.UserState - 213, // 15: caos.zitadel.management.api.v1.UserView.creation_date:type_name -> google.protobuf.Timestamp - 213, // 16: caos.zitadel.management.api.v1.UserView.change_date:type_name -> google.protobuf.Timestamp - 213, // 17: caos.zitadel.management.api.v1.UserView.last_login:type_name -> google.protobuf.Timestamp + 210, // 15: caos.zitadel.management.api.v1.UserView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 16: caos.zitadel.management.api.v1.UserView.change_date:type_name -> google.protobuf.Timestamp + 210, // 17: caos.zitadel.management.api.v1.UserView.last_login:type_name -> google.protobuf.Timestamp 55, // 18: caos.zitadel.management.api.v1.UserView.human:type_name -> caos.zitadel.management.api.v1.HumanView 57, // 19: caos.zitadel.management.api.v1.UserView.machine:type_name -> caos.zitadel.management.api.v1.MachineView 2, // 20: caos.zitadel.management.api.v1.HumanResponse.gender:type_name -> caos.zitadel.management.api.v1.Gender - 213, // 21: caos.zitadel.management.api.v1.HumanView.password_changed:type_name -> google.protobuf.Timestamp + 210, // 21: caos.zitadel.management.api.v1.HumanView.password_changed:type_name -> google.protobuf.Timestamp 2, // 22: caos.zitadel.management.api.v1.HumanView.gender:type_name -> caos.zitadel.management.api.v1.Gender - 213, // 23: caos.zitadel.management.api.v1.MachineView.last_key_added:type_name -> google.protobuf.Timestamp + 210, // 23: caos.zitadel.management.api.v1.MachineView.last_key_added:type_name -> google.protobuf.Timestamp 3, // 24: caos.zitadel.management.api.v1.AddMachineKeyRequest.type:type_name -> caos.zitadel.management.api.v1.MachineKeyType - 213, // 25: caos.zitadel.management.api.v1.AddMachineKeyRequest.expiration_date:type_name -> google.protobuf.Timestamp - 213, // 26: caos.zitadel.management.api.v1.AddMachineKeyResponse.creation_date:type_name -> google.protobuf.Timestamp + 210, // 25: caos.zitadel.management.api.v1.AddMachineKeyRequest.expiration_date:type_name -> google.protobuf.Timestamp + 210, // 26: caos.zitadel.management.api.v1.AddMachineKeyResponse.creation_date:type_name -> google.protobuf.Timestamp 3, // 27: caos.zitadel.management.api.v1.AddMachineKeyResponse.type:type_name -> caos.zitadel.management.api.v1.MachineKeyType - 213, // 28: caos.zitadel.management.api.v1.AddMachineKeyResponse.expiration_date:type_name -> google.protobuf.Timestamp + 210, // 28: caos.zitadel.management.api.v1.AddMachineKeyResponse.expiration_date:type_name -> google.protobuf.Timestamp 3, // 29: caos.zitadel.management.api.v1.MachineKeyView.type:type_name -> caos.zitadel.management.api.v1.MachineKeyType - 213, // 30: caos.zitadel.management.api.v1.MachineKeyView.creation_date:type_name -> google.protobuf.Timestamp - 213, // 31: caos.zitadel.management.api.v1.MachineKeyView.expiration_date:type_name -> google.protobuf.Timestamp + 210, // 30: caos.zitadel.management.api.v1.MachineKeyView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 31: caos.zitadel.management.api.v1.MachineKeyView.expiration_date:type_name -> google.protobuf.Timestamp 62, // 32: caos.zitadel.management.api.v1.MachineKeySearchResponse.result:type_name -> caos.zitadel.management.api.v1.MachineKeyView - 213, // 33: caos.zitadel.management.api.v1.MachineKeySearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 210, // 33: caos.zitadel.management.api.v1.MachineKeySearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp 4, // 34: caos.zitadel.management.api.v1.UserSearchRequest.sorting_column:type_name -> caos.zitadel.management.api.v1.UserSearchKey 66, // 35: caos.zitadel.management.api.v1.UserSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.UserSearchQuery 4, // 36: caos.zitadel.management.api.v1.UserSearchQuery.key:type_name -> caos.zitadel.management.api.v1.UserSearchKey 5, // 37: caos.zitadel.management.api.v1.UserSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod 53, // 38: caos.zitadel.management.api.v1.UserSearchResponse.result:type_name -> caos.zitadel.management.api.v1.UserView - 213, // 39: caos.zitadel.management.api.v1.UserSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 210, // 39: caos.zitadel.management.api.v1.UserSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp 2, // 40: caos.zitadel.management.api.v1.UserProfile.gender:type_name -> caos.zitadel.management.api.v1.Gender - 213, // 41: caos.zitadel.management.api.v1.UserProfile.creation_date:type_name -> google.protobuf.Timestamp - 213, // 42: caos.zitadel.management.api.v1.UserProfile.change_date:type_name -> google.protobuf.Timestamp + 210, // 41: caos.zitadel.management.api.v1.UserProfile.creation_date:type_name -> google.protobuf.Timestamp + 210, // 42: caos.zitadel.management.api.v1.UserProfile.change_date:type_name -> google.protobuf.Timestamp 2, // 43: caos.zitadel.management.api.v1.UserProfileView.gender:type_name -> caos.zitadel.management.api.v1.Gender - 213, // 44: caos.zitadel.management.api.v1.UserProfileView.creation_date:type_name -> google.protobuf.Timestamp - 213, // 45: caos.zitadel.management.api.v1.UserProfileView.change_date:type_name -> google.protobuf.Timestamp + 210, // 44: caos.zitadel.management.api.v1.UserProfileView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 45: caos.zitadel.management.api.v1.UserProfileView.change_date:type_name -> google.protobuf.Timestamp 2, // 46: caos.zitadel.management.api.v1.UpdateUserProfileRequest.gender:type_name -> caos.zitadel.management.api.v1.Gender - 213, // 47: caos.zitadel.management.api.v1.UserEmail.creation_date:type_name -> google.protobuf.Timestamp - 213, // 48: caos.zitadel.management.api.v1.UserEmail.change_date:type_name -> google.protobuf.Timestamp - 213, // 49: caos.zitadel.management.api.v1.UserEmailView.creation_date:type_name -> google.protobuf.Timestamp - 213, // 50: caos.zitadel.management.api.v1.UserEmailView.change_date:type_name -> google.protobuf.Timestamp - 213, // 51: caos.zitadel.management.api.v1.UserPhone.creation_date:type_name -> google.protobuf.Timestamp - 213, // 52: caos.zitadel.management.api.v1.UserPhone.change_date:type_name -> google.protobuf.Timestamp - 213, // 53: caos.zitadel.management.api.v1.UserPhoneView.creation_date:type_name -> google.protobuf.Timestamp - 213, // 54: caos.zitadel.management.api.v1.UserPhoneView.change_date:type_name -> google.protobuf.Timestamp - 213, // 55: caos.zitadel.management.api.v1.UserAddress.creation_date:type_name -> google.protobuf.Timestamp - 213, // 56: caos.zitadel.management.api.v1.UserAddress.change_date:type_name -> google.protobuf.Timestamp - 213, // 57: caos.zitadel.management.api.v1.UserAddressView.creation_date:type_name -> google.protobuf.Timestamp - 213, // 58: caos.zitadel.management.api.v1.UserAddressView.change_date:type_name -> google.protobuf.Timestamp + 210, // 47: caos.zitadel.management.api.v1.UserEmail.creation_date:type_name -> google.protobuf.Timestamp + 210, // 48: caos.zitadel.management.api.v1.UserEmail.change_date:type_name -> google.protobuf.Timestamp + 210, // 49: caos.zitadel.management.api.v1.UserEmailView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 50: caos.zitadel.management.api.v1.UserEmailView.change_date:type_name -> google.protobuf.Timestamp + 210, // 51: caos.zitadel.management.api.v1.UserPhone.creation_date:type_name -> google.protobuf.Timestamp + 210, // 52: caos.zitadel.management.api.v1.UserPhone.change_date:type_name -> google.protobuf.Timestamp + 210, // 53: caos.zitadel.management.api.v1.UserPhoneView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 54: caos.zitadel.management.api.v1.UserPhoneView.change_date:type_name -> google.protobuf.Timestamp + 210, // 55: caos.zitadel.management.api.v1.UserAddress.creation_date:type_name -> google.protobuf.Timestamp + 210, // 56: caos.zitadel.management.api.v1.UserAddress.change_date:type_name -> google.protobuf.Timestamp + 210, // 57: caos.zitadel.management.api.v1.UserAddressView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 58: caos.zitadel.management.api.v1.UserAddressView.change_date:type_name -> google.protobuf.Timestamp 82, // 59: caos.zitadel.management.api.v1.MultiFactors.mfas:type_name -> caos.zitadel.management.api.v1.MultiFactor 6, // 60: caos.zitadel.management.api.v1.MultiFactor.type:type_name -> caos.zitadel.management.api.v1.MfaType 7, // 61: caos.zitadel.management.api.v1.MultiFactor.state:type_name -> caos.zitadel.management.api.v1.MFAState 8, // 62: caos.zitadel.management.api.v1.SetPasswordNotificationRequest.type:type_name -> caos.zitadel.management.api.v1.NotificationType - 9, // 63: caos.zitadel.management.api.v1.PasswordComplexityPolicy.state:type_name -> caos.zitadel.management.api.v1.PolicyState - 213, // 64: caos.zitadel.management.api.v1.PasswordComplexityPolicy.creation_date:type_name -> google.protobuf.Timestamp - 213, // 65: caos.zitadel.management.api.v1.PasswordComplexityPolicy.change_date:type_name -> google.protobuf.Timestamp - 9, // 66: caos.zitadel.management.api.v1.PasswordAgePolicy.state:type_name -> caos.zitadel.management.api.v1.PolicyState - 213, // 67: caos.zitadel.management.api.v1.PasswordAgePolicy.creation_date:type_name -> google.protobuf.Timestamp - 213, // 68: caos.zitadel.management.api.v1.PasswordAgePolicy.change_date:type_name -> google.protobuf.Timestamp - 9, // 69: caos.zitadel.management.api.v1.PasswordLockoutPolicy.state:type_name -> caos.zitadel.management.api.v1.PolicyState - 213, // 70: caos.zitadel.management.api.v1.PasswordLockoutPolicy.creation_date:type_name -> google.protobuf.Timestamp - 213, // 71: caos.zitadel.management.api.v1.PasswordLockoutPolicy.change_date:type_name -> google.protobuf.Timestamp - 10, // 72: caos.zitadel.management.api.v1.Org.state:type_name -> caos.zitadel.management.api.v1.OrgState - 213, // 73: caos.zitadel.management.api.v1.Org.creation_date:type_name -> google.protobuf.Timestamp - 213, // 74: caos.zitadel.management.api.v1.Org.change_date:type_name -> google.protobuf.Timestamp - 10, // 75: caos.zitadel.management.api.v1.OrgView.state:type_name -> caos.zitadel.management.api.v1.OrgState - 213, // 76: caos.zitadel.management.api.v1.OrgView.creation_date:type_name -> google.protobuf.Timestamp - 213, // 77: caos.zitadel.management.api.v1.OrgView.change_date:type_name -> google.protobuf.Timestamp - 213, // 78: caos.zitadel.management.api.v1.OrgDomain.creation_date:type_name -> google.protobuf.Timestamp - 213, // 79: caos.zitadel.management.api.v1.OrgDomain.change_date:type_name -> google.protobuf.Timestamp - 213, // 80: caos.zitadel.management.api.v1.OrgDomainView.creation_date:type_name -> google.protobuf.Timestamp - 213, // 81: caos.zitadel.management.api.v1.OrgDomainView.change_date:type_name -> google.protobuf.Timestamp - 11, // 82: caos.zitadel.management.api.v1.OrgDomainView.validation_type:type_name -> caos.zitadel.management.api.v1.OrgDomainValidationType - 11, // 83: caos.zitadel.management.api.v1.OrgDomainValidationRequest.type:type_name -> caos.zitadel.management.api.v1.OrgDomainValidationType - 103, // 84: caos.zitadel.management.api.v1.OrgDomainSearchResponse.result:type_name -> caos.zitadel.management.api.v1.OrgDomainView - 213, // 85: caos.zitadel.management.api.v1.OrgDomainSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 112, // 86: caos.zitadel.management.api.v1.OrgDomainSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.OrgDomainSearchQuery - 12, // 87: caos.zitadel.management.api.v1.OrgDomainSearchQuery.key:type_name -> caos.zitadel.management.api.v1.OrgDomainSearchKey - 5, // 88: caos.zitadel.management.api.v1.OrgDomainSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod - 213, // 89: caos.zitadel.management.api.v1.OrgMember.change_date:type_name -> google.protobuf.Timestamp - 213, // 90: caos.zitadel.management.api.v1.OrgMember.creation_date:type_name -> google.protobuf.Timestamp - 119, // 91: caos.zitadel.management.api.v1.OrgMemberSearchResponse.result:type_name -> caos.zitadel.management.api.v1.OrgMemberView - 213, // 92: caos.zitadel.management.api.v1.OrgMemberSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 213, // 93: caos.zitadel.management.api.v1.OrgMemberView.change_date:type_name -> google.protobuf.Timestamp - 213, // 94: caos.zitadel.management.api.v1.OrgMemberView.creation_date:type_name -> google.protobuf.Timestamp - 121, // 95: caos.zitadel.management.api.v1.OrgMemberSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.OrgMemberSearchQuery - 13, // 96: caos.zitadel.management.api.v1.OrgMemberSearchQuery.key:type_name -> caos.zitadel.management.api.v1.OrgMemberSearchKey - 5, // 97: caos.zitadel.management.api.v1.OrgMemberSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod - 125, // 98: caos.zitadel.management.api.v1.ProjectSearchResponse.result:type_name -> caos.zitadel.management.api.v1.ProjectView - 213, // 99: caos.zitadel.management.api.v1.ProjectSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 15, // 100: caos.zitadel.management.api.v1.ProjectView.state:type_name -> caos.zitadel.management.api.v1.ProjectState - 213, // 101: caos.zitadel.management.api.v1.ProjectView.change_date:type_name -> google.protobuf.Timestamp - 213, // 102: caos.zitadel.management.api.v1.ProjectView.creation_date:type_name -> google.protobuf.Timestamp - 127, // 103: caos.zitadel.management.api.v1.ProjectSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.ProjectSearchQuery - 14, // 104: caos.zitadel.management.api.v1.ProjectSearchQuery.key:type_name -> caos.zitadel.management.api.v1.ProjectSearchKey - 5, // 105: caos.zitadel.management.api.v1.ProjectSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod - 129, // 106: caos.zitadel.management.api.v1.Projects.projects:type_name -> caos.zitadel.management.api.v1.Project - 15, // 107: caos.zitadel.management.api.v1.Project.state:type_name -> caos.zitadel.management.api.v1.ProjectState - 213, // 108: caos.zitadel.management.api.v1.Project.change_date:type_name -> google.protobuf.Timestamp - 213, // 109: caos.zitadel.management.api.v1.Project.creation_date:type_name -> google.protobuf.Timestamp - 213, // 110: caos.zitadel.management.api.v1.ProjectMember.change_date:type_name -> google.protobuf.Timestamp - 213, // 111: caos.zitadel.management.api.v1.ProjectMember.creation_date:type_name -> google.protobuf.Timestamp - 135, // 112: caos.zitadel.management.api.v1.ProjectRoleAddBulk.project_roles:type_name -> caos.zitadel.management.api.v1.ProjectRoleAdd - 213, // 113: caos.zitadel.management.api.v1.ProjectRole.creation_date:type_name -> google.protobuf.Timestamp - 213, // 114: caos.zitadel.management.api.v1.ProjectRole.change_date:type_name -> google.protobuf.Timestamp - 213, // 115: caos.zitadel.management.api.v1.ProjectRoleView.creation_date:type_name -> google.protobuf.Timestamp - 139, // 116: caos.zitadel.management.api.v1.ProjectRoleSearchResponse.result:type_name -> caos.zitadel.management.api.v1.ProjectRoleView - 213, // 117: caos.zitadel.management.api.v1.ProjectRoleSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 143, // 118: caos.zitadel.management.api.v1.ProjectRoleSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.ProjectRoleSearchQuery - 16, // 119: caos.zitadel.management.api.v1.ProjectRoleSearchQuery.key:type_name -> caos.zitadel.management.api.v1.ProjectRoleSearchKey - 5, // 120: caos.zitadel.management.api.v1.ProjectRoleSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod - 213, // 121: caos.zitadel.management.api.v1.ProjectMemberView.change_date:type_name -> google.protobuf.Timestamp - 213, // 122: caos.zitadel.management.api.v1.ProjectMemberView.creation_date:type_name -> google.protobuf.Timestamp - 144, // 123: caos.zitadel.management.api.v1.ProjectMemberSearchResponse.result:type_name -> caos.zitadel.management.api.v1.ProjectMemberView - 213, // 124: caos.zitadel.management.api.v1.ProjectMemberSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 147, // 125: caos.zitadel.management.api.v1.ProjectMemberSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.ProjectMemberSearchQuery - 17, // 126: caos.zitadel.management.api.v1.ProjectMemberSearchQuery.key:type_name -> caos.zitadel.management.api.v1.ProjectMemberSearchKey - 5, // 127: caos.zitadel.management.api.v1.ProjectMemberSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod - 18, // 128: caos.zitadel.management.api.v1.Application.state:type_name -> caos.zitadel.management.api.v1.AppState - 213, // 129: caos.zitadel.management.api.v1.Application.creation_date:type_name -> google.protobuf.Timestamp - 213, // 130: caos.zitadel.management.api.v1.Application.change_date:type_name -> google.protobuf.Timestamp - 150, // 131: caos.zitadel.management.api.v1.Application.oidc_config:type_name -> caos.zitadel.management.api.v1.OIDCConfig - 20, // 132: caos.zitadel.management.api.v1.OIDCConfig.response_types:type_name -> caos.zitadel.management.api.v1.OIDCResponseType - 21, // 133: caos.zitadel.management.api.v1.OIDCConfig.grant_types:type_name -> caos.zitadel.management.api.v1.OIDCGrantType - 22, // 134: caos.zitadel.management.api.v1.OIDCConfig.application_type:type_name -> caos.zitadel.management.api.v1.OIDCApplicationType - 23, // 135: caos.zitadel.management.api.v1.OIDCConfig.auth_method_type:type_name -> caos.zitadel.management.api.v1.OIDCAuthMethodType - 19, // 136: caos.zitadel.management.api.v1.OIDCConfig.version:type_name -> caos.zitadel.management.api.v1.OIDCVersion - 214, // 137: caos.zitadel.management.api.v1.OIDCConfig.compliance_problems:type_name -> caos.zitadel.api.v1.LocalizedMessage - 20, // 138: caos.zitadel.management.api.v1.OIDCApplicationCreate.response_types:type_name -> caos.zitadel.management.api.v1.OIDCResponseType - 21, // 139: caos.zitadel.management.api.v1.OIDCApplicationCreate.grant_types:type_name -> caos.zitadel.management.api.v1.OIDCGrantType - 22, // 140: caos.zitadel.management.api.v1.OIDCApplicationCreate.application_type:type_name -> caos.zitadel.management.api.v1.OIDCApplicationType - 23, // 141: caos.zitadel.management.api.v1.OIDCApplicationCreate.auth_method_type:type_name -> caos.zitadel.management.api.v1.OIDCAuthMethodType - 19, // 142: caos.zitadel.management.api.v1.OIDCApplicationCreate.version:type_name -> caos.zitadel.management.api.v1.OIDCVersion - 20, // 143: caos.zitadel.management.api.v1.OIDCConfigUpdate.response_types:type_name -> caos.zitadel.management.api.v1.OIDCResponseType - 21, // 144: caos.zitadel.management.api.v1.OIDCConfigUpdate.grant_types:type_name -> caos.zitadel.management.api.v1.OIDCGrantType - 22, // 145: caos.zitadel.management.api.v1.OIDCConfigUpdate.application_type:type_name -> caos.zitadel.management.api.v1.OIDCApplicationType - 23, // 146: caos.zitadel.management.api.v1.OIDCConfigUpdate.auth_method_type:type_name -> caos.zitadel.management.api.v1.OIDCAuthMethodType - 18, // 147: caos.zitadel.management.api.v1.ApplicationView.state:type_name -> caos.zitadel.management.api.v1.AppState - 213, // 148: caos.zitadel.management.api.v1.ApplicationView.creation_date:type_name -> google.protobuf.Timestamp - 213, // 149: caos.zitadel.management.api.v1.ApplicationView.change_date:type_name -> google.protobuf.Timestamp - 150, // 150: caos.zitadel.management.api.v1.ApplicationView.oidc_config:type_name -> caos.zitadel.management.api.v1.OIDCConfig - 154, // 151: caos.zitadel.management.api.v1.ApplicationSearchResponse.result:type_name -> caos.zitadel.management.api.v1.ApplicationView - 213, // 152: caos.zitadel.management.api.v1.ApplicationSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 157, // 153: caos.zitadel.management.api.v1.ApplicationSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.ApplicationSearchQuery - 24, // 154: caos.zitadel.management.api.v1.ApplicationSearchQuery.key:type_name -> caos.zitadel.management.api.v1.ApplicationSearchKey - 5, // 155: caos.zitadel.management.api.v1.ApplicationSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod - 25, // 156: caos.zitadel.management.api.v1.ProjectGrant.state:type_name -> caos.zitadel.management.api.v1.ProjectGrantState - 213, // 157: caos.zitadel.management.api.v1.ProjectGrant.creation_date:type_name -> google.protobuf.Timestamp - 213, // 158: caos.zitadel.management.api.v1.ProjectGrant.change_date:type_name -> google.protobuf.Timestamp - 25, // 159: caos.zitadel.management.api.v1.ProjectGrantView.state:type_name -> caos.zitadel.management.api.v1.ProjectGrantState - 213, // 160: caos.zitadel.management.api.v1.ProjectGrantView.creation_date:type_name -> google.protobuf.Timestamp - 213, // 161: caos.zitadel.management.api.v1.ProjectGrantView.change_date:type_name -> google.protobuf.Timestamp - 162, // 162: caos.zitadel.management.api.v1.ProjectGrantSearchResponse.result:type_name -> caos.zitadel.management.api.v1.ProjectGrantView - 213, // 163: caos.zitadel.management.api.v1.ProjectGrantSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 127, // 164: caos.zitadel.management.api.v1.GrantedProjectSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.ProjectSearchQuery - 166, // 165: caos.zitadel.management.api.v1.ProjectGrantSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.ProjectGrantSearchQuery - 26, // 166: caos.zitadel.management.api.v1.ProjectGrantSearchQuery.key:type_name -> caos.zitadel.management.api.v1.ProjectGrantSearchKey - 5, // 167: caos.zitadel.management.api.v1.ProjectGrantSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod - 213, // 168: caos.zitadel.management.api.v1.ProjectGrantMember.change_date:type_name -> google.protobuf.Timestamp - 213, // 169: caos.zitadel.management.api.v1.ProjectGrantMember.creation_date:type_name -> google.protobuf.Timestamp - 213, // 170: caos.zitadel.management.api.v1.ProjectGrantMemberView.change_date:type_name -> google.protobuf.Timestamp - 213, // 171: caos.zitadel.management.api.v1.ProjectGrantMemberView.creation_date:type_name -> google.protobuf.Timestamp - 172, // 172: caos.zitadel.management.api.v1.ProjectGrantMemberSearchResponse.result:type_name -> caos.zitadel.management.api.v1.ProjectGrantMemberView - 213, // 173: caos.zitadel.management.api.v1.ProjectGrantMemberSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 175, // 174: caos.zitadel.management.api.v1.ProjectGrantMemberSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.ProjectGrantMemberSearchQuery - 27, // 175: caos.zitadel.management.api.v1.ProjectGrantMemberSearchQuery.key:type_name -> caos.zitadel.management.api.v1.ProjectGrantMemberSearchKey - 5, // 176: caos.zitadel.management.api.v1.ProjectGrantMemberSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod - 28, // 177: caos.zitadel.management.api.v1.UserGrant.state:type_name -> caos.zitadel.management.api.v1.UserGrantState - 213, // 178: caos.zitadel.management.api.v1.UserGrant.creation_date:type_name -> google.protobuf.Timestamp - 213, // 179: caos.zitadel.management.api.v1.UserGrant.change_date:type_name -> google.protobuf.Timestamp - 28, // 180: caos.zitadel.management.api.v1.UserGrantView.state:type_name -> caos.zitadel.management.api.v1.UserGrantState - 213, // 181: caos.zitadel.management.api.v1.UserGrantView.creation_date:type_name -> google.protobuf.Timestamp - 213, // 182: caos.zitadel.management.api.v1.UserGrantView.change_date:type_name -> google.protobuf.Timestamp - 181, // 183: caos.zitadel.management.api.v1.UserGrantSearchResponse.result:type_name -> caos.zitadel.management.api.v1.UserGrantView - 213, // 184: caos.zitadel.management.api.v1.UserGrantSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 184, // 185: caos.zitadel.management.api.v1.UserGrantSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.UserGrantSearchQuery - 29, // 186: caos.zitadel.management.api.v1.UserGrantSearchQuery.key:type_name -> caos.zitadel.management.api.v1.UserGrantSearchKey - 5, // 187: caos.zitadel.management.api.v1.UserGrantSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod - 188, // 188: caos.zitadel.management.api.v1.UserMembershipSearchResponse.result:type_name -> caos.zitadel.management.api.v1.UserMembershipView - 213, // 189: caos.zitadel.management.api.v1.UserMembershipSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 187, // 190: caos.zitadel.management.api.v1.UserMembershipSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.UserMembershipSearchQuery - 30, // 191: caos.zitadel.management.api.v1.UserMembershipSearchQuery.key:type_name -> caos.zitadel.management.api.v1.UserMembershipSearchKey - 5, // 192: caos.zitadel.management.api.v1.UserMembershipSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod - 31, // 193: caos.zitadel.management.api.v1.UserMembershipView.member_type:type_name -> caos.zitadel.management.api.v1.MemberType - 213, // 194: caos.zitadel.management.api.v1.UserMembershipView.creation_date:type_name -> google.protobuf.Timestamp - 213, // 195: caos.zitadel.management.api.v1.UserMembershipView.change_date:type_name -> google.protobuf.Timestamp - 32, // 196: caos.zitadel.management.api.v1.Idp.state:type_name -> caos.zitadel.management.api.v1.IdpState - 213, // 197: caos.zitadel.management.api.v1.Idp.creation_date:type_name -> google.protobuf.Timestamp - 213, // 198: caos.zitadel.management.api.v1.Idp.change_date:type_name -> google.protobuf.Timestamp - 192, // 199: caos.zitadel.management.api.v1.Idp.oidc_config:type_name -> caos.zitadel.management.api.v1.OidcIdpConfig - 33, // 200: caos.zitadel.management.api.v1.OidcIdpConfig.idp_display_name_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField - 33, // 201: caos.zitadel.management.api.v1.OidcIdpConfig.username_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField - 33, // 202: caos.zitadel.management.api.v1.OidcIdpConfigCreate.idp_display_name_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField - 33, // 203: caos.zitadel.management.api.v1.OidcIdpConfigCreate.username_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField - 33, // 204: caos.zitadel.management.api.v1.OidcIdpConfigUpdate.idp_display_name_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField - 33, // 205: caos.zitadel.management.api.v1.OidcIdpConfigUpdate.username_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField - 196, // 206: caos.zitadel.management.api.v1.IdpSearchResponse.result:type_name -> caos.zitadel.management.api.v1.IdpView - 213, // 207: caos.zitadel.management.api.v1.IdpSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 32, // 208: caos.zitadel.management.api.v1.IdpView.state:type_name -> caos.zitadel.management.api.v1.IdpState - 213, // 209: caos.zitadel.management.api.v1.IdpView.creation_date:type_name -> google.protobuf.Timestamp - 213, // 210: caos.zitadel.management.api.v1.IdpView.change_date:type_name -> google.protobuf.Timestamp - 36, // 211: caos.zitadel.management.api.v1.IdpView.provider_type:type_name -> caos.zitadel.management.api.v1.IdpProviderType - 197, // 212: caos.zitadel.management.api.v1.IdpView.oidc_config:type_name -> caos.zitadel.management.api.v1.OidcIdpConfigView - 33, // 213: caos.zitadel.management.api.v1.OidcIdpConfigView.idp_display_name_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField - 33, // 214: caos.zitadel.management.api.v1.OidcIdpConfigView.username_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField - 199, // 215: caos.zitadel.management.api.v1.IdpSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.IdpSearchQuery - 34, // 216: caos.zitadel.management.api.v1.IdpSearchQuery.key:type_name -> caos.zitadel.management.api.v1.IdpSearchKey - 5, // 217: caos.zitadel.management.api.v1.IdpSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod - 36, // 218: caos.zitadel.management.api.v1.IdpProviderAdd.idp_provider_type:type_name -> caos.zitadel.management.api.v1.IdpProviderType - 36, // 219: caos.zitadel.management.api.v1.IdpProvider.idp_provider_Type:type_name -> caos.zitadel.management.api.v1.IdpProviderType - 35, // 220: caos.zitadel.management.api.v1.IdpProviderView.type:type_name -> caos.zitadel.management.api.v1.IdpType - 206, // 221: caos.zitadel.management.api.v1.IdpProviderSearchResponse.result:type_name -> caos.zitadel.management.api.v1.IdpProviderView - 213, // 222: caos.zitadel.management.api.v1.IdpProviderSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 211, // 223: caos.zitadel.management.api.v1.ExternalIDPSearchResponse.result:type_name -> caos.zitadel.management.api.v1.ExternalIDPView - 213, // 224: caos.zitadel.management.api.v1.ExternalIDPSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp - 213, // 225: caos.zitadel.management.api.v1.ExternalIDPView.creation_date:type_name -> google.protobuf.Timestamp - 213, // 226: caos.zitadel.management.api.v1.ExternalIDPView.change_date:type_name -> google.protobuf.Timestamp - 216, // 227: caos.zitadel.management.api.v1.ManagementService.Healthz:input_type -> google.protobuf.Empty - 216, // 228: caos.zitadel.management.api.v1.ManagementService.Ready:input_type -> google.protobuf.Empty - 216, // 229: caos.zitadel.management.api.v1.ManagementService.Validate:input_type -> google.protobuf.Empty - 216, // 230: caos.zitadel.management.api.v1.ManagementService.GetZitadelDocs:input_type -> google.protobuf.Empty - 216, // 231: caos.zitadel.management.api.v1.ManagementService.GetIam:input_type -> google.protobuf.Empty - 47, // 232: caos.zitadel.management.api.v1.ManagementService.IsUserUnique:input_type -> caos.zitadel.management.api.v1.UniqueUserRequest - 45, // 233: caos.zitadel.management.api.v1.ManagementService.GetUserByID:input_type -> caos.zitadel.management.api.v1.UserID - 46, // 234: caos.zitadel.management.api.v1.ManagementService.GetUserByLoginNameGlobal:input_type -> caos.zitadel.management.api.v1.LoginName - 65, // 235: caos.zitadel.management.api.v1.ManagementService.SearchUsers:input_type -> caos.zitadel.management.api.v1.UserSearchRequest - 49, // 236: caos.zitadel.management.api.v1.ManagementService.CreateUser:input_type -> caos.zitadel.management.api.v1.CreateUserRequest - 45, // 237: caos.zitadel.management.api.v1.ManagementService.DeactivateUser:input_type -> caos.zitadel.management.api.v1.UserID - 45, // 238: caos.zitadel.management.api.v1.ManagementService.ReactivateUser:input_type -> caos.zitadel.management.api.v1.UserID - 45, // 239: caos.zitadel.management.api.v1.ManagementService.LockUser:input_type -> caos.zitadel.management.api.v1.UserID - 45, // 240: caos.zitadel.management.api.v1.ManagementService.UnlockUser:input_type -> caos.zitadel.management.api.v1.UserID - 45, // 241: caos.zitadel.management.api.v1.ManagementService.DeleteUser:input_type -> caos.zitadel.management.api.v1.UserID - 40, // 242: caos.zitadel.management.api.v1.ManagementService.UserChanges:input_type -> caos.zitadel.management.api.v1.ChangeRequest - 59, // 243: caos.zitadel.management.api.v1.ManagementService.AddMachineKey:input_type -> caos.zitadel.management.api.v1.AddMachineKeyRequest - 61, // 244: caos.zitadel.management.api.v1.ManagementService.DeleteMachineKey:input_type -> caos.zitadel.management.api.v1.MachineKeyIDRequest - 63, // 245: caos.zitadel.management.api.v1.ManagementService.SearchMachineKeys:input_type -> caos.zitadel.management.api.v1.MachineKeySearchRequest - 61, // 246: caos.zitadel.management.api.v1.ManagementService.GetMachineKey:input_type -> caos.zitadel.management.api.v1.MachineKeyIDRequest - 45, // 247: caos.zitadel.management.api.v1.ManagementService.GetUserProfile:input_type -> caos.zitadel.management.api.v1.UserID - 70, // 248: caos.zitadel.management.api.v1.ManagementService.UpdateUserProfile:input_type -> caos.zitadel.management.api.v1.UpdateUserProfileRequest - 45, // 249: caos.zitadel.management.api.v1.ManagementService.GetUserEmail:input_type -> caos.zitadel.management.api.v1.UserID - 71, // 250: caos.zitadel.management.api.v1.ManagementService.ChangeUserUserName:input_type -> caos.zitadel.management.api.v1.UpdateUserUserNameRequest - 74, // 251: caos.zitadel.management.api.v1.ManagementService.ChangeUserEmail:input_type -> caos.zitadel.management.api.v1.UpdateUserEmailRequest - 45, // 252: caos.zitadel.management.api.v1.ManagementService.ResendEmailVerificationMail:input_type -> caos.zitadel.management.api.v1.UserID - 45, // 253: caos.zitadel.management.api.v1.ManagementService.GetUserPhone:input_type -> caos.zitadel.management.api.v1.UserID - 77, // 254: caos.zitadel.management.api.v1.ManagementService.ChangeUserPhone:input_type -> caos.zitadel.management.api.v1.UpdateUserPhoneRequest - 45, // 255: caos.zitadel.management.api.v1.ManagementService.RemoveUserPhone:input_type -> caos.zitadel.management.api.v1.UserID - 45, // 256: caos.zitadel.management.api.v1.ManagementService.ResendPhoneVerificationCode:input_type -> caos.zitadel.management.api.v1.UserID - 45, // 257: caos.zitadel.management.api.v1.ManagementService.GetUserAddress:input_type -> caos.zitadel.management.api.v1.UserID - 80, // 258: caos.zitadel.management.api.v1.ManagementService.UpdateUserAddress:input_type -> caos.zitadel.management.api.v1.UpdateUserAddressRequest - 58, // 259: caos.zitadel.management.api.v1.ManagementService.UpdateUserMachine:input_type -> caos.zitadel.management.api.v1.UpdateMachineRequest - 209, // 260: caos.zitadel.management.api.v1.ManagementService.SearchUserExternalIDPs:input_type -> caos.zitadel.management.api.v1.ExternalIDPSearchRequest - 212, // 261: caos.zitadel.management.api.v1.ManagementService.RemoveExternalIDP:input_type -> caos.zitadel.management.api.v1.ExternalIDPRemoveRequest - 45, // 262: caos.zitadel.management.api.v1.ManagementService.GetUserMfas:input_type -> caos.zitadel.management.api.v1.UserID - 84, // 263: caos.zitadel.management.api.v1.ManagementService.SendSetPasswordNotification:input_type -> caos.zitadel.management.api.v1.SetPasswordNotificationRequest - 83, // 264: caos.zitadel.management.api.v1.ManagementService.SetInitialPassword:input_type -> caos.zitadel.management.api.v1.PasswordRequest - 186, // 265: caos.zitadel.management.api.v1.ManagementService.SearchUserMemberships:input_type -> caos.zitadel.management.api.v1.UserMembershipSearchRequest - 216, // 266: caos.zitadel.management.api.v1.ManagementService.GetPasswordComplexityPolicy:input_type -> google.protobuf.Empty - 216, // 267: caos.zitadel.management.api.v1.ManagementService.GetDefaultPasswordComplexityPolicy:input_type -> google.protobuf.Empty - 87, // 268: caos.zitadel.management.api.v1.ManagementService.CreatePasswordComplexityPolicy:input_type -> caos.zitadel.management.api.v1.PasswordComplexityPolicyCreate - 88, // 269: caos.zitadel.management.api.v1.ManagementService.UpdatePasswordComplexityPolicy:input_type -> caos.zitadel.management.api.v1.PasswordComplexityPolicyUpdate - 85, // 270: caos.zitadel.management.api.v1.ManagementService.DeletePasswordComplexityPolicy:input_type -> caos.zitadel.management.api.v1.PasswordComplexityPolicyID - 216, // 271: caos.zitadel.management.api.v1.ManagementService.GetPasswordAgePolicy:input_type -> google.protobuf.Empty - 91, // 272: caos.zitadel.management.api.v1.ManagementService.CreatePasswordAgePolicy:input_type -> caos.zitadel.management.api.v1.PasswordAgePolicyCreate - 92, // 273: caos.zitadel.management.api.v1.ManagementService.UpdatePasswordAgePolicy:input_type -> caos.zitadel.management.api.v1.PasswordAgePolicyUpdate - 89, // 274: caos.zitadel.management.api.v1.ManagementService.DeletePasswordAgePolicy:input_type -> caos.zitadel.management.api.v1.PasswordAgePolicyID - 216, // 275: caos.zitadel.management.api.v1.ManagementService.GetPasswordLockoutPolicy:input_type -> google.protobuf.Empty - 95, // 276: caos.zitadel.management.api.v1.ManagementService.CreatePasswordLockoutPolicy:input_type -> caos.zitadel.management.api.v1.PasswordLockoutPolicyCreate - 96, // 277: caos.zitadel.management.api.v1.ManagementService.UpdatePasswordLockoutPolicy:input_type -> caos.zitadel.management.api.v1.PasswordLockoutPolicyUpdate - 93, // 278: caos.zitadel.management.api.v1.ManagementService.DeletePasswordLockoutPolicy:input_type -> caos.zitadel.management.api.v1.PasswordLockoutPolicyID - 98, // 279: caos.zitadel.management.api.v1.ManagementService.CreateOrg:input_type -> caos.zitadel.management.api.v1.OrgCreateRequest - 40, // 280: caos.zitadel.management.api.v1.ManagementService.OrgChanges:input_type -> caos.zitadel.management.api.v1.ChangeRequest - 216, // 281: caos.zitadel.management.api.v1.ManagementService.GetMyOrg:input_type -> google.protobuf.Empty - 101, // 282: caos.zitadel.management.api.v1.ManagementService.GetOrgByDomainGlobal:input_type -> caos.zitadel.management.api.v1.Domain - 216, // 283: caos.zitadel.management.api.v1.ManagementService.DeactivateMyOrg:input_type -> google.protobuf.Empty - 216, // 284: caos.zitadel.management.api.v1.ManagementService.ReactivateMyOrg:input_type -> google.protobuf.Empty - 111, // 285: caos.zitadel.management.api.v1.ManagementService.SearchMyOrgDomains:input_type -> caos.zitadel.management.api.v1.OrgDomainSearchRequest - 104, // 286: caos.zitadel.management.api.v1.ManagementService.AddMyOrgDomain:input_type -> caos.zitadel.management.api.v1.AddOrgDomainRequest - 105, // 287: caos.zitadel.management.api.v1.ManagementService.GenerateMyOrgDomainValidation:input_type -> caos.zitadel.management.api.v1.OrgDomainValidationRequest - 107, // 288: caos.zitadel.management.api.v1.ManagementService.ValidateMyOrgDomain:input_type -> caos.zitadel.management.api.v1.ValidateOrgDomainRequest - 108, // 289: caos.zitadel.management.api.v1.ManagementService.SetMyPrimaryOrgDomain:input_type -> caos.zitadel.management.api.v1.PrimaryOrgDomainRequest - 109, // 290: caos.zitadel.management.api.v1.ManagementService.RemoveMyOrgDomain:input_type -> caos.zitadel.management.api.v1.RemoveOrgDomainRequest - 216, // 291: caos.zitadel.management.api.v1.ManagementService.GetMyOrgIamPolicy:input_type -> google.protobuf.Empty - 216, // 292: caos.zitadel.management.api.v1.ManagementService.GetOrgMemberRoles:input_type -> google.protobuf.Empty - 115, // 293: caos.zitadel.management.api.v1.ManagementService.AddMyOrgMember:input_type -> caos.zitadel.management.api.v1.AddOrgMemberRequest - 116, // 294: caos.zitadel.management.api.v1.ManagementService.ChangeMyOrgMember:input_type -> caos.zitadel.management.api.v1.ChangeOrgMemberRequest - 117, // 295: caos.zitadel.management.api.v1.ManagementService.RemoveMyOrgMember:input_type -> caos.zitadel.management.api.v1.RemoveOrgMemberRequest - 120, // 296: caos.zitadel.management.api.v1.ManagementService.SearchMyOrgMembers:input_type -> caos.zitadel.management.api.v1.OrgMemberSearchRequest - 40, // 297: caos.zitadel.management.api.v1.ManagementService.ProjectChanges:input_type -> caos.zitadel.management.api.v1.ChangeRequest - 126, // 298: caos.zitadel.management.api.v1.ManagementService.SearchProjects:input_type -> caos.zitadel.management.api.v1.ProjectSearchRequest - 44, // 299: caos.zitadel.management.api.v1.ManagementService.ProjectByID:input_type -> caos.zitadel.management.api.v1.ProjectID - 122, // 300: caos.zitadel.management.api.v1.ManagementService.CreateProject:input_type -> caos.zitadel.management.api.v1.ProjectCreateRequest - 123, // 301: caos.zitadel.management.api.v1.ManagementService.UpdateProject:input_type -> caos.zitadel.management.api.v1.ProjectUpdateRequest - 44, // 302: caos.zitadel.management.api.v1.ManagementService.DeactivateProject:input_type -> caos.zitadel.management.api.v1.ProjectID - 44, // 303: caos.zitadel.management.api.v1.ManagementService.ReactivateProject:input_type -> caos.zitadel.management.api.v1.ProjectID - 44, // 304: caos.zitadel.management.api.v1.ManagementService.RemoveProject:input_type -> caos.zitadel.management.api.v1.ProjectID - 164, // 305: caos.zitadel.management.api.v1.ManagementService.SearchGrantedProjects:input_type -> caos.zitadel.management.api.v1.GrantedProjectSearchRequest - 161, // 306: caos.zitadel.management.api.v1.ManagementService.GetGrantedProjectByID:input_type -> caos.zitadel.management.api.v1.ProjectGrantID - 216, // 307: caos.zitadel.management.api.v1.ManagementService.GetProjectMemberRoles:input_type -> google.protobuf.Empty - 146, // 308: caos.zitadel.management.api.v1.ManagementService.SearchProjectMembers:input_type -> caos.zitadel.management.api.v1.ProjectMemberSearchRequest - 132, // 309: caos.zitadel.management.api.v1.ManagementService.AddProjectMember:input_type -> caos.zitadel.management.api.v1.ProjectMemberAdd - 133, // 310: caos.zitadel.management.api.v1.ManagementService.ChangeProjectMember:input_type -> caos.zitadel.management.api.v1.ProjectMemberChange - 134, // 311: caos.zitadel.management.api.v1.ManagementService.RemoveProjectMember:input_type -> caos.zitadel.management.api.v1.ProjectMemberRemove - 142, // 312: caos.zitadel.management.api.v1.ManagementService.SearchProjectRoles:input_type -> caos.zitadel.management.api.v1.ProjectRoleSearchRequest - 135, // 313: caos.zitadel.management.api.v1.ManagementService.AddProjectRole:input_type -> caos.zitadel.management.api.v1.ProjectRoleAdd - 136, // 314: caos.zitadel.management.api.v1.ManagementService.BulkAddProjectRole:input_type -> caos.zitadel.management.api.v1.ProjectRoleAddBulk - 137, // 315: caos.zitadel.management.api.v1.ManagementService.ChangeProjectRole:input_type -> caos.zitadel.management.api.v1.ProjectRoleChange - 140, // 316: caos.zitadel.management.api.v1.ManagementService.RemoveProjectRole:input_type -> caos.zitadel.management.api.v1.ProjectRoleRemove - 156, // 317: caos.zitadel.management.api.v1.ManagementService.SearchApplications:input_type -> caos.zitadel.management.api.v1.ApplicationSearchRequest - 43, // 318: caos.zitadel.management.api.v1.ManagementService.ApplicationByID:input_type -> caos.zitadel.management.api.v1.ApplicationID - 40, // 319: caos.zitadel.management.api.v1.ManagementService.ApplicationChanges:input_type -> caos.zitadel.management.api.v1.ChangeRequest - 151, // 320: caos.zitadel.management.api.v1.ManagementService.CreateOIDCApplication:input_type -> caos.zitadel.management.api.v1.OIDCApplicationCreate - 149, // 321: caos.zitadel.management.api.v1.ManagementService.UpdateApplication:input_type -> caos.zitadel.management.api.v1.ApplicationUpdate - 43, // 322: caos.zitadel.management.api.v1.ManagementService.DeactivateApplication:input_type -> caos.zitadel.management.api.v1.ApplicationID - 43, // 323: caos.zitadel.management.api.v1.ManagementService.ReactivateApplication:input_type -> caos.zitadel.management.api.v1.ApplicationID - 43, // 324: caos.zitadel.management.api.v1.ManagementService.RemoveApplication:input_type -> caos.zitadel.management.api.v1.ApplicationID - 152, // 325: caos.zitadel.management.api.v1.ManagementService.UpdateApplicationOIDCConfig:input_type -> caos.zitadel.management.api.v1.OIDCConfigUpdate - 43, // 326: caos.zitadel.management.api.v1.ManagementService.RegenerateOIDCClientSecret:input_type -> caos.zitadel.management.api.v1.ApplicationID - 165, // 327: caos.zitadel.management.api.v1.ManagementService.SearchProjectGrants:input_type -> caos.zitadel.management.api.v1.ProjectGrantSearchRequest - 161, // 328: caos.zitadel.management.api.v1.ManagementService.ProjectGrantByID:input_type -> caos.zitadel.management.api.v1.ProjectGrantID - 159, // 329: caos.zitadel.management.api.v1.ManagementService.CreateProjectGrant:input_type -> caos.zitadel.management.api.v1.ProjectGrantCreate - 160, // 330: caos.zitadel.management.api.v1.ManagementService.UpdateProjectGrant:input_type -> caos.zitadel.management.api.v1.ProjectGrantUpdate - 161, // 331: caos.zitadel.management.api.v1.ManagementService.DeactivateProjectGrant:input_type -> caos.zitadel.management.api.v1.ProjectGrantID - 161, // 332: caos.zitadel.management.api.v1.ManagementService.ReactivateProjectGrant:input_type -> caos.zitadel.management.api.v1.ProjectGrantID - 161, // 333: caos.zitadel.management.api.v1.ManagementService.RemoveProjectGrant:input_type -> caos.zitadel.management.api.v1.ProjectGrantID - 216, // 334: caos.zitadel.management.api.v1.ManagementService.GetProjectGrantMemberRoles:input_type -> google.protobuf.Empty - 174, // 335: caos.zitadel.management.api.v1.ManagementService.SearchProjectGrantMembers:input_type -> caos.zitadel.management.api.v1.ProjectGrantMemberSearchRequest - 169, // 336: caos.zitadel.management.api.v1.ManagementService.AddProjectGrantMember:input_type -> caos.zitadel.management.api.v1.ProjectGrantMemberAdd - 170, // 337: caos.zitadel.management.api.v1.ManagementService.ChangeProjectGrantMember:input_type -> caos.zitadel.management.api.v1.ProjectGrantMemberChange - 171, // 338: caos.zitadel.management.api.v1.ManagementService.RemoveProjectGrantMember:input_type -> caos.zitadel.management.api.v1.ProjectGrantMemberRemove - 183, // 339: caos.zitadel.management.api.v1.ManagementService.SearchUserGrants:input_type -> caos.zitadel.management.api.v1.UserGrantSearchRequest - 180, // 340: caos.zitadel.management.api.v1.ManagementService.UserGrantByID:input_type -> caos.zitadel.management.api.v1.UserGrantID - 177, // 341: caos.zitadel.management.api.v1.ManagementService.CreateUserGrant:input_type -> caos.zitadel.management.api.v1.UserGrantCreate - 178, // 342: caos.zitadel.management.api.v1.ManagementService.UpdateUserGrant:input_type -> caos.zitadel.management.api.v1.UserGrantUpdate - 180, // 343: caos.zitadel.management.api.v1.ManagementService.DeactivateUserGrant:input_type -> caos.zitadel.management.api.v1.UserGrantID - 180, // 344: caos.zitadel.management.api.v1.ManagementService.ReactivateUserGrant:input_type -> caos.zitadel.management.api.v1.UserGrantID - 180, // 345: caos.zitadel.management.api.v1.ManagementService.RemoveUserGrant:input_type -> caos.zitadel.management.api.v1.UserGrantID - 179, // 346: caos.zitadel.management.api.v1.ManagementService.BulkRemoveUserGrant:input_type -> caos.zitadel.management.api.v1.UserGrantRemoveBulk - 189, // 347: caos.zitadel.management.api.v1.ManagementService.IdpByID:input_type -> caos.zitadel.management.api.v1.IdpID - 193, // 348: caos.zitadel.management.api.v1.ManagementService.CreateOidcIdp:input_type -> caos.zitadel.management.api.v1.OidcIdpConfigCreate - 191, // 349: caos.zitadel.management.api.v1.ManagementService.UpdateIdpConfig:input_type -> caos.zitadel.management.api.v1.IdpUpdate - 189, // 350: caos.zitadel.management.api.v1.ManagementService.DeactivateIdpConfig:input_type -> caos.zitadel.management.api.v1.IdpID - 189, // 351: caos.zitadel.management.api.v1.ManagementService.ReactivateIdpConfig:input_type -> caos.zitadel.management.api.v1.IdpID - 189, // 352: caos.zitadel.management.api.v1.ManagementService.RemoveIdpConfig:input_type -> caos.zitadel.management.api.v1.IdpID - 194, // 353: caos.zitadel.management.api.v1.ManagementService.UpdateOidcIdpConfig:input_type -> caos.zitadel.management.api.v1.OidcIdpConfigUpdate - 198, // 354: caos.zitadel.management.api.v1.ManagementService.SearchIdps:input_type -> caos.zitadel.management.api.v1.IdpSearchRequest - 216, // 355: caos.zitadel.management.api.v1.ManagementService.GetLoginPolicy:input_type -> google.protobuf.Empty - 201, // 356: caos.zitadel.management.api.v1.ManagementService.CreateLoginPolicy:input_type -> caos.zitadel.management.api.v1.LoginPolicyAdd - 200, // 357: caos.zitadel.management.api.v1.ManagementService.UpdateLoginPolicy:input_type -> caos.zitadel.management.api.v1.LoginPolicy - 216, // 358: caos.zitadel.management.api.v1.ManagementService.RemoveLoginPolicy:input_type -> google.protobuf.Empty - 208, // 359: caos.zitadel.management.api.v1.ManagementService.GetLoginPolicyIdpProviders:input_type -> caos.zitadel.management.api.v1.IdpProviderSearchRequest - 203, // 360: caos.zitadel.management.api.v1.ManagementService.AddIdpProviderToLoginPolicy:input_type -> caos.zitadel.management.api.v1.IdpProviderAdd - 202, // 361: caos.zitadel.management.api.v1.ManagementService.RemoveIdpProviderFromLoginPolicy:input_type -> caos.zitadel.management.api.v1.IdpProviderID - 216, // 362: caos.zitadel.management.api.v1.ManagementService.Healthz:output_type -> google.protobuf.Empty - 216, // 363: caos.zitadel.management.api.v1.ManagementService.Ready:output_type -> google.protobuf.Empty - 215, // 364: caos.zitadel.management.api.v1.ManagementService.Validate:output_type -> google.protobuf.Struct - 38, // 365: caos.zitadel.management.api.v1.ManagementService.GetZitadelDocs:output_type -> caos.zitadel.management.api.v1.ZitadelDocs - 39, // 366: caos.zitadel.management.api.v1.ManagementService.GetIam:output_type -> caos.zitadel.management.api.v1.Iam - 48, // 367: caos.zitadel.management.api.v1.ManagementService.IsUserUnique:output_type -> caos.zitadel.management.api.v1.UniqueUserResponse - 53, // 368: caos.zitadel.management.api.v1.ManagementService.GetUserByID:output_type -> caos.zitadel.management.api.v1.UserView - 53, // 369: caos.zitadel.management.api.v1.ManagementService.GetUserByLoginNameGlobal:output_type -> caos.zitadel.management.api.v1.UserView - 67, // 370: caos.zitadel.management.api.v1.ManagementService.SearchUsers:output_type -> caos.zitadel.management.api.v1.UserSearchResponse - 52, // 371: caos.zitadel.management.api.v1.ManagementService.CreateUser:output_type -> caos.zitadel.management.api.v1.UserResponse - 52, // 372: caos.zitadel.management.api.v1.ManagementService.DeactivateUser:output_type -> caos.zitadel.management.api.v1.UserResponse - 52, // 373: caos.zitadel.management.api.v1.ManagementService.ReactivateUser:output_type -> caos.zitadel.management.api.v1.UserResponse - 52, // 374: caos.zitadel.management.api.v1.ManagementService.LockUser:output_type -> caos.zitadel.management.api.v1.UserResponse - 52, // 375: caos.zitadel.management.api.v1.ManagementService.UnlockUser:output_type -> caos.zitadel.management.api.v1.UserResponse - 216, // 376: caos.zitadel.management.api.v1.ManagementService.DeleteUser:output_type -> google.protobuf.Empty - 41, // 377: caos.zitadel.management.api.v1.ManagementService.UserChanges:output_type -> caos.zitadel.management.api.v1.Changes - 60, // 378: caos.zitadel.management.api.v1.ManagementService.AddMachineKey:output_type -> caos.zitadel.management.api.v1.AddMachineKeyResponse - 216, // 379: caos.zitadel.management.api.v1.ManagementService.DeleteMachineKey:output_type -> google.protobuf.Empty - 64, // 380: caos.zitadel.management.api.v1.ManagementService.SearchMachineKeys:output_type -> caos.zitadel.management.api.v1.MachineKeySearchResponse - 62, // 381: caos.zitadel.management.api.v1.ManagementService.GetMachineKey:output_type -> caos.zitadel.management.api.v1.MachineKeyView - 69, // 382: caos.zitadel.management.api.v1.ManagementService.GetUserProfile:output_type -> caos.zitadel.management.api.v1.UserProfileView - 68, // 383: caos.zitadel.management.api.v1.ManagementService.UpdateUserProfile:output_type -> caos.zitadel.management.api.v1.UserProfile - 73, // 384: caos.zitadel.management.api.v1.ManagementService.GetUserEmail:output_type -> caos.zitadel.management.api.v1.UserEmailView - 216, // 385: caos.zitadel.management.api.v1.ManagementService.ChangeUserUserName:output_type -> google.protobuf.Empty - 72, // 386: caos.zitadel.management.api.v1.ManagementService.ChangeUserEmail:output_type -> caos.zitadel.management.api.v1.UserEmail - 216, // 387: caos.zitadel.management.api.v1.ManagementService.ResendEmailVerificationMail:output_type -> google.protobuf.Empty - 76, // 388: caos.zitadel.management.api.v1.ManagementService.GetUserPhone:output_type -> caos.zitadel.management.api.v1.UserPhoneView - 75, // 389: caos.zitadel.management.api.v1.ManagementService.ChangeUserPhone:output_type -> caos.zitadel.management.api.v1.UserPhone - 216, // 390: caos.zitadel.management.api.v1.ManagementService.RemoveUserPhone:output_type -> google.protobuf.Empty - 216, // 391: caos.zitadel.management.api.v1.ManagementService.ResendPhoneVerificationCode:output_type -> google.protobuf.Empty - 79, // 392: caos.zitadel.management.api.v1.ManagementService.GetUserAddress:output_type -> caos.zitadel.management.api.v1.UserAddressView - 78, // 393: caos.zitadel.management.api.v1.ManagementService.UpdateUserAddress:output_type -> caos.zitadel.management.api.v1.UserAddress - 56, // 394: caos.zitadel.management.api.v1.ManagementService.UpdateUserMachine:output_type -> caos.zitadel.management.api.v1.MachineResponse - 210, // 395: caos.zitadel.management.api.v1.ManagementService.SearchUserExternalIDPs:output_type -> caos.zitadel.management.api.v1.ExternalIDPSearchResponse - 216, // 396: caos.zitadel.management.api.v1.ManagementService.RemoveExternalIDP:output_type -> google.protobuf.Empty - 81, // 397: caos.zitadel.management.api.v1.ManagementService.GetUserMfas:output_type -> caos.zitadel.management.api.v1.MultiFactors - 216, // 398: caos.zitadel.management.api.v1.ManagementService.SendSetPasswordNotification:output_type -> google.protobuf.Empty - 216, // 399: caos.zitadel.management.api.v1.ManagementService.SetInitialPassword:output_type -> google.protobuf.Empty - 185, // 400: caos.zitadel.management.api.v1.ManagementService.SearchUserMemberships:output_type -> caos.zitadel.management.api.v1.UserMembershipSearchResponse - 86, // 401: caos.zitadel.management.api.v1.ManagementService.GetPasswordComplexityPolicy:output_type -> caos.zitadel.management.api.v1.PasswordComplexityPolicy - 86, // 402: caos.zitadel.management.api.v1.ManagementService.GetDefaultPasswordComplexityPolicy:output_type -> caos.zitadel.management.api.v1.PasswordComplexityPolicy - 86, // 403: caos.zitadel.management.api.v1.ManagementService.CreatePasswordComplexityPolicy:output_type -> caos.zitadel.management.api.v1.PasswordComplexityPolicy - 86, // 404: caos.zitadel.management.api.v1.ManagementService.UpdatePasswordComplexityPolicy:output_type -> caos.zitadel.management.api.v1.PasswordComplexityPolicy - 216, // 405: caos.zitadel.management.api.v1.ManagementService.DeletePasswordComplexityPolicy:output_type -> google.protobuf.Empty - 90, // 406: caos.zitadel.management.api.v1.ManagementService.GetPasswordAgePolicy:output_type -> caos.zitadel.management.api.v1.PasswordAgePolicy - 90, // 407: caos.zitadel.management.api.v1.ManagementService.CreatePasswordAgePolicy:output_type -> caos.zitadel.management.api.v1.PasswordAgePolicy - 90, // 408: caos.zitadel.management.api.v1.ManagementService.UpdatePasswordAgePolicy:output_type -> caos.zitadel.management.api.v1.PasswordAgePolicy - 216, // 409: caos.zitadel.management.api.v1.ManagementService.DeletePasswordAgePolicy:output_type -> google.protobuf.Empty - 94, // 410: caos.zitadel.management.api.v1.ManagementService.GetPasswordLockoutPolicy:output_type -> caos.zitadel.management.api.v1.PasswordLockoutPolicy - 94, // 411: caos.zitadel.management.api.v1.ManagementService.CreatePasswordLockoutPolicy:output_type -> caos.zitadel.management.api.v1.PasswordLockoutPolicy - 94, // 412: caos.zitadel.management.api.v1.ManagementService.UpdatePasswordLockoutPolicy:output_type -> caos.zitadel.management.api.v1.PasswordLockoutPolicy - 216, // 413: caos.zitadel.management.api.v1.ManagementService.DeletePasswordLockoutPolicy:output_type -> google.protobuf.Empty - 99, // 414: caos.zitadel.management.api.v1.ManagementService.CreateOrg:output_type -> caos.zitadel.management.api.v1.Org - 41, // 415: caos.zitadel.management.api.v1.ManagementService.OrgChanges:output_type -> caos.zitadel.management.api.v1.Changes - 100, // 416: caos.zitadel.management.api.v1.ManagementService.GetMyOrg:output_type -> caos.zitadel.management.api.v1.OrgView - 100, // 417: caos.zitadel.management.api.v1.ManagementService.GetOrgByDomainGlobal:output_type -> caos.zitadel.management.api.v1.OrgView - 99, // 418: caos.zitadel.management.api.v1.ManagementService.DeactivateMyOrg:output_type -> caos.zitadel.management.api.v1.Org - 99, // 419: caos.zitadel.management.api.v1.ManagementService.ReactivateMyOrg:output_type -> caos.zitadel.management.api.v1.Org - 110, // 420: caos.zitadel.management.api.v1.ManagementService.SearchMyOrgDomains:output_type -> caos.zitadel.management.api.v1.OrgDomainSearchResponse - 102, // 421: caos.zitadel.management.api.v1.ManagementService.AddMyOrgDomain:output_type -> caos.zitadel.management.api.v1.OrgDomain - 106, // 422: caos.zitadel.management.api.v1.ManagementService.GenerateMyOrgDomainValidation:output_type -> caos.zitadel.management.api.v1.OrgDomainValidationResponse - 216, // 423: caos.zitadel.management.api.v1.ManagementService.ValidateMyOrgDomain:output_type -> google.protobuf.Empty - 216, // 424: caos.zitadel.management.api.v1.ManagementService.SetMyPrimaryOrgDomain:output_type -> google.protobuf.Empty - 216, // 425: caos.zitadel.management.api.v1.ManagementService.RemoveMyOrgDomain:output_type -> google.protobuf.Empty - 97, // 426: caos.zitadel.management.api.v1.ManagementService.GetMyOrgIamPolicy:output_type -> caos.zitadel.management.api.v1.OrgIamPolicy - 113, // 427: caos.zitadel.management.api.v1.ManagementService.GetOrgMemberRoles:output_type -> caos.zitadel.management.api.v1.OrgMemberRoles - 114, // 428: caos.zitadel.management.api.v1.ManagementService.AddMyOrgMember:output_type -> caos.zitadel.management.api.v1.OrgMember - 114, // 429: caos.zitadel.management.api.v1.ManagementService.ChangeMyOrgMember:output_type -> caos.zitadel.management.api.v1.OrgMember - 216, // 430: caos.zitadel.management.api.v1.ManagementService.RemoveMyOrgMember:output_type -> google.protobuf.Empty - 118, // 431: caos.zitadel.management.api.v1.ManagementService.SearchMyOrgMembers:output_type -> caos.zitadel.management.api.v1.OrgMemberSearchResponse - 41, // 432: caos.zitadel.management.api.v1.ManagementService.ProjectChanges:output_type -> caos.zitadel.management.api.v1.Changes - 124, // 433: caos.zitadel.management.api.v1.ManagementService.SearchProjects:output_type -> caos.zitadel.management.api.v1.ProjectSearchResponse - 125, // 434: caos.zitadel.management.api.v1.ManagementService.ProjectByID:output_type -> caos.zitadel.management.api.v1.ProjectView - 129, // 435: caos.zitadel.management.api.v1.ManagementService.CreateProject:output_type -> caos.zitadel.management.api.v1.Project - 129, // 436: caos.zitadel.management.api.v1.ManagementService.UpdateProject:output_type -> caos.zitadel.management.api.v1.Project - 129, // 437: caos.zitadel.management.api.v1.ManagementService.DeactivateProject:output_type -> caos.zitadel.management.api.v1.Project - 129, // 438: caos.zitadel.management.api.v1.ManagementService.ReactivateProject:output_type -> caos.zitadel.management.api.v1.Project - 216, // 439: caos.zitadel.management.api.v1.ManagementService.RemoveProject:output_type -> google.protobuf.Empty - 163, // 440: caos.zitadel.management.api.v1.ManagementService.SearchGrantedProjects:output_type -> caos.zitadel.management.api.v1.ProjectGrantSearchResponse - 162, // 441: caos.zitadel.management.api.v1.ManagementService.GetGrantedProjectByID:output_type -> caos.zitadel.management.api.v1.ProjectGrantView - 130, // 442: caos.zitadel.management.api.v1.ManagementService.GetProjectMemberRoles:output_type -> caos.zitadel.management.api.v1.ProjectMemberRoles - 145, // 443: caos.zitadel.management.api.v1.ManagementService.SearchProjectMembers:output_type -> caos.zitadel.management.api.v1.ProjectMemberSearchResponse - 131, // 444: caos.zitadel.management.api.v1.ManagementService.AddProjectMember:output_type -> caos.zitadel.management.api.v1.ProjectMember - 131, // 445: caos.zitadel.management.api.v1.ManagementService.ChangeProjectMember:output_type -> caos.zitadel.management.api.v1.ProjectMember - 216, // 446: caos.zitadel.management.api.v1.ManagementService.RemoveProjectMember:output_type -> google.protobuf.Empty - 141, // 447: caos.zitadel.management.api.v1.ManagementService.SearchProjectRoles:output_type -> caos.zitadel.management.api.v1.ProjectRoleSearchResponse - 138, // 448: caos.zitadel.management.api.v1.ManagementService.AddProjectRole:output_type -> caos.zitadel.management.api.v1.ProjectRole - 216, // 449: caos.zitadel.management.api.v1.ManagementService.BulkAddProjectRole:output_type -> google.protobuf.Empty - 138, // 450: caos.zitadel.management.api.v1.ManagementService.ChangeProjectRole:output_type -> caos.zitadel.management.api.v1.ProjectRole - 216, // 451: caos.zitadel.management.api.v1.ManagementService.RemoveProjectRole:output_type -> google.protobuf.Empty - 155, // 452: caos.zitadel.management.api.v1.ManagementService.SearchApplications:output_type -> caos.zitadel.management.api.v1.ApplicationSearchResponse - 154, // 453: caos.zitadel.management.api.v1.ManagementService.ApplicationByID:output_type -> caos.zitadel.management.api.v1.ApplicationView - 41, // 454: caos.zitadel.management.api.v1.ManagementService.ApplicationChanges:output_type -> caos.zitadel.management.api.v1.Changes - 148, // 455: caos.zitadel.management.api.v1.ManagementService.CreateOIDCApplication:output_type -> caos.zitadel.management.api.v1.Application - 148, // 456: caos.zitadel.management.api.v1.ManagementService.UpdateApplication:output_type -> caos.zitadel.management.api.v1.Application - 148, // 457: caos.zitadel.management.api.v1.ManagementService.DeactivateApplication:output_type -> caos.zitadel.management.api.v1.Application - 148, // 458: caos.zitadel.management.api.v1.ManagementService.ReactivateApplication:output_type -> caos.zitadel.management.api.v1.Application - 216, // 459: caos.zitadel.management.api.v1.ManagementService.RemoveApplication:output_type -> google.protobuf.Empty - 150, // 460: caos.zitadel.management.api.v1.ManagementService.UpdateApplicationOIDCConfig:output_type -> caos.zitadel.management.api.v1.OIDCConfig - 153, // 461: caos.zitadel.management.api.v1.ManagementService.RegenerateOIDCClientSecret:output_type -> caos.zitadel.management.api.v1.ClientSecret - 163, // 462: caos.zitadel.management.api.v1.ManagementService.SearchProjectGrants:output_type -> caos.zitadel.management.api.v1.ProjectGrantSearchResponse - 162, // 463: caos.zitadel.management.api.v1.ManagementService.ProjectGrantByID:output_type -> caos.zitadel.management.api.v1.ProjectGrantView - 158, // 464: caos.zitadel.management.api.v1.ManagementService.CreateProjectGrant:output_type -> caos.zitadel.management.api.v1.ProjectGrant - 158, // 465: caos.zitadel.management.api.v1.ManagementService.UpdateProjectGrant:output_type -> caos.zitadel.management.api.v1.ProjectGrant - 158, // 466: caos.zitadel.management.api.v1.ManagementService.DeactivateProjectGrant:output_type -> caos.zitadel.management.api.v1.ProjectGrant - 158, // 467: caos.zitadel.management.api.v1.ManagementService.ReactivateProjectGrant:output_type -> caos.zitadel.management.api.v1.ProjectGrant - 216, // 468: caos.zitadel.management.api.v1.ManagementService.RemoveProjectGrant:output_type -> google.protobuf.Empty - 167, // 469: caos.zitadel.management.api.v1.ManagementService.GetProjectGrantMemberRoles:output_type -> caos.zitadel.management.api.v1.ProjectGrantMemberRoles - 173, // 470: caos.zitadel.management.api.v1.ManagementService.SearchProjectGrantMembers:output_type -> caos.zitadel.management.api.v1.ProjectGrantMemberSearchResponse - 168, // 471: caos.zitadel.management.api.v1.ManagementService.AddProjectGrantMember:output_type -> caos.zitadel.management.api.v1.ProjectGrantMember - 168, // 472: caos.zitadel.management.api.v1.ManagementService.ChangeProjectGrantMember:output_type -> caos.zitadel.management.api.v1.ProjectGrantMember - 216, // 473: caos.zitadel.management.api.v1.ManagementService.RemoveProjectGrantMember:output_type -> google.protobuf.Empty - 182, // 474: caos.zitadel.management.api.v1.ManagementService.SearchUserGrants:output_type -> caos.zitadel.management.api.v1.UserGrantSearchResponse - 181, // 475: caos.zitadel.management.api.v1.ManagementService.UserGrantByID:output_type -> caos.zitadel.management.api.v1.UserGrantView - 176, // 476: caos.zitadel.management.api.v1.ManagementService.CreateUserGrant:output_type -> caos.zitadel.management.api.v1.UserGrant - 176, // 477: caos.zitadel.management.api.v1.ManagementService.UpdateUserGrant:output_type -> caos.zitadel.management.api.v1.UserGrant - 176, // 478: caos.zitadel.management.api.v1.ManagementService.DeactivateUserGrant:output_type -> caos.zitadel.management.api.v1.UserGrant - 176, // 479: caos.zitadel.management.api.v1.ManagementService.ReactivateUserGrant:output_type -> caos.zitadel.management.api.v1.UserGrant - 216, // 480: caos.zitadel.management.api.v1.ManagementService.RemoveUserGrant:output_type -> google.protobuf.Empty - 216, // 481: caos.zitadel.management.api.v1.ManagementService.BulkRemoveUserGrant:output_type -> google.protobuf.Empty - 196, // 482: caos.zitadel.management.api.v1.ManagementService.IdpByID:output_type -> caos.zitadel.management.api.v1.IdpView - 190, // 483: caos.zitadel.management.api.v1.ManagementService.CreateOidcIdp:output_type -> caos.zitadel.management.api.v1.Idp - 190, // 484: caos.zitadel.management.api.v1.ManagementService.UpdateIdpConfig:output_type -> caos.zitadel.management.api.v1.Idp - 190, // 485: caos.zitadel.management.api.v1.ManagementService.DeactivateIdpConfig:output_type -> caos.zitadel.management.api.v1.Idp - 190, // 486: caos.zitadel.management.api.v1.ManagementService.ReactivateIdpConfig:output_type -> caos.zitadel.management.api.v1.Idp - 216, // 487: caos.zitadel.management.api.v1.ManagementService.RemoveIdpConfig:output_type -> google.protobuf.Empty - 192, // 488: caos.zitadel.management.api.v1.ManagementService.UpdateOidcIdpConfig:output_type -> caos.zitadel.management.api.v1.OidcIdpConfig - 195, // 489: caos.zitadel.management.api.v1.ManagementService.SearchIdps:output_type -> caos.zitadel.management.api.v1.IdpSearchResponse - 205, // 490: caos.zitadel.management.api.v1.ManagementService.GetLoginPolicy:output_type -> caos.zitadel.management.api.v1.LoginPolicyView - 200, // 491: caos.zitadel.management.api.v1.ManagementService.CreateLoginPolicy:output_type -> caos.zitadel.management.api.v1.LoginPolicy - 200, // 492: caos.zitadel.management.api.v1.ManagementService.UpdateLoginPolicy:output_type -> caos.zitadel.management.api.v1.LoginPolicy - 216, // 493: caos.zitadel.management.api.v1.ManagementService.RemoveLoginPolicy:output_type -> google.protobuf.Empty - 207, // 494: caos.zitadel.management.api.v1.ManagementService.GetLoginPolicyIdpProviders:output_type -> caos.zitadel.management.api.v1.IdpProviderSearchResponse - 204, // 495: caos.zitadel.management.api.v1.ManagementService.AddIdpProviderToLoginPolicy:output_type -> caos.zitadel.management.api.v1.IdpProvider - 216, // 496: caos.zitadel.management.api.v1.ManagementService.RemoveIdpProviderFromLoginPolicy:output_type -> google.protobuf.Empty - 362, // [362:497] is the sub-list for method output_type - 227, // [227:362] is the sub-list for method input_type - 227, // [227:227] is the sub-list for extension type_name - 227, // [227:227] is the sub-list for extension extendee - 0, // [0:227] is the sub-list for field type_name + 10, // 63: caos.zitadel.management.api.v1.Org.state:type_name -> caos.zitadel.management.api.v1.OrgState + 210, // 64: caos.zitadel.management.api.v1.Org.creation_date:type_name -> google.protobuf.Timestamp + 210, // 65: caos.zitadel.management.api.v1.Org.change_date:type_name -> google.protobuf.Timestamp + 10, // 66: caos.zitadel.management.api.v1.OrgView.state:type_name -> caos.zitadel.management.api.v1.OrgState + 210, // 67: caos.zitadel.management.api.v1.OrgView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 68: caos.zitadel.management.api.v1.OrgView.change_date:type_name -> google.protobuf.Timestamp + 210, // 69: caos.zitadel.management.api.v1.OrgDomain.creation_date:type_name -> google.protobuf.Timestamp + 210, // 70: caos.zitadel.management.api.v1.OrgDomain.change_date:type_name -> google.protobuf.Timestamp + 210, // 71: caos.zitadel.management.api.v1.OrgDomainView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 72: caos.zitadel.management.api.v1.OrgDomainView.change_date:type_name -> google.protobuf.Timestamp + 11, // 73: caos.zitadel.management.api.v1.OrgDomainView.validation_type:type_name -> caos.zitadel.management.api.v1.OrgDomainValidationType + 11, // 74: caos.zitadel.management.api.v1.OrgDomainValidationRequest.type:type_name -> caos.zitadel.management.api.v1.OrgDomainValidationType + 91, // 75: caos.zitadel.management.api.v1.OrgDomainSearchResponse.result:type_name -> caos.zitadel.management.api.v1.OrgDomainView + 210, // 76: caos.zitadel.management.api.v1.OrgDomainSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 100, // 77: caos.zitadel.management.api.v1.OrgDomainSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.OrgDomainSearchQuery + 12, // 78: caos.zitadel.management.api.v1.OrgDomainSearchQuery.key:type_name -> caos.zitadel.management.api.v1.OrgDomainSearchKey + 5, // 79: caos.zitadel.management.api.v1.OrgDomainSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod + 210, // 80: caos.zitadel.management.api.v1.OrgMember.change_date:type_name -> google.protobuf.Timestamp + 210, // 81: caos.zitadel.management.api.v1.OrgMember.creation_date:type_name -> google.protobuf.Timestamp + 107, // 82: caos.zitadel.management.api.v1.OrgMemberSearchResponse.result:type_name -> caos.zitadel.management.api.v1.OrgMemberView + 210, // 83: caos.zitadel.management.api.v1.OrgMemberSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 210, // 84: caos.zitadel.management.api.v1.OrgMemberView.change_date:type_name -> google.protobuf.Timestamp + 210, // 85: caos.zitadel.management.api.v1.OrgMemberView.creation_date:type_name -> google.protobuf.Timestamp + 109, // 86: caos.zitadel.management.api.v1.OrgMemberSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.OrgMemberSearchQuery + 13, // 87: caos.zitadel.management.api.v1.OrgMemberSearchQuery.key:type_name -> caos.zitadel.management.api.v1.OrgMemberSearchKey + 5, // 88: caos.zitadel.management.api.v1.OrgMemberSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod + 113, // 89: caos.zitadel.management.api.v1.ProjectSearchResponse.result:type_name -> caos.zitadel.management.api.v1.ProjectView + 210, // 90: caos.zitadel.management.api.v1.ProjectSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 15, // 91: caos.zitadel.management.api.v1.ProjectView.state:type_name -> caos.zitadel.management.api.v1.ProjectState + 210, // 92: caos.zitadel.management.api.v1.ProjectView.change_date:type_name -> google.protobuf.Timestamp + 210, // 93: caos.zitadel.management.api.v1.ProjectView.creation_date:type_name -> google.protobuf.Timestamp + 115, // 94: caos.zitadel.management.api.v1.ProjectSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.ProjectSearchQuery + 14, // 95: caos.zitadel.management.api.v1.ProjectSearchQuery.key:type_name -> caos.zitadel.management.api.v1.ProjectSearchKey + 5, // 96: caos.zitadel.management.api.v1.ProjectSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod + 117, // 97: caos.zitadel.management.api.v1.Projects.projects:type_name -> caos.zitadel.management.api.v1.Project + 15, // 98: caos.zitadel.management.api.v1.Project.state:type_name -> caos.zitadel.management.api.v1.ProjectState + 210, // 99: caos.zitadel.management.api.v1.Project.change_date:type_name -> google.protobuf.Timestamp + 210, // 100: caos.zitadel.management.api.v1.Project.creation_date:type_name -> google.protobuf.Timestamp + 210, // 101: caos.zitadel.management.api.v1.ProjectMember.change_date:type_name -> google.protobuf.Timestamp + 210, // 102: caos.zitadel.management.api.v1.ProjectMember.creation_date:type_name -> google.protobuf.Timestamp + 123, // 103: caos.zitadel.management.api.v1.ProjectRoleAddBulk.project_roles:type_name -> caos.zitadel.management.api.v1.ProjectRoleAdd + 210, // 104: caos.zitadel.management.api.v1.ProjectRole.creation_date:type_name -> google.protobuf.Timestamp + 210, // 105: caos.zitadel.management.api.v1.ProjectRole.change_date:type_name -> google.protobuf.Timestamp + 210, // 106: caos.zitadel.management.api.v1.ProjectRoleView.creation_date:type_name -> google.protobuf.Timestamp + 127, // 107: caos.zitadel.management.api.v1.ProjectRoleSearchResponse.result:type_name -> caos.zitadel.management.api.v1.ProjectRoleView + 210, // 108: caos.zitadel.management.api.v1.ProjectRoleSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 131, // 109: caos.zitadel.management.api.v1.ProjectRoleSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.ProjectRoleSearchQuery + 16, // 110: caos.zitadel.management.api.v1.ProjectRoleSearchQuery.key:type_name -> caos.zitadel.management.api.v1.ProjectRoleSearchKey + 5, // 111: caos.zitadel.management.api.v1.ProjectRoleSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod + 210, // 112: caos.zitadel.management.api.v1.ProjectMemberView.change_date:type_name -> google.protobuf.Timestamp + 210, // 113: caos.zitadel.management.api.v1.ProjectMemberView.creation_date:type_name -> google.protobuf.Timestamp + 132, // 114: caos.zitadel.management.api.v1.ProjectMemberSearchResponse.result:type_name -> caos.zitadel.management.api.v1.ProjectMemberView + 210, // 115: caos.zitadel.management.api.v1.ProjectMemberSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 135, // 116: caos.zitadel.management.api.v1.ProjectMemberSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.ProjectMemberSearchQuery + 17, // 117: caos.zitadel.management.api.v1.ProjectMemberSearchQuery.key:type_name -> caos.zitadel.management.api.v1.ProjectMemberSearchKey + 5, // 118: caos.zitadel.management.api.v1.ProjectMemberSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod + 18, // 119: caos.zitadel.management.api.v1.Application.state:type_name -> caos.zitadel.management.api.v1.AppState + 210, // 120: caos.zitadel.management.api.v1.Application.creation_date:type_name -> google.protobuf.Timestamp + 210, // 121: caos.zitadel.management.api.v1.Application.change_date:type_name -> google.protobuf.Timestamp + 138, // 122: caos.zitadel.management.api.v1.Application.oidc_config:type_name -> caos.zitadel.management.api.v1.OIDCConfig + 20, // 123: caos.zitadel.management.api.v1.OIDCConfig.response_types:type_name -> caos.zitadel.management.api.v1.OIDCResponseType + 21, // 124: caos.zitadel.management.api.v1.OIDCConfig.grant_types:type_name -> caos.zitadel.management.api.v1.OIDCGrantType + 22, // 125: caos.zitadel.management.api.v1.OIDCConfig.application_type:type_name -> caos.zitadel.management.api.v1.OIDCApplicationType + 23, // 126: caos.zitadel.management.api.v1.OIDCConfig.auth_method_type:type_name -> caos.zitadel.management.api.v1.OIDCAuthMethodType + 19, // 127: caos.zitadel.management.api.v1.OIDCConfig.version:type_name -> caos.zitadel.management.api.v1.OIDCVersion + 211, // 128: caos.zitadel.management.api.v1.OIDCConfig.compliance_problems:type_name -> caos.zitadel.api.v1.LocalizedMessage + 20, // 129: caos.zitadel.management.api.v1.OIDCApplicationCreate.response_types:type_name -> caos.zitadel.management.api.v1.OIDCResponseType + 21, // 130: caos.zitadel.management.api.v1.OIDCApplicationCreate.grant_types:type_name -> caos.zitadel.management.api.v1.OIDCGrantType + 22, // 131: caos.zitadel.management.api.v1.OIDCApplicationCreate.application_type:type_name -> caos.zitadel.management.api.v1.OIDCApplicationType + 23, // 132: caos.zitadel.management.api.v1.OIDCApplicationCreate.auth_method_type:type_name -> caos.zitadel.management.api.v1.OIDCAuthMethodType + 19, // 133: caos.zitadel.management.api.v1.OIDCApplicationCreate.version:type_name -> caos.zitadel.management.api.v1.OIDCVersion + 20, // 134: caos.zitadel.management.api.v1.OIDCConfigUpdate.response_types:type_name -> caos.zitadel.management.api.v1.OIDCResponseType + 21, // 135: caos.zitadel.management.api.v1.OIDCConfigUpdate.grant_types:type_name -> caos.zitadel.management.api.v1.OIDCGrantType + 22, // 136: caos.zitadel.management.api.v1.OIDCConfigUpdate.application_type:type_name -> caos.zitadel.management.api.v1.OIDCApplicationType + 23, // 137: caos.zitadel.management.api.v1.OIDCConfigUpdate.auth_method_type:type_name -> caos.zitadel.management.api.v1.OIDCAuthMethodType + 18, // 138: caos.zitadel.management.api.v1.ApplicationView.state:type_name -> caos.zitadel.management.api.v1.AppState + 210, // 139: caos.zitadel.management.api.v1.ApplicationView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 140: caos.zitadel.management.api.v1.ApplicationView.change_date:type_name -> google.protobuf.Timestamp + 138, // 141: caos.zitadel.management.api.v1.ApplicationView.oidc_config:type_name -> caos.zitadel.management.api.v1.OIDCConfig + 142, // 142: caos.zitadel.management.api.v1.ApplicationSearchResponse.result:type_name -> caos.zitadel.management.api.v1.ApplicationView + 210, // 143: caos.zitadel.management.api.v1.ApplicationSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 145, // 144: caos.zitadel.management.api.v1.ApplicationSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.ApplicationSearchQuery + 24, // 145: caos.zitadel.management.api.v1.ApplicationSearchQuery.key:type_name -> caos.zitadel.management.api.v1.ApplicationSearchKey + 5, // 146: caos.zitadel.management.api.v1.ApplicationSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod + 25, // 147: caos.zitadel.management.api.v1.ProjectGrant.state:type_name -> caos.zitadel.management.api.v1.ProjectGrantState + 210, // 148: caos.zitadel.management.api.v1.ProjectGrant.creation_date:type_name -> google.protobuf.Timestamp + 210, // 149: caos.zitadel.management.api.v1.ProjectGrant.change_date:type_name -> google.protobuf.Timestamp + 25, // 150: caos.zitadel.management.api.v1.ProjectGrantView.state:type_name -> caos.zitadel.management.api.v1.ProjectGrantState + 210, // 151: caos.zitadel.management.api.v1.ProjectGrantView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 152: caos.zitadel.management.api.v1.ProjectGrantView.change_date:type_name -> google.protobuf.Timestamp + 150, // 153: caos.zitadel.management.api.v1.ProjectGrantSearchResponse.result:type_name -> caos.zitadel.management.api.v1.ProjectGrantView + 210, // 154: caos.zitadel.management.api.v1.ProjectGrantSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 115, // 155: caos.zitadel.management.api.v1.GrantedProjectSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.ProjectSearchQuery + 154, // 156: caos.zitadel.management.api.v1.ProjectGrantSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.ProjectGrantSearchQuery + 26, // 157: caos.zitadel.management.api.v1.ProjectGrantSearchQuery.key:type_name -> caos.zitadel.management.api.v1.ProjectGrantSearchKey + 5, // 158: caos.zitadel.management.api.v1.ProjectGrantSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod + 210, // 159: caos.zitadel.management.api.v1.ProjectGrantMember.change_date:type_name -> google.protobuf.Timestamp + 210, // 160: caos.zitadel.management.api.v1.ProjectGrantMember.creation_date:type_name -> google.protobuf.Timestamp + 210, // 161: caos.zitadel.management.api.v1.ProjectGrantMemberView.change_date:type_name -> google.protobuf.Timestamp + 210, // 162: caos.zitadel.management.api.v1.ProjectGrantMemberView.creation_date:type_name -> google.protobuf.Timestamp + 160, // 163: caos.zitadel.management.api.v1.ProjectGrantMemberSearchResponse.result:type_name -> caos.zitadel.management.api.v1.ProjectGrantMemberView + 210, // 164: caos.zitadel.management.api.v1.ProjectGrantMemberSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 163, // 165: caos.zitadel.management.api.v1.ProjectGrantMemberSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.ProjectGrantMemberSearchQuery + 27, // 166: caos.zitadel.management.api.v1.ProjectGrantMemberSearchQuery.key:type_name -> caos.zitadel.management.api.v1.ProjectGrantMemberSearchKey + 5, // 167: caos.zitadel.management.api.v1.ProjectGrantMemberSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod + 28, // 168: caos.zitadel.management.api.v1.UserGrant.state:type_name -> caos.zitadel.management.api.v1.UserGrantState + 210, // 169: caos.zitadel.management.api.v1.UserGrant.creation_date:type_name -> google.protobuf.Timestamp + 210, // 170: caos.zitadel.management.api.v1.UserGrant.change_date:type_name -> google.protobuf.Timestamp + 28, // 171: caos.zitadel.management.api.v1.UserGrantView.state:type_name -> caos.zitadel.management.api.v1.UserGrantState + 210, // 172: caos.zitadel.management.api.v1.UserGrantView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 173: caos.zitadel.management.api.v1.UserGrantView.change_date:type_name -> google.protobuf.Timestamp + 169, // 174: caos.zitadel.management.api.v1.UserGrantSearchResponse.result:type_name -> caos.zitadel.management.api.v1.UserGrantView + 210, // 175: caos.zitadel.management.api.v1.UserGrantSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 172, // 176: caos.zitadel.management.api.v1.UserGrantSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.UserGrantSearchQuery + 29, // 177: caos.zitadel.management.api.v1.UserGrantSearchQuery.key:type_name -> caos.zitadel.management.api.v1.UserGrantSearchKey + 5, // 178: caos.zitadel.management.api.v1.UserGrantSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod + 176, // 179: caos.zitadel.management.api.v1.UserMembershipSearchResponse.result:type_name -> caos.zitadel.management.api.v1.UserMembershipView + 210, // 180: caos.zitadel.management.api.v1.UserMembershipSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 175, // 181: caos.zitadel.management.api.v1.UserMembershipSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.UserMembershipSearchQuery + 30, // 182: caos.zitadel.management.api.v1.UserMembershipSearchQuery.key:type_name -> caos.zitadel.management.api.v1.UserMembershipSearchKey + 5, // 183: caos.zitadel.management.api.v1.UserMembershipSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod + 31, // 184: caos.zitadel.management.api.v1.UserMembershipView.member_type:type_name -> caos.zitadel.management.api.v1.MemberType + 210, // 185: caos.zitadel.management.api.v1.UserMembershipView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 186: caos.zitadel.management.api.v1.UserMembershipView.change_date:type_name -> google.protobuf.Timestamp + 32, // 187: caos.zitadel.management.api.v1.Idp.state:type_name -> caos.zitadel.management.api.v1.IdpState + 210, // 188: caos.zitadel.management.api.v1.Idp.creation_date:type_name -> google.protobuf.Timestamp + 210, // 189: caos.zitadel.management.api.v1.Idp.change_date:type_name -> google.protobuf.Timestamp + 180, // 190: caos.zitadel.management.api.v1.Idp.oidc_config:type_name -> caos.zitadel.management.api.v1.OidcIdpConfig + 33, // 191: caos.zitadel.management.api.v1.OidcIdpConfig.idp_display_name_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField + 33, // 192: caos.zitadel.management.api.v1.OidcIdpConfig.username_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField + 33, // 193: caos.zitadel.management.api.v1.OidcIdpConfigCreate.idp_display_name_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField + 33, // 194: caos.zitadel.management.api.v1.OidcIdpConfigCreate.username_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField + 33, // 195: caos.zitadel.management.api.v1.OidcIdpConfigUpdate.idp_display_name_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField + 33, // 196: caos.zitadel.management.api.v1.OidcIdpConfigUpdate.username_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField + 184, // 197: caos.zitadel.management.api.v1.IdpSearchResponse.result:type_name -> caos.zitadel.management.api.v1.IdpView + 210, // 198: caos.zitadel.management.api.v1.IdpSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 32, // 199: caos.zitadel.management.api.v1.IdpView.state:type_name -> caos.zitadel.management.api.v1.IdpState + 210, // 200: caos.zitadel.management.api.v1.IdpView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 201: caos.zitadel.management.api.v1.IdpView.change_date:type_name -> google.protobuf.Timestamp + 36, // 202: caos.zitadel.management.api.v1.IdpView.provider_type:type_name -> caos.zitadel.management.api.v1.IdpProviderType + 185, // 203: caos.zitadel.management.api.v1.IdpView.oidc_config:type_name -> caos.zitadel.management.api.v1.OidcIdpConfigView + 33, // 204: caos.zitadel.management.api.v1.OidcIdpConfigView.idp_display_name_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField + 33, // 205: caos.zitadel.management.api.v1.OidcIdpConfigView.username_mapping:type_name -> caos.zitadel.management.api.v1.OIDCMappingField + 187, // 206: caos.zitadel.management.api.v1.IdpSearchRequest.queries:type_name -> caos.zitadel.management.api.v1.IdpSearchQuery + 34, // 207: caos.zitadel.management.api.v1.IdpSearchQuery.key:type_name -> caos.zitadel.management.api.v1.IdpSearchKey + 5, // 208: caos.zitadel.management.api.v1.IdpSearchQuery.method:type_name -> caos.zitadel.management.api.v1.SearchMethod + 210, // 209: caos.zitadel.management.api.v1.LoginPolicy.creation_date:type_name -> google.protobuf.Timestamp + 210, // 210: caos.zitadel.management.api.v1.LoginPolicy.change_date:type_name -> google.protobuf.Timestamp + 36, // 211: caos.zitadel.management.api.v1.IdpProviderAdd.idp_provider_type:type_name -> caos.zitadel.management.api.v1.IdpProviderType + 36, // 212: caos.zitadel.management.api.v1.IdpProvider.idp_provider_Type:type_name -> caos.zitadel.management.api.v1.IdpProviderType + 210, // 213: caos.zitadel.management.api.v1.LoginPolicyView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 214: caos.zitadel.management.api.v1.LoginPolicyView.change_date:type_name -> google.protobuf.Timestamp + 35, // 215: caos.zitadel.management.api.v1.IdpProviderView.type:type_name -> caos.zitadel.management.api.v1.IdpType + 194, // 216: caos.zitadel.management.api.v1.IdpProviderSearchResponse.result:type_name -> caos.zitadel.management.api.v1.IdpProviderView + 210, // 217: caos.zitadel.management.api.v1.IdpProviderSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 199, // 218: caos.zitadel.management.api.v1.ExternalIDPSearchResponse.result:type_name -> caos.zitadel.management.api.v1.ExternalIDPView + 210, // 219: caos.zitadel.management.api.v1.ExternalIDPSearchResponse.view_timestamp:type_name -> google.protobuf.Timestamp + 210, // 220: caos.zitadel.management.api.v1.ExternalIDPView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 221: caos.zitadel.management.api.v1.ExternalIDPView.change_date:type_name -> google.protobuf.Timestamp + 210, // 222: caos.zitadel.management.api.v1.PasswordComplexityPolicy.creation_date:type_name -> google.protobuf.Timestamp + 210, // 223: caos.zitadel.management.api.v1.PasswordComplexityPolicy.change_date:type_name -> google.protobuf.Timestamp + 210, // 224: caos.zitadel.management.api.v1.PasswordComplexityPolicyView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 225: caos.zitadel.management.api.v1.PasswordComplexityPolicyView.change_date:type_name -> google.protobuf.Timestamp + 210, // 226: caos.zitadel.management.api.v1.PasswordAgePolicy.creation_date:type_name -> google.protobuf.Timestamp + 210, // 227: caos.zitadel.management.api.v1.PasswordAgePolicy.change_date:type_name -> google.protobuf.Timestamp + 210, // 228: caos.zitadel.management.api.v1.PasswordAgePolicyView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 229: caos.zitadel.management.api.v1.PasswordAgePolicyView.change_date:type_name -> google.protobuf.Timestamp + 210, // 230: caos.zitadel.management.api.v1.PasswordLockoutPolicy.creation_date:type_name -> google.protobuf.Timestamp + 210, // 231: caos.zitadel.management.api.v1.PasswordLockoutPolicy.change_date:type_name -> google.protobuf.Timestamp + 210, // 232: caos.zitadel.management.api.v1.PasswordLockoutPolicyView.creation_date:type_name -> google.protobuf.Timestamp + 210, // 233: caos.zitadel.management.api.v1.PasswordLockoutPolicyView.change_date:type_name -> google.protobuf.Timestamp + 213, // 234: caos.zitadel.management.api.v1.ManagementService.Healthz:input_type -> google.protobuf.Empty + 213, // 235: caos.zitadel.management.api.v1.ManagementService.Ready:input_type -> google.protobuf.Empty + 213, // 236: caos.zitadel.management.api.v1.ManagementService.Validate:input_type -> google.protobuf.Empty + 213, // 237: caos.zitadel.management.api.v1.ManagementService.GetZitadelDocs:input_type -> google.protobuf.Empty + 213, // 238: caos.zitadel.management.api.v1.ManagementService.GetIam:input_type -> google.protobuf.Empty + 47, // 239: caos.zitadel.management.api.v1.ManagementService.IsUserUnique:input_type -> caos.zitadel.management.api.v1.UniqueUserRequest + 45, // 240: caos.zitadel.management.api.v1.ManagementService.GetUserByID:input_type -> caos.zitadel.management.api.v1.UserID + 46, // 241: caos.zitadel.management.api.v1.ManagementService.GetUserByLoginNameGlobal:input_type -> caos.zitadel.management.api.v1.LoginName + 65, // 242: caos.zitadel.management.api.v1.ManagementService.SearchUsers:input_type -> caos.zitadel.management.api.v1.UserSearchRequest + 49, // 243: caos.zitadel.management.api.v1.ManagementService.CreateUser:input_type -> caos.zitadel.management.api.v1.CreateUserRequest + 45, // 244: caos.zitadel.management.api.v1.ManagementService.DeactivateUser:input_type -> caos.zitadel.management.api.v1.UserID + 45, // 245: caos.zitadel.management.api.v1.ManagementService.ReactivateUser:input_type -> caos.zitadel.management.api.v1.UserID + 45, // 246: caos.zitadel.management.api.v1.ManagementService.LockUser:input_type -> caos.zitadel.management.api.v1.UserID + 45, // 247: caos.zitadel.management.api.v1.ManagementService.UnlockUser:input_type -> caos.zitadel.management.api.v1.UserID + 45, // 248: caos.zitadel.management.api.v1.ManagementService.DeleteUser:input_type -> caos.zitadel.management.api.v1.UserID + 40, // 249: caos.zitadel.management.api.v1.ManagementService.UserChanges:input_type -> caos.zitadel.management.api.v1.ChangeRequest + 59, // 250: caos.zitadel.management.api.v1.ManagementService.AddMachineKey:input_type -> caos.zitadel.management.api.v1.AddMachineKeyRequest + 61, // 251: caos.zitadel.management.api.v1.ManagementService.DeleteMachineKey:input_type -> caos.zitadel.management.api.v1.MachineKeyIDRequest + 63, // 252: caos.zitadel.management.api.v1.ManagementService.SearchMachineKeys:input_type -> caos.zitadel.management.api.v1.MachineKeySearchRequest + 61, // 253: caos.zitadel.management.api.v1.ManagementService.GetMachineKey:input_type -> caos.zitadel.management.api.v1.MachineKeyIDRequest + 45, // 254: caos.zitadel.management.api.v1.ManagementService.GetUserProfile:input_type -> caos.zitadel.management.api.v1.UserID + 70, // 255: caos.zitadel.management.api.v1.ManagementService.UpdateUserProfile:input_type -> caos.zitadel.management.api.v1.UpdateUserProfileRequest + 45, // 256: caos.zitadel.management.api.v1.ManagementService.GetUserEmail:input_type -> caos.zitadel.management.api.v1.UserID + 71, // 257: caos.zitadel.management.api.v1.ManagementService.ChangeUserUserName:input_type -> caos.zitadel.management.api.v1.UpdateUserUserNameRequest + 74, // 258: caos.zitadel.management.api.v1.ManagementService.ChangeUserEmail:input_type -> caos.zitadel.management.api.v1.UpdateUserEmailRequest + 45, // 259: caos.zitadel.management.api.v1.ManagementService.ResendEmailVerificationMail:input_type -> caos.zitadel.management.api.v1.UserID + 45, // 260: caos.zitadel.management.api.v1.ManagementService.GetUserPhone:input_type -> caos.zitadel.management.api.v1.UserID + 77, // 261: caos.zitadel.management.api.v1.ManagementService.ChangeUserPhone:input_type -> caos.zitadel.management.api.v1.UpdateUserPhoneRequest + 45, // 262: caos.zitadel.management.api.v1.ManagementService.RemoveUserPhone:input_type -> caos.zitadel.management.api.v1.UserID + 45, // 263: caos.zitadel.management.api.v1.ManagementService.ResendPhoneVerificationCode:input_type -> caos.zitadel.management.api.v1.UserID + 45, // 264: caos.zitadel.management.api.v1.ManagementService.GetUserAddress:input_type -> caos.zitadel.management.api.v1.UserID + 80, // 265: caos.zitadel.management.api.v1.ManagementService.UpdateUserAddress:input_type -> caos.zitadel.management.api.v1.UpdateUserAddressRequest + 58, // 266: caos.zitadel.management.api.v1.ManagementService.UpdateUserMachine:input_type -> caos.zitadel.management.api.v1.UpdateMachineRequest + 197, // 267: caos.zitadel.management.api.v1.ManagementService.SearchUserExternalIDPs:input_type -> caos.zitadel.management.api.v1.ExternalIDPSearchRequest + 200, // 268: caos.zitadel.management.api.v1.ManagementService.RemoveExternalIDP:input_type -> caos.zitadel.management.api.v1.ExternalIDPRemoveRequest + 45, // 269: caos.zitadel.management.api.v1.ManagementService.GetUserMfas:input_type -> caos.zitadel.management.api.v1.UserID + 84, // 270: caos.zitadel.management.api.v1.ManagementService.SendSetPasswordNotification:input_type -> caos.zitadel.management.api.v1.SetPasswordNotificationRequest + 83, // 271: caos.zitadel.management.api.v1.ManagementService.SetInitialPassword:input_type -> caos.zitadel.management.api.v1.PasswordRequest + 174, // 272: caos.zitadel.management.api.v1.ManagementService.SearchUserMemberships:input_type -> caos.zitadel.management.api.v1.UserMembershipSearchRequest + 86, // 273: caos.zitadel.management.api.v1.ManagementService.CreateOrg:input_type -> caos.zitadel.management.api.v1.OrgCreateRequest + 40, // 274: caos.zitadel.management.api.v1.ManagementService.OrgChanges:input_type -> caos.zitadel.management.api.v1.ChangeRequest + 213, // 275: caos.zitadel.management.api.v1.ManagementService.GetMyOrg:input_type -> google.protobuf.Empty + 89, // 276: caos.zitadel.management.api.v1.ManagementService.GetOrgByDomainGlobal:input_type -> caos.zitadel.management.api.v1.Domain + 213, // 277: caos.zitadel.management.api.v1.ManagementService.DeactivateMyOrg:input_type -> google.protobuf.Empty + 213, // 278: caos.zitadel.management.api.v1.ManagementService.ReactivateMyOrg:input_type -> google.protobuf.Empty + 99, // 279: caos.zitadel.management.api.v1.ManagementService.SearchMyOrgDomains:input_type -> caos.zitadel.management.api.v1.OrgDomainSearchRequest + 92, // 280: caos.zitadel.management.api.v1.ManagementService.AddMyOrgDomain:input_type -> caos.zitadel.management.api.v1.AddOrgDomainRequest + 93, // 281: caos.zitadel.management.api.v1.ManagementService.GenerateMyOrgDomainValidation:input_type -> caos.zitadel.management.api.v1.OrgDomainValidationRequest + 95, // 282: caos.zitadel.management.api.v1.ManagementService.ValidateMyOrgDomain:input_type -> caos.zitadel.management.api.v1.ValidateOrgDomainRequest + 96, // 283: caos.zitadel.management.api.v1.ManagementService.SetMyPrimaryOrgDomain:input_type -> caos.zitadel.management.api.v1.PrimaryOrgDomainRequest + 97, // 284: caos.zitadel.management.api.v1.ManagementService.RemoveMyOrgDomain:input_type -> caos.zitadel.management.api.v1.RemoveOrgDomainRequest + 213, // 285: caos.zitadel.management.api.v1.ManagementService.GetMyOrgIamPolicy:input_type -> google.protobuf.Empty + 213, // 286: caos.zitadel.management.api.v1.ManagementService.GetOrgMemberRoles:input_type -> google.protobuf.Empty + 103, // 287: caos.zitadel.management.api.v1.ManagementService.AddMyOrgMember:input_type -> caos.zitadel.management.api.v1.AddOrgMemberRequest + 104, // 288: caos.zitadel.management.api.v1.ManagementService.ChangeMyOrgMember:input_type -> caos.zitadel.management.api.v1.ChangeOrgMemberRequest + 105, // 289: caos.zitadel.management.api.v1.ManagementService.RemoveMyOrgMember:input_type -> caos.zitadel.management.api.v1.RemoveOrgMemberRequest + 108, // 290: caos.zitadel.management.api.v1.ManagementService.SearchMyOrgMembers:input_type -> caos.zitadel.management.api.v1.OrgMemberSearchRequest + 40, // 291: caos.zitadel.management.api.v1.ManagementService.ProjectChanges:input_type -> caos.zitadel.management.api.v1.ChangeRequest + 114, // 292: caos.zitadel.management.api.v1.ManagementService.SearchProjects:input_type -> caos.zitadel.management.api.v1.ProjectSearchRequest + 44, // 293: caos.zitadel.management.api.v1.ManagementService.ProjectByID:input_type -> caos.zitadel.management.api.v1.ProjectID + 110, // 294: caos.zitadel.management.api.v1.ManagementService.CreateProject:input_type -> caos.zitadel.management.api.v1.ProjectCreateRequest + 111, // 295: caos.zitadel.management.api.v1.ManagementService.UpdateProject:input_type -> caos.zitadel.management.api.v1.ProjectUpdateRequest + 44, // 296: caos.zitadel.management.api.v1.ManagementService.DeactivateProject:input_type -> caos.zitadel.management.api.v1.ProjectID + 44, // 297: caos.zitadel.management.api.v1.ManagementService.ReactivateProject:input_type -> caos.zitadel.management.api.v1.ProjectID + 44, // 298: caos.zitadel.management.api.v1.ManagementService.RemoveProject:input_type -> caos.zitadel.management.api.v1.ProjectID + 152, // 299: caos.zitadel.management.api.v1.ManagementService.SearchGrantedProjects:input_type -> caos.zitadel.management.api.v1.GrantedProjectSearchRequest + 149, // 300: caos.zitadel.management.api.v1.ManagementService.GetGrantedProjectByID:input_type -> caos.zitadel.management.api.v1.ProjectGrantID + 213, // 301: caos.zitadel.management.api.v1.ManagementService.GetProjectMemberRoles:input_type -> google.protobuf.Empty + 134, // 302: caos.zitadel.management.api.v1.ManagementService.SearchProjectMembers:input_type -> caos.zitadel.management.api.v1.ProjectMemberSearchRequest + 120, // 303: caos.zitadel.management.api.v1.ManagementService.AddProjectMember:input_type -> caos.zitadel.management.api.v1.ProjectMemberAdd + 121, // 304: caos.zitadel.management.api.v1.ManagementService.ChangeProjectMember:input_type -> caos.zitadel.management.api.v1.ProjectMemberChange + 122, // 305: caos.zitadel.management.api.v1.ManagementService.RemoveProjectMember:input_type -> caos.zitadel.management.api.v1.ProjectMemberRemove + 130, // 306: caos.zitadel.management.api.v1.ManagementService.SearchProjectRoles:input_type -> caos.zitadel.management.api.v1.ProjectRoleSearchRequest + 123, // 307: caos.zitadel.management.api.v1.ManagementService.AddProjectRole:input_type -> caos.zitadel.management.api.v1.ProjectRoleAdd + 124, // 308: caos.zitadel.management.api.v1.ManagementService.BulkAddProjectRole:input_type -> caos.zitadel.management.api.v1.ProjectRoleAddBulk + 125, // 309: caos.zitadel.management.api.v1.ManagementService.ChangeProjectRole:input_type -> caos.zitadel.management.api.v1.ProjectRoleChange + 128, // 310: caos.zitadel.management.api.v1.ManagementService.RemoveProjectRole:input_type -> caos.zitadel.management.api.v1.ProjectRoleRemove + 144, // 311: caos.zitadel.management.api.v1.ManagementService.SearchApplications:input_type -> caos.zitadel.management.api.v1.ApplicationSearchRequest + 43, // 312: caos.zitadel.management.api.v1.ManagementService.ApplicationByID:input_type -> caos.zitadel.management.api.v1.ApplicationID + 40, // 313: caos.zitadel.management.api.v1.ManagementService.ApplicationChanges:input_type -> caos.zitadel.management.api.v1.ChangeRequest + 139, // 314: caos.zitadel.management.api.v1.ManagementService.CreateOIDCApplication:input_type -> caos.zitadel.management.api.v1.OIDCApplicationCreate + 137, // 315: caos.zitadel.management.api.v1.ManagementService.UpdateApplication:input_type -> caos.zitadel.management.api.v1.ApplicationUpdate + 43, // 316: caos.zitadel.management.api.v1.ManagementService.DeactivateApplication:input_type -> caos.zitadel.management.api.v1.ApplicationID + 43, // 317: caos.zitadel.management.api.v1.ManagementService.ReactivateApplication:input_type -> caos.zitadel.management.api.v1.ApplicationID + 43, // 318: caos.zitadel.management.api.v1.ManagementService.RemoveApplication:input_type -> caos.zitadel.management.api.v1.ApplicationID + 140, // 319: caos.zitadel.management.api.v1.ManagementService.UpdateApplicationOIDCConfig:input_type -> caos.zitadel.management.api.v1.OIDCConfigUpdate + 43, // 320: caos.zitadel.management.api.v1.ManagementService.RegenerateOIDCClientSecret:input_type -> caos.zitadel.management.api.v1.ApplicationID + 153, // 321: caos.zitadel.management.api.v1.ManagementService.SearchProjectGrants:input_type -> caos.zitadel.management.api.v1.ProjectGrantSearchRequest + 149, // 322: caos.zitadel.management.api.v1.ManagementService.ProjectGrantByID:input_type -> caos.zitadel.management.api.v1.ProjectGrantID + 147, // 323: caos.zitadel.management.api.v1.ManagementService.CreateProjectGrant:input_type -> caos.zitadel.management.api.v1.ProjectGrantCreate + 148, // 324: caos.zitadel.management.api.v1.ManagementService.UpdateProjectGrant:input_type -> caos.zitadel.management.api.v1.ProjectGrantUpdate + 149, // 325: caos.zitadel.management.api.v1.ManagementService.DeactivateProjectGrant:input_type -> caos.zitadel.management.api.v1.ProjectGrantID + 149, // 326: caos.zitadel.management.api.v1.ManagementService.ReactivateProjectGrant:input_type -> caos.zitadel.management.api.v1.ProjectGrantID + 149, // 327: caos.zitadel.management.api.v1.ManagementService.RemoveProjectGrant:input_type -> caos.zitadel.management.api.v1.ProjectGrantID + 213, // 328: caos.zitadel.management.api.v1.ManagementService.GetProjectGrantMemberRoles:input_type -> google.protobuf.Empty + 162, // 329: caos.zitadel.management.api.v1.ManagementService.SearchProjectGrantMembers:input_type -> caos.zitadel.management.api.v1.ProjectGrantMemberSearchRequest + 157, // 330: caos.zitadel.management.api.v1.ManagementService.AddProjectGrantMember:input_type -> caos.zitadel.management.api.v1.ProjectGrantMemberAdd + 158, // 331: caos.zitadel.management.api.v1.ManagementService.ChangeProjectGrantMember:input_type -> caos.zitadel.management.api.v1.ProjectGrantMemberChange + 159, // 332: caos.zitadel.management.api.v1.ManagementService.RemoveProjectGrantMember:input_type -> caos.zitadel.management.api.v1.ProjectGrantMemberRemove + 171, // 333: caos.zitadel.management.api.v1.ManagementService.SearchUserGrants:input_type -> caos.zitadel.management.api.v1.UserGrantSearchRequest + 168, // 334: caos.zitadel.management.api.v1.ManagementService.UserGrantByID:input_type -> caos.zitadel.management.api.v1.UserGrantID + 165, // 335: caos.zitadel.management.api.v1.ManagementService.CreateUserGrant:input_type -> caos.zitadel.management.api.v1.UserGrantCreate + 166, // 336: caos.zitadel.management.api.v1.ManagementService.UpdateUserGrant:input_type -> caos.zitadel.management.api.v1.UserGrantUpdate + 168, // 337: caos.zitadel.management.api.v1.ManagementService.DeactivateUserGrant:input_type -> caos.zitadel.management.api.v1.UserGrantID + 168, // 338: caos.zitadel.management.api.v1.ManagementService.ReactivateUserGrant:input_type -> caos.zitadel.management.api.v1.UserGrantID + 168, // 339: caos.zitadel.management.api.v1.ManagementService.RemoveUserGrant:input_type -> caos.zitadel.management.api.v1.UserGrantID + 167, // 340: caos.zitadel.management.api.v1.ManagementService.BulkRemoveUserGrant:input_type -> caos.zitadel.management.api.v1.UserGrantRemoveBulk + 177, // 341: caos.zitadel.management.api.v1.ManagementService.IdpByID:input_type -> caos.zitadel.management.api.v1.IdpID + 181, // 342: caos.zitadel.management.api.v1.ManagementService.CreateOidcIdp:input_type -> caos.zitadel.management.api.v1.OidcIdpConfigCreate + 179, // 343: caos.zitadel.management.api.v1.ManagementService.UpdateIdpConfig:input_type -> caos.zitadel.management.api.v1.IdpUpdate + 177, // 344: caos.zitadel.management.api.v1.ManagementService.DeactivateIdpConfig:input_type -> caos.zitadel.management.api.v1.IdpID + 177, // 345: caos.zitadel.management.api.v1.ManagementService.ReactivateIdpConfig:input_type -> caos.zitadel.management.api.v1.IdpID + 177, // 346: caos.zitadel.management.api.v1.ManagementService.RemoveIdpConfig:input_type -> caos.zitadel.management.api.v1.IdpID + 182, // 347: caos.zitadel.management.api.v1.ManagementService.UpdateOidcIdpConfig:input_type -> caos.zitadel.management.api.v1.OidcIdpConfigUpdate + 186, // 348: caos.zitadel.management.api.v1.ManagementService.SearchIdps:input_type -> caos.zitadel.management.api.v1.IdpSearchRequest + 213, // 349: caos.zitadel.management.api.v1.ManagementService.GetLoginPolicy:input_type -> google.protobuf.Empty + 213, // 350: caos.zitadel.management.api.v1.ManagementService.GetDefaultLoginPolicy:input_type -> google.protobuf.Empty + 189, // 351: caos.zitadel.management.api.v1.ManagementService.CreateLoginPolicy:input_type -> caos.zitadel.management.api.v1.LoginPolicyRequest + 189, // 352: caos.zitadel.management.api.v1.ManagementService.UpdateLoginPolicy:input_type -> caos.zitadel.management.api.v1.LoginPolicyRequest + 213, // 353: caos.zitadel.management.api.v1.ManagementService.RemoveLoginPolicy:input_type -> google.protobuf.Empty + 196, // 354: caos.zitadel.management.api.v1.ManagementService.GetLoginPolicyIdpProviders:input_type -> caos.zitadel.management.api.v1.IdpProviderSearchRequest + 191, // 355: caos.zitadel.management.api.v1.ManagementService.AddIdpProviderToLoginPolicy:input_type -> caos.zitadel.management.api.v1.IdpProviderAdd + 190, // 356: caos.zitadel.management.api.v1.ManagementService.RemoveIdpProviderFromLoginPolicy:input_type -> caos.zitadel.management.api.v1.IdpProviderID + 213, // 357: caos.zitadel.management.api.v1.ManagementService.GetPasswordComplexityPolicy:input_type -> google.protobuf.Empty + 213, // 358: caos.zitadel.management.api.v1.ManagementService.GetDefaultPasswordComplexityPolicy:input_type -> google.protobuf.Empty + 202, // 359: caos.zitadel.management.api.v1.ManagementService.CreatePasswordComplexityPolicy:input_type -> caos.zitadel.management.api.v1.PasswordComplexityPolicyRequest + 202, // 360: caos.zitadel.management.api.v1.ManagementService.UpdatePasswordComplexityPolicy:input_type -> caos.zitadel.management.api.v1.PasswordComplexityPolicyRequest + 213, // 361: caos.zitadel.management.api.v1.ManagementService.RemovePasswordComplexityPolicy:input_type -> google.protobuf.Empty + 213, // 362: caos.zitadel.management.api.v1.ManagementService.GetPasswordAgePolicy:input_type -> google.protobuf.Empty + 213, // 363: caos.zitadel.management.api.v1.ManagementService.GetDefaultPasswordAgePolicy:input_type -> google.protobuf.Empty + 205, // 364: caos.zitadel.management.api.v1.ManagementService.CreatePasswordAgePolicy:input_type -> caos.zitadel.management.api.v1.PasswordAgePolicyRequest + 205, // 365: caos.zitadel.management.api.v1.ManagementService.UpdatePasswordAgePolicy:input_type -> caos.zitadel.management.api.v1.PasswordAgePolicyRequest + 213, // 366: caos.zitadel.management.api.v1.ManagementService.RemovePasswordAgePolicy:input_type -> google.protobuf.Empty + 213, // 367: caos.zitadel.management.api.v1.ManagementService.GetPasswordLockoutPolicy:input_type -> google.protobuf.Empty + 213, // 368: caos.zitadel.management.api.v1.ManagementService.GetDefaultPasswordLockoutPolicy:input_type -> google.protobuf.Empty + 208, // 369: caos.zitadel.management.api.v1.ManagementService.CreatePasswordLockoutPolicy:input_type -> caos.zitadel.management.api.v1.PasswordLockoutPolicyRequest + 208, // 370: caos.zitadel.management.api.v1.ManagementService.UpdatePasswordLockoutPolicy:input_type -> caos.zitadel.management.api.v1.PasswordLockoutPolicyRequest + 213, // 371: caos.zitadel.management.api.v1.ManagementService.RemovePasswordLockoutPolicy:input_type -> google.protobuf.Empty + 213, // 372: caos.zitadel.management.api.v1.ManagementService.Healthz:output_type -> google.protobuf.Empty + 213, // 373: caos.zitadel.management.api.v1.ManagementService.Ready:output_type -> google.protobuf.Empty + 212, // 374: caos.zitadel.management.api.v1.ManagementService.Validate:output_type -> google.protobuf.Struct + 38, // 375: caos.zitadel.management.api.v1.ManagementService.GetZitadelDocs:output_type -> caos.zitadel.management.api.v1.ZitadelDocs + 39, // 376: caos.zitadel.management.api.v1.ManagementService.GetIam:output_type -> caos.zitadel.management.api.v1.Iam + 48, // 377: caos.zitadel.management.api.v1.ManagementService.IsUserUnique:output_type -> caos.zitadel.management.api.v1.UniqueUserResponse + 53, // 378: caos.zitadel.management.api.v1.ManagementService.GetUserByID:output_type -> caos.zitadel.management.api.v1.UserView + 53, // 379: caos.zitadel.management.api.v1.ManagementService.GetUserByLoginNameGlobal:output_type -> caos.zitadel.management.api.v1.UserView + 67, // 380: caos.zitadel.management.api.v1.ManagementService.SearchUsers:output_type -> caos.zitadel.management.api.v1.UserSearchResponse + 52, // 381: caos.zitadel.management.api.v1.ManagementService.CreateUser:output_type -> caos.zitadel.management.api.v1.UserResponse + 52, // 382: caos.zitadel.management.api.v1.ManagementService.DeactivateUser:output_type -> caos.zitadel.management.api.v1.UserResponse + 52, // 383: caos.zitadel.management.api.v1.ManagementService.ReactivateUser:output_type -> caos.zitadel.management.api.v1.UserResponse + 52, // 384: caos.zitadel.management.api.v1.ManagementService.LockUser:output_type -> caos.zitadel.management.api.v1.UserResponse + 52, // 385: caos.zitadel.management.api.v1.ManagementService.UnlockUser:output_type -> caos.zitadel.management.api.v1.UserResponse + 213, // 386: caos.zitadel.management.api.v1.ManagementService.DeleteUser:output_type -> google.protobuf.Empty + 41, // 387: caos.zitadel.management.api.v1.ManagementService.UserChanges:output_type -> caos.zitadel.management.api.v1.Changes + 60, // 388: caos.zitadel.management.api.v1.ManagementService.AddMachineKey:output_type -> caos.zitadel.management.api.v1.AddMachineKeyResponse + 213, // 389: caos.zitadel.management.api.v1.ManagementService.DeleteMachineKey:output_type -> google.protobuf.Empty + 64, // 390: caos.zitadel.management.api.v1.ManagementService.SearchMachineKeys:output_type -> caos.zitadel.management.api.v1.MachineKeySearchResponse + 62, // 391: caos.zitadel.management.api.v1.ManagementService.GetMachineKey:output_type -> caos.zitadel.management.api.v1.MachineKeyView + 69, // 392: caos.zitadel.management.api.v1.ManagementService.GetUserProfile:output_type -> caos.zitadel.management.api.v1.UserProfileView + 68, // 393: caos.zitadel.management.api.v1.ManagementService.UpdateUserProfile:output_type -> caos.zitadel.management.api.v1.UserProfile + 73, // 394: caos.zitadel.management.api.v1.ManagementService.GetUserEmail:output_type -> caos.zitadel.management.api.v1.UserEmailView + 213, // 395: caos.zitadel.management.api.v1.ManagementService.ChangeUserUserName:output_type -> google.protobuf.Empty + 72, // 396: caos.zitadel.management.api.v1.ManagementService.ChangeUserEmail:output_type -> caos.zitadel.management.api.v1.UserEmail + 213, // 397: caos.zitadel.management.api.v1.ManagementService.ResendEmailVerificationMail:output_type -> google.protobuf.Empty + 76, // 398: caos.zitadel.management.api.v1.ManagementService.GetUserPhone:output_type -> caos.zitadel.management.api.v1.UserPhoneView + 75, // 399: caos.zitadel.management.api.v1.ManagementService.ChangeUserPhone:output_type -> caos.zitadel.management.api.v1.UserPhone + 213, // 400: caos.zitadel.management.api.v1.ManagementService.RemoveUserPhone:output_type -> google.protobuf.Empty + 213, // 401: caos.zitadel.management.api.v1.ManagementService.ResendPhoneVerificationCode:output_type -> google.protobuf.Empty + 79, // 402: caos.zitadel.management.api.v1.ManagementService.GetUserAddress:output_type -> caos.zitadel.management.api.v1.UserAddressView + 78, // 403: caos.zitadel.management.api.v1.ManagementService.UpdateUserAddress:output_type -> caos.zitadel.management.api.v1.UserAddress + 56, // 404: caos.zitadel.management.api.v1.ManagementService.UpdateUserMachine:output_type -> caos.zitadel.management.api.v1.MachineResponse + 198, // 405: caos.zitadel.management.api.v1.ManagementService.SearchUserExternalIDPs:output_type -> caos.zitadel.management.api.v1.ExternalIDPSearchResponse + 213, // 406: caos.zitadel.management.api.v1.ManagementService.RemoveExternalIDP:output_type -> google.protobuf.Empty + 81, // 407: caos.zitadel.management.api.v1.ManagementService.GetUserMfas:output_type -> caos.zitadel.management.api.v1.MultiFactors + 213, // 408: caos.zitadel.management.api.v1.ManagementService.SendSetPasswordNotification:output_type -> google.protobuf.Empty + 213, // 409: caos.zitadel.management.api.v1.ManagementService.SetInitialPassword:output_type -> google.protobuf.Empty + 173, // 410: caos.zitadel.management.api.v1.ManagementService.SearchUserMemberships:output_type -> caos.zitadel.management.api.v1.UserMembershipSearchResponse + 87, // 411: caos.zitadel.management.api.v1.ManagementService.CreateOrg:output_type -> caos.zitadel.management.api.v1.Org + 41, // 412: caos.zitadel.management.api.v1.ManagementService.OrgChanges:output_type -> caos.zitadel.management.api.v1.Changes + 88, // 413: caos.zitadel.management.api.v1.ManagementService.GetMyOrg:output_type -> caos.zitadel.management.api.v1.OrgView + 88, // 414: caos.zitadel.management.api.v1.ManagementService.GetOrgByDomainGlobal:output_type -> caos.zitadel.management.api.v1.OrgView + 87, // 415: caos.zitadel.management.api.v1.ManagementService.DeactivateMyOrg:output_type -> caos.zitadel.management.api.v1.Org + 87, // 416: caos.zitadel.management.api.v1.ManagementService.ReactivateMyOrg:output_type -> caos.zitadel.management.api.v1.Org + 98, // 417: caos.zitadel.management.api.v1.ManagementService.SearchMyOrgDomains:output_type -> caos.zitadel.management.api.v1.OrgDomainSearchResponse + 90, // 418: caos.zitadel.management.api.v1.ManagementService.AddMyOrgDomain:output_type -> caos.zitadel.management.api.v1.OrgDomain + 94, // 419: caos.zitadel.management.api.v1.ManagementService.GenerateMyOrgDomainValidation:output_type -> caos.zitadel.management.api.v1.OrgDomainValidationResponse + 213, // 420: caos.zitadel.management.api.v1.ManagementService.ValidateMyOrgDomain:output_type -> google.protobuf.Empty + 213, // 421: caos.zitadel.management.api.v1.ManagementService.SetMyPrimaryOrgDomain:output_type -> google.protobuf.Empty + 213, // 422: caos.zitadel.management.api.v1.ManagementService.RemoveMyOrgDomain:output_type -> google.protobuf.Empty + 85, // 423: caos.zitadel.management.api.v1.ManagementService.GetMyOrgIamPolicy:output_type -> caos.zitadel.management.api.v1.OrgIamPolicyView + 101, // 424: caos.zitadel.management.api.v1.ManagementService.GetOrgMemberRoles:output_type -> caos.zitadel.management.api.v1.OrgMemberRoles + 102, // 425: caos.zitadel.management.api.v1.ManagementService.AddMyOrgMember:output_type -> caos.zitadel.management.api.v1.OrgMember + 102, // 426: caos.zitadel.management.api.v1.ManagementService.ChangeMyOrgMember:output_type -> caos.zitadel.management.api.v1.OrgMember + 213, // 427: caos.zitadel.management.api.v1.ManagementService.RemoveMyOrgMember:output_type -> google.protobuf.Empty + 106, // 428: caos.zitadel.management.api.v1.ManagementService.SearchMyOrgMembers:output_type -> caos.zitadel.management.api.v1.OrgMemberSearchResponse + 41, // 429: caos.zitadel.management.api.v1.ManagementService.ProjectChanges:output_type -> caos.zitadel.management.api.v1.Changes + 112, // 430: caos.zitadel.management.api.v1.ManagementService.SearchProjects:output_type -> caos.zitadel.management.api.v1.ProjectSearchResponse + 113, // 431: caos.zitadel.management.api.v1.ManagementService.ProjectByID:output_type -> caos.zitadel.management.api.v1.ProjectView + 117, // 432: caos.zitadel.management.api.v1.ManagementService.CreateProject:output_type -> caos.zitadel.management.api.v1.Project + 117, // 433: caos.zitadel.management.api.v1.ManagementService.UpdateProject:output_type -> caos.zitadel.management.api.v1.Project + 117, // 434: caos.zitadel.management.api.v1.ManagementService.DeactivateProject:output_type -> caos.zitadel.management.api.v1.Project + 117, // 435: caos.zitadel.management.api.v1.ManagementService.ReactivateProject:output_type -> caos.zitadel.management.api.v1.Project + 213, // 436: caos.zitadel.management.api.v1.ManagementService.RemoveProject:output_type -> google.protobuf.Empty + 151, // 437: caos.zitadel.management.api.v1.ManagementService.SearchGrantedProjects:output_type -> caos.zitadel.management.api.v1.ProjectGrantSearchResponse + 150, // 438: caos.zitadel.management.api.v1.ManagementService.GetGrantedProjectByID:output_type -> caos.zitadel.management.api.v1.ProjectGrantView + 118, // 439: caos.zitadel.management.api.v1.ManagementService.GetProjectMemberRoles:output_type -> caos.zitadel.management.api.v1.ProjectMemberRoles + 133, // 440: caos.zitadel.management.api.v1.ManagementService.SearchProjectMembers:output_type -> caos.zitadel.management.api.v1.ProjectMemberSearchResponse + 119, // 441: caos.zitadel.management.api.v1.ManagementService.AddProjectMember:output_type -> caos.zitadel.management.api.v1.ProjectMember + 119, // 442: caos.zitadel.management.api.v1.ManagementService.ChangeProjectMember:output_type -> caos.zitadel.management.api.v1.ProjectMember + 213, // 443: caos.zitadel.management.api.v1.ManagementService.RemoveProjectMember:output_type -> google.protobuf.Empty + 129, // 444: caos.zitadel.management.api.v1.ManagementService.SearchProjectRoles:output_type -> caos.zitadel.management.api.v1.ProjectRoleSearchResponse + 126, // 445: caos.zitadel.management.api.v1.ManagementService.AddProjectRole:output_type -> caos.zitadel.management.api.v1.ProjectRole + 213, // 446: caos.zitadel.management.api.v1.ManagementService.BulkAddProjectRole:output_type -> google.protobuf.Empty + 126, // 447: caos.zitadel.management.api.v1.ManagementService.ChangeProjectRole:output_type -> caos.zitadel.management.api.v1.ProjectRole + 213, // 448: caos.zitadel.management.api.v1.ManagementService.RemoveProjectRole:output_type -> google.protobuf.Empty + 143, // 449: caos.zitadel.management.api.v1.ManagementService.SearchApplications:output_type -> caos.zitadel.management.api.v1.ApplicationSearchResponse + 142, // 450: caos.zitadel.management.api.v1.ManagementService.ApplicationByID:output_type -> caos.zitadel.management.api.v1.ApplicationView + 41, // 451: caos.zitadel.management.api.v1.ManagementService.ApplicationChanges:output_type -> caos.zitadel.management.api.v1.Changes + 136, // 452: caos.zitadel.management.api.v1.ManagementService.CreateOIDCApplication:output_type -> caos.zitadel.management.api.v1.Application + 136, // 453: caos.zitadel.management.api.v1.ManagementService.UpdateApplication:output_type -> caos.zitadel.management.api.v1.Application + 136, // 454: caos.zitadel.management.api.v1.ManagementService.DeactivateApplication:output_type -> caos.zitadel.management.api.v1.Application + 136, // 455: caos.zitadel.management.api.v1.ManagementService.ReactivateApplication:output_type -> caos.zitadel.management.api.v1.Application + 213, // 456: caos.zitadel.management.api.v1.ManagementService.RemoveApplication:output_type -> google.protobuf.Empty + 138, // 457: caos.zitadel.management.api.v1.ManagementService.UpdateApplicationOIDCConfig:output_type -> caos.zitadel.management.api.v1.OIDCConfig + 141, // 458: caos.zitadel.management.api.v1.ManagementService.RegenerateOIDCClientSecret:output_type -> caos.zitadel.management.api.v1.ClientSecret + 151, // 459: caos.zitadel.management.api.v1.ManagementService.SearchProjectGrants:output_type -> caos.zitadel.management.api.v1.ProjectGrantSearchResponse + 150, // 460: caos.zitadel.management.api.v1.ManagementService.ProjectGrantByID:output_type -> caos.zitadel.management.api.v1.ProjectGrantView + 146, // 461: caos.zitadel.management.api.v1.ManagementService.CreateProjectGrant:output_type -> caos.zitadel.management.api.v1.ProjectGrant + 146, // 462: caos.zitadel.management.api.v1.ManagementService.UpdateProjectGrant:output_type -> caos.zitadel.management.api.v1.ProjectGrant + 146, // 463: caos.zitadel.management.api.v1.ManagementService.DeactivateProjectGrant:output_type -> caos.zitadel.management.api.v1.ProjectGrant + 146, // 464: caos.zitadel.management.api.v1.ManagementService.ReactivateProjectGrant:output_type -> caos.zitadel.management.api.v1.ProjectGrant + 213, // 465: caos.zitadel.management.api.v1.ManagementService.RemoveProjectGrant:output_type -> google.protobuf.Empty + 155, // 466: caos.zitadel.management.api.v1.ManagementService.GetProjectGrantMemberRoles:output_type -> caos.zitadel.management.api.v1.ProjectGrantMemberRoles + 161, // 467: caos.zitadel.management.api.v1.ManagementService.SearchProjectGrantMembers:output_type -> caos.zitadel.management.api.v1.ProjectGrantMemberSearchResponse + 156, // 468: caos.zitadel.management.api.v1.ManagementService.AddProjectGrantMember:output_type -> caos.zitadel.management.api.v1.ProjectGrantMember + 156, // 469: caos.zitadel.management.api.v1.ManagementService.ChangeProjectGrantMember:output_type -> caos.zitadel.management.api.v1.ProjectGrantMember + 213, // 470: caos.zitadel.management.api.v1.ManagementService.RemoveProjectGrantMember:output_type -> google.protobuf.Empty + 170, // 471: caos.zitadel.management.api.v1.ManagementService.SearchUserGrants:output_type -> caos.zitadel.management.api.v1.UserGrantSearchResponse + 169, // 472: caos.zitadel.management.api.v1.ManagementService.UserGrantByID:output_type -> caos.zitadel.management.api.v1.UserGrantView + 164, // 473: caos.zitadel.management.api.v1.ManagementService.CreateUserGrant:output_type -> caos.zitadel.management.api.v1.UserGrant + 164, // 474: caos.zitadel.management.api.v1.ManagementService.UpdateUserGrant:output_type -> caos.zitadel.management.api.v1.UserGrant + 164, // 475: caos.zitadel.management.api.v1.ManagementService.DeactivateUserGrant:output_type -> caos.zitadel.management.api.v1.UserGrant + 164, // 476: caos.zitadel.management.api.v1.ManagementService.ReactivateUserGrant:output_type -> caos.zitadel.management.api.v1.UserGrant + 213, // 477: caos.zitadel.management.api.v1.ManagementService.RemoveUserGrant:output_type -> google.protobuf.Empty + 213, // 478: caos.zitadel.management.api.v1.ManagementService.BulkRemoveUserGrant:output_type -> google.protobuf.Empty + 184, // 479: caos.zitadel.management.api.v1.ManagementService.IdpByID:output_type -> caos.zitadel.management.api.v1.IdpView + 178, // 480: caos.zitadel.management.api.v1.ManagementService.CreateOidcIdp:output_type -> caos.zitadel.management.api.v1.Idp + 178, // 481: caos.zitadel.management.api.v1.ManagementService.UpdateIdpConfig:output_type -> caos.zitadel.management.api.v1.Idp + 178, // 482: caos.zitadel.management.api.v1.ManagementService.DeactivateIdpConfig:output_type -> caos.zitadel.management.api.v1.Idp + 178, // 483: caos.zitadel.management.api.v1.ManagementService.ReactivateIdpConfig:output_type -> caos.zitadel.management.api.v1.Idp + 213, // 484: caos.zitadel.management.api.v1.ManagementService.RemoveIdpConfig:output_type -> google.protobuf.Empty + 180, // 485: caos.zitadel.management.api.v1.ManagementService.UpdateOidcIdpConfig:output_type -> caos.zitadel.management.api.v1.OidcIdpConfig + 183, // 486: caos.zitadel.management.api.v1.ManagementService.SearchIdps:output_type -> caos.zitadel.management.api.v1.IdpSearchResponse + 193, // 487: caos.zitadel.management.api.v1.ManagementService.GetLoginPolicy:output_type -> caos.zitadel.management.api.v1.LoginPolicyView + 193, // 488: caos.zitadel.management.api.v1.ManagementService.GetDefaultLoginPolicy:output_type -> caos.zitadel.management.api.v1.LoginPolicyView + 188, // 489: caos.zitadel.management.api.v1.ManagementService.CreateLoginPolicy:output_type -> caos.zitadel.management.api.v1.LoginPolicy + 188, // 490: caos.zitadel.management.api.v1.ManagementService.UpdateLoginPolicy:output_type -> caos.zitadel.management.api.v1.LoginPolicy + 213, // 491: caos.zitadel.management.api.v1.ManagementService.RemoveLoginPolicy:output_type -> google.protobuf.Empty + 195, // 492: caos.zitadel.management.api.v1.ManagementService.GetLoginPolicyIdpProviders:output_type -> caos.zitadel.management.api.v1.IdpProviderSearchResponse + 192, // 493: caos.zitadel.management.api.v1.ManagementService.AddIdpProviderToLoginPolicy:output_type -> caos.zitadel.management.api.v1.IdpProvider + 213, // 494: caos.zitadel.management.api.v1.ManagementService.RemoveIdpProviderFromLoginPolicy:output_type -> google.protobuf.Empty + 203, // 495: caos.zitadel.management.api.v1.ManagementService.GetPasswordComplexityPolicy:output_type -> caos.zitadel.management.api.v1.PasswordComplexityPolicyView + 203, // 496: caos.zitadel.management.api.v1.ManagementService.GetDefaultPasswordComplexityPolicy:output_type -> caos.zitadel.management.api.v1.PasswordComplexityPolicyView + 201, // 497: caos.zitadel.management.api.v1.ManagementService.CreatePasswordComplexityPolicy:output_type -> caos.zitadel.management.api.v1.PasswordComplexityPolicy + 201, // 498: caos.zitadel.management.api.v1.ManagementService.UpdatePasswordComplexityPolicy:output_type -> caos.zitadel.management.api.v1.PasswordComplexityPolicy + 213, // 499: caos.zitadel.management.api.v1.ManagementService.RemovePasswordComplexityPolicy:output_type -> google.protobuf.Empty + 206, // 500: caos.zitadel.management.api.v1.ManagementService.GetPasswordAgePolicy:output_type -> caos.zitadel.management.api.v1.PasswordAgePolicyView + 206, // 501: caos.zitadel.management.api.v1.ManagementService.GetDefaultPasswordAgePolicy:output_type -> caos.zitadel.management.api.v1.PasswordAgePolicyView + 204, // 502: caos.zitadel.management.api.v1.ManagementService.CreatePasswordAgePolicy:output_type -> caos.zitadel.management.api.v1.PasswordAgePolicy + 204, // 503: caos.zitadel.management.api.v1.ManagementService.UpdatePasswordAgePolicy:output_type -> caos.zitadel.management.api.v1.PasswordAgePolicy + 213, // 504: caos.zitadel.management.api.v1.ManagementService.RemovePasswordAgePolicy:output_type -> google.protobuf.Empty + 209, // 505: caos.zitadel.management.api.v1.ManagementService.GetPasswordLockoutPolicy:output_type -> caos.zitadel.management.api.v1.PasswordLockoutPolicyView + 209, // 506: caos.zitadel.management.api.v1.ManagementService.GetDefaultPasswordLockoutPolicy:output_type -> caos.zitadel.management.api.v1.PasswordLockoutPolicyView + 207, // 507: caos.zitadel.management.api.v1.ManagementService.CreatePasswordLockoutPolicy:output_type -> caos.zitadel.management.api.v1.PasswordLockoutPolicy + 207, // 508: caos.zitadel.management.api.v1.ManagementService.UpdatePasswordLockoutPolicy:output_type -> caos.zitadel.management.api.v1.PasswordLockoutPolicy + 213, // 509: caos.zitadel.management.api.v1.ManagementService.RemovePasswordLockoutPolicy:output_type -> google.protobuf.Empty + 372, // [372:510] is the sub-list for method output_type + 234, // [234:372] is the sub-list for method input_type + 234, // [234:234] is the sub-list for extension type_name + 234, // [234:234] is the sub-list for extension extendee + 0, // [0:234] is the sub-list for field type_name } func init() { file_management_proto_init() } @@ -20943,7 +20780,7 @@ func file_management_proto_init() { } } file_management_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordComplexityPolicyID); i { + switch v := v.(*OrgIamPolicyView); i { case 0: return &v.state case 1: @@ -20955,150 +20792,6 @@ func file_management_proto_init() { } } file_management_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordComplexityPolicy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_management_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordComplexityPolicyCreate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_management_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordComplexityPolicyUpdate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_management_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordAgePolicyID); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_management_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordAgePolicy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_management_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordAgePolicyCreate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_management_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordAgePolicyUpdate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_management_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordLockoutPolicyID); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_management_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordLockoutPolicy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_management_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordLockoutPolicyCreate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_management_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordLockoutPolicyUpdate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_management_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OrgIamPolicy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_management_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OrgCreateRequest); i { case 0: return &v.state @@ -21110,7 +20803,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Org); i { case 0: return &v.state @@ -21122,7 +20815,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OrgView); i { case 0: return &v.state @@ -21134,7 +20827,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Domain); i { case 0: return &v.state @@ -21146,7 +20839,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OrgDomain); i { case 0: return &v.state @@ -21158,7 +20851,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OrgDomainView); i { case 0: return &v.state @@ -21170,7 +20863,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddOrgDomainRequest); i { case 0: return &v.state @@ -21182,7 +20875,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OrgDomainValidationRequest); i { case 0: return &v.state @@ -21194,7 +20887,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OrgDomainValidationResponse); i { case 0: return &v.state @@ -21206,7 +20899,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ValidateOrgDomainRequest); i { case 0: return &v.state @@ -21218,7 +20911,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PrimaryOrgDomainRequest); i { case 0: return &v.state @@ -21230,7 +20923,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RemoveOrgDomainRequest); i { case 0: return &v.state @@ -21242,7 +20935,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OrgDomainSearchResponse); i { case 0: return &v.state @@ -21254,7 +20947,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OrgDomainSearchRequest); i { case 0: return &v.state @@ -21266,7 +20959,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OrgDomainSearchQuery); i { case 0: return &v.state @@ -21278,7 +20971,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OrgMemberRoles); i { case 0: return &v.state @@ -21290,7 +20983,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OrgMember); i { case 0: return &v.state @@ -21302,7 +20995,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddOrgMemberRequest); i { case 0: return &v.state @@ -21314,7 +21007,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChangeOrgMemberRequest); i { case 0: return &v.state @@ -21326,7 +21019,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RemoveOrgMemberRequest); i { case 0: return &v.state @@ -21338,7 +21031,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OrgMemberSearchResponse); i { case 0: return &v.state @@ -21350,7 +21043,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OrgMemberView); i { case 0: return &v.state @@ -21362,7 +21055,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OrgMemberSearchRequest); i { case 0: return &v.state @@ -21374,7 +21067,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OrgMemberSearchQuery); i { case 0: return &v.state @@ -21386,7 +21079,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectCreateRequest); i { case 0: return &v.state @@ -21398,7 +21091,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectUpdateRequest); i { case 0: return &v.state @@ -21410,7 +21103,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectSearchResponse); i { case 0: return &v.state @@ -21422,7 +21115,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectView); i { case 0: return &v.state @@ -21434,7 +21127,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectSearchRequest); i { case 0: return &v.state @@ -21446,7 +21139,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectSearchQuery); i { case 0: return &v.state @@ -21458,7 +21151,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Projects); i { case 0: return &v.state @@ -21470,7 +21163,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Project); i { case 0: return &v.state @@ -21482,7 +21175,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectMemberRoles); i { case 0: return &v.state @@ -21494,7 +21187,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectMember); i { case 0: return &v.state @@ -21506,7 +21199,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectMemberAdd); i { case 0: return &v.state @@ -21518,7 +21211,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectMemberChange); i { case 0: return &v.state @@ -21530,7 +21223,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectMemberRemove); i { case 0: return &v.state @@ -21542,7 +21235,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectRoleAdd); i { case 0: return &v.state @@ -21554,7 +21247,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectRoleAddBulk); i { case 0: return &v.state @@ -21566,7 +21259,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectRoleChange); i { case 0: return &v.state @@ -21578,7 +21271,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectRole); i { case 0: return &v.state @@ -21590,7 +21283,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectRoleView); i { case 0: return &v.state @@ -21602,7 +21295,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectRoleRemove); i { case 0: return &v.state @@ -21614,7 +21307,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectRoleSearchResponse); i { case 0: return &v.state @@ -21626,7 +21319,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectRoleSearchRequest); i { case 0: return &v.state @@ -21638,7 +21331,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectRoleSearchQuery); i { case 0: return &v.state @@ -21650,7 +21343,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectMemberView); i { case 0: return &v.state @@ -21662,7 +21355,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectMemberSearchResponse); i { case 0: return &v.state @@ -21674,7 +21367,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectMemberSearchRequest); i { case 0: return &v.state @@ -21686,7 +21379,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectMemberSearchQuery); i { case 0: return &v.state @@ -21698,7 +21391,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Application); i { case 0: return &v.state @@ -21710,7 +21403,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplicationUpdate); i { case 0: return &v.state @@ -21722,7 +21415,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OIDCConfig); i { case 0: return &v.state @@ -21734,7 +21427,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OIDCApplicationCreate); i { case 0: return &v.state @@ -21746,7 +21439,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OIDCConfigUpdate); i { case 0: return &v.state @@ -21758,7 +21451,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientSecret); i { case 0: return &v.state @@ -21770,7 +21463,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplicationView); i { case 0: return &v.state @@ -21782,7 +21475,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplicationSearchResponse); i { case 0: return &v.state @@ -21794,7 +21487,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplicationSearchRequest); i { case 0: return &v.state @@ -21806,7 +21499,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplicationSearchQuery); i { case 0: return &v.state @@ -21818,7 +21511,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrant); i { case 0: return &v.state @@ -21830,7 +21523,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantCreate); i { case 0: return &v.state @@ -21842,7 +21535,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantUpdate); i { case 0: return &v.state @@ -21854,7 +21547,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[123].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantID); i { case 0: return &v.state @@ -21866,7 +21559,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantView); i { case 0: return &v.state @@ -21878,7 +21571,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantSearchResponse); i { case 0: return &v.state @@ -21890,7 +21583,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GrantedProjectSearchRequest); i { case 0: return &v.state @@ -21902,7 +21595,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantSearchRequest); i { case 0: return &v.state @@ -21914,7 +21607,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantSearchQuery); i { case 0: return &v.state @@ -21926,7 +21619,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[129].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantMemberRoles); i { case 0: return &v.state @@ -21938,7 +21631,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[130].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantMember); i { case 0: return &v.state @@ -21950,7 +21643,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[131].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantMemberAdd); i { case 0: return &v.state @@ -21962,7 +21655,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[132].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantMemberChange); i { case 0: return &v.state @@ -21974,7 +21667,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[133].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantMemberRemove); i { case 0: return &v.state @@ -21986,7 +21679,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[134].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantMemberView); i { case 0: return &v.state @@ -21998,7 +21691,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[135].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[123].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantMemberSearchResponse); i { case 0: return &v.state @@ -22010,7 +21703,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[136].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantMemberSearchRequest); i { case 0: return &v.state @@ -22022,7 +21715,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[137].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProjectGrantMemberSearchQuery); i { case 0: return &v.state @@ -22034,7 +21727,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[138].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserGrant); i { case 0: return &v.state @@ -22046,7 +21739,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[139].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserGrantCreate); i { case 0: return &v.state @@ -22058,7 +21751,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[140].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserGrantUpdate); i { case 0: return &v.state @@ -22070,7 +21763,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[141].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[129].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserGrantRemoveBulk); i { case 0: return &v.state @@ -22082,7 +21775,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[142].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[130].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserGrantID); i { case 0: return &v.state @@ -22094,7 +21787,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[143].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[131].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserGrantView); i { case 0: return &v.state @@ -22106,7 +21799,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[144].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[132].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserGrantSearchResponse); i { case 0: return &v.state @@ -22118,7 +21811,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[145].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[133].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserGrantSearchRequest); i { case 0: return &v.state @@ -22130,7 +21823,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[146].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[134].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserGrantSearchQuery); i { case 0: return &v.state @@ -22142,7 +21835,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[147].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[135].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserMembershipSearchResponse); i { case 0: return &v.state @@ -22154,7 +21847,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[148].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[136].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserMembershipSearchRequest); i { case 0: return &v.state @@ -22166,7 +21859,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[149].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[137].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserMembershipSearchQuery); i { case 0: return &v.state @@ -22178,7 +21871,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[150].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[138].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserMembershipView); i { case 0: return &v.state @@ -22190,7 +21883,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[151].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[139].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IdpID); i { case 0: return &v.state @@ -22202,7 +21895,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[152].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[140].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Idp); i { case 0: return &v.state @@ -22214,7 +21907,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[153].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[141].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IdpUpdate); i { case 0: return &v.state @@ -22226,7 +21919,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[154].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[142].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OidcIdpConfig); i { case 0: return &v.state @@ -22238,7 +21931,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[155].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[143].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OidcIdpConfigCreate); i { case 0: return &v.state @@ -22250,7 +21943,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[156].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[144].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OidcIdpConfigUpdate); i { case 0: return &v.state @@ -22262,7 +21955,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[157].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[145].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IdpSearchResponse); i { case 0: return &v.state @@ -22274,7 +21967,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[158].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[146].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IdpView); i { case 0: return &v.state @@ -22286,7 +21979,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[159].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[147].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OidcIdpConfigView); i { case 0: return &v.state @@ -22298,7 +21991,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[160].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[148].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IdpSearchRequest); i { case 0: return &v.state @@ -22310,7 +22003,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[161].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[149].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IdpSearchQuery); i { case 0: return &v.state @@ -22322,7 +22015,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[162].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[150].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LoginPolicy); i { case 0: return &v.state @@ -22334,8 +22027,8 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[163].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoginPolicyAdd); i { + file_management_proto_msgTypes[151].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LoginPolicyRequest); i { case 0: return &v.state case 1: @@ -22346,7 +22039,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[164].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[152].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IdpProviderID); i { case 0: return &v.state @@ -22358,7 +22051,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[165].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[153].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IdpProviderAdd); i { case 0: return &v.state @@ -22370,7 +22063,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[166].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[154].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IdpProvider); i { case 0: return &v.state @@ -22382,7 +22075,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[167].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[155].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LoginPolicyView); i { case 0: return &v.state @@ -22394,7 +22087,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[168].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[156].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IdpProviderView); i { case 0: return &v.state @@ -22406,7 +22099,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[169].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[157].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IdpProviderSearchResponse); i { case 0: return &v.state @@ -22418,7 +22111,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[170].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[158].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IdpProviderSearchRequest); i { case 0: return &v.state @@ -22430,7 +22123,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[171].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[159].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExternalIDPSearchRequest); i { case 0: return &v.state @@ -22442,7 +22135,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[172].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[160].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExternalIDPSearchResponse); i { case 0: return &v.state @@ -22454,7 +22147,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[173].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[161].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExternalIDPView); i { case 0: return &v.state @@ -22466,7 +22159,7 @@ func file_management_proto_init() { return nil } } - file_management_proto_msgTypes[174].Exporter = func(v interface{}, i int) interface{} { + file_management_proto_msgTypes[162].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExternalIDPRemoveRequest); i { case 0: return &v.state @@ -22478,6 +22171,114 @@ func file_management_proto_init() { return nil } } + file_management_proto_msgTypes[163].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PasswordComplexityPolicy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_management_proto_msgTypes[164].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PasswordComplexityPolicyRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_management_proto_msgTypes[165].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PasswordComplexityPolicyView); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_management_proto_msgTypes[166].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PasswordAgePolicy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_management_proto_msgTypes[167].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PasswordAgePolicyRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_management_proto_msgTypes[168].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PasswordAgePolicyView); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_management_proto_msgTypes[169].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PasswordLockoutPolicy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_management_proto_msgTypes[170].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PasswordLockoutPolicyRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_management_proto_msgTypes[171].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PasswordLockoutPolicyView); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_management_proto_msgTypes[11].OneofWrappers = []interface{}{ (*CreateUserRequest_Human)(nil), @@ -22491,16 +22292,16 @@ func file_management_proto_init() { (*UserView_Human)(nil), (*UserView_Machine)(nil), } - file_management_proto_msgTypes[110].OneofWrappers = []interface{}{ + file_management_proto_msgTypes[98].OneofWrappers = []interface{}{ (*Application_OidcConfig)(nil), } - file_management_proto_msgTypes[116].OneofWrappers = []interface{}{ + file_management_proto_msgTypes[104].OneofWrappers = []interface{}{ (*ApplicationView_OidcConfig)(nil), } - file_management_proto_msgTypes[152].OneofWrappers = []interface{}{ + file_management_proto_msgTypes[140].OneofWrappers = []interface{}{ (*Idp_OidcConfig)(nil), } - file_management_proto_msgTypes[158].OneofWrappers = []interface{}{ + file_management_proto_msgTypes[146].OneofWrappers = []interface{}{ (*IdpView_OidcConfig)(nil), } type x struct{} @@ -22509,7 +22310,7 @@ func file_management_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_management_proto_rawDesc, NumEnums: 38, - NumMessages: 175, + NumMessages: 172, NumExtensions: 0, NumServices: 1, }, @@ -22582,22 +22383,6 @@ type ManagementServiceClient interface { // A Manager is only allowed to set an initial password, on the next login the user has to change his password SetInitialPassword(ctx context.Context, in *PasswordRequest, opts ...grpc.CallOption) (*empty.Empty, error) SearchUserMemberships(ctx context.Context, in *UserMembershipSearchRequest, opts ...grpc.CallOption) (*UserMembershipSearchResponse, error) - // returns default policy if nothing other set on organisation - GetPasswordComplexityPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordComplexityPolicy, error) - GetDefaultPasswordComplexityPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordComplexityPolicy, error) - CreatePasswordComplexityPolicy(ctx context.Context, in *PasswordComplexityPolicyCreate, opts ...grpc.CallOption) (*PasswordComplexityPolicy, error) - UpdatePasswordComplexityPolicy(ctx context.Context, in *PasswordComplexityPolicyUpdate, opts ...grpc.CallOption) (*PasswordComplexityPolicy, error) - DeletePasswordComplexityPolicy(ctx context.Context, in *PasswordComplexityPolicyID, opts ...grpc.CallOption) (*empty.Empty, error) - // returns default if nothing other set on organisation - GetPasswordAgePolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordAgePolicy, error) - CreatePasswordAgePolicy(ctx context.Context, in *PasswordAgePolicyCreate, opts ...grpc.CallOption) (*PasswordAgePolicy, error) - UpdatePasswordAgePolicy(ctx context.Context, in *PasswordAgePolicyUpdate, opts ...grpc.CallOption) (*PasswordAgePolicy, error) - DeletePasswordAgePolicy(ctx context.Context, in *PasswordAgePolicyID, opts ...grpc.CallOption) (*empty.Empty, error) - // returns default if nothing other set on organisation - GetPasswordLockoutPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordLockoutPolicy, error) - CreatePasswordLockoutPolicy(ctx context.Context, in *PasswordLockoutPolicyCreate, opts ...grpc.CallOption) (*PasswordLockoutPolicy, error) - UpdatePasswordLockoutPolicy(ctx context.Context, in *PasswordLockoutPolicyUpdate, opts ...grpc.CallOption) (*PasswordLockoutPolicy, error) - DeletePasswordLockoutPolicy(ctx context.Context, in *PasswordLockoutPolicyID, opts ...grpc.CallOption) (*empty.Empty, error) CreateOrg(ctx context.Context, in *OrgCreateRequest, opts ...grpc.CallOption) (*Org, error) // OrgChanges returns the event stream of the org object OrgChanges(ctx context.Context, in *ChangeRequest, opts ...grpc.CallOption) (*Changes, error) @@ -22612,7 +22397,7 @@ type ManagementServiceClient interface { ValidateMyOrgDomain(ctx context.Context, in *ValidateOrgDomainRequest, opts ...grpc.CallOption) (*empty.Empty, error) SetMyPrimaryOrgDomain(ctx context.Context, in *PrimaryOrgDomainRequest, opts ...grpc.CallOption) (*empty.Empty, error) RemoveMyOrgDomain(ctx context.Context, in *RemoveOrgDomainRequest, opts ...grpc.CallOption) (*empty.Empty, error) - GetMyOrgIamPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*OrgIamPolicy, error) + GetMyOrgIamPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*OrgIamPolicyView, error) GetOrgMemberRoles(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*OrgMemberRoles, error) AddMyOrgMember(ctx context.Context, in *AddOrgMemberRequest, opts ...grpc.CallOption) (*OrgMember, error) ChangeMyOrgMember(ctx context.Context, in *ChangeOrgMemberRequest, opts ...grpc.CallOption) (*OrgMember, error) @@ -22685,12 +22470,28 @@ type ManagementServiceClient interface { UpdateOidcIdpConfig(ctx context.Context, in *OidcIdpConfigUpdate, opts ...grpc.CallOption) (*OidcIdpConfig, error) SearchIdps(ctx context.Context, in *IdpSearchRequest, opts ...grpc.CallOption) (*IdpSearchResponse, error) GetLoginPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*LoginPolicyView, error) - CreateLoginPolicy(ctx context.Context, in *LoginPolicyAdd, opts ...grpc.CallOption) (*LoginPolicy, error) - UpdateLoginPolicy(ctx context.Context, in *LoginPolicy, opts ...grpc.CallOption) (*LoginPolicy, error) + GetDefaultLoginPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*LoginPolicyView, error) + CreateLoginPolicy(ctx context.Context, in *LoginPolicyRequest, opts ...grpc.CallOption) (*LoginPolicy, error) + UpdateLoginPolicy(ctx context.Context, in *LoginPolicyRequest, opts ...grpc.CallOption) (*LoginPolicy, error) RemoveLoginPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) GetLoginPolicyIdpProviders(ctx context.Context, in *IdpProviderSearchRequest, opts ...grpc.CallOption) (*IdpProviderSearchResponse, error) AddIdpProviderToLoginPolicy(ctx context.Context, in *IdpProviderAdd, opts ...grpc.CallOption) (*IdpProvider, error) RemoveIdpProviderFromLoginPolicy(ctx context.Context, in *IdpProviderID, opts ...grpc.CallOption) (*empty.Empty, error) + GetPasswordComplexityPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordComplexityPolicyView, error) + GetDefaultPasswordComplexityPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordComplexityPolicyView, error) + CreatePasswordComplexityPolicy(ctx context.Context, in *PasswordComplexityPolicyRequest, opts ...grpc.CallOption) (*PasswordComplexityPolicy, error) + UpdatePasswordComplexityPolicy(ctx context.Context, in *PasswordComplexityPolicyRequest, opts ...grpc.CallOption) (*PasswordComplexityPolicy, error) + RemovePasswordComplexityPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) + GetPasswordAgePolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordAgePolicyView, error) + GetDefaultPasswordAgePolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordAgePolicyView, error) + CreatePasswordAgePolicy(ctx context.Context, in *PasswordAgePolicyRequest, opts ...grpc.CallOption) (*PasswordAgePolicy, error) + UpdatePasswordAgePolicy(ctx context.Context, in *PasswordAgePolicyRequest, opts ...grpc.CallOption) (*PasswordAgePolicy, error) + RemovePasswordAgePolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) + GetPasswordLockoutPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordLockoutPolicyView, error) + GetDefaultPasswordLockoutPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordLockoutPolicyView, error) + CreatePasswordLockoutPolicy(ctx context.Context, in *PasswordLockoutPolicyRequest, opts ...grpc.CallOption) (*PasswordLockoutPolicy, error) + UpdatePasswordLockoutPolicy(ctx context.Context, in *PasswordLockoutPolicyRequest, opts ...grpc.CallOption) (*PasswordLockoutPolicy, error) + RemovePasswordLockoutPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) } type managementServiceClient struct { @@ -23052,123 +22853,6 @@ func (c *managementServiceClient) SearchUserMemberships(ctx context.Context, in return out, nil } -func (c *managementServiceClient) GetPasswordComplexityPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordComplexityPolicy, error) { - out := new(PasswordComplexityPolicy) - err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/GetPasswordComplexityPolicy", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *managementServiceClient) GetDefaultPasswordComplexityPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordComplexityPolicy, error) { - out := new(PasswordComplexityPolicy) - err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/GetDefaultPasswordComplexityPolicy", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *managementServiceClient) CreatePasswordComplexityPolicy(ctx context.Context, in *PasswordComplexityPolicyCreate, opts ...grpc.CallOption) (*PasswordComplexityPolicy, error) { - out := new(PasswordComplexityPolicy) - err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordComplexityPolicy", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *managementServiceClient) UpdatePasswordComplexityPolicy(ctx context.Context, in *PasswordComplexityPolicyUpdate, opts ...grpc.CallOption) (*PasswordComplexityPolicy, error) { - out := new(PasswordComplexityPolicy) - err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordComplexityPolicy", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *managementServiceClient) DeletePasswordComplexityPolicy(ctx context.Context, in *PasswordComplexityPolicyID, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/DeletePasswordComplexityPolicy", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *managementServiceClient) GetPasswordAgePolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordAgePolicy, error) { - out := new(PasswordAgePolicy) - err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/GetPasswordAgePolicy", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *managementServiceClient) CreatePasswordAgePolicy(ctx context.Context, in *PasswordAgePolicyCreate, opts ...grpc.CallOption) (*PasswordAgePolicy, error) { - out := new(PasswordAgePolicy) - err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordAgePolicy", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *managementServiceClient) UpdatePasswordAgePolicy(ctx context.Context, in *PasswordAgePolicyUpdate, opts ...grpc.CallOption) (*PasswordAgePolicy, error) { - out := new(PasswordAgePolicy) - err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordAgePolicy", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *managementServiceClient) DeletePasswordAgePolicy(ctx context.Context, in *PasswordAgePolicyID, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/DeletePasswordAgePolicy", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *managementServiceClient) GetPasswordLockoutPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordLockoutPolicy, error) { - out := new(PasswordLockoutPolicy) - err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/GetPasswordLockoutPolicy", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *managementServiceClient) CreatePasswordLockoutPolicy(ctx context.Context, in *PasswordLockoutPolicyCreate, opts ...grpc.CallOption) (*PasswordLockoutPolicy, error) { - out := new(PasswordLockoutPolicy) - err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordLockoutPolicy", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *managementServiceClient) UpdatePasswordLockoutPolicy(ctx context.Context, in *PasswordLockoutPolicyUpdate, opts ...grpc.CallOption) (*PasswordLockoutPolicy, error) { - out := new(PasswordLockoutPolicy) - err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordLockoutPolicy", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *managementServiceClient) DeletePasswordLockoutPolicy(ctx context.Context, in *PasswordLockoutPolicyID, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/DeletePasswordLockoutPolicy", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *managementServiceClient) CreateOrg(ctx context.Context, in *OrgCreateRequest, opts ...grpc.CallOption) (*Org, error) { out := new(Org) err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/CreateOrg", in, out, opts...) @@ -23277,8 +22961,8 @@ func (c *managementServiceClient) RemoveMyOrgDomain(ctx context.Context, in *Rem return out, nil } -func (c *managementServiceClient) GetMyOrgIamPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*OrgIamPolicy, error) { - out := new(OrgIamPolicy) +func (c *managementServiceClient) GetMyOrgIamPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*OrgIamPolicyView, error) { + out := new(OrgIamPolicyView) err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/GetMyOrgIamPolicy", in, out, opts...) if err != nil { return nil, err @@ -23862,7 +23546,16 @@ func (c *managementServiceClient) GetLoginPolicy(ctx context.Context, in *empty. return out, nil } -func (c *managementServiceClient) CreateLoginPolicy(ctx context.Context, in *LoginPolicyAdd, opts ...grpc.CallOption) (*LoginPolicy, error) { +func (c *managementServiceClient) GetDefaultLoginPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*LoginPolicyView, error) { + out := new(LoginPolicyView) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/GetDefaultLoginPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) CreateLoginPolicy(ctx context.Context, in *LoginPolicyRequest, opts ...grpc.CallOption) (*LoginPolicy, error) { out := new(LoginPolicy) err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/CreateLoginPolicy", in, out, opts...) if err != nil { @@ -23871,7 +23564,7 @@ func (c *managementServiceClient) CreateLoginPolicy(ctx context.Context, in *Log return out, nil } -func (c *managementServiceClient) UpdateLoginPolicy(ctx context.Context, in *LoginPolicy, opts ...grpc.CallOption) (*LoginPolicy, error) { +func (c *managementServiceClient) UpdateLoginPolicy(ctx context.Context, in *LoginPolicyRequest, opts ...grpc.CallOption) (*LoginPolicy, error) { out := new(LoginPolicy) err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/UpdateLoginPolicy", in, out, opts...) if err != nil { @@ -23916,6 +23609,141 @@ func (c *managementServiceClient) RemoveIdpProviderFromLoginPolicy(ctx context.C return out, nil } +func (c *managementServiceClient) GetPasswordComplexityPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordComplexityPolicyView, error) { + out := new(PasswordComplexityPolicyView) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/GetPasswordComplexityPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) GetDefaultPasswordComplexityPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordComplexityPolicyView, error) { + out := new(PasswordComplexityPolicyView) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/GetDefaultPasswordComplexityPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) CreatePasswordComplexityPolicy(ctx context.Context, in *PasswordComplexityPolicyRequest, opts ...grpc.CallOption) (*PasswordComplexityPolicy, error) { + out := new(PasswordComplexityPolicy) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordComplexityPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) UpdatePasswordComplexityPolicy(ctx context.Context, in *PasswordComplexityPolicyRequest, opts ...grpc.CallOption) (*PasswordComplexityPolicy, error) { + out := new(PasswordComplexityPolicy) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordComplexityPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) RemovePasswordComplexityPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { + out := new(empty.Empty) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/RemovePasswordComplexityPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) GetPasswordAgePolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordAgePolicyView, error) { + out := new(PasswordAgePolicyView) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/GetPasswordAgePolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) GetDefaultPasswordAgePolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordAgePolicyView, error) { + out := new(PasswordAgePolicyView) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/GetDefaultPasswordAgePolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) CreatePasswordAgePolicy(ctx context.Context, in *PasswordAgePolicyRequest, opts ...grpc.CallOption) (*PasswordAgePolicy, error) { + out := new(PasswordAgePolicy) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordAgePolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) UpdatePasswordAgePolicy(ctx context.Context, in *PasswordAgePolicyRequest, opts ...grpc.CallOption) (*PasswordAgePolicy, error) { + out := new(PasswordAgePolicy) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordAgePolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) RemovePasswordAgePolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { + out := new(empty.Empty) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/RemovePasswordAgePolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) GetPasswordLockoutPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordLockoutPolicyView, error) { + out := new(PasswordLockoutPolicyView) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/GetPasswordLockoutPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) GetDefaultPasswordLockoutPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PasswordLockoutPolicyView, error) { + out := new(PasswordLockoutPolicyView) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/GetDefaultPasswordLockoutPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) CreatePasswordLockoutPolicy(ctx context.Context, in *PasswordLockoutPolicyRequest, opts ...grpc.CallOption) (*PasswordLockoutPolicy, error) { + out := new(PasswordLockoutPolicy) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordLockoutPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) UpdatePasswordLockoutPolicy(ctx context.Context, in *PasswordLockoutPolicyRequest, opts ...grpc.CallOption) (*PasswordLockoutPolicy, error) { + out := new(PasswordLockoutPolicy) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordLockoutPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *managementServiceClient) RemovePasswordLockoutPolicy(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { + out := new(empty.Empty) + err := c.cc.Invoke(ctx, "/caos.zitadel.management.api.v1.ManagementService/RemovePasswordLockoutPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ManagementServiceServer is the server API for ManagementService service. type ManagementServiceServer interface { //READINESS @@ -23964,22 +23792,6 @@ type ManagementServiceServer interface { // A Manager is only allowed to set an initial password, on the next login the user has to change his password SetInitialPassword(context.Context, *PasswordRequest) (*empty.Empty, error) SearchUserMemberships(context.Context, *UserMembershipSearchRequest) (*UserMembershipSearchResponse, error) - // returns default policy if nothing other set on organisation - GetPasswordComplexityPolicy(context.Context, *empty.Empty) (*PasswordComplexityPolicy, error) - GetDefaultPasswordComplexityPolicy(context.Context, *empty.Empty) (*PasswordComplexityPolicy, error) - CreatePasswordComplexityPolicy(context.Context, *PasswordComplexityPolicyCreate) (*PasswordComplexityPolicy, error) - UpdatePasswordComplexityPolicy(context.Context, *PasswordComplexityPolicyUpdate) (*PasswordComplexityPolicy, error) - DeletePasswordComplexityPolicy(context.Context, *PasswordComplexityPolicyID) (*empty.Empty, error) - // returns default if nothing other set on organisation - GetPasswordAgePolicy(context.Context, *empty.Empty) (*PasswordAgePolicy, error) - CreatePasswordAgePolicy(context.Context, *PasswordAgePolicyCreate) (*PasswordAgePolicy, error) - UpdatePasswordAgePolicy(context.Context, *PasswordAgePolicyUpdate) (*PasswordAgePolicy, error) - DeletePasswordAgePolicy(context.Context, *PasswordAgePolicyID) (*empty.Empty, error) - // returns default if nothing other set on organisation - GetPasswordLockoutPolicy(context.Context, *empty.Empty) (*PasswordLockoutPolicy, error) - CreatePasswordLockoutPolicy(context.Context, *PasswordLockoutPolicyCreate) (*PasswordLockoutPolicy, error) - UpdatePasswordLockoutPolicy(context.Context, *PasswordLockoutPolicyUpdate) (*PasswordLockoutPolicy, error) - DeletePasswordLockoutPolicy(context.Context, *PasswordLockoutPolicyID) (*empty.Empty, error) CreateOrg(context.Context, *OrgCreateRequest) (*Org, error) // OrgChanges returns the event stream of the org object OrgChanges(context.Context, *ChangeRequest) (*Changes, error) @@ -23994,7 +23806,7 @@ type ManagementServiceServer interface { ValidateMyOrgDomain(context.Context, *ValidateOrgDomainRequest) (*empty.Empty, error) SetMyPrimaryOrgDomain(context.Context, *PrimaryOrgDomainRequest) (*empty.Empty, error) RemoveMyOrgDomain(context.Context, *RemoveOrgDomainRequest) (*empty.Empty, error) - GetMyOrgIamPolicy(context.Context, *empty.Empty) (*OrgIamPolicy, error) + GetMyOrgIamPolicy(context.Context, *empty.Empty) (*OrgIamPolicyView, error) GetOrgMemberRoles(context.Context, *empty.Empty) (*OrgMemberRoles, error) AddMyOrgMember(context.Context, *AddOrgMemberRequest) (*OrgMember, error) ChangeMyOrgMember(context.Context, *ChangeOrgMemberRequest) (*OrgMember, error) @@ -24067,12 +23879,28 @@ type ManagementServiceServer interface { UpdateOidcIdpConfig(context.Context, *OidcIdpConfigUpdate) (*OidcIdpConfig, error) SearchIdps(context.Context, *IdpSearchRequest) (*IdpSearchResponse, error) GetLoginPolicy(context.Context, *empty.Empty) (*LoginPolicyView, error) - CreateLoginPolicy(context.Context, *LoginPolicyAdd) (*LoginPolicy, error) - UpdateLoginPolicy(context.Context, *LoginPolicy) (*LoginPolicy, error) + GetDefaultLoginPolicy(context.Context, *empty.Empty) (*LoginPolicyView, error) + CreateLoginPolicy(context.Context, *LoginPolicyRequest) (*LoginPolicy, error) + UpdateLoginPolicy(context.Context, *LoginPolicyRequest) (*LoginPolicy, error) RemoveLoginPolicy(context.Context, *empty.Empty) (*empty.Empty, error) GetLoginPolicyIdpProviders(context.Context, *IdpProviderSearchRequest) (*IdpProviderSearchResponse, error) AddIdpProviderToLoginPolicy(context.Context, *IdpProviderAdd) (*IdpProvider, error) RemoveIdpProviderFromLoginPolicy(context.Context, *IdpProviderID) (*empty.Empty, error) + GetPasswordComplexityPolicy(context.Context, *empty.Empty) (*PasswordComplexityPolicyView, error) + GetDefaultPasswordComplexityPolicy(context.Context, *empty.Empty) (*PasswordComplexityPolicyView, error) + CreatePasswordComplexityPolicy(context.Context, *PasswordComplexityPolicyRequest) (*PasswordComplexityPolicy, error) + UpdatePasswordComplexityPolicy(context.Context, *PasswordComplexityPolicyRequest) (*PasswordComplexityPolicy, error) + RemovePasswordComplexityPolicy(context.Context, *empty.Empty) (*empty.Empty, error) + GetPasswordAgePolicy(context.Context, *empty.Empty) (*PasswordAgePolicyView, error) + GetDefaultPasswordAgePolicy(context.Context, *empty.Empty) (*PasswordAgePolicyView, error) + CreatePasswordAgePolicy(context.Context, *PasswordAgePolicyRequest) (*PasswordAgePolicy, error) + UpdatePasswordAgePolicy(context.Context, *PasswordAgePolicyRequest) (*PasswordAgePolicy, error) + RemovePasswordAgePolicy(context.Context, *empty.Empty) (*empty.Empty, error) + GetPasswordLockoutPolicy(context.Context, *empty.Empty) (*PasswordLockoutPolicyView, error) + GetDefaultPasswordLockoutPolicy(context.Context, *empty.Empty) (*PasswordLockoutPolicyView, error) + CreatePasswordLockoutPolicy(context.Context, *PasswordLockoutPolicyRequest) (*PasswordLockoutPolicy, error) + UpdatePasswordLockoutPolicy(context.Context, *PasswordLockoutPolicyRequest) (*PasswordLockoutPolicy, error) + RemovePasswordLockoutPolicy(context.Context, *empty.Empty) (*empty.Empty, error) } // UnimplementedManagementServiceServer can be embedded to have forward compatible implementations. @@ -24196,45 +24024,6 @@ func (*UnimplementedManagementServiceServer) SetInitialPassword(context.Context, func (*UnimplementedManagementServiceServer) SearchUserMemberships(context.Context, *UserMembershipSearchRequest) (*UserMembershipSearchResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SearchUserMemberships not implemented") } -func (*UnimplementedManagementServiceServer) GetPasswordComplexityPolicy(context.Context, *empty.Empty) (*PasswordComplexityPolicy, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPasswordComplexityPolicy not implemented") -} -func (*UnimplementedManagementServiceServer) GetDefaultPasswordComplexityPolicy(context.Context, *empty.Empty) (*PasswordComplexityPolicy, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetDefaultPasswordComplexityPolicy not implemented") -} -func (*UnimplementedManagementServiceServer) CreatePasswordComplexityPolicy(context.Context, *PasswordComplexityPolicyCreate) (*PasswordComplexityPolicy, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreatePasswordComplexityPolicy not implemented") -} -func (*UnimplementedManagementServiceServer) UpdatePasswordComplexityPolicy(context.Context, *PasswordComplexityPolicyUpdate) (*PasswordComplexityPolicy, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdatePasswordComplexityPolicy not implemented") -} -func (*UnimplementedManagementServiceServer) DeletePasswordComplexityPolicy(context.Context, *PasswordComplexityPolicyID) (*empty.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeletePasswordComplexityPolicy not implemented") -} -func (*UnimplementedManagementServiceServer) GetPasswordAgePolicy(context.Context, *empty.Empty) (*PasswordAgePolicy, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPasswordAgePolicy not implemented") -} -func (*UnimplementedManagementServiceServer) CreatePasswordAgePolicy(context.Context, *PasswordAgePolicyCreate) (*PasswordAgePolicy, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreatePasswordAgePolicy not implemented") -} -func (*UnimplementedManagementServiceServer) UpdatePasswordAgePolicy(context.Context, *PasswordAgePolicyUpdate) (*PasswordAgePolicy, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdatePasswordAgePolicy not implemented") -} -func (*UnimplementedManagementServiceServer) DeletePasswordAgePolicy(context.Context, *PasswordAgePolicyID) (*empty.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeletePasswordAgePolicy not implemented") -} -func (*UnimplementedManagementServiceServer) GetPasswordLockoutPolicy(context.Context, *empty.Empty) (*PasswordLockoutPolicy, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPasswordLockoutPolicy not implemented") -} -func (*UnimplementedManagementServiceServer) CreatePasswordLockoutPolicy(context.Context, *PasswordLockoutPolicyCreate) (*PasswordLockoutPolicy, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreatePasswordLockoutPolicy not implemented") -} -func (*UnimplementedManagementServiceServer) UpdatePasswordLockoutPolicy(context.Context, *PasswordLockoutPolicyUpdate) (*PasswordLockoutPolicy, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdatePasswordLockoutPolicy not implemented") -} -func (*UnimplementedManagementServiceServer) DeletePasswordLockoutPolicy(context.Context, *PasswordLockoutPolicyID) (*empty.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeletePasswordLockoutPolicy not implemented") -} func (*UnimplementedManagementServiceServer) CreateOrg(context.Context, *OrgCreateRequest) (*Org, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateOrg not implemented") } @@ -24271,7 +24060,7 @@ func (*UnimplementedManagementServiceServer) SetMyPrimaryOrgDomain(context.Conte func (*UnimplementedManagementServiceServer) RemoveMyOrgDomain(context.Context, *RemoveOrgDomainRequest) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method RemoveMyOrgDomain not implemented") } -func (*UnimplementedManagementServiceServer) GetMyOrgIamPolicy(context.Context, *empty.Empty) (*OrgIamPolicy, error) { +func (*UnimplementedManagementServiceServer) GetMyOrgIamPolicy(context.Context, *empty.Empty) (*OrgIamPolicyView, error) { return nil, status.Errorf(codes.Unimplemented, "method GetMyOrgIamPolicy not implemented") } func (*UnimplementedManagementServiceServer) GetOrgMemberRoles(context.Context, *empty.Empty) (*OrgMemberRoles, error) { @@ -24466,10 +24255,13 @@ func (*UnimplementedManagementServiceServer) SearchIdps(context.Context, *IdpSea func (*UnimplementedManagementServiceServer) GetLoginPolicy(context.Context, *empty.Empty) (*LoginPolicyView, error) { return nil, status.Errorf(codes.Unimplemented, "method GetLoginPolicy not implemented") } -func (*UnimplementedManagementServiceServer) CreateLoginPolicy(context.Context, *LoginPolicyAdd) (*LoginPolicy, error) { +func (*UnimplementedManagementServiceServer) GetDefaultLoginPolicy(context.Context, *empty.Empty) (*LoginPolicyView, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDefaultLoginPolicy not implemented") +} +func (*UnimplementedManagementServiceServer) CreateLoginPolicy(context.Context, *LoginPolicyRequest) (*LoginPolicy, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateLoginPolicy not implemented") } -func (*UnimplementedManagementServiceServer) UpdateLoginPolicy(context.Context, *LoginPolicy) (*LoginPolicy, error) { +func (*UnimplementedManagementServiceServer) UpdateLoginPolicy(context.Context, *LoginPolicyRequest) (*LoginPolicy, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateLoginPolicy not implemented") } func (*UnimplementedManagementServiceServer) RemoveLoginPolicy(context.Context, *empty.Empty) (*empty.Empty, error) { @@ -24484,6 +24276,51 @@ func (*UnimplementedManagementServiceServer) AddIdpProviderToLoginPolicy(context func (*UnimplementedManagementServiceServer) RemoveIdpProviderFromLoginPolicy(context.Context, *IdpProviderID) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method RemoveIdpProviderFromLoginPolicy not implemented") } +func (*UnimplementedManagementServiceServer) GetPasswordComplexityPolicy(context.Context, *empty.Empty) (*PasswordComplexityPolicyView, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetPasswordComplexityPolicy not implemented") +} +func (*UnimplementedManagementServiceServer) GetDefaultPasswordComplexityPolicy(context.Context, *empty.Empty) (*PasswordComplexityPolicyView, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDefaultPasswordComplexityPolicy not implemented") +} +func (*UnimplementedManagementServiceServer) CreatePasswordComplexityPolicy(context.Context, *PasswordComplexityPolicyRequest) (*PasswordComplexityPolicy, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreatePasswordComplexityPolicy not implemented") +} +func (*UnimplementedManagementServiceServer) UpdatePasswordComplexityPolicy(context.Context, *PasswordComplexityPolicyRequest) (*PasswordComplexityPolicy, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdatePasswordComplexityPolicy not implemented") +} +func (*UnimplementedManagementServiceServer) RemovePasswordComplexityPolicy(context.Context, *empty.Empty) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method RemovePasswordComplexityPolicy not implemented") +} +func (*UnimplementedManagementServiceServer) GetPasswordAgePolicy(context.Context, *empty.Empty) (*PasswordAgePolicyView, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetPasswordAgePolicy not implemented") +} +func (*UnimplementedManagementServiceServer) GetDefaultPasswordAgePolicy(context.Context, *empty.Empty) (*PasswordAgePolicyView, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDefaultPasswordAgePolicy not implemented") +} +func (*UnimplementedManagementServiceServer) CreatePasswordAgePolicy(context.Context, *PasswordAgePolicyRequest) (*PasswordAgePolicy, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreatePasswordAgePolicy not implemented") +} +func (*UnimplementedManagementServiceServer) UpdatePasswordAgePolicy(context.Context, *PasswordAgePolicyRequest) (*PasswordAgePolicy, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdatePasswordAgePolicy not implemented") +} +func (*UnimplementedManagementServiceServer) RemovePasswordAgePolicy(context.Context, *empty.Empty) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method RemovePasswordAgePolicy not implemented") +} +func (*UnimplementedManagementServiceServer) GetPasswordLockoutPolicy(context.Context, *empty.Empty) (*PasswordLockoutPolicyView, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetPasswordLockoutPolicy not implemented") +} +func (*UnimplementedManagementServiceServer) GetDefaultPasswordLockoutPolicy(context.Context, *empty.Empty) (*PasswordLockoutPolicyView, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDefaultPasswordLockoutPolicy not implemented") +} +func (*UnimplementedManagementServiceServer) CreatePasswordLockoutPolicy(context.Context, *PasswordLockoutPolicyRequest) (*PasswordLockoutPolicy, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreatePasswordLockoutPolicy not implemented") +} +func (*UnimplementedManagementServiceServer) UpdatePasswordLockoutPolicy(context.Context, *PasswordLockoutPolicyRequest) (*PasswordLockoutPolicy, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdatePasswordLockoutPolicy not implemented") +} +func (*UnimplementedManagementServiceServer) RemovePasswordLockoutPolicy(context.Context, *empty.Empty) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method RemovePasswordLockoutPolicy not implemented") +} func RegisterManagementServiceServer(s *grpc.Server, srv ManagementServiceServer) { s.RegisterService(&_ManagementService_serviceDesc, srv) @@ -25191,240 +25028,6 @@ func _ManagementService_SearchUserMemberships_Handler(srv interface{}, ctx conte return interceptor(ctx, in, info, handler) } -func _ManagementService_GetPasswordComplexityPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ManagementServiceServer).GetPasswordComplexityPolicy(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/caos.zitadel.management.api.v1.ManagementService/GetPasswordComplexityPolicy", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementServiceServer).GetPasswordComplexityPolicy(ctx, req.(*empty.Empty)) - } - return interceptor(ctx, in, info, handler) -} - -func _ManagementService_GetDefaultPasswordComplexityPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ManagementServiceServer).GetDefaultPasswordComplexityPolicy(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/caos.zitadel.management.api.v1.ManagementService/GetDefaultPasswordComplexityPolicy", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementServiceServer).GetDefaultPasswordComplexityPolicy(ctx, req.(*empty.Empty)) - } - return interceptor(ctx, in, info, handler) -} - -func _ManagementService_CreatePasswordComplexityPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PasswordComplexityPolicyCreate) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ManagementServiceServer).CreatePasswordComplexityPolicy(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordComplexityPolicy", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementServiceServer).CreatePasswordComplexityPolicy(ctx, req.(*PasswordComplexityPolicyCreate)) - } - return interceptor(ctx, in, info, handler) -} - -func _ManagementService_UpdatePasswordComplexityPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PasswordComplexityPolicyUpdate) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ManagementServiceServer).UpdatePasswordComplexityPolicy(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordComplexityPolicy", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementServiceServer).UpdatePasswordComplexityPolicy(ctx, req.(*PasswordComplexityPolicyUpdate)) - } - return interceptor(ctx, in, info, handler) -} - -func _ManagementService_DeletePasswordComplexityPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PasswordComplexityPolicyID) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ManagementServiceServer).DeletePasswordComplexityPolicy(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/caos.zitadel.management.api.v1.ManagementService/DeletePasswordComplexityPolicy", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementServiceServer).DeletePasswordComplexityPolicy(ctx, req.(*PasswordComplexityPolicyID)) - } - return interceptor(ctx, in, info, handler) -} - -func _ManagementService_GetPasswordAgePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ManagementServiceServer).GetPasswordAgePolicy(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/caos.zitadel.management.api.v1.ManagementService/GetPasswordAgePolicy", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementServiceServer).GetPasswordAgePolicy(ctx, req.(*empty.Empty)) - } - return interceptor(ctx, in, info, handler) -} - -func _ManagementService_CreatePasswordAgePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PasswordAgePolicyCreate) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ManagementServiceServer).CreatePasswordAgePolicy(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordAgePolicy", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementServiceServer).CreatePasswordAgePolicy(ctx, req.(*PasswordAgePolicyCreate)) - } - return interceptor(ctx, in, info, handler) -} - -func _ManagementService_UpdatePasswordAgePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PasswordAgePolicyUpdate) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ManagementServiceServer).UpdatePasswordAgePolicy(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordAgePolicy", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementServiceServer).UpdatePasswordAgePolicy(ctx, req.(*PasswordAgePolicyUpdate)) - } - return interceptor(ctx, in, info, handler) -} - -func _ManagementService_DeletePasswordAgePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PasswordAgePolicyID) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ManagementServiceServer).DeletePasswordAgePolicy(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/caos.zitadel.management.api.v1.ManagementService/DeletePasswordAgePolicy", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementServiceServer).DeletePasswordAgePolicy(ctx, req.(*PasswordAgePolicyID)) - } - return interceptor(ctx, in, info, handler) -} - -func _ManagementService_GetPasswordLockoutPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ManagementServiceServer).GetPasswordLockoutPolicy(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/caos.zitadel.management.api.v1.ManagementService/GetPasswordLockoutPolicy", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementServiceServer).GetPasswordLockoutPolicy(ctx, req.(*empty.Empty)) - } - return interceptor(ctx, in, info, handler) -} - -func _ManagementService_CreatePasswordLockoutPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PasswordLockoutPolicyCreate) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ManagementServiceServer).CreatePasswordLockoutPolicy(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordLockoutPolicy", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementServiceServer).CreatePasswordLockoutPolicy(ctx, req.(*PasswordLockoutPolicyCreate)) - } - return interceptor(ctx, in, info, handler) -} - -func _ManagementService_UpdatePasswordLockoutPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PasswordLockoutPolicyUpdate) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ManagementServiceServer).UpdatePasswordLockoutPolicy(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordLockoutPolicy", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementServiceServer).UpdatePasswordLockoutPolicy(ctx, req.(*PasswordLockoutPolicyUpdate)) - } - return interceptor(ctx, in, info, handler) -} - -func _ManagementService_DeletePasswordLockoutPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PasswordLockoutPolicyID) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ManagementServiceServer).DeletePasswordLockoutPolicy(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/caos.zitadel.management.api.v1.ManagementService/DeletePasswordLockoutPolicy", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementServiceServer).DeletePasswordLockoutPolicy(ctx, req.(*PasswordLockoutPolicyID)) - } - return interceptor(ctx, in, info, handler) -} - func _ManagementService_CreateOrg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(OrgCreateRequest) if err := dec(in); err != nil { @@ -26811,8 +26414,26 @@ func _ManagementService_GetLoginPolicy_Handler(srv interface{}, ctx context.Cont return interceptor(ctx, in, info, handler) } +func _ManagementService_GetDefaultLoginPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).GetDefaultLoginPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/GetDefaultLoginPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).GetDefaultLoginPolicy(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + func _ManagementService_CreateLoginPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(LoginPolicyAdd) + in := new(LoginPolicyRequest) if err := dec(in); err != nil { return nil, err } @@ -26824,13 +26445,13 @@ func _ManagementService_CreateLoginPolicy_Handler(srv interface{}, ctx context.C FullMethod: "/caos.zitadel.management.api.v1.ManagementService/CreateLoginPolicy", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementServiceServer).CreateLoginPolicy(ctx, req.(*LoginPolicyAdd)) + return srv.(ManagementServiceServer).CreateLoginPolicy(ctx, req.(*LoginPolicyRequest)) } return interceptor(ctx, in, info, handler) } func _ManagementService_UpdateLoginPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(LoginPolicy) + in := new(LoginPolicyRequest) if err := dec(in); err != nil { return nil, err } @@ -26842,7 +26463,7 @@ func _ManagementService_UpdateLoginPolicy_Handler(srv interface{}, ctx context.C FullMethod: "/caos.zitadel.management.api.v1.ManagementService/UpdateLoginPolicy", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ManagementServiceServer).UpdateLoginPolicy(ctx, req.(*LoginPolicy)) + return srv.(ManagementServiceServer).UpdateLoginPolicy(ctx, req.(*LoginPolicyRequest)) } return interceptor(ctx, in, info, handler) } @@ -26919,6 +26540,276 @@ func _ManagementService_RemoveIdpProviderFromLoginPolicy_Handler(srv interface{} return interceptor(ctx, in, info, handler) } +func _ManagementService_GetPasswordComplexityPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).GetPasswordComplexityPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/GetPasswordComplexityPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).GetPasswordComplexityPolicy(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _ManagementService_GetDefaultPasswordComplexityPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).GetDefaultPasswordComplexityPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/GetDefaultPasswordComplexityPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).GetDefaultPasswordComplexityPolicy(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _ManagementService_CreatePasswordComplexityPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PasswordComplexityPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).CreatePasswordComplexityPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordComplexityPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).CreatePasswordComplexityPolicy(ctx, req.(*PasswordComplexityPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ManagementService_UpdatePasswordComplexityPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PasswordComplexityPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).UpdatePasswordComplexityPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordComplexityPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).UpdatePasswordComplexityPolicy(ctx, req.(*PasswordComplexityPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ManagementService_RemovePasswordComplexityPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).RemovePasswordComplexityPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/RemovePasswordComplexityPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).RemovePasswordComplexityPolicy(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _ManagementService_GetPasswordAgePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).GetPasswordAgePolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/GetPasswordAgePolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).GetPasswordAgePolicy(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _ManagementService_GetDefaultPasswordAgePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).GetDefaultPasswordAgePolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/GetDefaultPasswordAgePolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).GetDefaultPasswordAgePolicy(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _ManagementService_CreatePasswordAgePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PasswordAgePolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).CreatePasswordAgePolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordAgePolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).CreatePasswordAgePolicy(ctx, req.(*PasswordAgePolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ManagementService_UpdatePasswordAgePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PasswordAgePolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).UpdatePasswordAgePolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordAgePolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).UpdatePasswordAgePolicy(ctx, req.(*PasswordAgePolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ManagementService_RemovePasswordAgePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).RemovePasswordAgePolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/RemovePasswordAgePolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).RemovePasswordAgePolicy(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _ManagementService_GetPasswordLockoutPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).GetPasswordLockoutPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/GetPasswordLockoutPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).GetPasswordLockoutPolicy(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _ManagementService_GetDefaultPasswordLockoutPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).GetDefaultPasswordLockoutPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/GetDefaultPasswordLockoutPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).GetDefaultPasswordLockoutPolicy(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _ManagementService_CreatePasswordLockoutPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PasswordLockoutPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).CreatePasswordLockoutPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/CreatePasswordLockoutPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).CreatePasswordLockoutPolicy(ctx, req.(*PasswordLockoutPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ManagementService_UpdatePasswordLockoutPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PasswordLockoutPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).UpdatePasswordLockoutPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/UpdatePasswordLockoutPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).UpdatePasswordLockoutPolicy(ctx, req.(*PasswordLockoutPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ManagementService_RemovePasswordLockoutPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).RemovePasswordLockoutPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/caos.zitadel.management.api.v1.ManagementService/RemovePasswordLockoutPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).RemovePasswordLockoutPolicy(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + var _ManagementService_serviceDesc = grpc.ServiceDesc{ ServiceName: "caos.zitadel.management.api.v1.ManagementService", HandlerType: (*ManagementServiceServer)(nil), @@ -27079,58 +26970,6 @@ var _ManagementService_serviceDesc = grpc.ServiceDesc{ MethodName: "SearchUserMemberships", Handler: _ManagementService_SearchUserMemberships_Handler, }, - { - MethodName: "GetPasswordComplexityPolicy", - Handler: _ManagementService_GetPasswordComplexityPolicy_Handler, - }, - { - MethodName: "GetDefaultPasswordComplexityPolicy", - Handler: _ManagementService_GetDefaultPasswordComplexityPolicy_Handler, - }, - { - MethodName: "CreatePasswordComplexityPolicy", - Handler: _ManagementService_CreatePasswordComplexityPolicy_Handler, - }, - { - MethodName: "UpdatePasswordComplexityPolicy", - Handler: _ManagementService_UpdatePasswordComplexityPolicy_Handler, - }, - { - MethodName: "DeletePasswordComplexityPolicy", - Handler: _ManagementService_DeletePasswordComplexityPolicy_Handler, - }, - { - MethodName: "GetPasswordAgePolicy", - Handler: _ManagementService_GetPasswordAgePolicy_Handler, - }, - { - MethodName: "CreatePasswordAgePolicy", - Handler: _ManagementService_CreatePasswordAgePolicy_Handler, - }, - { - MethodName: "UpdatePasswordAgePolicy", - Handler: _ManagementService_UpdatePasswordAgePolicy_Handler, - }, - { - MethodName: "DeletePasswordAgePolicy", - Handler: _ManagementService_DeletePasswordAgePolicy_Handler, - }, - { - MethodName: "GetPasswordLockoutPolicy", - Handler: _ManagementService_GetPasswordLockoutPolicy_Handler, - }, - { - MethodName: "CreatePasswordLockoutPolicy", - Handler: _ManagementService_CreatePasswordLockoutPolicy_Handler, - }, - { - MethodName: "UpdatePasswordLockoutPolicy", - Handler: _ManagementService_UpdatePasswordLockoutPolicy_Handler, - }, - { - MethodName: "DeletePasswordLockoutPolicy", - Handler: _ManagementService_DeletePasswordLockoutPolicy_Handler, - }, { MethodName: "CreateOrg", Handler: _ManagementService_CreateOrg_Handler, @@ -27439,6 +27278,10 @@ var _ManagementService_serviceDesc = grpc.ServiceDesc{ MethodName: "GetLoginPolicy", Handler: _ManagementService_GetLoginPolicy_Handler, }, + { + MethodName: "GetDefaultLoginPolicy", + Handler: _ManagementService_GetDefaultLoginPolicy_Handler, + }, { MethodName: "CreateLoginPolicy", Handler: _ManagementService_CreateLoginPolicy_Handler, @@ -27463,6 +27306,66 @@ var _ManagementService_serviceDesc = grpc.ServiceDesc{ MethodName: "RemoveIdpProviderFromLoginPolicy", Handler: _ManagementService_RemoveIdpProviderFromLoginPolicy_Handler, }, + { + MethodName: "GetPasswordComplexityPolicy", + Handler: _ManagementService_GetPasswordComplexityPolicy_Handler, + }, + { + MethodName: "GetDefaultPasswordComplexityPolicy", + Handler: _ManagementService_GetDefaultPasswordComplexityPolicy_Handler, + }, + { + MethodName: "CreatePasswordComplexityPolicy", + Handler: _ManagementService_CreatePasswordComplexityPolicy_Handler, + }, + { + MethodName: "UpdatePasswordComplexityPolicy", + Handler: _ManagementService_UpdatePasswordComplexityPolicy_Handler, + }, + { + MethodName: "RemovePasswordComplexityPolicy", + Handler: _ManagementService_RemovePasswordComplexityPolicy_Handler, + }, + { + MethodName: "GetPasswordAgePolicy", + Handler: _ManagementService_GetPasswordAgePolicy_Handler, + }, + { + MethodName: "GetDefaultPasswordAgePolicy", + Handler: _ManagementService_GetDefaultPasswordAgePolicy_Handler, + }, + { + MethodName: "CreatePasswordAgePolicy", + Handler: _ManagementService_CreatePasswordAgePolicy_Handler, + }, + { + MethodName: "UpdatePasswordAgePolicy", + Handler: _ManagementService_UpdatePasswordAgePolicy_Handler, + }, + { + MethodName: "RemovePasswordAgePolicy", + Handler: _ManagementService_RemovePasswordAgePolicy_Handler, + }, + { + MethodName: "GetPasswordLockoutPolicy", + Handler: _ManagementService_GetPasswordLockoutPolicy_Handler, + }, + { + MethodName: "GetDefaultPasswordLockoutPolicy", + Handler: _ManagementService_GetDefaultPasswordLockoutPolicy_Handler, + }, + { + MethodName: "CreatePasswordLockoutPolicy", + Handler: _ManagementService_CreatePasswordLockoutPolicy_Handler, + }, + { + MethodName: "UpdatePasswordLockoutPolicy", + Handler: _ManagementService_UpdatePasswordLockoutPolicy_Handler, + }, + { + MethodName: "RemovePasswordLockoutPolicy", + Handler: _ManagementService_RemovePasswordLockoutPolicy_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "management.proto", diff --git a/pkg/grpc/management/management.pb.gw.go b/pkg/grpc/management/management.pb.gw.go index 96a8382b4d..ac8ceaa7bf 100644 --- a/pkg/grpc/management/management.pb.gw.go +++ b/pkg/grpc/management/management.pb.gw.go @@ -2278,390 +2278,6 @@ func local_request_ManagementService_SearchUserMemberships_0(ctx context.Context } -func request_ManagementService_GetPasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty - var metadata runtime.ServerMetadata - - msg, err := client.GetPasswordComplexityPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_ManagementService_GetPasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty - var metadata runtime.ServerMetadata - - msg, err := server.GetPasswordComplexityPolicy(ctx, &protoReq) - return msg, metadata, err - -} - -func request_ManagementService_GetDefaultPasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty - var metadata runtime.ServerMetadata - - msg, err := client.GetDefaultPasswordComplexityPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_ManagementService_GetDefaultPasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty - var metadata runtime.ServerMetadata - - msg, err := server.GetDefaultPasswordComplexityPolicy(ctx, &protoReq) - return msg, metadata, err - -} - -func request_ManagementService_CreatePasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordComplexityPolicyCreate - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.CreatePasswordComplexityPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_ManagementService_CreatePasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordComplexityPolicyCreate - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.CreatePasswordComplexityPolicy(ctx, &protoReq) - return msg, metadata, err - -} - -func request_ManagementService_UpdatePasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordComplexityPolicyUpdate - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.UpdatePasswordComplexityPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_ManagementService_UpdatePasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordComplexityPolicyUpdate - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.UpdatePasswordComplexityPolicy(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_ManagementService_DeletePasswordComplexityPolicy_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_ManagementService_DeletePasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordComplexityPolicyID - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ManagementService_DeletePasswordComplexityPolicy_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.DeletePasswordComplexityPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_ManagementService_DeletePasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordComplexityPolicyID - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ManagementService_DeletePasswordComplexityPolicy_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.DeletePasswordComplexityPolicy(ctx, &protoReq) - return msg, metadata, err - -} - -func request_ManagementService_GetPasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty - var metadata runtime.ServerMetadata - - msg, err := client.GetPasswordAgePolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_ManagementService_GetPasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty - var metadata runtime.ServerMetadata - - msg, err := server.GetPasswordAgePolicy(ctx, &protoReq) - return msg, metadata, err - -} - -func request_ManagementService_CreatePasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordAgePolicyCreate - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.CreatePasswordAgePolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_ManagementService_CreatePasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordAgePolicyCreate - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.CreatePasswordAgePolicy(ctx, &protoReq) - return msg, metadata, err - -} - -func request_ManagementService_UpdatePasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordAgePolicyUpdate - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.UpdatePasswordAgePolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_ManagementService_UpdatePasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordAgePolicyUpdate - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.UpdatePasswordAgePolicy(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_ManagementService_DeletePasswordAgePolicy_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_ManagementService_DeletePasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordAgePolicyID - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ManagementService_DeletePasswordAgePolicy_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.DeletePasswordAgePolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_ManagementService_DeletePasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordAgePolicyID - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ManagementService_DeletePasswordAgePolicy_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.DeletePasswordAgePolicy(ctx, &protoReq) - return msg, metadata, err - -} - -func request_ManagementService_GetPasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty - var metadata runtime.ServerMetadata - - msg, err := client.GetPasswordLockoutPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_ManagementService_GetPasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty - var metadata runtime.ServerMetadata - - msg, err := server.GetPasswordLockoutPolicy(ctx, &protoReq) - return msg, metadata, err - -} - -func request_ManagementService_CreatePasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordLockoutPolicyCreate - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.CreatePasswordLockoutPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_ManagementService_CreatePasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordLockoutPolicyCreate - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.CreatePasswordLockoutPolicy(ctx, &protoReq) - return msg, metadata, err - -} - -func request_ManagementService_UpdatePasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordLockoutPolicyUpdate - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.UpdatePasswordLockoutPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_ManagementService_UpdatePasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordLockoutPolicyUpdate - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.UpdatePasswordLockoutPolicy(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_ManagementService_DeletePasswordLockoutPolicy_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_ManagementService_DeletePasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordLockoutPolicyID - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ManagementService_DeletePasswordLockoutPolicy_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.DeletePasswordLockoutPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_ManagementService_DeletePasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PasswordLockoutPolicyID - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ManagementService_DeletePasswordLockoutPolicy_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.DeletePasswordLockoutPolicy(ctx, &protoReq) - return msg, metadata, err - -} - func request_ManagementService_CreateOrg_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq OrgCreateRequest var metadata runtime.ServerMetadata @@ -7574,8 +7190,26 @@ func local_request_ManagementService_GetLoginPolicy_0(ctx context.Context, marsh } +func request_ManagementService_GetDefaultLoginPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.GetDefaultLoginPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_GetDefaultLoginPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.GetDefaultLoginPolicy(ctx, &protoReq) + return msg, metadata, err + +} + func request_ManagementService_CreateLoginPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq LoginPolicyAdd + var protoReq LoginPolicyRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -7592,7 +7226,7 @@ func request_ManagementService_CreateLoginPolicy_0(ctx context.Context, marshale } func local_request_ManagementService_CreateLoginPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq LoginPolicyAdd + var protoReq LoginPolicyRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -7609,7 +7243,7 @@ func local_request_ManagementService_CreateLoginPolicy_0(ctx context.Context, ma } func request_ManagementService_UpdateLoginPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq LoginPolicy + var protoReq LoginPolicyRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -7626,7 +7260,7 @@ func request_ManagementService_UpdateLoginPolicy_0(ctx context.Context, marshale } func local_request_ManagementService_UpdateLoginPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq LoginPolicy + var protoReq LoginPolicyRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -7782,6 +7416,372 @@ func local_request_ManagementService_RemoveIdpProviderFromLoginPolicy_0(ctx cont } +func request_ManagementService_GetPasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.GetPasswordComplexityPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_GetPasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.GetPasswordComplexityPolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ManagementService_GetDefaultPasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.GetDefaultPasswordComplexityPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_GetDefaultPasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.GetDefaultPasswordComplexityPolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ManagementService_CreatePasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PasswordComplexityPolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreatePasswordComplexityPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_CreatePasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PasswordComplexityPolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreatePasswordComplexityPolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ManagementService_UpdatePasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PasswordComplexityPolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdatePasswordComplexityPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_UpdatePasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PasswordComplexityPolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdatePasswordComplexityPolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ManagementService_RemovePasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.RemovePasswordComplexityPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_RemovePasswordComplexityPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.RemovePasswordComplexityPolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ManagementService_GetPasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.GetPasswordAgePolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_GetPasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.GetPasswordAgePolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ManagementService_GetDefaultPasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.GetDefaultPasswordAgePolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_GetDefaultPasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.GetDefaultPasswordAgePolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ManagementService_CreatePasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PasswordAgePolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreatePasswordAgePolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_CreatePasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PasswordAgePolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreatePasswordAgePolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ManagementService_UpdatePasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PasswordAgePolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdatePasswordAgePolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_UpdatePasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PasswordAgePolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdatePasswordAgePolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ManagementService_RemovePasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.RemovePasswordAgePolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_RemovePasswordAgePolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.RemovePasswordAgePolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ManagementService_GetPasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.GetPasswordLockoutPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_GetPasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.GetPasswordLockoutPolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ManagementService_GetDefaultPasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.GetDefaultPasswordLockoutPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_GetDefaultPasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.GetDefaultPasswordLockoutPolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ManagementService_CreatePasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PasswordLockoutPolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreatePasswordLockoutPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_CreatePasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PasswordLockoutPolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreatePasswordLockoutPolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ManagementService_UpdatePasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PasswordLockoutPolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdatePasswordLockoutPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_UpdatePasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PasswordLockoutPolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdatePasswordLockoutPolicy(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ManagementService_RemovePasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.RemovePasswordLockoutPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ManagementService_RemovePasswordLockoutPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.RemovePasswordLockoutPolicy(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterManagementServiceHandlerServer registers the http handlers for service ManagementService to "mux". // UnaryRPC :call ManagementServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -8567,266 +8567,6 @@ func RegisterManagementServiceHandlerServer(ctx context.Context, mux *runtime.Se }) - mux.Handle("GET", pattern_ManagementService_GetPasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_ManagementService_GetPasswordComplexityPolicy_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_GetPasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_ManagementService_GetDefaultPasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_ManagementService_GetDefaultPasswordComplexityPolicy_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_GetDefaultPasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_ManagementService_CreatePasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_ManagementService_CreatePasswordComplexityPolicy_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_CreatePasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_ManagementService_UpdatePasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_ManagementService_UpdatePasswordComplexityPolicy_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_UpdatePasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_ManagementService_DeletePasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_ManagementService_DeletePasswordComplexityPolicy_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_DeletePasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_ManagementService_GetPasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_ManagementService_GetPasswordAgePolicy_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_GetPasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_ManagementService_CreatePasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_ManagementService_CreatePasswordAgePolicy_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_CreatePasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_ManagementService_UpdatePasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_ManagementService_UpdatePasswordAgePolicy_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_UpdatePasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_ManagementService_DeletePasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_ManagementService_DeletePasswordAgePolicy_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_DeletePasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_ManagementService_GetPasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_ManagementService_GetPasswordLockoutPolicy_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_GetPasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_ManagementService_CreatePasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_ManagementService_CreatePasswordLockoutPolicy_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_CreatePasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_ManagementService_UpdatePasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_ManagementService_UpdatePasswordLockoutPolicy_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_UpdatePasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_ManagementService_DeletePasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_ManagementService_DeletePasswordLockoutPolicy_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_DeletePasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("POST", pattern_ManagementService_CreateOrg_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -10367,6 +10107,26 @@ func RegisterManagementServiceHandlerServer(ctx context.Context, mux *runtime.Se }) + mux.Handle("GET", pattern_ManagementService_GetDefaultLoginPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_GetDefaultLoginPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_GetDefaultLoginPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_ManagementService_CreateLoginPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -10487,6 +10247,306 @@ func RegisterManagementServiceHandlerServer(ctx context.Context, mux *runtime.Se }) + mux.Handle("GET", pattern_ManagementService_GetPasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_GetPasswordComplexityPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_GetPasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ManagementService_GetDefaultPasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_GetDefaultPasswordComplexityPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_GetDefaultPasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ManagementService_CreatePasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_CreatePasswordComplexityPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_CreatePasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_ManagementService_UpdatePasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_UpdatePasswordComplexityPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_UpdatePasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_ManagementService_RemovePasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_RemovePasswordComplexityPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_RemovePasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ManagementService_GetPasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_GetPasswordAgePolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_GetPasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ManagementService_GetDefaultPasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_GetDefaultPasswordAgePolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_GetDefaultPasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ManagementService_CreatePasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_CreatePasswordAgePolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_CreatePasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_ManagementService_UpdatePasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_UpdatePasswordAgePolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_UpdatePasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_ManagementService_RemovePasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_RemovePasswordAgePolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_RemovePasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ManagementService_GetPasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_GetPasswordLockoutPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_GetPasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ManagementService_GetDefaultPasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_GetDefaultPasswordLockoutPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_GetDefaultPasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ManagementService_CreatePasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_CreatePasswordLockoutPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_CreatePasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_ManagementService_UpdatePasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_UpdatePasswordLockoutPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_UpdatePasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_ManagementService_RemovePasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_RemovePasswordLockoutPolicy_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_RemovePasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -11308,266 +11368,6 @@ func RegisterManagementServiceHandlerClient(ctx context.Context, mux *runtime.Se }) - mux.Handle("GET", pattern_ManagementService_GetPasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ManagementService_GetPasswordComplexityPolicy_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_GetPasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_ManagementService_GetDefaultPasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ManagementService_GetDefaultPasswordComplexityPolicy_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_GetDefaultPasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_ManagementService_CreatePasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ManagementService_CreatePasswordComplexityPolicy_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_CreatePasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_ManagementService_UpdatePasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ManagementService_UpdatePasswordComplexityPolicy_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_UpdatePasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_ManagementService_DeletePasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ManagementService_DeletePasswordComplexityPolicy_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_DeletePasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_ManagementService_GetPasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ManagementService_GetPasswordAgePolicy_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_GetPasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_ManagementService_CreatePasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ManagementService_CreatePasswordAgePolicy_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_CreatePasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_ManagementService_UpdatePasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ManagementService_UpdatePasswordAgePolicy_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_UpdatePasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_ManagementService_DeletePasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ManagementService_DeletePasswordAgePolicy_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_DeletePasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_ManagementService_GetPasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ManagementService_GetPasswordLockoutPolicy_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_GetPasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_ManagementService_CreatePasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ManagementService_CreatePasswordLockoutPolicy_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_CreatePasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_ManagementService_UpdatePasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ManagementService_UpdatePasswordLockoutPolicy_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_UpdatePasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_ManagementService_DeletePasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_ManagementService_DeletePasswordLockoutPolicy_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_ManagementService_DeletePasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("POST", pattern_ManagementService_CreateOrg_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -13108,6 +12908,26 @@ func RegisterManagementServiceHandlerClient(ctx context.Context, mux *runtime.Se }) + mux.Handle("GET", pattern_ManagementService_GetDefaultLoginPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_GetDefaultLoginPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_GetDefaultLoginPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_ManagementService_CreateLoginPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -13228,6 +13048,306 @@ func RegisterManagementServiceHandlerClient(ctx context.Context, mux *runtime.Se }) + mux.Handle("GET", pattern_ManagementService_GetPasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_GetPasswordComplexityPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_GetPasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ManagementService_GetDefaultPasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_GetDefaultPasswordComplexityPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_GetDefaultPasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ManagementService_CreatePasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_CreatePasswordComplexityPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_CreatePasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_ManagementService_UpdatePasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_UpdatePasswordComplexityPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_UpdatePasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_ManagementService_RemovePasswordComplexityPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_RemovePasswordComplexityPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_RemovePasswordComplexityPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ManagementService_GetPasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_GetPasswordAgePolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_GetPasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ManagementService_GetDefaultPasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_GetDefaultPasswordAgePolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_GetDefaultPasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ManagementService_CreatePasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_CreatePasswordAgePolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_CreatePasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_ManagementService_UpdatePasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_UpdatePasswordAgePolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_UpdatePasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_ManagementService_RemovePasswordAgePolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_RemovePasswordAgePolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_RemovePasswordAgePolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ManagementService_GetPasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_GetPasswordLockoutPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_GetPasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ManagementService_GetDefaultPasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_GetDefaultPasswordLockoutPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_GetDefaultPasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ManagementService_CreatePasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_CreatePasswordLockoutPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_CreatePasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_ManagementService_UpdatePasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_UpdatePasswordLockoutPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_UpdatePasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_ManagementService_RemovePasswordLockoutPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_RemovePasswordLockoutPolicy_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ManagementService_RemovePasswordLockoutPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -13310,32 +13430,6 @@ var ( pattern_ManagementService_SearchUserMemberships_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2, 2, 3}, []string{"users", "user_id", "memberships", "_search"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ManagementService_GetPasswordComplexityPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "passwords", "complexity"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_ManagementService_GetDefaultPasswordComplexityPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"policies", "passwords", "complexity", "default"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_ManagementService_CreatePasswordComplexityPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "passwords", "complexity"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_ManagementService_UpdatePasswordComplexityPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "passwords", "complexity"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_ManagementService_DeletePasswordComplexityPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "passwords", "complexity"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_ManagementService_GetPasswordAgePolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "passwords", "age"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_ManagementService_CreatePasswordAgePolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "passwords", "age"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_ManagementService_UpdatePasswordAgePolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "passwords", "age"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_ManagementService_DeletePasswordAgePolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "passwords", "age"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_ManagementService_GetPasswordLockoutPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "passwords", "lockout"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_ManagementService_CreatePasswordLockoutPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "passwords", "lockout"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_ManagementService_UpdatePasswordLockoutPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "passwords", "lockout"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_ManagementService_DeletePasswordLockoutPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"policies", "passwords", "lockout"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ManagementService_CreateOrg_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"orgs"}, "", runtime.AssumeColonVerbOpt(true))) pattern_ManagementService_OrgChanges_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1, 2, 2}, []string{"orgs", "id", "changes"}, "", runtime.AssumeColonVerbOpt(true))) @@ -13490,6 +13584,8 @@ var ( pattern_ManagementService_GetLoginPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"orgs", "me", "policies", "login"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ManagementService_GetDefaultLoginPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"orgs", "default", "policies", "login"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ManagementService_CreateLoginPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"orgs", "me", "policies", "login"}, "", runtime.AssumeColonVerbOpt(true))) pattern_ManagementService_UpdateLoginPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"orgs", "me", "policies", "login"}, "", runtime.AssumeColonVerbOpt(true))) @@ -13501,6 +13597,36 @@ var ( pattern_ManagementService_AddIdpProviderToLoginPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "me", "policies", "login", "idpproviders"}, "", runtime.AssumeColonVerbOpt(true))) pattern_ManagementService_RemoveIdpProviderFromLoginPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"orgs", "me", "policies", "login", "idpproviders", "idp_config_id"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ManagementService_GetPasswordComplexityPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "me", "policies", "password", "complexity"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ManagementService_GetDefaultPasswordComplexityPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "default", "policies", "password", "complexity"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ManagementService_CreatePasswordComplexityPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "me", "policies", "password", "complexity"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ManagementService_UpdatePasswordComplexityPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "me", "policies", "password", "complexity"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ManagementService_RemovePasswordComplexityPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "me", "policies", "password", "complexity"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ManagementService_GetPasswordAgePolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "me", "policies", "password", "age"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ManagementService_GetDefaultPasswordAgePolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "default", "policies", "password", "age"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ManagementService_CreatePasswordAgePolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "me", "policies", "password", "age"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ManagementService_UpdatePasswordAgePolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "me", "policies", "password", "age"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ManagementService_RemovePasswordAgePolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "me", "policies", "password", "age"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ManagementService_GetPasswordLockoutPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "me", "policies", "password", "lockout"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ManagementService_GetDefaultPasswordLockoutPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "default", "policies", "password", "lockout"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ManagementService_CreatePasswordLockoutPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "me", "policies", "password", "lockout"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ManagementService_UpdatePasswordLockoutPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "me", "policies", "password", "lockout"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ManagementService_RemovePasswordLockoutPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"orgs", "me", "policies", "password", "lockout"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( @@ -13582,32 +13708,6 @@ var ( forward_ManagementService_SearchUserMemberships_0 = runtime.ForwardResponseMessage - forward_ManagementService_GetPasswordComplexityPolicy_0 = runtime.ForwardResponseMessage - - forward_ManagementService_GetDefaultPasswordComplexityPolicy_0 = runtime.ForwardResponseMessage - - forward_ManagementService_CreatePasswordComplexityPolicy_0 = runtime.ForwardResponseMessage - - forward_ManagementService_UpdatePasswordComplexityPolicy_0 = runtime.ForwardResponseMessage - - forward_ManagementService_DeletePasswordComplexityPolicy_0 = runtime.ForwardResponseMessage - - forward_ManagementService_GetPasswordAgePolicy_0 = runtime.ForwardResponseMessage - - forward_ManagementService_CreatePasswordAgePolicy_0 = runtime.ForwardResponseMessage - - forward_ManagementService_UpdatePasswordAgePolicy_0 = runtime.ForwardResponseMessage - - forward_ManagementService_DeletePasswordAgePolicy_0 = runtime.ForwardResponseMessage - - forward_ManagementService_GetPasswordLockoutPolicy_0 = runtime.ForwardResponseMessage - - forward_ManagementService_CreatePasswordLockoutPolicy_0 = runtime.ForwardResponseMessage - - forward_ManagementService_UpdatePasswordLockoutPolicy_0 = runtime.ForwardResponseMessage - - forward_ManagementService_DeletePasswordLockoutPolicy_0 = runtime.ForwardResponseMessage - forward_ManagementService_CreateOrg_0 = runtime.ForwardResponseMessage forward_ManagementService_OrgChanges_0 = runtime.ForwardResponseMessage @@ -13762,6 +13862,8 @@ var ( forward_ManagementService_GetLoginPolicy_0 = runtime.ForwardResponseMessage + forward_ManagementService_GetDefaultLoginPolicy_0 = runtime.ForwardResponseMessage + forward_ManagementService_CreateLoginPolicy_0 = runtime.ForwardResponseMessage forward_ManagementService_UpdateLoginPolicy_0 = runtime.ForwardResponseMessage @@ -13773,4 +13875,34 @@ var ( forward_ManagementService_AddIdpProviderToLoginPolicy_0 = runtime.ForwardResponseMessage forward_ManagementService_RemoveIdpProviderFromLoginPolicy_0 = runtime.ForwardResponseMessage + + forward_ManagementService_GetPasswordComplexityPolicy_0 = runtime.ForwardResponseMessage + + forward_ManagementService_GetDefaultPasswordComplexityPolicy_0 = runtime.ForwardResponseMessage + + forward_ManagementService_CreatePasswordComplexityPolicy_0 = runtime.ForwardResponseMessage + + forward_ManagementService_UpdatePasswordComplexityPolicy_0 = runtime.ForwardResponseMessage + + forward_ManagementService_RemovePasswordComplexityPolicy_0 = runtime.ForwardResponseMessage + + forward_ManagementService_GetPasswordAgePolicy_0 = runtime.ForwardResponseMessage + + forward_ManagementService_GetDefaultPasswordAgePolicy_0 = runtime.ForwardResponseMessage + + forward_ManagementService_CreatePasswordAgePolicy_0 = runtime.ForwardResponseMessage + + forward_ManagementService_UpdatePasswordAgePolicy_0 = runtime.ForwardResponseMessage + + forward_ManagementService_RemovePasswordAgePolicy_0 = runtime.ForwardResponseMessage + + forward_ManagementService_GetPasswordLockoutPolicy_0 = runtime.ForwardResponseMessage + + forward_ManagementService_GetDefaultPasswordLockoutPolicy_0 = runtime.ForwardResponseMessage + + forward_ManagementService_CreatePasswordLockoutPolicy_0 = runtime.ForwardResponseMessage + + forward_ManagementService_UpdatePasswordLockoutPolicy_0 = runtime.ForwardResponseMessage + + forward_ManagementService_RemovePasswordLockoutPolicy_0 = runtime.ForwardResponseMessage ) diff --git a/pkg/grpc/management/management.pb.validate.go b/pkg/grpc/management/management.pb.validate.go index e9eb7cc68d..7ec90ad7de 100644 --- a/pkg/grpc/management/management.pb.validate.go +++ b/pkg/grpc/management/management.pb.validate.go @@ -4316,1024 +4316,14 @@ var _ interface { ErrorName() string } = SetPasswordNotificationRequestValidationError{} -// Validate checks the field values on PasswordComplexityPolicyID with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *PasswordComplexityPolicyID) Validate() error { - if m == nil { - return nil - } - - // no validation rules for Id - - return nil -} - -// PasswordComplexityPolicyIDValidationError is the validation error returned -// by PasswordComplexityPolicyID.Validate if the designated constraints aren't met. -type PasswordComplexityPolicyIDValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e PasswordComplexityPolicyIDValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e PasswordComplexityPolicyIDValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e PasswordComplexityPolicyIDValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e PasswordComplexityPolicyIDValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e PasswordComplexityPolicyIDValidationError) ErrorName() string { - return "PasswordComplexityPolicyIDValidationError" -} - -// Error satisfies the builtin error interface -func (e PasswordComplexityPolicyIDValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sPasswordComplexityPolicyID.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = PasswordComplexityPolicyIDValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = PasswordComplexityPolicyIDValidationError{} - -// Validate checks the field values on PasswordComplexityPolicy with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *PasswordComplexityPolicy) Validate() error { - if m == nil { - return nil - } - - // no validation rules for Id - - // no validation rules for Description - - // no validation rules for State - - if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return PasswordComplexityPolicyValidationError{ - field: "CreationDate", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return PasswordComplexityPolicyValidationError{ - field: "ChangeDate", - reason: "embedded message failed validation", - cause: err, - } - } - } - - // no validation rules for MinLength - - // no validation rules for HasLowercase - - // no validation rules for HasUppercase - - // no validation rules for HasNumber - - // no validation rules for HasSymbol - - // no validation rules for Sequence - - // no validation rules for IsDefault - - return nil -} - -// PasswordComplexityPolicyValidationError is the validation error returned by -// PasswordComplexityPolicy.Validate if the designated constraints aren't met. -type PasswordComplexityPolicyValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e PasswordComplexityPolicyValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e PasswordComplexityPolicyValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e PasswordComplexityPolicyValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e PasswordComplexityPolicyValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e PasswordComplexityPolicyValidationError) ErrorName() string { - return "PasswordComplexityPolicyValidationError" -} - -// Error satisfies the builtin error interface -func (e PasswordComplexityPolicyValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sPasswordComplexityPolicy.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = PasswordComplexityPolicyValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = PasswordComplexityPolicyValidationError{} - -// Validate checks the field values on PasswordComplexityPolicyCreate with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *PasswordComplexityPolicyCreate) Validate() error { - if m == nil { - return nil - } - - if utf8.RuneCountInString(m.GetDescription()) > 500 { - return PasswordComplexityPolicyCreateValidationError{ - field: "Description", - reason: "value length must be at most 500 runes", - } - } - - // no validation rules for MinLength - - // no validation rules for HasLowercase - - // no validation rules for HasUppercase - - // no validation rules for HasNumber - - // no validation rules for HasSymbol - - return nil -} - -// PasswordComplexityPolicyCreateValidationError is the validation error -// returned by PasswordComplexityPolicyCreate.Validate if the designated -// constraints aren't met. -type PasswordComplexityPolicyCreateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e PasswordComplexityPolicyCreateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e PasswordComplexityPolicyCreateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e PasswordComplexityPolicyCreateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e PasswordComplexityPolicyCreateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e PasswordComplexityPolicyCreateValidationError) ErrorName() string { - return "PasswordComplexityPolicyCreateValidationError" -} - -// Error satisfies the builtin error interface -func (e PasswordComplexityPolicyCreateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sPasswordComplexityPolicyCreate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = PasswordComplexityPolicyCreateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = PasswordComplexityPolicyCreateValidationError{} - -// Validate checks the field values on PasswordComplexityPolicyUpdate with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *PasswordComplexityPolicyUpdate) Validate() error { - if m == nil { - return nil - } - - // no validation rules for Id - - if utf8.RuneCountInString(m.GetDescription()) > 500 { - return PasswordComplexityPolicyUpdateValidationError{ - field: "Description", - reason: "value length must be at most 500 runes", - } - } - - // no validation rules for MinLength - - // no validation rules for HasLowercase - - // no validation rules for HasUppercase - - // no validation rules for HasNumber - - // no validation rules for HasSymbol - - return nil -} - -// PasswordComplexityPolicyUpdateValidationError is the validation error -// returned by PasswordComplexityPolicyUpdate.Validate if the designated -// constraints aren't met. -type PasswordComplexityPolicyUpdateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e PasswordComplexityPolicyUpdateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e PasswordComplexityPolicyUpdateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e PasswordComplexityPolicyUpdateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e PasswordComplexityPolicyUpdateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e PasswordComplexityPolicyUpdateValidationError) ErrorName() string { - return "PasswordComplexityPolicyUpdateValidationError" -} - -// Error satisfies the builtin error interface -func (e PasswordComplexityPolicyUpdateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sPasswordComplexityPolicyUpdate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = PasswordComplexityPolicyUpdateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = PasswordComplexityPolicyUpdateValidationError{} - -// Validate checks the field values on PasswordAgePolicyID with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *PasswordAgePolicyID) Validate() error { - if m == nil { - return nil - } - - // no validation rules for Id - - return nil -} - -// PasswordAgePolicyIDValidationError is the validation error returned by -// PasswordAgePolicyID.Validate if the designated constraints aren't met. -type PasswordAgePolicyIDValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e PasswordAgePolicyIDValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e PasswordAgePolicyIDValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e PasswordAgePolicyIDValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e PasswordAgePolicyIDValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e PasswordAgePolicyIDValidationError) ErrorName() string { - return "PasswordAgePolicyIDValidationError" -} - -// Error satisfies the builtin error interface -func (e PasswordAgePolicyIDValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sPasswordAgePolicyID.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = PasswordAgePolicyIDValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = PasswordAgePolicyIDValidationError{} - -// Validate checks the field values on PasswordAgePolicy with the rules defined +// Validate checks the field values on OrgIamPolicyView with the rules defined // in the proto definition for this message. If any rules are violated, an // error is returned. -func (m *PasswordAgePolicy) Validate() error { +func (m *OrgIamPolicyView) Validate() error { if m == nil { return nil } - // no validation rules for Id - - // no validation rules for Description - - // no validation rules for State - - if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return PasswordAgePolicyValidationError{ - field: "CreationDate", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return PasswordAgePolicyValidationError{ - field: "ChangeDate", - reason: "embedded message failed validation", - cause: err, - } - } - } - - // no validation rules for MaxAgeDays - - // no validation rules for ExpireWarnDays - - // no validation rules for Sequence - - // no validation rules for IsDefault - - return nil -} - -// PasswordAgePolicyValidationError is the validation error returned by -// PasswordAgePolicy.Validate if the designated constraints aren't met. -type PasswordAgePolicyValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e PasswordAgePolicyValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e PasswordAgePolicyValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e PasswordAgePolicyValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e PasswordAgePolicyValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e PasswordAgePolicyValidationError) ErrorName() string { - return "PasswordAgePolicyValidationError" -} - -// Error satisfies the builtin error interface -func (e PasswordAgePolicyValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sPasswordAgePolicy.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = PasswordAgePolicyValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = PasswordAgePolicyValidationError{} - -// Validate checks the field values on PasswordAgePolicyCreate with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *PasswordAgePolicyCreate) Validate() error { - if m == nil { - return nil - } - - if utf8.RuneCountInString(m.GetDescription()) > 500 { - return PasswordAgePolicyCreateValidationError{ - field: "Description", - reason: "value length must be at most 500 runes", - } - } - - // no validation rules for MaxAgeDays - - // no validation rules for ExpireWarnDays - - return nil -} - -// PasswordAgePolicyCreateValidationError is the validation error returned by -// PasswordAgePolicyCreate.Validate if the designated constraints aren't met. -type PasswordAgePolicyCreateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e PasswordAgePolicyCreateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e PasswordAgePolicyCreateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e PasswordAgePolicyCreateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e PasswordAgePolicyCreateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e PasswordAgePolicyCreateValidationError) ErrorName() string { - return "PasswordAgePolicyCreateValidationError" -} - -// Error satisfies the builtin error interface -func (e PasswordAgePolicyCreateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sPasswordAgePolicyCreate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = PasswordAgePolicyCreateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = PasswordAgePolicyCreateValidationError{} - -// Validate checks the field values on PasswordAgePolicyUpdate with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *PasswordAgePolicyUpdate) Validate() error { - if m == nil { - return nil - } - - // no validation rules for Id - - if utf8.RuneCountInString(m.GetDescription()) > 500 { - return PasswordAgePolicyUpdateValidationError{ - field: "Description", - reason: "value length must be at most 500 runes", - } - } - - // no validation rules for MaxAgeDays - - // no validation rules for ExpireWarnDays - - return nil -} - -// PasswordAgePolicyUpdateValidationError is the validation error returned by -// PasswordAgePolicyUpdate.Validate if the designated constraints aren't met. -type PasswordAgePolicyUpdateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e PasswordAgePolicyUpdateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e PasswordAgePolicyUpdateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e PasswordAgePolicyUpdateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e PasswordAgePolicyUpdateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e PasswordAgePolicyUpdateValidationError) ErrorName() string { - return "PasswordAgePolicyUpdateValidationError" -} - -// Error satisfies the builtin error interface -func (e PasswordAgePolicyUpdateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sPasswordAgePolicyUpdate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = PasswordAgePolicyUpdateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = PasswordAgePolicyUpdateValidationError{} - -// Validate checks the field values on PasswordLockoutPolicyID with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *PasswordLockoutPolicyID) Validate() error { - if m == nil { - return nil - } - - // no validation rules for Id - - return nil -} - -// PasswordLockoutPolicyIDValidationError is the validation error returned by -// PasswordLockoutPolicyID.Validate if the designated constraints aren't met. -type PasswordLockoutPolicyIDValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e PasswordLockoutPolicyIDValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e PasswordLockoutPolicyIDValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e PasswordLockoutPolicyIDValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e PasswordLockoutPolicyIDValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e PasswordLockoutPolicyIDValidationError) ErrorName() string { - return "PasswordLockoutPolicyIDValidationError" -} - -// Error satisfies the builtin error interface -func (e PasswordLockoutPolicyIDValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sPasswordLockoutPolicyID.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = PasswordLockoutPolicyIDValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = PasswordLockoutPolicyIDValidationError{} - -// Validate checks the field values on PasswordLockoutPolicy with the rules -// defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *PasswordLockoutPolicy) Validate() error { - if m == nil { - return nil - } - - // no validation rules for Id - - // no validation rules for Description - - // no validation rules for State - - if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return PasswordLockoutPolicyValidationError{ - field: "CreationDate", - reason: "embedded message failed validation", - cause: err, - } - } - } - - if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return PasswordLockoutPolicyValidationError{ - field: "ChangeDate", - reason: "embedded message failed validation", - cause: err, - } - } - } - - // no validation rules for MaxAttempts - - // no validation rules for ShowLockOutFailures - - // no validation rules for Sequence - - // no validation rules for IsDefault - - return nil -} - -// PasswordLockoutPolicyValidationError is the validation error returned by -// PasswordLockoutPolicy.Validate if the designated constraints aren't met. -type PasswordLockoutPolicyValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e PasswordLockoutPolicyValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e PasswordLockoutPolicyValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e PasswordLockoutPolicyValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e PasswordLockoutPolicyValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e PasswordLockoutPolicyValidationError) ErrorName() string { - return "PasswordLockoutPolicyValidationError" -} - -// Error satisfies the builtin error interface -func (e PasswordLockoutPolicyValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sPasswordLockoutPolicy.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = PasswordLockoutPolicyValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = PasswordLockoutPolicyValidationError{} - -// Validate checks the field values on PasswordLockoutPolicyCreate with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *PasswordLockoutPolicyCreate) Validate() error { - if m == nil { - return nil - } - - if utf8.RuneCountInString(m.GetDescription()) > 500 { - return PasswordLockoutPolicyCreateValidationError{ - field: "Description", - reason: "value length must be at most 500 runes", - } - } - - // no validation rules for MaxAttempts - - // no validation rules for ShowLockOutFailures - - return nil -} - -// PasswordLockoutPolicyCreateValidationError is the validation error returned -// by PasswordLockoutPolicyCreate.Validate if the designated constraints -// aren't met. -type PasswordLockoutPolicyCreateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e PasswordLockoutPolicyCreateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e PasswordLockoutPolicyCreateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e PasswordLockoutPolicyCreateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e PasswordLockoutPolicyCreateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e PasswordLockoutPolicyCreateValidationError) ErrorName() string { - return "PasswordLockoutPolicyCreateValidationError" -} - -// Error satisfies the builtin error interface -func (e PasswordLockoutPolicyCreateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sPasswordLockoutPolicyCreate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = PasswordLockoutPolicyCreateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = PasswordLockoutPolicyCreateValidationError{} - -// Validate checks the field values on PasswordLockoutPolicyUpdate with the -// rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. -func (m *PasswordLockoutPolicyUpdate) Validate() error { - if m == nil { - return nil - } - - // no validation rules for Id - - if utf8.RuneCountInString(m.GetDescription()) > 500 { - return PasswordLockoutPolicyUpdateValidationError{ - field: "Description", - reason: "value length must be at most 500 runes", - } - } - - // no validation rules for MaxAttempts - - // no validation rules for ShowLockOutFailures - - return nil -} - -// PasswordLockoutPolicyUpdateValidationError is the validation error returned -// by PasswordLockoutPolicyUpdate.Validate if the designated constraints -// aren't met. -type PasswordLockoutPolicyUpdateValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e PasswordLockoutPolicyUpdateValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e PasswordLockoutPolicyUpdateValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e PasswordLockoutPolicyUpdateValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e PasswordLockoutPolicyUpdateValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e PasswordLockoutPolicyUpdateValidationError) ErrorName() string { - return "PasswordLockoutPolicyUpdateValidationError" -} - -// Error satisfies the builtin error interface -func (e PasswordLockoutPolicyUpdateValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sPasswordLockoutPolicyUpdate.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = PasswordLockoutPolicyUpdateValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = PasswordLockoutPolicyUpdateValidationError{} - -// Validate checks the field values on OrgIamPolicy with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *OrgIamPolicy) Validate() error { - if m == nil { - return nil - } - - // no validation rules for OrgId - - // no validation rules for Description - // no validation rules for UserLoginMustBeDomain // no validation rules for Default @@ -5341,9 +4331,9 @@ func (m *OrgIamPolicy) Validate() error { return nil } -// OrgIamPolicyValidationError is the validation error returned by -// OrgIamPolicy.Validate if the designated constraints aren't met. -type OrgIamPolicyValidationError struct { +// OrgIamPolicyViewValidationError is the validation error returned by +// OrgIamPolicyView.Validate if the designated constraints aren't met. +type OrgIamPolicyViewValidationError struct { field string reason string cause error @@ -5351,22 +4341,22 @@ type OrgIamPolicyValidationError struct { } // Field function returns field value. -func (e OrgIamPolicyValidationError) Field() string { return e.field } +func (e OrgIamPolicyViewValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e OrgIamPolicyValidationError) Reason() string { return e.reason } +func (e OrgIamPolicyViewValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e OrgIamPolicyValidationError) Cause() error { return e.cause } +func (e OrgIamPolicyViewValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e OrgIamPolicyValidationError) Key() bool { return e.key } +func (e OrgIamPolicyViewValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e OrgIamPolicyValidationError) ErrorName() string { return "OrgIamPolicyValidationError" } +func (e OrgIamPolicyViewValidationError) ErrorName() string { return "OrgIamPolicyViewValidationError" } // Error satisfies the builtin error interface -func (e OrgIamPolicyValidationError) Error() string { +func (e OrgIamPolicyViewValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -5378,14 +4368,14 @@ func (e OrgIamPolicyValidationError) Error() string { } return fmt.Sprintf( - "invalid %sOrgIamPolicy.%s: %s%s", + "invalid %sOrgIamPolicyView.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = OrgIamPolicyValidationError{} +var _ error = OrgIamPolicyViewValidationError{} var _ interface { Field() string @@ -5393,7 +4383,7 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = OrgIamPolicyValidationError{} +} = OrgIamPolicyViewValidationError{} // Validate checks the field values on OrgCreateRequest with the rules defined // in the proto definition for this message. If any rules are violated, an @@ -14339,6 +13329,26 @@ func (m *LoginPolicy) Validate() error { // no validation rules for AllowExternalIdp + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LoginPolicyValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LoginPolicyValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } @@ -14396,10 +13406,10 @@ var _ interface { ErrorName() string } = LoginPolicyValidationError{} -// Validate checks the field values on LoginPolicyAdd with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. -func (m *LoginPolicyAdd) Validate() error { +// Validate checks the field values on LoginPolicyRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *LoginPolicyRequest) Validate() error { if m == nil { return nil } @@ -14413,9 +13423,9 @@ func (m *LoginPolicyAdd) Validate() error { return nil } -// LoginPolicyAddValidationError is the validation error returned by -// LoginPolicyAdd.Validate if the designated constraints aren't met. -type LoginPolicyAddValidationError struct { +// LoginPolicyRequestValidationError is the validation error returned by +// LoginPolicyRequest.Validate if the designated constraints aren't met. +type LoginPolicyRequestValidationError struct { field string reason string cause error @@ -14423,22 +13433,24 @@ type LoginPolicyAddValidationError struct { } // Field function returns field value. -func (e LoginPolicyAddValidationError) Field() string { return e.field } +func (e LoginPolicyRequestValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e LoginPolicyAddValidationError) Reason() string { return e.reason } +func (e LoginPolicyRequestValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e LoginPolicyAddValidationError) Cause() error { return e.cause } +func (e LoginPolicyRequestValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e LoginPolicyAddValidationError) Key() bool { return e.key } +func (e LoginPolicyRequestValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e LoginPolicyAddValidationError) ErrorName() string { return "LoginPolicyAddValidationError" } +func (e LoginPolicyRequestValidationError) ErrorName() string { + return "LoginPolicyRequestValidationError" +} // Error satisfies the builtin error interface -func (e LoginPolicyAddValidationError) Error() string { +func (e LoginPolicyRequestValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -14450,14 +13462,14 @@ func (e LoginPolicyAddValidationError) Error() string { } return fmt.Sprintf( - "invalid %sLoginPolicyAdd.%s: %s%s", + "invalid %sLoginPolicyRequest.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = LoginPolicyAddValidationError{} +var _ error = LoginPolicyRequestValidationError{} var _ interface { Field() string @@ -14465,7 +13477,7 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = LoginPolicyAddValidationError{} +} = LoginPolicyRequestValidationError{} // Validate checks the field values on IdpProviderID with the rules defined in // the proto definition for this message. If any rules are violated, an error @@ -14707,6 +13719,26 @@ func (m *LoginPolicyView) Validate() error { // no validation rules for AllowExternalIdp + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LoginPolicyViewValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LoginPolicyViewValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } @@ -15346,3 +14378,801 @@ var _ interface { Cause() error ErrorName() string } = ExternalIDPRemoveRequestValidationError{} + +// Validate checks the field values on PasswordComplexityPolicy with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *PasswordComplexityPolicy) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MinLength + + // no validation rules for HasLowercase + + // no validation rules for HasUppercase + + // no validation rules for HasNumber + + // no validation rules for HasSymbol + + // no validation rules for Sequence + + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PasswordComplexityPolicyValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PasswordComplexityPolicyValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// PasswordComplexityPolicyValidationError is the validation error returned by +// PasswordComplexityPolicy.Validate if the designated constraints aren't met. +type PasswordComplexityPolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PasswordComplexityPolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PasswordComplexityPolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PasswordComplexityPolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PasswordComplexityPolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PasswordComplexityPolicyValidationError) ErrorName() string { + return "PasswordComplexityPolicyValidationError" +} + +// Error satisfies the builtin error interface +func (e PasswordComplexityPolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPasswordComplexityPolicy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PasswordComplexityPolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PasswordComplexityPolicyValidationError{} + +// Validate checks the field values on PasswordComplexityPolicyRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *PasswordComplexityPolicyRequest) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MinLength + + // no validation rules for HasLowercase + + // no validation rules for HasUppercase + + // no validation rules for HasNumber + + // no validation rules for HasSymbol + + return nil +} + +// PasswordComplexityPolicyRequestValidationError is the validation error +// returned by PasswordComplexityPolicyRequest.Validate if the designated +// constraints aren't met. +type PasswordComplexityPolicyRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PasswordComplexityPolicyRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PasswordComplexityPolicyRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PasswordComplexityPolicyRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PasswordComplexityPolicyRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PasswordComplexityPolicyRequestValidationError) ErrorName() string { + return "PasswordComplexityPolicyRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e PasswordComplexityPolicyRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPasswordComplexityPolicyRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PasswordComplexityPolicyRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PasswordComplexityPolicyRequestValidationError{} + +// Validate checks the field values on PasswordComplexityPolicyView with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *PasswordComplexityPolicyView) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Default + + // no validation rules for MinLength + + // no validation rules for HasLowercase + + // no validation rules for HasUppercase + + // no validation rules for HasNumber + + // no validation rules for HasSymbol + + // no validation rules for Sequence + + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PasswordComplexityPolicyViewValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PasswordComplexityPolicyViewValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// PasswordComplexityPolicyViewValidationError is the validation error returned +// by PasswordComplexityPolicyView.Validate if the designated constraints +// aren't met. +type PasswordComplexityPolicyViewValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PasswordComplexityPolicyViewValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PasswordComplexityPolicyViewValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PasswordComplexityPolicyViewValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PasswordComplexityPolicyViewValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PasswordComplexityPolicyViewValidationError) ErrorName() string { + return "PasswordComplexityPolicyViewValidationError" +} + +// Error satisfies the builtin error interface +func (e PasswordComplexityPolicyViewValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPasswordComplexityPolicyView.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PasswordComplexityPolicyViewValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PasswordComplexityPolicyViewValidationError{} + +// Validate checks the field values on PasswordAgePolicy with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *PasswordAgePolicy) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MaxAgeDays + + // no validation rules for ExpireWarnDays + + // no validation rules for Sequence + + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PasswordAgePolicyValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PasswordAgePolicyValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// PasswordAgePolicyValidationError is the validation error returned by +// PasswordAgePolicy.Validate if the designated constraints aren't met. +type PasswordAgePolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PasswordAgePolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PasswordAgePolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PasswordAgePolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PasswordAgePolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PasswordAgePolicyValidationError) ErrorName() string { + return "PasswordAgePolicyValidationError" +} + +// Error satisfies the builtin error interface +func (e PasswordAgePolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPasswordAgePolicy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PasswordAgePolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PasswordAgePolicyValidationError{} + +// Validate checks the field values on PasswordAgePolicyRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *PasswordAgePolicyRequest) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MaxAgeDays + + // no validation rules for ExpireWarnDays + + return nil +} + +// PasswordAgePolicyRequestValidationError is the validation error returned by +// PasswordAgePolicyRequest.Validate if the designated constraints aren't met. +type PasswordAgePolicyRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PasswordAgePolicyRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PasswordAgePolicyRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PasswordAgePolicyRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PasswordAgePolicyRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PasswordAgePolicyRequestValidationError) ErrorName() string { + return "PasswordAgePolicyRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e PasswordAgePolicyRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPasswordAgePolicyRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PasswordAgePolicyRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PasswordAgePolicyRequestValidationError{} + +// Validate checks the field values on PasswordAgePolicyView with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *PasswordAgePolicyView) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Default + + // no validation rules for MaxAgeDays + + // no validation rules for ExpireWarnDays + + // no validation rules for Sequence + + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PasswordAgePolicyViewValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PasswordAgePolicyViewValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// PasswordAgePolicyViewValidationError is the validation error returned by +// PasswordAgePolicyView.Validate if the designated constraints aren't met. +type PasswordAgePolicyViewValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PasswordAgePolicyViewValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PasswordAgePolicyViewValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PasswordAgePolicyViewValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PasswordAgePolicyViewValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PasswordAgePolicyViewValidationError) ErrorName() string { + return "PasswordAgePolicyViewValidationError" +} + +// Error satisfies the builtin error interface +func (e PasswordAgePolicyViewValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPasswordAgePolicyView.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PasswordAgePolicyViewValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PasswordAgePolicyViewValidationError{} + +// Validate checks the field values on PasswordLockoutPolicy with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *PasswordLockoutPolicy) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MaxAttempts + + // no validation rules for ShowLockoutFailure + + // no validation rules for Sequence + + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PasswordLockoutPolicyValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PasswordLockoutPolicyValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// PasswordLockoutPolicyValidationError is the validation error returned by +// PasswordLockoutPolicy.Validate if the designated constraints aren't met. +type PasswordLockoutPolicyValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PasswordLockoutPolicyValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PasswordLockoutPolicyValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PasswordLockoutPolicyValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PasswordLockoutPolicyValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PasswordLockoutPolicyValidationError) ErrorName() string { + return "PasswordLockoutPolicyValidationError" +} + +// Error satisfies the builtin error interface +func (e PasswordLockoutPolicyValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPasswordLockoutPolicy.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PasswordLockoutPolicyValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PasswordLockoutPolicyValidationError{} + +// Validate checks the field values on PasswordLockoutPolicyRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *PasswordLockoutPolicyRequest) Validate() error { + if m == nil { + return nil + } + + // no validation rules for MaxAttempts + + // no validation rules for ShowLockoutFailure + + return nil +} + +// PasswordLockoutPolicyRequestValidationError is the validation error returned +// by PasswordLockoutPolicyRequest.Validate if the designated constraints +// aren't met. +type PasswordLockoutPolicyRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PasswordLockoutPolicyRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PasswordLockoutPolicyRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PasswordLockoutPolicyRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PasswordLockoutPolicyRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PasswordLockoutPolicyRequestValidationError) ErrorName() string { + return "PasswordLockoutPolicyRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e PasswordLockoutPolicyRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPasswordLockoutPolicyRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PasswordLockoutPolicyRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PasswordLockoutPolicyRequestValidationError{} + +// Validate checks the field values on PasswordLockoutPolicyView with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *PasswordLockoutPolicyView) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Default + + // no validation rules for MaxAttempts + + // no validation rules for ShowLockoutFailure + + // no validation rules for Sequence + + if v, ok := interface{}(m.GetCreationDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PasswordLockoutPolicyViewValidationError{ + field: "CreationDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetChangeDate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PasswordLockoutPolicyViewValidationError{ + field: "ChangeDate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// PasswordLockoutPolicyViewValidationError is the validation error returned by +// PasswordLockoutPolicyView.Validate if the designated constraints aren't met. +type PasswordLockoutPolicyViewValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PasswordLockoutPolicyViewValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PasswordLockoutPolicyViewValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PasswordLockoutPolicyViewValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PasswordLockoutPolicyViewValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PasswordLockoutPolicyViewValidationError) ErrorName() string { + return "PasswordLockoutPolicyViewValidationError" +} + +// Error satisfies the builtin error interface +func (e PasswordLockoutPolicyViewValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPasswordLockoutPolicyView.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PasswordLockoutPolicyViewValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PasswordLockoutPolicyViewValidationError{} diff --git a/pkg/grpc/management/mock/management.proto.mock.go b/pkg/grpc/management/mock/management.proto.mock.go index df4a94be84..65c155cb75 100644 --- a/pkg/grpc/management/mock/management.proto.mock.go +++ b/pkg/grpc/management/mock/management.proto.mock.go @@ -398,7 +398,7 @@ func (mr *MockManagementServiceClientMockRecorder) ChangeUserUserName(arg0, arg1 } // CreateLoginPolicy mocks base method -func (m *MockManagementServiceClient) CreateLoginPolicy(arg0 context.Context, arg1 *management.LoginPolicyAdd, arg2 ...grpc.CallOption) (*management.LoginPolicy, error) { +func (m *MockManagementServiceClient) CreateLoginPolicy(arg0 context.Context, arg1 *management.LoginPolicyRequest, arg2 ...grpc.CallOption) (*management.LoginPolicy, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { @@ -478,7 +478,7 @@ func (mr *MockManagementServiceClientMockRecorder) CreateOrg(arg0, arg1 interfac } // CreatePasswordAgePolicy mocks base method -func (m *MockManagementServiceClient) CreatePasswordAgePolicy(arg0 context.Context, arg1 *management.PasswordAgePolicyCreate, arg2 ...grpc.CallOption) (*management.PasswordAgePolicy, error) { +func (m *MockManagementServiceClient) CreatePasswordAgePolicy(arg0 context.Context, arg1 *management.PasswordAgePolicyRequest, arg2 ...grpc.CallOption) (*management.PasswordAgePolicy, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { @@ -498,7 +498,7 @@ func (mr *MockManagementServiceClientMockRecorder) CreatePasswordAgePolicy(arg0, } // CreatePasswordComplexityPolicy mocks base method -func (m *MockManagementServiceClient) CreatePasswordComplexityPolicy(arg0 context.Context, arg1 *management.PasswordComplexityPolicyCreate, arg2 ...grpc.CallOption) (*management.PasswordComplexityPolicy, error) { +func (m *MockManagementServiceClient) CreatePasswordComplexityPolicy(arg0 context.Context, arg1 *management.PasswordComplexityPolicyRequest, arg2 ...grpc.CallOption) (*management.PasswordComplexityPolicy, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { @@ -518,7 +518,7 @@ func (mr *MockManagementServiceClientMockRecorder) CreatePasswordComplexityPolic } // CreatePasswordLockoutPolicy mocks base method -func (m *MockManagementServiceClient) CreatePasswordLockoutPolicy(arg0 context.Context, arg1 *management.PasswordLockoutPolicyCreate, arg2 ...grpc.CallOption) (*management.PasswordLockoutPolicy, error) { +func (m *MockManagementServiceClient) CreatePasswordLockoutPolicy(arg0 context.Context, arg1 *management.PasswordLockoutPolicyRequest, arg2 ...grpc.CallOption) (*management.PasswordLockoutPolicy, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { @@ -777,66 +777,6 @@ func (mr *MockManagementServiceClientMockRecorder) DeleteMachineKey(arg0, arg1 i return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteMachineKey", reflect.TypeOf((*MockManagementServiceClient)(nil).DeleteMachineKey), varargs...) } -// DeletePasswordAgePolicy mocks base method -func (m *MockManagementServiceClient) DeletePasswordAgePolicy(arg0 context.Context, arg1 *management.PasswordAgePolicyID, arg2 ...grpc.CallOption) (*emptypb.Empty, error) { - m.ctrl.T.Helper() - varargs := []interface{}{arg0, arg1} - for _, a := range arg2 { - varargs = append(varargs, a) - } - ret := m.ctrl.Call(m, "DeletePasswordAgePolicy", varargs...) - ret0, _ := ret[0].(*emptypb.Empty) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// DeletePasswordAgePolicy indicates an expected call of DeletePasswordAgePolicy -func (mr *MockManagementServiceClientMockRecorder) DeletePasswordAgePolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - varargs := append([]interface{}{arg0, arg1}, arg2...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeletePasswordAgePolicy", reflect.TypeOf((*MockManagementServiceClient)(nil).DeletePasswordAgePolicy), varargs...) -} - -// DeletePasswordComplexityPolicy mocks base method -func (m *MockManagementServiceClient) DeletePasswordComplexityPolicy(arg0 context.Context, arg1 *management.PasswordComplexityPolicyID, arg2 ...grpc.CallOption) (*emptypb.Empty, error) { - m.ctrl.T.Helper() - varargs := []interface{}{arg0, arg1} - for _, a := range arg2 { - varargs = append(varargs, a) - } - ret := m.ctrl.Call(m, "DeletePasswordComplexityPolicy", varargs...) - ret0, _ := ret[0].(*emptypb.Empty) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// DeletePasswordComplexityPolicy indicates an expected call of DeletePasswordComplexityPolicy -func (mr *MockManagementServiceClientMockRecorder) DeletePasswordComplexityPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - varargs := append([]interface{}{arg0, arg1}, arg2...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeletePasswordComplexityPolicy", reflect.TypeOf((*MockManagementServiceClient)(nil).DeletePasswordComplexityPolicy), varargs...) -} - -// DeletePasswordLockoutPolicy mocks base method -func (m *MockManagementServiceClient) DeletePasswordLockoutPolicy(arg0 context.Context, arg1 *management.PasswordLockoutPolicyID, arg2 ...grpc.CallOption) (*emptypb.Empty, error) { - m.ctrl.T.Helper() - varargs := []interface{}{arg0, arg1} - for _, a := range arg2 { - varargs = append(varargs, a) - } - ret := m.ctrl.Call(m, "DeletePasswordLockoutPolicy", varargs...) - ret0, _ := ret[0].(*emptypb.Empty) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// DeletePasswordLockoutPolicy indicates an expected call of DeletePasswordLockoutPolicy -func (mr *MockManagementServiceClientMockRecorder) DeletePasswordLockoutPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - varargs := append([]interface{}{arg0, arg1}, arg2...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeletePasswordLockoutPolicy", reflect.TypeOf((*MockManagementServiceClient)(nil).DeletePasswordLockoutPolicy), varargs...) -} - // DeleteUser mocks base method func (m *MockManagementServiceClient) DeleteUser(arg0 context.Context, arg1 *management.UserID, arg2 ...grpc.CallOption) (*emptypb.Empty, error) { m.ctrl.T.Helper() @@ -877,15 +817,55 @@ func (mr *MockManagementServiceClientMockRecorder) GenerateMyOrgDomainValidation return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GenerateMyOrgDomainValidation", reflect.TypeOf((*MockManagementServiceClient)(nil).GenerateMyOrgDomainValidation), varargs...) } +// GetDefaultLoginPolicy mocks base method +func (m *MockManagementServiceClient) GetDefaultLoginPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*management.LoginPolicyView, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetDefaultLoginPolicy", varargs...) + ret0, _ := ret[0].(*management.LoginPolicyView) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetDefaultLoginPolicy indicates an expected call of GetDefaultLoginPolicy +func (mr *MockManagementServiceClientMockRecorder) GetDefaultLoginPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefaultLoginPolicy", reflect.TypeOf((*MockManagementServiceClient)(nil).GetDefaultLoginPolicy), varargs...) +} + +// GetDefaultPasswordAgePolicy mocks base method +func (m *MockManagementServiceClient) GetDefaultPasswordAgePolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*management.PasswordAgePolicyView, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetDefaultPasswordAgePolicy", varargs...) + ret0, _ := ret[0].(*management.PasswordAgePolicyView) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetDefaultPasswordAgePolicy indicates an expected call of GetDefaultPasswordAgePolicy +func (mr *MockManagementServiceClientMockRecorder) GetDefaultPasswordAgePolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefaultPasswordAgePolicy", reflect.TypeOf((*MockManagementServiceClient)(nil).GetDefaultPasswordAgePolicy), varargs...) +} + // GetDefaultPasswordComplexityPolicy mocks base method -func (m *MockManagementServiceClient) GetDefaultPasswordComplexityPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*management.PasswordComplexityPolicy, error) { +func (m *MockManagementServiceClient) GetDefaultPasswordComplexityPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*management.PasswordComplexityPolicyView, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { varargs = append(varargs, a) } ret := m.ctrl.Call(m, "GetDefaultPasswordComplexityPolicy", varargs...) - ret0, _ := ret[0].(*management.PasswordComplexityPolicy) + ret0, _ := ret[0].(*management.PasswordComplexityPolicyView) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -897,6 +877,26 @@ func (mr *MockManagementServiceClientMockRecorder) GetDefaultPasswordComplexityP return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefaultPasswordComplexityPolicy", reflect.TypeOf((*MockManagementServiceClient)(nil).GetDefaultPasswordComplexityPolicy), varargs...) } +// GetDefaultPasswordLockoutPolicy mocks base method +func (m *MockManagementServiceClient) GetDefaultPasswordLockoutPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*management.PasswordLockoutPolicyView, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetDefaultPasswordLockoutPolicy", varargs...) + ret0, _ := ret[0].(*management.PasswordLockoutPolicyView) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetDefaultPasswordLockoutPolicy indicates an expected call of GetDefaultPasswordLockoutPolicy +func (mr *MockManagementServiceClientMockRecorder) GetDefaultPasswordLockoutPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefaultPasswordLockoutPolicy", reflect.TypeOf((*MockManagementServiceClient)(nil).GetDefaultPasswordLockoutPolicy), varargs...) +} + // GetGrantedProjectByID mocks base method func (m *MockManagementServiceClient) GetGrantedProjectByID(arg0 context.Context, arg1 *management.ProjectGrantID, arg2 ...grpc.CallOption) (*management.ProjectGrantView, error) { m.ctrl.T.Helper() @@ -1018,14 +1018,14 @@ func (mr *MockManagementServiceClientMockRecorder) GetMyOrg(arg0, arg1 interface } // GetMyOrgIamPolicy mocks base method -func (m *MockManagementServiceClient) GetMyOrgIamPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*management.OrgIamPolicy, error) { +func (m *MockManagementServiceClient) GetMyOrgIamPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*management.OrgIamPolicyView, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { varargs = append(varargs, a) } ret := m.ctrl.Call(m, "GetMyOrgIamPolicy", varargs...) - ret0, _ := ret[0].(*management.OrgIamPolicy) + ret0, _ := ret[0].(*management.OrgIamPolicyView) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1078,14 +1078,14 @@ func (mr *MockManagementServiceClientMockRecorder) GetOrgMemberRoles(arg0, arg1 } // GetPasswordAgePolicy mocks base method -func (m *MockManagementServiceClient) GetPasswordAgePolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*management.PasswordAgePolicy, error) { +func (m *MockManagementServiceClient) GetPasswordAgePolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*management.PasswordAgePolicyView, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { varargs = append(varargs, a) } ret := m.ctrl.Call(m, "GetPasswordAgePolicy", varargs...) - ret0, _ := ret[0].(*management.PasswordAgePolicy) + ret0, _ := ret[0].(*management.PasswordAgePolicyView) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1098,14 +1098,14 @@ func (mr *MockManagementServiceClientMockRecorder) GetPasswordAgePolicy(arg0, ar } // GetPasswordComplexityPolicy mocks base method -func (m *MockManagementServiceClient) GetPasswordComplexityPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*management.PasswordComplexityPolicy, error) { +func (m *MockManagementServiceClient) GetPasswordComplexityPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*management.PasswordComplexityPolicyView, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { varargs = append(varargs, a) } ret := m.ctrl.Call(m, "GetPasswordComplexityPolicy", varargs...) - ret0, _ := ret[0].(*management.PasswordComplexityPolicy) + ret0, _ := ret[0].(*management.PasswordComplexityPolicyView) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1118,14 +1118,14 @@ func (mr *MockManagementServiceClientMockRecorder) GetPasswordComplexityPolicy(a } // GetPasswordLockoutPolicy mocks base method -func (m *MockManagementServiceClient) GetPasswordLockoutPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*management.PasswordLockoutPolicy, error) { +func (m *MockManagementServiceClient) GetPasswordLockoutPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*management.PasswordLockoutPolicyView, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { varargs = append(varargs, a) } ret := m.ctrl.Call(m, "GetPasswordLockoutPolicy", varargs...) - ret0, _ := ret[0].(*management.PasswordLockoutPolicy) + ret0, _ := ret[0].(*management.PasswordLockoutPolicyView) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1817,6 +1817,66 @@ func (mr *MockManagementServiceClientMockRecorder) RemoveMyOrgMember(arg0, arg1 return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoveMyOrgMember", reflect.TypeOf((*MockManagementServiceClient)(nil).RemoveMyOrgMember), varargs...) } +// RemovePasswordAgePolicy mocks base method +func (m *MockManagementServiceClient) RemovePasswordAgePolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "RemovePasswordAgePolicy", varargs...) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// RemovePasswordAgePolicy indicates an expected call of RemovePasswordAgePolicy +func (mr *MockManagementServiceClientMockRecorder) RemovePasswordAgePolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemovePasswordAgePolicy", reflect.TypeOf((*MockManagementServiceClient)(nil).RemovePasswordAgePolicy), varargs...) +} + +// RemovePasswordComplexityPolicy mocks base method +func (m *MockManagementServiceClient) RemovePasswordComplexityPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "RemovePasswordComplexityPolicy", varargs...) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// RemovePasswordComplexityPolicy indicates an expected call of RemovePasswordComplexityPolicy +func (mr *MockManagementServiceClientMockRecorder) RemovePasswordComplexityPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemovePasswordComplexityPolicy", reflect.TypeOf((*MockManagementServiceClient)(nil).RemovePasswordComplexityPolicy), varargs...) +} + +// RemovePasswordLockoutPolicy mocks base method +func (m *MockManagementServiceClient) RemovePasswordLockoutPolicy(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "RemovePasswordLockoutPolicy", varargs...) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// RemovePasswordLockoutPolicy indicates an expected call of RemovePasswordLockoutPolicy +func (mr *MockManagementServiceClientMockRecorder) RemovePasswordLockoutPolicy(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemovePasswordLockoutPolicy", reflect.TypeOf((*MockManagementServiceClient)(nil).RemovePasswordLockoutPolicy), varargs...) +} + // RemoveProject mocks base method func (m *MockManagementServiceClient) RemoveProject(arg0 context.Context, arg1 *management.ProjectID, arg2 ...grpc.CallOption) (*emptypb.Empty, error) { m.ctrl.T.Helper() @@ -2438,7 +2498,7 @@ func (mr *MockManagementServiceClientMockRecorder) UpdateIdpConfig(arg0, arg1 in } // UpdateLoginPolicy mocks base method -func (m *MockManagementServiceClient) UpdateLoginPolicy(arg0 context.Context, arg1 *management.LoginPolicy, arg2 ...grpc.CallOption) (*management.LoginPolicy, error) { +func (m *MockManagementServiceClient) UpdateLoginPolicy(arg0 context.Context, arg1 *management.LoginPolicyRequest, arg2 ...grpc.CallOption) (*management.LoginPolicy, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { @@ -2478,7 +2538,7 @@ func (mr *MockManagementServiceClientMockRecorder) UpdateOidcIdpConfig(arg0, arg } // UpdatePasswordAgePolicy mocks base method -func (m *MockManagementServiceClient) UpdatePasswordAgePolicy(arg0 context.Context, arg1 *management.PasswordAgePolicyUpdate, arg2 ...grpc.CallOption) (*management.PasswordAgePolicy, error) { +func (m *MockManagementServiceClient) UpdatePasswordAgePolicy(arg0 context.Context, arg1 *management.PasswordAgePolicyRequest, arg2 ...grpc.CallOption) (*management.PasswordAgePolicy, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { @@ -2498,7 +2558,7 @@ func (mr *MockManagementServiceClientMockRecorder) UpdatePasswordAgePolicy(arg0, } // UpdatePasswordComplexityPolicy mocks base method -func (m *MockManagementServiceClient) UpdatePasswordComplexityPolicy(arg0 context.Context, arg1 *management.PasswordComplexityPolicyUpdate, arg2 ...grpc.CallOption) (*management.PasswordComplexityPolicy, error) { +func (m *MockManagementServiceClient) UpdatePasswordComplexityPolicy(arg0 context.Context, arg1 *management.PasswordComplexityPolicyRequest, arg2 ...grpc.CallOption) (*management.PasswordComplexityPolicy, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { @@ -2518,7 +2578,7 @@ func (mr *MockManagementServiceClientMockRecorder) UpdatePasswordComplexityPolic } // UpdatePasswordLockoutPolicy mocks base method -func (m *MockManagementServiceClient) UpdatePasswordLockoutPolicy(arg0 context.Context, arg1 *management.PasswordLockoutPolicyUpdate, arg2 ...grpc.CallOption) (*management.PasswordLockoutPolicy, error) { +func (m *MockManagementServiceClient) UpdatePasswordLockoutPolicy(arg0 context.Context, arg1 *management.PasswordLockoutPolicyRequest, arg2 ...grpc.CallOption) (*management.PasswordLockoutPolicy, error) { m.ctrl.T.Helper() varargs := []interface{}{arg0, arg1} for _, a := range arg2 { diff --git a/pkg/grpc/management/proto/management.proto b/pkg/grpc/management/proto/management.proto index a85f16c7fe..a88354026e 100644 --- a/pkg/grpc/management/proto/management.proto +++ b/pkg/grpc/management/proto/management.proto @@ -435,145 +435,6 @@ rpc GetUserByID(UserID) returns (UserView) { }; } - // returns default policy if nothing other set on organisation - rpc GetPasswordComplexityPolicy(google.protobuf.Empty) returns (PasswordComplexityPolicy) { - option (google.api.http) = { - get: "/policies/passwords/complexity" - }; - - option (caos.zitadel.utils.v1.auth_option) = { - permission: "policy.read" - }; - } - - rpc GetDefaultPasswordComplexityPolicy(google.protobuf.Empty) returns (PasswordComplexityPolicy) { - option (google.api.http) = { - get: "/policies/passwords/complexity/default" - }; - - option (caos.zitadel.utils.v1.auth_option) = { - permission: "policy.read" - }; - } - - rpc CreatePasswordComplexityPolicy(PasswordComplexityPolicyCreate) returns (PasswordComplexityPolicy) { - option (google.api.http) = { - post: "/policies/passwords/complexity" - body: "*" - }; - - option (caos.zitadel.utils.v1.auth_option) = { - permission: "policy.write" - }; - } - - rpc UpdatePasswordComplexityPolicy(PasswordComplexityPolicyUpdate) returns (PasswordComplexityPolicy) { - option (google.api.http) = { - put: "/policies/passwords/complexity" - body: "*" - }; - - option (caos.zitadel.utils.v1.auth_option) = { - permission: "policy.write" - }; - } - - rpc DeletePasswordComplexityPolicy(PasswordComplexityPolicyID) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/policies/passwords/complexity" - }; - - option (caos.zitadel.utils.v1.auth_option) = { - permission: "policy.delete" - }; - } - - // returns default if nothing other set on organisation - rpc GetPasswordAgePolicy(google.protobuf.Empty) returns (PasswordAgePolicy) { - option (google.api.http) = { - get: "/policies/passwords/age" - }; - - option (caos.zitadel.utils.v1.auth_option) = { - permission: "policy.read" - }; - } - - rpc CreatePasswordAgePolicy(PasswordAgePolicyCreate) returns (PasswordAgePolicy) { - option (google.api.http) = { - post: "/policies/passwords/age" - body: "*" - }; - - option (caos.zitadel.utils.v1.auth_option) = { - permission: "policy.write" - }; - } - - rpc UpdatePasswordAgePolicy(PasswordAgePolicyUpdate) returns (PasswordAgePolicy) { - option (google.api.http) = { - put: "/policies/passwords/age" - body: "*" - }; - - option (caos.zitadel.utils.v1.auth_option) = { - permission: "policy.write" - }; - } - - rpc DeletePasswordAgePolicy(PasswordAgePolicyID) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/policies/passwords/age" - }; - - option (caos.zitadel.utils.v1.auth_option) = { - permission: "policy.delete" - }; - } - - // returns default if nothing other set on organisation - rpc GetPasswordLockoutPolicy(google.protobuf.Empty) returns (PasswordLockoutPolicy) { - option (google.api.http) = { - get: "/policies/passwords/lockout" - }; - - option (caos.zitadel.utils.v1.auth_option) = { - permission: "policy.read" - }; - } - - rpc CreatePasswordLockoutPolicy(PasswordLockoutPolicyCreate) returns (PasswordLockoutPolicy) { - option (google.api.http) = { - post: "/policies/passwords/lockout" - body: "*" - }; - - option (caos.zitadel.utils.v1.auth_option) = { - permission: "policy.write" - }; - } - - rpc UpdatePasswordLockoutPolicy(PasswordLockoutPolicyUpdate) returns (PasswordLockoutPolicy) { - option (google.api.http) = { - put: "/policies/passwords/lockout" - body: "*" - }; - - option (caos.zitadel.utils.v1.auth_option) = { - permission: "policy.write" - }; - } - - rpc DeletePasswordLockoutPolicy(PasswordLockoutPolicyID) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/policies/passwords/lockout" - }; - - option (caos.zitadel.utils.v1.auth_option) = { - permission: "policy.delete" - }; - } - rpc CreateOrg(OrgCreateRequest) returns (Org) { option (google.api.http) = { post: "/orgs" @@ -703,7 +564,7 @@ rpc GetUserByID(UserID) returns (UserView) { }; } - rpc GetMyOrgIamPolicy(google.protobuf.Empty) returns (OrgIamPolicy) { + rpc GetMyOrgIamPolicy(google.protobuf.Empty) returns (OrgIamPolicyView) { option (google.api.http) = { get: "/orgs/me/iampolicy" }; @@ -1418,7 +1279,6 @@ rpc GetUserByID(UserID) returns (UserView) { }; } - rpc GetLoginPolicy(google.protobuf.Empty) returns (LoginPolicyView) { option (google.api.http) = { get: "/orgs/me/policies/login" @@ -1429,7 +1289,17 @@ rpc GetUserByID(UserID) returns (UserView) { }; } - rpc CreateLoginPolicy(LoginPolicyAdd) returns (LoginPolicy) { + rpc GetDefaultLoginPolicy(google.protobuf.Empty) returns (LoginPolicyView) { + option (google.api.http) = { + get: "/orgs/default/policies/login" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.read" + }; + } + + rpc CreateLoginPolicy(LoginPolicyRequest) returns (LoginPolicy) { option (google.api.http) = { post: "/orgs/me/policies/login" body: "*" @@ -1440,7 +1310,7 @@ rpc GetUserByID(UserID) returns (UserView) { }; } - rpc UpdateLoginPolicy(LoginPolicy) returns (LoginPolicy) { + rpc UpdateLoginPolicy(LoginPolicyRequest) returns (LoginPolicy) { option (google.api.http) = { put: "/orgs/me/policies/login" body: "*" @@ -1492,6 +1362,162 @@ rpc GetUserByID(UserID) returns (UserView) { permission: "policy.write" }; } + + rpc GetPasswordComplexityPolicy(google.protobuf.Empty) returns (PasswordComplexityPolicyView) { + option (google.api.http) = { + get: "/orgs/me/policies/password/complexity" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.read" + }; + } + + rpc GetDefaultPasswordComplexityPolicy(google.protobuf.Empty) returns (PasswordComplexityPolicyView) { + option (google.api.http) = { + get: "/orgs/default/policies/password/complexity" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.read" + }; + } + + rpc CreatePasswordComplexityPolicy(PasswordComplexityPolicyRequest) returns (PasswordComplexityPolicy) { + option (google.api.http) = { + post: "/orgs/me/policies/password/complexity" + body: "*" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.write" + }; + } + + rpc UpdatePasswordComplexityPolicy(PasswordComplexityPolicyRequest) returns (PasswordComplexityPolicy) { + option (google.api.http) = { + put: "/orgs/me/policies/password/complexity" + body: "*" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.write" + }; + } + + rpc RemovePasswordComplexityPolicy(google.protobuf.Empty) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/orgs/me/policies/password/complexity" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.delete" + }; + } + + rpc GetPasswordAgePolicy(google.protobuf.Empty) returns (PasswordAgePolicyView) { + option (google.api.http) = { + get: "/orgs/me/policies/password/age" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.read" + }; + } + + rpc GetDefaultPasswordAgePolicy(google.protobuf.Empty) returns (PasswordAgePolicyView) { + option (google.api.http) = { + get: "/orgs/default/policies/password/age" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.read" + }; + } + + rpc CreatePasswordAgePolicy(PasswordAgePolicyRequest) returns (PasswordAgePolicy) { + option (google.api.http) = { + post: "/orgs/me/policies/password/age" + body: "*" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.write" + }; + } + + rpc UpdatePasswordAgePolicy(PasswordAgePolicyRequest) returns (PasswordAgePolicy) { + option (google.api.http) = { + put: "/orgs/me/policies/password/age" + body: "*" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.write" + }; + } + + rpc RemovePasswordAgePolicy(google.protobuf.Empty) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/orgs/me/policies/password/age" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.delete" + }; + } + + rpc GetPasswordLockoutPolicy(google.protobuf.Empty) returns (PasswordLockoutPolicyView) { + option (google.api.http) = { + get: "/orgs/me/policies/password/lockout" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.read" + }; + } + + rpc GetDefaultPasswordLockoutPolicy(google.protobuf.Empty) returns (PasswordLockoutPolicyView) { + option (google.api.http) = { + get: "/orgs/default/policies/password/lockout" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.read" + }; + } + + rpc CreatePasswordLockoutPolicy(PasswordLockoutPolicyRequest) returns (PasswordLockoutPolicy) { + option (google.api.http) = { + post: "/orgs/me/policies/password/lockout" + body: "*" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.write" + }; + } + + rpc UpdatePasswordLockoutPolicy(PasswordLockoutPolicyRequest) returns (PasswordLockoutPolicy) { + option (google.api.http) = { + put: "/orgs/me/policies/password/lockout" + body: "*" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.write" + }; + } + + rpc RemovePasswordLockoutPolicy(google.protobuf.Empty) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/orgs/me/policies/password/lockout" + }; + + option (caos.zitadel.utils.v1.auth_option) = { + permission: "policy.delete" + }; + } } message ZitadelDocs { @@ -1961,102 +1987,6 @@ enum NotificationType { NOTIFICATIONTYPE_SMS = 1; } -message PasswordComplexityPolicyID { //TODO: why do we need this? - string id = 1; -} - -message PasswordComplexityPolicy { - string id = 1; - string description = 2; - PolicyState state = 3; - google.protobuf.Timestamp creation_date = 4; - google.protobuf.Timestamp change_date = 5; - uint64 min_length = 6; - bool has_lowercase = 7; - bool has_uppercase = 8; - bool has_number = 9; - bool has_symbol = 10; - uint64 sequence = 11; - bool is_default = 12; -} - -message PasswordComplexityPolicyCreate { - string description = 1 [(validate.rules).string = {max_len: 500}]; - uint64 min_length = 2; - bool has_lowercase = 3; - bool has_uppercase = 4; - bool has_number = 5; - bool has_symbol = 6; -} - -message PasswordComplexityPolicyUpdate { - string id = 1; //TODO: do we need id? - string description = 2 [(validate.rules).string = {max_len: 500}]; - uint64 min_length = 3; - bool has_lowercase = 4; - bool has_uppercase = 5; - bool has_number = 6; - bool has_symbol = 7; -} - -message PasswordAgePolicyID { //TODO: why do we need this? - string id = 1; -} - -message PasswordAgePolicy { - string id = 1; //TODO: do we need id? - string description = 2; - PolicyState state = 3; - google.protobuf.Timestamp creation_date = 4; - google.protobuf.Timestamp change_date = 5; - uint64 max_age_days = 6; - uint64 expire_warn_days = 7; - uint64 sequence = 8; - bool is_default = 9; -} - -message PasswordAgePolicyCreate { - string description = 1 [(validate.rules).string = {max_len: 500}]; - uint64 max_age_days = 2; - uint64 expire_warn_days = 3; -} - -message PasswordAgePolicyUpdate { - string id = 1; //TODO: do we need id? - string description = 2 [(validate.rules).string = {max_len: 500}]; - uint64 max_age_days = 3; - uint64 expire_warn_days = 4; -} - -message PasswordLockoutPolicyID { - string id = 1; //TODO: why do we need this? -} - -message PasswordLockoutPolicy { - string id = 1; //TODO: why do we need this? - string description = 2; - PolicyState state = 3; - google.protobuf.Timestamp creation_date = 4; - google.protobuf.Timestamp change_date = 5; - uint64 max_attempts = 6; - bool show_lock_out_failures = 7; - uint64 sequence = 8; - bool is_default = 9; -} - -message PasswordLockoutPolicyCreate { - string description = 1 [(validate.rules).string = {max_len: 500}]; - uint64 max_attempts = 2; - bool show_lock_out_failures = 3; -} - -message PasswordLockoutPolicyUpdate { - string id = 1; //TODO: do we need id? - string description = 2 [(validate.rules).string = {max_len: 500}]; - uint64 max_attempts = 3; - bool show_lock_out_failures = 4; -} - enum PolicyState { POLICYSTATE_UNSPECIFIED = 0; POLICYSTATE_ACTIVE = 1; @@ -2064,11 +1994,9 @@ enum PolicyState { POLICYSTATE_DELETED = 3; } -message OrgIamPolicy { - string org_id = 1; //TODO: do we need id? - string description = 2; - bool user_login_must_be_domain = 3; - bool default = 4; +message OrgIamPolicyView { + bool user_login_must_be_domain = 1; + bool default = 2; } message OrgCreateRequest { @@ -3015,9 +2943,11 @@ message LoginPolicy { bool allow_username_password = 1; bool allow_register = 2; bool allow_external_idp = 3; + google.protobuf.Timestamp creation_date = 4; + google.protobuf.Timestamp change_date = 5; } -message LoginPolicyAdd { +message LoginPolicyRequest { bool allow_username_password = 1; bool allow_register = 2; bool allow_external_idp = 3; @@ -3042,6 +2972,8 @@ message LoginPolicyView { bool allow_username_password = 2; bool allow_register = 3; bool allow_external_idp = 4; + google.protobuf.Timestamp creation_date = 5; + google.protobuf.Timestamp change_date = 6; } message IdpProviderView { @@ -3112,4 +3044,79 @@ message ExternalIDPRemoveRequest { string user_id = 1; string idp_config_id = 2; string external_user_id = 3; -} \ No newline at end of file +} + +message PasswordComplexityPolicy { + uint64 min_length = 1; + bool has_lowercase = 2; + bool has_uppercase = 3; + bool has_number = 4; + bool has_symbol = 5; + uint64 sequence = 6; + google.protobuf.Timestamp creation_date = 7; + google.protobuf.Timestamp change_date = 8; +} + +message PasswordComplexityPolicyRequest { + uint64 min_length = 1; + bool has_lowercase = 2; + bool has_uppercase = 3; + bool has_number = 4; + bool has_symbol = 5; +} + +message PasswordComplexityPolicyView { + bool default = 1; + uint64 min_length = 2; + bool has_lowercase = 3; + bool has_uppercase = 4; + bool has_number = 5; + bool has_symbol = 6; + uint64 sequence = 7; + google.protobuf.Timestamp creation_date = 8; + google.protobuf.Timestamp change_date = 9; +} + +message PasswordAgePolicy { + uint64 max_age_days = 1; + uint64 expire_warn_days = 2; + uint64 sequence = 3; + google.protobuf.Timestamp creation_date = 4; + google.protobuf.Timestamp change_date = 5; +} + +message PasswordAgePolicyRequest { + uint64 max_age_days = 1; + uint64 expire_warn_days = 2; +} + +message PasswordAgePolicyView { + bool default = 1; + uint64 max_age_days = 2; + uint64 expire_warn_days = 3; + uint64 sequence = 4; + google.protobuf.Timestamp creation_date = 5; + google.protobuf.Timestamp change_date = 6; +} + +message PasswordLockoutPolicy { + uint64 max_attempts = 1; + bool show_lockout_failure = 2; + uint64 sequence = 3; + google.protobuf.Timestamp creation_date = 4; + google.protobuf.Timestamp change_date = 5; +} + +message PasswordLockoutPolicyRequest { + uint64 max_attempts = 1; + bool show_lockout_failure = 2; +} + +message PasswordLockoutPolicyView { + bool default = 1; + uint64 max_attempts = 2; + bool show_lockout_failure = 3; + uint64 sequence = 4; + google.protobuf.Timestamp creation_date = 5; + google.protobuf.Timestamp change_date = 6; +}