storage: add GET endpoint to generate a recovery key

Signed-off-by: Olivier Gayot <olivier.gayot@canonical.com>
This commit is contained in:
Olivier Gayot 2023-08-01 15:50:10 +02:00
parent dd620b40b3
commit 67d22a67a2
3 changed files with 15 additions and 0 deletions

View File

@ -331,6 +331,10 @@ class API:
def GET() -> List[Disk]:
...
class generate_recovery_key:
def GET() -> str:
...
class v2:
def GET(
wait: bool = False,

View File

@ -22,6 +22,7 @@ import math
import os
import pathlib
import platform
import secrets
import tempfile
from abc import ABC, abstractmethod
from typing import List, Optional, Set, Tuple, Union
@ -2047,3 +2048,10 @@ class FilesystemModel(object):
if self.reset_partition is not None:
during.add("efibootmgr")
return (before, during)
@staticmethod
def generate_recovery_key() -> str:
"""Return a new recovery key suitable for LUKS encryption. The key will
consist of 48 decimal digits."""
digits = 48
return str(secrets.randbelow(10**digits)).zfill(digits)

View File

@ -932,6 +932,9 @@ class FilesystemController(SubiquityController, FilesystemManipulator):
install_minimum_size=minsize,
)
async def generate_recovery_key_GET(self) -> str:
return self.model.generate_recovery_key()
async def v2_GET(
self,
wait: bool = False,