[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: The future of PyGopherd



Greetings.

On Tue, 16 Jun 2020 12:10:54 +0200 James Mills <prologic@shortcircuit.net.au> wrote:
> I would port it to Go using https://github.com/prologic/go-gopher
> 
> :D Happy to help with this!

Thanks for your offer.

You will not really need a  full gopher protocol implementation. To get 
some more  public interest, I will  describe how the CGI/DCGI  model in 
geomyidae works and how it can  be easily leveraged to emulate whatever 
old gophermap format you like.


# Index Files

By default there is four interesting types for output in geomyidae and
file types:

	char *indexf[] = {"/index.gph", "/index.cgi", "/index.dcgi",
			  "/index.bin"};

When you put some file named like one in the index, it will be opened,
when you for example request

	gopher://bitreich.org/lawn

and the file is in the index.

## Index.gph

When you request the index.gph, then geomyidae expects the gph format,
specific to geomyidae, like:

	[1|Some nice new menu.|./some/path|server|port]
	Some text.
	ttext

The first  line will  create a menu  entry pointing  to /lawn/some/path 
(Yes,  geomyidae  now  supports  relative paths.)  and  »server«  and 
»port«  will be  replaced  with the  configuration  of the  geomyidae 
daemon running. This allows easily running the same file on for example 
some domain  and tor. Then  »server« will  be replaced be  either the 
domain or the .onion domain.                                            

The »ttext« shows,  that every line beginning with »t«  needs to be 
escaped with  »t«. In the manpage  is an easy filter  for this: »sed 
's/^t/&&/'«.                                                           


## Index.dcgi

When  you  would  put  an  index.dcgi into  the  lawn  directory,  then 
geomyidae will execute the script  in the way mentioned under »DYNAMIC 
CONTENT« in the  geomyidae manpage. There is also  a brief description 
of how argc and argv are handled and all environment variables.         

Because of  the ».dcgi«,  geomyidae will  take gph  on stdout  of the 
script and  convert it to a  raw menu, giving the  »port«, »server« 
and relative path feature.                                              

## Index.cgi

This is like index.dcgi, but this time, the file outputs the raw gopher 
menu, without geomyidae doing any filtering.                            

## Index.bin

Here the  file given back by  geomyidae is just this  file, without any 
execution.  So there  should be  the raw  gopher menu  in the  file. Of 
course it  could be  something else,  depending on how  you like  to it 
using the menu item type.                                               

Where is this useful?

1.)  If  you have  any  menu  generator  or gopher  application,  which 
generates raw menus  for compatibility to some other  server, then this 
is an easy output format.                                               

2.) If  you created  a raw mirror  of some gopherhole,  then it  can be 
easily displayed  using this feature.  Just download the raw  menu into 
the index.bin and it can be served somewhere else.                      


# Converter Types

## Dynamic

You can choose to have some index.cgi, which searches the filesystem on 
request and generates the output. This is for example necessary on some 
gophernicus  conversation,  which  knows dynamic  script  execution  in 
gophermap files.                                                        

## Static

Static  converters  take  some  old  format and  generate  new  raw  or 
gph  output files,  then  easily served  by geomyidae.  This  is to  be 
considered, when there  is no dynamic execution in  the content served. 
Then bandwidth  is saved  and of  course less  likely there  are remote 
execution problems, when you take unchecked user input.                 

## Example

See

gopher://shroom.party/1/code/gophermap2gph/file/gophermap2gph/main.py.gph

for how simple such a converter can  be. It is no big buzz or framework 
required, just basic file I/O.                                          



I hope  to have  been clear  enough in the  description and  showed the 
simplicity of  how to easily create  content for geomyidae. It  is just 
outputting from  stdout, line-wise and  done in less than  five minutes 
for most projects.                                                      

I hope  someone got some  interest in helping  out to preserve  the old 
gopherspace  and write  converters so  old content  can be  reused (and 
maybe adapted to modern days).                                          

If anyone has questions, just let me know.


Sincerely,

Christoph Lohmann


Reply to: