Apakah mungkin untuk mengatur waktu "kedaluwarsa" berdasarkan waktu "penciptaan"?

0

Setelah menggunakan Keepass selama beberapa tahun, sebuah ide datang kepada saya yang akan menyenangkan untuk diterapkan. Ada lebih dari 300 catatan di basis data saya, dan alangkah baiknya mengetahui catatan mana yang masih bagus. Menetapkan bendera yang kedaluwarsa pada catatan akan membantu mengingatkan saya untuk memeriksa apakah catatan itu valid dan berpotensi mendorong saya untuk mengubah kata sandi saya. Apakah ada cara untuk melihat seluruh database dan melakukan hal berikut untuk setiap record?

  1. Periksa apakah bendera yang kedaluwarsa telah disetel.
  2. Jika tidak disetel, tambahkan X jumlah tahun ke waktu pembuatan (atau modifikasi).
  3. Atur bendera yang kedaluwarsa.
  4. Atur waktu kedaluwarsa ke nilai yang dihitung pada langkah 2.
  5. Lanjutkan ke catatan berikutnya dalam database.

Balasan diterima dari Paul mengatakan, "Tidak dengan KeePass, tetapi Anda dapat menggunakan KPScript dan beberapa PowerShell." Dia memasukkan tautan ke # 1318 Ubah Tanggal Kedaluwarsa dari Daftar , tetapi pengalaman saya dengan alat yang dia rekomendasikan hanya membuat saya memiliki lebih banyak pertanyaan. Adakah yang bisa memberikan bantuan lebih lanjut? (1)

Tambahan

Setelah beberapa penelitian lebih lanjut, kemampuan untuk mengekspor database dalam format XML ditemukan. Apakah lebih mudah untuk mem-parsing file XML, mengubah data dalam bentuk itu, dan kemudian membuat database baru dengan mengimpor hasilnya? Jika menggunakan saran yang sudah dibuat akan terlalu sulit, pemrosesan XML berpotensi menjadi jalan yang lebih mudah untuk diambil.

Noctis Skytower
sumber

Jawaban:

0

Ya, adalah mungkin untuk mengatur waktu "berakhir" berdasarkan waktu "penciptaan". Dengan menggunakan program, prosesnya bisa otomatis. Ubah konstanta global ( KPSCRIPT , DATABASE , dan KATA SANDI ) ke nilai yang sesuai dengan sistem Anda sebelum dijalankan. Dalam contoh khusus ini, waktu kedaluwarsa ditetapkan menjadi lima tahun setelah tanggal modifikasi terakhir. Program di bawah ini diadaptasi dari Jawaban Paul .

#! /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()
Noctis Skytower
sumber