Code Duplication    Length = 249-249 lines in 2 locations

gvm/protocols/gmpv208/gmpv208.py 1 location

@@ 2476-2724 (lines=249) @@
2473
2474
        return self._send_xml_command(cmd)
2475
2476
    def create_credential(
2477
        self,
2478
        name: str,
2479
        credential_type: CredentialType,
2480
        *,
2481
        comment: Optional[str] = None,
2482
        allow_insecure: Optional[bool] = None,
2483
        certificate: Optional[str] = None,
2484
        key_phrase: Optional[str] = None,
2485
        private_key: Optional[str] = None,
2486
        login: Optional[str] = None,
2487
        password: Optional[str] = None,
2488
        auth_algorithm: Optional[SnmpAuthAlgorithm] = None,
2489
        community: Optional[str] = None,
2490
        privacy_algorithm: Optional[SnmpPrivacyAlgorithm] = None,
2491
        privacy_password: Optional[str] = None,
2492
        public_key: Optional[str] = None,
2493
    ) -> Any:
2494
        """Create a new credential
2495
2496
        Create a new credential e.g. to be used in the method of an alert.
2497
2498
        Currently the following credential types are supported:
2499
2500
            - Username + Password
2501
            - Username + SSH-Key
2502
            - Client Certificates
2503
            - SNMPv1 or SNMPv2c protocol
2504
            - S/MIME Certificate
2505
            - OpenPGP Key
2506
            - Password only
2507
2508
        Arguments:
2509
            name: Name of the new credential
2510
            credential_type: The credential type.
2511
            comment: Comment for the credential
2512
            allow_insecure: Whether to allow insecure use of the credential
2513
            certificate: Certificate for the credential.
2514
                Required for client-certificate and smime credential types.
2515
            key_phrase: Key passphrase for the private key.
2516
                Used for the username+ssh-key credential type.
2517
            private_key: Private key to use for login. Required
2518
                for usk credential type. Also used for the cc credential type.
2519
                The supported key types (dsa, rsa, ecdsa, ...) and formats (PEM,
2520
                PKC#12, OpenSSL, ...) depend on your installed GnuTLS version.
2521
            login: Username for the credential. Required for username+password,
2522
                username+ssh-key and snmp credential type.
2523
            password: Password for the credential. Used for username+password
2524
                and snmp credential types.
2525
            community: The SNMP community
2526
            auth_algorithm: The SNMP authentication algorithm. Required for snmp
2527
                credential type.
2528
            privacy_algorithm: The SNMP privacy algorithm
2529
            privacy_password: The SNMP privacy password
2530
            public_key: PGP public key in *armor* plain text format. Required
2531
                for pgp credential type.
2532
2533
        Examples:
2534
            Creating a Username + Password credential
2535
2536
            .. code-block:: python
2537
2538
                gmp.create_credential(
2539
                    name='UP Credential',
2540
                    credential_type=CredentialType.USERNAME_PASSWORD,
2541
                    login='foo',
2542
                    password='bar',
2543
                )
2544
2545
            Creating a Username + SSH Key credential
2546
2547
            .. code-block:: python
2548
2549
                with open('path/to/private-ssh-key') as f:
2550
                    key = f.read()
2551
2552
                gmp.create_credential(
2553
                    name='USK Credential',
2554
                    credential_type=CredentialType.USERNAME_SSH_KEY,
2555
                    login='foo',
2556
                    key_phrase='foobar',
2557
                    private_key=key,
2558
                )
2559
2560
            Creating a PGP credential
2561
2562
            .. note::
2563
2564
                A compatible public pgp key file can be exported with GnuPG via
2565
                ::
2566
2567
                    $ gpg --armor --export [email protected] > alice.asc
2568
2569
            .. code-block:: python
2570
2571
                with open('path/to/pgp.key.asc') as f:
2572
                    key = f.read()
2573
2574
                gmp.create_credential(
2575
                    name='PGP Credential',
2576
                    credential_type=CredentialType.PGP_ENCRYPTION_KEY,
2577
                    public_key=key,
2578
                )
2579
2580
            Creating a S/MIME credential
2581
2582
            .. code-block:: python
2583
2584
                with open('path/to/smime-cert') as f:
2585
                    cert = f.read()
2586
2587
                gmp.create_credential(
2588
                    name='SMIME Credential',
2589
                    credential_type=CredentialType.SMIME_CERTIFICATE,
2590
                    certificate=cert,
2591
                )
2592
2593
            Creating a Password-Only credential
2594
2595
            .. code-block:: python
2596
2597
                gmp.create_credential(
2598
                    name='Password-Only Credential',
2599
                    credential_type=CredentialType.PASSWORD_ONLY,
2600
                    password='foo',
2601
                )
2602
        Returns:
2603
            The response. See :py:meth:`send_command` for details.
2604
        """
