É possível definir a hora “expira” com base na hora da “criação”?

0

Depois de usar o Keepass por vários anos, surgiu uma ideia que seria bom implementar. Existem mais de 300 registros no meu banco de dados, e seria bom saber quais desses registros ainda são bons. Definir o sinalizador de expiração nos registros ajudaria a lembrar-me de verificar se os registros são válidos e, potencialmente, incentivam-me a alterar minha senha. Existe uma maneira de examinar todo o banco de dados e fazer o seguinte para cada registro?

  1. Verifique se o sinalizador de expiração está definido.
  2. Se não estiver definido, adicione um número X de anos ao tempo de criação (ou modificação).
  3. Defina o sinalizador de expiração.
  4. Defina o tempo de expiração para o valor calculado no passo 2.
  5. Continue para o próximo registro no banco de dados.

Uma resposta foi recebida de Paulo dizendo: "Não com o KeePass, mas você pode usar o KPScript e alguns PowerShell." Ele incluiu um link para # 1318 Alterar Data de Expiração da Lista , mas minha inexperiência com as ferramentas ele recomendou só me deixou mais perguntas. Alguém poderia fornecer mais assistência? (1)

Adendo

Após algumas pesquisas adicionais, a capacidade de exportar o banco de dados em um formato XML foi descoberta. Seria mais fácil analisar o arquivo XML, alterar os dados desse formulário e criar um novo banco de dados importando os resultados? Se usar as sugestões já feitas seria muito difícil, o processamento de XML poderia ser um caminho mais fácil de se tomar.

    
por Noctis Skytower 06.07.2016 / 16:54

1 resposta

0

Sim, é possível definir a hora "expira" com base na hora da "criação". Usando um programa, o processo pode ser automatizado. Altere as constantes globais ( KPSCRIPT , DATABASE e PASSWORD ) para valores correspondentes ao seu sistema antes da execução. Neste exemplo específico, o tempo de expiração é definido para cinco anos após a data da última modificação. O programa abaixo foi adaptado da resposta de Paulo .

#! /usr/bin/env python3
import datetime
import subprocess
import uuid


KPSCRIPT = r'C:\Program Files (x86)\KeePass Password Safe 2\KPScript.exe'
DATABASE = r'C:\Users\Stephen Paul Chappel\Documents\Database.kdbx'
PASSWORD = r'password'


def main():
    """Get KeePass entries, check each one, and change if required."""
    for line in ps(KPSCRIPT, '-c:ListEntries', DATABASE, '-pw:' + PASSWORD):
        key, value, *pair = line.split(': ', 1) + [None]
        if pair:
            if key == 'UUID':
                reference = uuid.UUID(value)
            elif key == 'TLM':
                tlm = datetime.datetime.strptime(value, '%Y-%m-%dT%H:%M:%S')
            elif key == 'EXP':
                if not {'False': False, 'True': True}[value]:
                    # Add 5 years to the last modification
                    # time for the expiry date and format.
                    te = tlm.replace(tlm.year + 5)
                    te = te.strftime('%Y-%m-%dT%H:%M:%S')
                    ps(
                        KPSCRIPT,
                        '-c:EditEntry',
                        DATABASE,
                        '-pw:' + PASSWORD,
                        '-refx-UUID:' + reference.hex,
                        '-setx-Expires:True',
                        '-setx-ExpiryTime:' + te
                    )
                del reference, tlm


def ps(*args):
    """Provide an interface for writing commands like those in PowerShell."""
    return subprocess.run(
        args,
        timeout=1,
        check=True,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        universal_newlines=True
    ).stdout.splitlines()


if __name__ == '__main__':
    main()
    
por 05.05.2017 / 17:44