File: DkimsigningHandler.php

package info (click to toggle)
postfixadmin 4.0.1%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,888 kB
  • sloc: php: 12,256; perl: 1,156; sh: 717; python: 142; xml: 63; sql: 3; makefile: 2
file content (140 lines) | stat: -rw-r--r-- 4,676 bytes parent folder | download
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php

# $Id$

/**
 * Handler for domain key signing table
 */
class DkimsigningHandler extends PFAHandler
{
    protected $db_table = 'dkim_signing';
    protected $id_field = 'id';
    protected $order_by = 'dkim_id, author';

    protected function initStruct()
    {

        // Get Domains as options for authors
        $domain_handler = new DomainHandler(0, $this->admin_username);
        $domain_handler->getList('1=1');

        // Get Mailboxes as options for authors
        $mail_handler = new MailboxHandler(0, $this->admin_username);
        $mail_handler->getList('1=1');

        // Get Domain Keys
        $dkim_handler = new DkimHandler(0, $this->admin_username);
        $dkim_handler->getList('1=1');

        $authors = array_merge(
            array_keys($domain_handler->result()),
            array_keys($mail_handler->result())
        );

        $this->struct = array(
            # field name                allow       display in...   type        $PALANG label           $PALANG description       default / options / ...
            #                           editing?    form    list
            'id'               => self::pacol(0,          0,      1,      'num'     , 'pFetchmail_field_id' , ''                         , '', array(), array('dont_write_to_db' => 1)),
            'dkim_id'          => self::pacol(1,          1,      1,      'enum'    , 'pDkim_field_dkim_id' , 'pDkim_field_dkim_id_desc' , '', array_keys($dkim_handler->result)),
            'author'           => self::pacol(1,          1,      1,      'enum'    , 'pDkim_field_author'  , 'pDkim_field_author_desc'  , '', $authors),
        );
    }

    protected function initMsg()
    {
        $this->msg['error_already_exists'] = 'dkim_signing_already_exists';
        $this->msg['error_does_not_exist'] = 'dkim_signing_does_not_exist';
        $this->msg['confirm_delete'] = 'confirm_delete_dkim';

        if ($this->new) {
            $this->msg['logname'] = 'create_dkim_signing_entry';
            $this->msg['store_error'] = 'pFetchmail_database_save_error';
            $this->msg['successmessage'] = 'pFetchmail_database_save_success';
        } else {
            $this->msg['logname'] = 'edit_dkim_entry';
            $this->msg['store_error'] = 'pFetchmail_database_save_error';
            $this->msg['successmessage'] = 'pFetchmail_database_save_success';
        }
    }

    public function webformConfig()
    {
        $required_role = 'global-admin';
        if (Config::bool('dkim_all_admins')) {
            $required_role = 'admin';
        }

        return array(
            # $PALANG labels
            'formtitle_create' => 'pDkim_new_sign',
            'formtitle_edit' => 'pDkim_edit_sign',
            'create_button' => 'pFetchmail_new_entry',

            # various settings
            'required_role' => $required_role,
            'listview' => 'list.php?table=dkimsigning',
            'early_init' => 0,
        );
    }
    protected function validate_new_id()
    {
        # auto_increment - any non-empty ID is an error
        if ($this->id != '') {
            $this->errormsg[$this->id_field] = 'auto_increment value, you must pass an empty string!';
            return false;
        }

        return true;
    }

    /**
     *  @return boolean
     */
    public function delete()
    {
        if (! $this->view()) {
            $this->errormsg[] = Config::Lang($this->msg['error_does_not_exist']);
            return false;
        }

        db_delete($this->db_table, $this->id_field, $this->id);

        db_log($this->result['author'], 'delete_dkim_signing_entry', $this->result['id']);
        $this->infomsg[] = Config::Lang_f('pDelete_delete_success', $this->result['author']);
        return true;
    }

    public function domain_from_id()
    {
        return '';
    }

    protected function no_domain_field()
    {
        $domain_handler = new DomainHandler(0, $this->admin_username);
        $domain_handler->getList('1=1');

        $this->allowed_domains = array_keys($domain_handler->result());
    }

    /**
     * Filters to only allowed domains, as author can be either a mailbox or a domain
     * @param $db_result
     * @return array
     */
    protected function read_from_db_postprocess($db_result)
    {
        return array_filter($db_result, function ($row) {
            $domain = $row['author'];
            $at_pos = strpos($domain, '@');

            if ($at_pos) {
                $domain = preg_split('/@/', $domain)[1];
            }

            return in_array($domain, $this->allowed_domains);
        });
    }
}

/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */