torrust-actix 4.2.3

A rich, fast and efficient Bittorrent Tracker.
use crate::structs::Cli;
use crate::tracker::structs::torrent_tracker::TorrentTracker;
use log::{
    error,
    info
};
use rcgen::{
    generate_simple_self_signed,
    CertifiedKey
};
use std::fs;
use std::process::exit;

impl TorrentTracker {
    pub async fn cert_gen(&self, args: &Cli)
    {
        info!("[CERTGEN] Requesting to generate a self-signed key and certificate file");
        let mut subject_alt_names = vec![
            String::from("localhost")
        ];
        if args.selfsigned_domain != "localhost" {
            subject_alt_names.push(args.selfsigned_domain.clone());
        }
        let CertifiedKey { cert, signing_key } = generate_simple_self_signed(subject_alt_names)
            .expect("[CERTGEN] Failed to generate self-signed certificate");
        let keyfile = &args.selfsigned_keyfile;
        let certfile = &args.selfsigned_certfile;
        if let Err(error) = fs::write(keyfile, signing_key.serialize_pem()) {
            error!("[CERTGEN] The key file {keyfile} could not be generated!");
            panic!("[CERTGEN] {error}")
        }
        info!("[CERTGEN] The key file {keyfile} has been generated");
        if let Err(error) = fs::write(certfile, cert.pem()) {
            error!("[CERTGEN] The cert file {certfile} could not be generated!");
            panic!("[CERTGEN] {error}")
        }
        info!("[CERTGEN] The cert file {certfile} has been generated");
        info!("[CERTGEN] The files {keyfile} and {certfile} have been generated, use them only for development reasons");
        exit(0)
    }
}