summaryrefslogtreecommitdiffstats
path: root/ipaserver/install/kra.py
blob: 2ff8df5a1f1a7f7cfd32b06cf5e02ff86abdd322 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#
# Copyright (C) 2015  FreeIPA Contributors see COPYING for license
#

import os
from ConfigParser import RawConfigParser
from ipalib import api
from ipaplatform.paths import paths
from ipapython import dogtag
from ipaserver.install import cainstance
from ipaserver.install import krainstance
from ipaserver.install import dsinstance
from ipaserver.install import service
from ipaserver.install.installutils import read_replica_info_kra_enabled


def install_check(replica_config, options, enable_kra, dogtag_version):
    if enable_kra:
        raise RuntimeError("KRA is already installed.")

    if not options.setup_ca:
        if cainstance.is_ca_installed_locally():
            if dogtag_version >= 10:
                # correct dogtag version of CA installed
                pass
            else:
                raise RuntimeError(
                    "Dogtag must be version 10.2 or above to install KRA")
        else:
            raise RuntimeError(
                "Dogtag CA is not installed.  Please install the CA first")

    if replica_config is not None:
        if not read_replica_info_kra_enabled(replica_config.dir):
            raise RuntimeError(
                "Either KRA is not installed on the master system or "
                "your replica file is out of date"
            )


def install(replica_config, options, dm_password):
    subject = dsinstance.DsInstance().find_subject_base()
    if replica_config is None:
        kra = krainstance.KRAInstance(
            api.env.realm,
            dogtag_constants=dogtag.install_constants)

        kra.configure_instance(
            api.env.host, api.env.domain, dm_password,
            dm_password, subject_base=subject)
    else:
        kra = krainstance.install_replica_kra(replica_config)

    service.print_msg("Restarting the directory server")
    ds = dsinstance.DsInstance()
    ds.restart()

    kra.enable_client_auth_to_db(kra.dogtag_constants.KRA_CS_CFG_PATH)

    # Update config file
    parser = RawConfigParser()
    parser.read(paths.IPA_DEFAULT_CONF)
    parser.set('global', 'enable_kra', 'True')

    with open(paths.IPA_DEFAULT_CONF, 'w') as f:
        parser.write(f)


def uninstall():
    dogtag_constants = dogtag.configured_constants(api=api)

    kra_instance = krainstance.KRAInstance(
        api.env.realm, dogtag_constants=dogtag_constants)
    kra_instance.stop_tracking_certificates()
    if kra_instance.is_installed():
        kra_instance.uninstall()

    # Check if config file exists, then update it
    if os.path.exists(paths.IPA_DEFAULT_CONF):
        parser = RawConfigParser()
        parser.read(paths.IPA_DEFAULT_CONF)
        parser.set('global', 'enable_kra', 'False')

        with open(paths.IPA_DEFAULT_CONF, 'w') as f:
            parser.write(f)