aboutsummaryrefslogtreecommitdiff
blob: 737c9d6053aca104f550b29c08348ebd0e2490b6 (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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#
#-*- coding:utf-8 -*-

"""
    Gentoo-keys - actionbase.py

    Base api interface module

    @copyright: 2012-2015 by Brian Dolbec <dol-sen@gentoo.org>
    @license: GNU GPL2, see COPYING for details.
"""

from __future__ import print_function

import os
import sys

if sys.version_info[0] >= 3:
    _unicode = str
else:
    _unicode = unicode


from snakeoil.demandload import demandload

demandload(
    "json:load",
    "gkeys.lib:GkeysGPG",
    "gkeys.keyhandler:KeyHandler",
)



class ActionBase(object):
    '''Base actions class holding comon functions and init'''

    def __init__(self, config, output=None, logger=None):
        self.config = config
        self.output = output
        self.logger = logger
        self.seeds = None
        self._seedhandler = None
        self._keyhandler = None
        self._gpg = None
        self.category = None
        self.verify_recursion = False


    @property
    def gpg(self):
        '''Holds the classwide GkeysGPG instance'''
        if not self._gpg:
            self._gpg = GkeysGPG(self.config,
                self._set_category(self.category), self.logger)
        else:
            self._gpg.basedir = self._set_category(self.category)
        return self._gpg


    @property
    def keyhandler(self):
        '''Holds the classwide KeyHandler instance'''
        if not self._keyhandler:
            self._init_keyhandler()
        return self._keyhandler


    def _init_keyhandler(self):
        self._keyhandler = KeyHandler(self.config, self.logger)
        self._seedhandler = self._keyhandler.seedhandler


    @property
    def seedhandler(self):
        '''Holds the classwide SeedHandler instance
        which is a convienience variable for the keyhandler's instance of it'''
        if not self._seedhandler:
            self._init_keyhandler()
        return self._seedhandler


    def _set_category(self, cat):
        catdir = self.config.get_key('keyrings', cat)
        if not catdir:
            raise Exception("No keyring set.")
        if not cat:
            raise Exception("No category set.")
        self.category = cat
        self.logger.debug(_unicode("ACTIONS: _set_category; catdir = %s") % catdir)
        self._set_trust(cat)
        return catdir


    def _set_trust(self, cat):
        trust = self.config.get_key('trust-model', cat)
        if trust in [None]:
            trust = 'auto'
        if '--trust-model' in self.config.defaults['gpg_defaults']:
            index = self.config.defaults['gpg_defaults'].index('--trust-model')
            self.config.defaults['gpg_defaults'][index+1] = trust
        else:
            self.config.defaults['gpg_defaults'].extend(['--trust-model', trust])