#+title: Gemenon.jl -- A Gemini Server * What is it Gemenon.jl is a server for the [[https://gemini.circumlunar.space/][gemini]] protocol. It's written in [[https://julialang.org/][Julia]]. * How to use The usage is quite simple and similar to [[https://github.com/JuliaWeb/HTTP.jl][HTTP.jl]] First, import the library #+begin_src julia using Gemenon #+end_src Then, setup the SSL config #+begin_src julia ctx = Gemenon.OpenSSL.SSLContext() Gemenon.OpenSSL.ca_chain!(ctx, "./cert.crt", "./key.key") Gemenon.OpenSSL.set_options!(ctx, Gemenon.OpenSSL.SSL_OP_NO_SSLv3) verify_callback(preverify_ok, x509_ctx)::Cint = 1 const accept_all = @cfunction(verify_callback, Cint, (Cint, Ptr{Cvoid})) Gemenon.OpenSSL.set_verify_mode(ctx, Gemenon.OpenSSL.VERIFY_PEER, accept_all) #+end_src You are ready to listen for connections! You can do this with a do block #+begin_src julia Gemenon.listen(ctx, verbose = true) do conn::Connection, request::Request cert = Gemenon.OpenSSL.get_peer_certificate(conn.client) if cert != C_NULL @info "This client is providing a certificate" end write(conn, Response(Status("20", "text/gemini"), """ # Welcome to Gemenon! You can discuss about this on => gemini://nixo.xyz/b/gemenon The Gemenon-Powered Board """)) end #+end_src