2605
        if not name:
2606
            raise RequiredArgument(
2607
                function=self.create_credential.__name__, argument='name'
2608
            )
2609
2610
        if not isinstance(credential_type, self.types.CredentialType):
2611
            raise InvalidArgumentType(
2612
                function=self.create_credential.__name__,
2613
                argument='credential_type',
2614
                arg_type=CredentialType.__name__,
2615
            )
2616
2617
        cmd = XmlCommand("create_credential")
2618
        cmd.add_element("name", name)
2619
2620
        cmd.add_element("type", credential_type.value)
2621
2622
        if comment:
2623
            cmd.add_element("comment", comment)
2624
2625
        if allow_insecure is not None:
2626
            cmd.add_element("allow_insecure", _to_bool(allow_insecure))
2627
2628
        if (
2629
            credential_type == CredentialType.CLIENT_CERTIFICATE
2630
            or credential_type == CredentialType.SMIME_CERTIFICATE
2631
        ):
2632
            if not certificate:
2633
                raise RequiredArgument(
2634
                    function=self.create_credential.__name__,
2635
                    argument='certificate',
2636
                )
2637
2638
            cmd.add_element("certificate", certificate)
2639
2640
        if (
2641
            credential_type == CredentialType.USERNAME_PASSWORD
2642
            or credential_type == CredentialType.USERNAME_SSH_KEY
2643
            or credential_type == CredentialType.SNMP
2644
        ):
2645
            if not login:
2646
                raise RequiredArgument(
2647
                    function=self.create_credential.__name__, argument='login'
2648
                )
2649
2650
            cmd.add_element("login", login)
2651
2652
        if credential_type == CredentialType.PASSWORD_ONLY and not password:
2653
            raise RequiredArgument(
2654
                function=self.create_credential.__name__, argument='password'
2655
            )
2656
2657
        if (
2658
            credential_type == CredentialType.USERNAME_PASSWORD
2659
            or credential_type == CredentialType.SNMP
2660
            or credential_type == CredentialType.PASSWORD_ONLY
2661
        ) and password:
2662
            cmd.add_element("password", password)
2663
2664
        if credential_type == CredentialType.USERNAME_SSH_KEY:
2665
            if not private_key:
2666
                raise RequiredArgument(
2667
                    function=self.create_credential.__name__,
2668
                    argument='private_key',
2669
                )
2670
2671
            _xmlkey = cmd.add_element("key")
2672
            _xmlkey.add_element("private", private_key)
2673
2674
            if key_phrase:
2675
                _xmlkey.add_element("phrase", key_phrase)
2676
2677
        if credential_type == CredentialType.CLIENT_CERTIFICATE and private_key:
2678
            _xmlkey = cmd.add_element("key")
2679
            _xmlkey.add_element("private", private_key)
2680
2681
        if credential_type == CredentialType.SNMP:
2682
            if not isinstance(auth_algorithm, self.types.SnmpAuthAlgorithm):
2683
                raise InvalidArgumentType(
2684
                    function=self.create_credential.__name__,
2685
                    argument='auth_algorithm',
2686
                    arg_type=SnmpAuthAlgorithm.__name__,
2687
                )
2688
2689
            cmd.add_element("auth_algorithm", auth_algorithm.value)
2690
2691
            if community:
2692
                cmd.add_element("community", community)
2693
2694
            if privacy_algorithm is not None or privacy_password:
2695
                _xmlprivacy = cmd.add_element("privacy")
2696
2697
                if privacy_algorithm is not None:
2698
                    if not isinstance(
2699
                        privacy_algorithm, self.types.SnmpPrivacyAlgorithm
2700
                    ):
2701
                        raise InvalidArgumentType(
2702
                            function=self.create_credential.__name__,
2703
                            argument='privacy_algorithm',
2704
                            arg_type=SnmpPrivacyAlgorithm.__name__,
2705
                        )
2706
2707
                    _xmlprivacy.add_element(
2708
                        "algorithm", privacy_algorithm.value
2709
                    )
2710
2711
                if privacy_password:
2712
                    _xmlprivacy.add_element("password", privacy_password)
2713
2714
        if credential_type == CredentialType.PGP_ENCRYPTION_KEY:
2715
            if not public_key:
