File: ssl_cert_blob.rs

package info (click to toggle)
rust-curl 0.4.44-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 704 kB
  • sloc: sh: 16; makefile: 2
file content (42 lines) | stat: -rw-r--r-- 943 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use std::env;
use std::fs::File;
use std::io::{stdout, Read, Write};
use std::path::Path;

use anyhow::{bail, Result};
use curl::easy::Easy;

fn read_file(path: impl AsRef<Path>) -> Result<Vec<u8>> {
    let mut f = File::open(path)?;
    let mut buf = Vec::new();
    f.read_to_end(&mut buf)?;
    Ok(buf)
}

fn main() -> Result<()> {
    let argv = env::args().collect::<Vec<_>>();
    if argv.len() < 4 {
        bail!("usage: ssl_cert_blob URL CERT KEY");
    }
    let url = &argv[1];
    let cert_path = &argv[2];
    let key_path = &argv[3];

    let mut handle = Easy::new();

    handle.url(url)?;
    handle.verbose(true)?;
    handle.write_function(|data| {
        stdout().write_all(data).unwrap();
        Ok(data.len())
    })?;

    let cert_blob = read_file(cert_path)?;
    let key_blob = read_file(key_path)?;

    handle.ssl_cert_blob(&cert_blob)?;
    handle.ssl_key_blob(&key_blob)?;

    handle.perform()?;
    Ok(())
}