Load plugin based on given record and alt identifier Return plugin_name (str), plugin (object with rotate method)
(record, rotate_name, plugin_name=None, host=None, port=None)
| 203 | |
| 204 | |
| 205 | def get_plugin(record, rotate_name, plugin_name=None, host=None, port=None): |
| 206 | """Load plugin based on given record and alt identifier |
| 207 | |
| 208 | Return plugin_name (str), plugin (object with rotate method) |
| 209 | """ |
| 210 | cmdr_kwargs = get_custom_cmdr_fields(record) |
| 211 | if cmdr_kwargs is None: |
| 212 | return |
| 213 | |
| 214 | if plugin_name is None and len(cmdr_kwargs) > 0: |
| 215 | rotate_value = cmdr_kwargs.get(f'plugin:{rotate_name}') if rotate_name else None |
| 216 | plugin_name = rotate_value if rotate_value else cmdr_kwargs.get('plugin') |
| 217 | |
| 218 | plugin_kwargs = {} |
| 219 | plugin_kwargs.update(cmdr_kwargs) |
| 220 | plugin_kwargs.update(get_rotation_record_kwargs(record)) |
| 221 | if 'host' in plugin_kwargs: |
| 222 | server = plugin_kwargs['host'] |
| 223 | h, sep, p = server.partition(':') |
| 224 | if sep == ':': |
| 225 | plugin_kwargs['host'] = h |
| 226 | plugin_kwargs['port'] = p |
| 227 | |
| 228 | if host: |
| 229 | plugin_kwargs['host'] = host |
| 230 | if port: |
| 231 | plugin_kwargs['port'] = port |
| 232 | |
| 233 | for convert_kwarg in CONVERT_KWARG_TO_INT: |
| 234 | if convert_kwarg in plugin_kwargs: |
| 235 | if plugin_kwargs[convert_kwarg].isnumeric(): |
| 236 | plugin_kwargs[convert_kwarg] = int(plugin_kwargs[convert_kwarg]) |
| 237 | else: |
| 238 | logging.warning( |
| 239 | f'Argument "{convert_kwarg}", value "{plugin_kwargs[convert_kwarg]}"' |
| 240 | ' ignored because unable to convert to integer' |
| 241 | ) |
| 242 | plugin_kwargs.pop(convert_kwarg) |
| 243 | |
| 244 | if plugin_name is None: |
| 245 | if port and port in PORT_TO_PLUGIN: |
| 246 | plugin_name = PORT_TO_PLUGIN[port] |
| 247 | |
| 248 | if plugin_name is None: |
| 249 | plugin_name = detect_plugin(record, plugin_kwargs) |
| 250 | else: |
| 251 | detect_kwargs(record, plugin_name, plugin_kwargs) |
| 252 | |
| 253 | if not plugin_name: |
| 254 | logging.error('Record is not marked for password rotation (i.e. \'cmdr:plugin\' custom field).\n' |
| 255 | 'Add custom field \'cmdr:plugin\'=\'noop\' to enable password rotation for this record') |
| 256 | return |
| 257 | elif check_missing_kwargs(plugin_name, plugin_kwargs): |
| 258 | return |
| 259 | |
| 260 | plugin = load_plugin(plugin_name) |
| 261 | if hasattr(plugin, 'Rotator'): |
| 262 | return plugin_name, plugin_kwargs, plugin.Rotator(**plugin_kwargs) |
nothing calls this directly
no test coverage detected