mirror of
https://git.selfprivacy.org/SelfPrivacy/selfprivacy-rest-api.git
synced 2024-08-21 11:21:50 +00:00
Co-authored-by: inexcode <inex.code@selfprivacy.org> Reviewed-on: https://git.selfprivacy.org/SelfPrivacy/selfprivacy-rest-api/pulls/13
103 lines
3.7 KiB
Python
103 lines
3.7 KiB
Python
"""Storage devices mutations"""
|
|
import strawberry
|
|
from selfprivacy_api.graphql import IsAuthenticated
|
|
from selfprivacy_api.graphql.common_types.jobs import job_to_api_job
|
|
from selfprivacy_api.utils.block_devices import BlockDevices
|
|
from selfprivacy_api.graphql.mutations.mutation_interface import (
|
|
GenericJobButationReturn,
|
|
GenericMutationReturn,
|
|
)
|
|
from selfprivacy_api.jobs.migrate_to_binds import (
|
|
BindMigrationConfig,
|
|
is_bind_migrated,
|
|
start_bind_migration,
|
|
)
|
|
|
|
|
|
@strawberry.input
|
|
class MigrateToBindsInput:
|
|
"""Migrate to binds input"""
|
|
|
|
email_block_device: str
|
|
bitwarden_block_device: str
|
|
gitea_block_device: str
|
|
nextcloud_block_device: str
|
|
pleroma_block_device: str
|
|
|
|
|
|
@strawberry.type
|
|
class StorageMutations:
|
|
@strawberry.mutation(permission_classes=[IsAuthenticated])
|
|
def resize_volume(self, name: str) -> GenericMutationReturn:
|
|
"""Resize volume"""
|
|
volume = BlockDevices().get_block_device(name)
|
|
if volume is None:
|
|
return GenericMutationReturn(
|
|
success=False, code=404, message="Volume not found"
|
|
)
|
|
volume.resize()
|
|
return GenericMutationReturn(
|
|
success=True, code=200, message="Volume resize started"
|
|
)
|
|
|
|
@strawberry.mutation(permission_classes=[IsAuthenticated])
|
|
def mount_volume(self, name: str) -> GenericMutationReturn:
|
|
"""Mount volume"""
|
|
volume = BlockDevices().get_block_device(name)
|
|
if volume is None:
|
|
return GenericMutationReturn(
|
|
success=False, code=404, message="Volume not found"
|
|
)
|
|
is_success = volume.mount()
|
|
if is_success:
|
|
return GenericMutationReturn(
|
|
success=True,
|
|
code=200,
|
|
message="Volume mounted, rebuild the system to apply changes",
|
|
)
|
|
return GenericMutationReturn(
|
|
success=False, code=409, message="Volume not mounted (already mounted?)"
|
|
)
|
|
|
|
@strawberry.mutation(permission_classes=[IsAuthenticated])
|
|
def unmount_volume(self, name: str) -> GenericMutationReturn:
|
|
"""Unmount volume"""
|
|
volume = BlockDevices().get_block_device(name)
|
|
if volume is None:
|
|
return GenericMutationReturn(
|
|
success=False, code=404, message="Volume not found"
|
|
)
|
|
is_success = volume.unmount()
|
|
if is_success:
|
|
return GenericMutationReturn(
|
|
success=True,
|
|
code=200,
|
|
message="Volume unmounted, rebuild the system to apply changes",
|
|
)
|
|
return GenericMutationReturn(
|
|
success=False, code=409, message="Volume not unmounted (already unmounted?)"
|
|
)
|
|
|
|
@strawberry.mutation(permission_classes=[IsAuthenticated])
|
|
def migrate_to_binds(self, input: MigrateToBindsInput) -> GenericJobButationReturn:
|
|
"""Migrate to binds"""
|
|
if is_bind_migrated():
|
|
return GenericJobButationReturn(
|
|
success=False, code=409, message="Already migrated to binds"
|
|
)
|
|
job = start_bind_migration(
|
|
BindMigrationConfig(
|
|
email_block_device=input.email_block_device,
|
|
bitwarden_block_device=input.bitwarden_block_device,
|
|
gitea_block_device=input.gitea_block_device,
|
|
nextcloud_block_device=input.nextcloud_block_device,
|
|
pleroma_block_device=input.pleroma_block_device,
|
|
)
|
|
)
|
|
return GenericJobButationReturn(
|
|
success=True,
|
|
code=200,
|
|
message="Migration to binds started, rebuild the system to apply changes",
|
|
job=job_to_api_job(job),
|
|
)
|