|
3 | 3 | from backend.graphene.utils.permissions import member_can_access_org, user_can_access_app, user_can_access_environment, user_is_org_member |
4 | 4 | import graphene |
5 | 5 | from graphql import GraphQLError |
6 | | -from api.models import App, Environment, EnvironmentKey, EnvironmentToken, Organisation, OrganisationMember, Secret, SecretEvent, SecretFolder, SecretTag, UserToken, ServiceToken |
7 | | -from backend.graphene.types import AppType, EnvironmentKeyType, EnvironmentTokenType, EnvironmentType, SecretFolderType, SecretTagType, SecretType, ServiceTokenType, UserTokenType |
| 6 | +from api.models import App, Environment, EnvironmentKey, EnvironmentToken, Organisation, OrganisationMember, PersonalSecret, Secret, SecretEvent, SecretFolder, SecretTag, UserToken, ServiceToken |
| 7 | +from backend.graphene.types import AppType, EnvironmentKeyType, EnvironmentTokenType, EnvironmentType, PersonalSecretType, SecretFolderType, SecretTagType, SecretType, ServiceTokenType, UserTokenType |
8 | 8 | from datetime import datetime |
9 | 9 |
|
10 | 10 |
|
@@ -35,6 +35,12 @@ class SecretInput(graphene.InputObjectType): |
35 | 35 | comment = graphene.String() |
36 | 36 |
|
37 | 37 |
|
| 38 | +class PersonalSecretInput(graphene.InputObjectType): |
| 39 | + secret_id = graphene.ID() |
| 40 | + value = graphene.String() |
| 41 | + is_active = graphene.Boolean() |
| 42 | + |
| 43 | + |
38 | 44 | class CreateEnvironmentMutation(graphene.Mutation): |
39 | 45 | class Arguments: |
40 | 46 | environment_data = EnvironmentInput(required=True) |
@@ -488,3 +494,54 @@ def mutate(cls, root, info, id): |
488 | 494 | value=secret.value, comment=secret.comment, event_type=SecretEvent.READ, ip_address=ip_address, user_agent=user_agent) |
489 | 495 | read_event.tags.set(secret.tags.all()) |
490 | 496 | return ReadSecretMutation(ok=True) |
| 497 | + |
| 498 | + |
| 499 | +class CreatePersonalSecretMutation(graphene.Mutation): |
| 500 | + |
| 501 | + class Arguments: |
| 502 | + override_data = PersonalSecretInput(PersonalSecretInput) |
| 503 | + |
| 504 | + override = graphene.Field(PersonalSecretType) |
| 505 | + |
| 506 | + @classmethod |
| 507 | + def mutate(cls, root, info, override_data): |
| 508 | + secret = Secret.objects.get(id=override_data.secret_id) |
| 509 | + org = secret.environment.app.organisation |
| 510 | + org_member = OrganisationMember.objects.get( |
| 511 | + organisation=org, user=info.context.user) |
| 512 | + |
| 513 | + if not user_can_access_environment(info.context.user, secret.environment.id): |
| 514 | + raise GraphQLError( |
| 515 | + "You don't have access to this secret") |
| 516 | + |
| 517 | + override, created = PersonalSecret.objects.get_or_create( |
| 518 | + secret_id=override_data.secret_id, user=org_member) |
| 519 | + override.value = override_data.value |
| 520 | + override.is_active = override_data.is_active |
| 521 | + override.save() |
| 522 | + |
| 523 | + return CreatePersonalSecretMutation(override=override) |
| 524 | + |
| 525 | + |
| 526 | +class DeletePersonalSecretMutation(graphene.Mutation): |
| 527 | + |
| 528 | + class Arguments: |
| 529 | + secret_id = graphene.ID() |
| 530 | + |
| 531 | + ok = graphene.Boolean() |
| 532 | + |
| 533 | + @classmethod |
| 534 | + def mutate(cls, root, info, secret_id): |
| 535 | + secret = Secret.objects.get(id=secret_id) |
| 536 | + org = secret.environment.app.organisation |
| 537 | + org_member = OrganisationMember.objects.get( |
| 538 | + organisation=org, user=info.context.user) |
| 539 | + |
| 540 | + if not user_can_access_environment(info.context.user, secret.environment.id): |
| 541 | + raise GraphQLError( |
| 542 | + "You don't have access to this secret") |
| 543 | + |
| 544 | + PersonalSecret.objects.filter( |
| 545 | + secret_id=secret_id, user=org_member).delete() |
| 546 | + |
| 547 | + return DeletePersonalSecretMutation(ok=True) |
0 commit comments