icecast-ssl-helper/icecast-ssl-helper.scm
2025-04-13 14:02:43 -04:00

93 lines
3.4 KiB
Scheme

(use-modules (ice-9 getopt-long)
(ice-9 rdelim)
(ssh channel)
(ssh session)
(ssh auth)
(ssh key)
(ssh version))
(define *program-name* "icecast-ssl-helper")
(define *default-identity-file*
(string-append (getenv "HOME") "/.ssh/id_rsa"))
(define *default-log-verbosity* "nolog")
(define %accepted-key-types "ssh-rsa,rsa-sha2-256,ssh-dss,ecdh-sha2-nistp256")
(define debug? #f)
(define *option-spec*
'((user (single-char #\u) (value #t))
(port (single-char #\p) (value #t))
(identity-file (single-char #\i) (value #t))
(help (single-char #\h) (value #f))
(version (single-char #\v) (value #f))
(debug (single-char #\d) (value #f))
(known-hosts-file (value #t))
(ssh-debug (value #t))))
(define (print-version-and-exit)
"Print information about versions."
(format #t "libssh version: ~a~%" (get-libssh-version))
(format #t "libguile-ssh version: ~a~%" (get-library-version))
(exit))
(define (print-help-and-exit)
"Print information about program usage."
(display
(string-append
*program-name* " -- A Helper for Icecast SSL over SSH Tunnel
Copyright (C) Equilibrate IT Inc. <admin@equilibrateit.com>
Licensed under GNU GPLv3+
Usage: " *program-name* " [ -upidv ] <host> <command>
Options:
--user=<user>, -u <user> User name
--port=<port-number>, -p <port-number> Port number
--identity-file=<file>, -i <file> Path to private key
--debug, -d Debug mode
--ssh-debug=<verbosity> Debug libssh
--version, -v Print version
"))
(display "\n===\nFeigning exit\n"))
(define args '(*program-name* "--user" "foo" "--port" "22" "host" "command"))
(define (main args)
(let* ((options (getopt-long args *option-spec*))
(user (option-ref options 'user (getenv "USER")))
(port (string->number (option-ref options 'port "22")))
(identity-file (option-ref options 'identity-file
*default-identity-file*))
(debug-needed? (option-ref options 'debug #f))
(ssh-debug (option-ref options 'ssh-debug
*default-log-verbosity*))
(known-hosts-file (option-ref options 'known-hosts-file #f))
(help-needed? (option-ref options 'help #f))
(version-needed? (option-ref options 'version #f))
(args (option-ref options '() #f)))
(set! debug? debug-needed?)
(cond ((eq? #t help-needed?)
(print-help-and-exit))
((eq? #t version-needed?)
(display "Version message not implemented.\n"))
((or (null? user) (not (string? user)))
(display "User should be a string of characters.\n"))
((not (number? port))
(display "Port must be a number.\n"))
((or (null? args) (null? (cdr args)))
(print-help-and-exit))
(else (display (string-append
*program-name*
"\nuser = " user
"\n" "port = " (number->string port)
"\n" "host = " (car args)
"\n" "command = " (car (cdr args))
"\n"))))))
(main args)