2716
                raise RequiredArgument(
2717
                    function=self.create_credential.__name__,
2718
                    argument='public_key',
2719
                )
2720
2721
            _xmlkey = cmd.add_element("key")
2722
            _xmlkey.add_element("public", public_key)
2723
2724
        return self._send_xml_command(cmd)
2725
2726
    def modify_credential(
2727
        self,

gvm/protocols/gmpv8/gmpv8.py 1 location

@@ 56-304 (lines=249) @@
53
        # Is authenticated on gvmd
54
        self._authenticated = False
55
56
    def create_credential(
57
        self,
58
        name: str,
59
        credential_type: CredentialType,
60
        *,
61
        comment: Optional[str] = None,
62
        allow_insecure: Optional[bool] = None,
63
        certificate: Optional[str] = None,
64
        key_phrase: Optional[str] = None,
65
        private_key: Optional[str] = None,
66
        login: Optional[str] = None,
67
        password: Optional[str] = None,
68
        auth_algorithm: Optional[SnmpAuthAlgorithm] = None,
69
        community: Optional[str] = None,
70
        privacy_algorithm: Optional[SnmpPrivacyAlgorithm] = None,
71
        privacy_password: Optional[str] = None,
72
        public_key: Optional[str] = None,
73
    ) -> Any:
74
        """Create a new credential
75
76
        Create a new credential e.g. to be used in the method of an alert.
77
78
        Currently the following credential types are supported:
79
80
            - Username + Password
81
            - Username + SSH-Key
82
            - Client Certificates
83
            - SNMPv1 or SNMPv2c protocol
84
            - S/MIME Certificate
85
            - OpenPGP Key
86
            - Password only
87
88
        Arguments:
89
            name: Name of the new credential
90
            credential_type: The credential type.
91
            comment: Comment for the credential
92
            allow_insecure: Whether to allow insecure use of the credential
93
            certificate: Certificate for the credential.
94
                Required for client-certificate and smime credential types.
95
            key_phrase: Key passphrase for the private key.
96
                Used for the username+ssh-key credential type.
97
            private_key: Private key to use for login. Required
98
                for usk credential type. Also used for the cc credential type.
99
                The supported key types (dsa, rsa, ecdsa, ...) and formats (PEM,
100
                PKC#12, OpenSSL, ...) depend on your installed GnuTLS version.
101
            login: Username for the credential. Required for username+password,
102
                username+ssh-key and snmp credential type.
103
            password: Password for the credential. Used for username+password
104
                and snmp credential types.
105
            community: The SNMP community
106
            auth_algorithm: The SNMP authentication algorithm. Required for snmp
107
                credential type.
108
            privacy_algorithm: The SNMP privacy algorithm
109
            privacy_password: The SNMP privacy password
110
            public_key: PGP public key in *armor* plain text format. Required
111
                for pgp credential type.
112
113
        Examples:
114
            Creating a Username + Password credential
115
116
            .. code-block:: python
117
118
                gmp.create_credential(
119
                    name='UP Credential',
120
                    credential_type=CredentialType.USERNAME_PASSWORD,
121
                    login='foo',
122
                    password='bar',
123
                )
124
125
            Creating a Username + SSH Key credential
126
127
            .. code-block:: python
128
129
                with open('path/to/private-ssh-key') as f:
130
                    key = f.read()
131
132
                gmp.create_credential(
133
                    name='USK Credential',
134
                    credential_type=CredentialType.USERNAME_SSH_KEY,
135
                    login='foo',
136
                    key_phrase='foobar',
137
                    private_key=key,
138
                )
139
140
            Creating a PGP credential
141
142
            .. note::
143
144
                A compatible public pgp key file can be exported with GnuPG via
145
                ::
146
147
                    $ gpg --armor --export [email protected] > alice.asc
148
149
            .. code-block:: python
150
151
                with open('path/to/pgp.key.asc') as f:
152
                    key = f.read()
153
154
                gmp.create_credential(
155
                    name='PGP Credential',
156
                    credential_type=CredentialType.PGP_ENCRYPTION_KEY,
157
                    public_key=key,
158
                )
159
160
            Creating a S/MIME credential
161
162
            .. code-block:: python
163
164
                with open('path/to/smime-cert') as f:
165
                    cert = f.read()
166
167
                gmp.create_credential(
168
                    name='SMIME Credential',
169
                    credential_type=CredentialType.SMIME_CERTIFICATE,
170
                    certificate=cert,
171
                )
172
173
            Creating a Password-Only credential
174
175
            .. code-block:: python
176
177
                gmp.create_credential(
178
                    name='Password-Only Credential',
179
                    credential_type=CredentialType.PASSWORD_ONLY,
180
                    password='foo',
181
                )
182
        Returns:
183
            The response. See :py:meth:`send_command` for details.
184
        """
185
        if not name:
186
            raise RequiredArgument(
187
                function=self.create_credential.__name__, argument='name'
188
            )
189
190
        if not isinstance(credential_type, self.types.CredentialType):
191
            raise InvalidArgumentType(
192
                function=self.create_credential.__name__,
193
                argument='credential_type',
194
                arg_type=CredentialType.__name__,
195
            )
196
197
        cmd = XmlCommand("create_credential")
198
        cmd.add_element("name", name)
199
200
        cmd.add_element("type", credential_type.value)
201
202
        if comment:
203
            cmd.add_element("comment", comment)
204
205
        if allow_insecure is not None:
206
            cmd.add_element("allow_insecure", _to_bool(allow_insecure))
207
208
        if (
209
            credential_type == CredentialType.CLIENT_CERTIFICATE
210
            or credential_type == CredentialType.SMIME_CERTIFICATE
211
        ):
212
            if not certificate:
213
                raise RequiredArgument(
214
                    function=self.create_credential.__name__,
215
                    argument='certificate',
216
                )
217
218
            cmd.add_element("certificate", certificate)
219
220
        if (
221
            credential_type == CredentialType.USERNAME_PASSWORD
222
            or credential_type == CredentialType.USERNAME_SSH_KEY
223
            or credential_type == CredentialType.SNMP
224
        ):
225
            if not login:
226
                raise RequiredArgument(
227
                    function=self.create_credential.__name__, argument='login'
228
                )
229
230
            cmd.add_element("login", login)
231
232
        if credential_type == CredentialType.PASSWORD_ONLY and not password:
233
            raise RequiredArgument(
234
                function=self.create_credential.__name__, argument='password'
235
            )
236
237
        if (
238
            credential_type == CredentialType.USERNAME_PASSWORD
239
            or credential_type == CredentialType.SNMP
240
            or credential_type == CredentialType.PASSWORD_ONLY
241
        ) and password:
242
            cmd.add_element("password", password)
243
244
        if credential_type == CredentialType.USERNAME_SSH_KEY:
245
            if not private_key:
246
                raise RequiredArgument(
247
                    function=self.create_credential.__name__,
248
                    argument='private_key',
249
                )
250
251
            _xmlkey = cmd.add_element("key")
252
            _xmlkey.add_element("private", private_key)
253
254
            if key_phrase:
255
                _xmlkey.add_element("phrase", key_phrase)
256
257
        if credential_type == CredentialType.CLIENT_CERTIFICATE and private_key:
258
            _xmlkey = cmd.add_element("key")
259
            _xmlkey.add_element("private", private_key)
260
261
        if credential_type == CredentialType.SNMP:
262
            if not isinstance(auth_algorithm, self.types.SnmpAuthAlgorithm):
263
                raise InvalidArgumentType(
264
                    function=self.create_credential.__name__,
265
                    argument='auth_algorithm',
266
                    arg_type=SnmpAuthAlgorithm.__name__,
267
                )
268
269
            cmd.add_element("auth_algorithm", auth_algorithm.value)
270
271
            if community:
272
                cmd.add_element("community", community)
273
274
            if privacy_algorithm is not None or privacy_password:
275
                _xmlprivacy = cmd.add_element("privacy")
276
277
                if privacy_algorithm is not None:
278
                    if not isinstance(
279
                        privacy_algorithm, self.types.SnmpPrivacyAlgorithm
280
                    ):
281
                        raise InvalidArgumentType(
282
                            function=self.create_credential.__name__,
283
                            argument='privacy_algorithm',
284
                            arg_type=SnmpPrivacyAlgorithm.__name__,
285
                        )
286
287
                    _xmlprivacy.add_element(
288
                        "algorithm", privacy_algorithm.value
289
                    )
290
291
                if privacy_password:
292
                    _xmlprivacy.add_element("password", privacy_password)
293
294
        if credential_type == CredentialType.PGP_ENCRYPTION_KEY:
295
            if not public_key:
296
                raise RequiredArgument(
297
                    function=self.create_credential.__name__,
298
                    argument='public_key',
299
                )
300
301
            _xmlkey = cmd.add_element("key")
302
            _xmlkey.add_element("public", public_key)
303
304
        return self._send_xml_command(cmd)
305
306
    def modify_credential(
307
        self,