#+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 :tangle server.jl using Gemenon #+end_src Then, setup the SSL config #+begin_src julia :tangle server.jl const verify_callback(preverify_ok, x509_ctx)::Cint = 1 function init_ssl_context() ctx = Gemenon.OpenSSL.SSLContext(mode = Gemenon.OpenSSL.ServerMode) Gemenon.OpenSSL.ca_chain!(ctx, "./cert.crt", "./key.key") Gemenon.OpenSSL.set_options!(ctx, Gemenon.OpenSSL.SSL_OP_NO_SSLv3) accept_all = @cfunction(verify_callback, Cint, (Cint, Ptr{Cvoid})) Gemenon.OpenSSL.set_verify_mode(ctx, Gemenon.OpenSSL.VERIFY_PEER, accept_all) ctx end #+end_src You are ready to listen for connections! You can do this like in Mux.jl #+begin_src julia :tangle server.jl @app test = ( req -> document(req.conn, """ # Welcome to Gemenon! You can discuss about this on => gemini://nixo.xyz/ The Gemenon-Powered Anonymous Board """)) serve(test, init_ssl_context, Gemenon.Sockets.ip"0.0.0.0", 1965) #+end_src