diff --git a/Readme.org b/Readme.org new file mode 100644 index 0000000..d3c8b35 --- /dev/null +++ b/Readme.org @@ -0,0 +1,49 @@ +#+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