Coretex
list_secret_parameter.py
1 # Copyright (C) 2023 Coretex LLC
2 
3 # This file is part of Coretex.ai
4 
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License as
7 # published by the Free Software Foundation, either version 3 of the
8 # License, or (at your option) any later version.
9 
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU Affero General Public License for more details.
14 
15 # You should have received a copy of the GNU Affero General Public License
16 # along with this program. If not, see <https://www.gnu.org/licenses/>.
17 
18 from typing import Any, List, Optional, TypeVar, Type
19 
20 import os
21 
22 from coretex.entities.project import ProjectType
23 
24 from ..parameter_type import ParameterType
25 from ..base_list_parameter import BaseListParameter
26 from ....secret import Secret
27 
28 
29 T = TypeVar("T", bound = Secret)
30 
31 
32 class ListSecretParameter(BaseListParameter[List[str]]):
33 
34  def __init__(
35  self,
36  secretType: Type[T],
37  name: str,
38  description: str,
39  value: Optional[List[str]],
40  dataType: ParameterType,
41  required: bool,
42  type: int
43  ) -> None:
44 
45  self._secretType = secretType
46 
47  super().__init__(name, description, value, dataType, required, type)
48 
49  @property
50  def listTypes(self) -> List[type]:
51  return [str]
52 
53  def parseValue(self, type_: ProjectType) -> Optional[Any]:
54  if self.value is None:
55  return None
56 
57  if "CTX_NODE_ACCESS_TOKEN" in os.environ:
58  nodeAccessToken = os.environ["CTX_NODE_ACCESS_TOKEN"]
59  return [self._secretType.fetchNodeSecret(secret, nodeAccessToken) for secret in self.value]
60 
61  return [self._secretType.fetchByName(secret) for secret in self.value]