introduce Credentials
parent
73e73e8d3d
commit
4baa012918
@ -0,0 +1,56 @@
|
|||||||
|
import deprecation
|
||||||
|
from enum import Enum
|
||||||
|
from typing import List, TypedDict
|
||||||
|
from inflection import underscore
|
||||||
|
import deprecation
|
||||||
|
from .common import (
|
||||||
|
Validateable,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class GopassType(Enum):
|
||||||
|
FIELD = 0
|
||||||
|
PASSWORD = 1
|
||||||
|
|
||||||
|
|
||||||
|
class CredentialMapping(Validateable):
|
||||||
|
def __init__(self, mapping: dict):
|
||||||
|
self.name = mapping.get("name", None)
|
||||||
|
self.gopass_field = mapping.get("gopass_field", None)
|
||||||
|
self.gopass_path = mapping.get("gopass_path", None)
|
||||||
|
|
||||||
|
def validate(self) -> List[str]:
|
||||||
|
result = []
|
||||||
|
result += self.__validate_is_not_empty__("gopass_path")
|
||||||
|
if not self.name and not self.gopass_field:
|
||||||
|
result.append(f"Either name or gopass field has to be defined.")
|
||||||
|
return result
|
||||||
|
|
||||||
|
def gopass_type(self):
|
||||||
|
if self.gopass_field:
|
||||||
|
return GopassType.FIELD
|
||||||
|
else:
|
||||||
|
return GopassType.PASSWORD
|
||||||
|
|
||||||
|
def name_for_input(self):
|
||||||
|
if self.name:
|
||||||
|
return self.name
|
||||||
|
else:
|
||||||
|
return underscore(self.gopass_field)
|
||||||
|
|
||||||
|
def name_for_environment(self):
|
||||||
|
return self.name_for_input().upper()
|
||||||
|
|
||||||
|
|
||||||
|
class Credentials(Validateable):
|
||||||
|
def __init__(self, input: dict):
|
||||||
|
input_mappings = input.get("credentials_mapping", [])
|
||||||
|
self.mappings = []
|
||||||
|
for input_mapping in input_mappings:
|
||||||
|
self.mappings.append(CredentialMapping(input_mapping))
|
||||||
|
|
||||||
|
def validate(self) -> List[str]:
|
||||||
|
result = []
|
||||||
|
for mapping in self.mappings:
|
||||||
|
result += mapping.validate()
|
||||||
|
return result
|
@ -0,0 +1,107 @@
|
|||||||
|
import pytest
|
||||||
|
from pathlib import Path
|
||||||
|
from src.main.python.ddadevops.domain import (
|
||||||
|
CredentialMapping,
|
||||||
|
Credentials,
|
||||||
|
GopassType,
|
||||||
|
MixinType,
|
||||||
|
)
|
||||||
|
from .helper import build_devops
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_create_mapping():
|
||||||
|
sut = CredentialMapping(
|
||||||
|
{
|
||||||
|
"gopass_path": "server/meissa/grafana-cloud",
|
||||||
|
"gopass_field": "grafana-cloud-user",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
assert "grafana_cloud_user" == sut.name_for_input()
|
||||||
|
assert "GRAFANA_CLOUD_USER" == sut.name_for_environment()
|
||||||
|
assert GopassType.FIELD == sut.gopass_type()
|
||||||
|
|
||||||
|
sut = CredentialMapping(
|
||||||
|
{
|
||||||
|
"gopass_path": "server/meissa/grafana-cloud",
|
||||||
|
"name": "grafana_cloud_password",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
assert "grafana_cloud_password" == sut.name_for_input()
|
||||||
|
assert "GRAFANA_CLOUD_PASSWORD" == sut.name_for_environment()
|
||||||
|
assert GopassType.PASSWORD == sut.gopass_type()
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_validate_CredentialMapping():
|
||||||
|
sut = CredentialMapping(
|
||||||
|
{
|
||||||
|
"gopass_path": "server/meissa/grafana-cloud",
|
||||||
|
"gopass_field": "grafana-cloud-user",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
assert sut.is_valid()
|
||||||
|
|
||||||
|
sut = CredentialMapping(
|
||||||
|
{
|
||||||
|
"gopass_path": "server/meissa/grafana-cloud",
|
||||||
|
"name": "grafana_cloud_user",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
assert sut.is_valid()
|
||||||
|
|
||||||
|
sut = CredentialMapping(
|
||||||
|
{
|
||||||
|
"gopass_path": "server/meissa/grafana-cloud",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
assert not sut.is_valid()
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_create_credentials():
|
||||||
|
sut = Credentials(
|
||||||
|
{
|
||||||
|
"credentials_mapping": [
|
||||||
|
{
|
||||||
|
"gopass_path": "server/meissa/grafana-cloud",
|
||||||
|
"gopass_field": "grafana-cloud-user",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"gopass_path": "server/meissa/grafana-cloud",
|
||||||
|
"name": "grafana_cloud_password",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
assert sut
|
||||||
|
|
||||||
|
def test_should_validate_credentials():
|
||||||
|
sut = Credentials(
|
||||||
|
{
|
||||||
|
"credentials_mapping": [
|
||||||
|
{
|
||||||
|
"gopass_path": "server/meissa/grafana-cloud",
|
||||||
|
"gopass_field": "grafana-cloud-user",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"gopass_path": "server/meissa/grafana-cloud",
|
||||||
|
"name": "grafana_cloud_password",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
assert sut.is_valid()
|
||||||
|
|
||||||
|
sut = Credentials(
|
||||||
|
{
|
||||||
|
"credentials_mapping": [
|
||||||
|
{
|
||||||
|
"gopass_path": "server/meissa/grafana-cloud",
|
||||||
|
"gopass_field": "grafana-cloud-user",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"gopass_path": "server/meissa/grafana-cloud"
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
assert not sut.is_valid()
|
Loading…
Reference in New Issue