Coder Social home page Coder Social logo

gigi's Introduction

๐Ÿ‘ง๏ธ Gigi

An honest Finger protocol server

Gigi is a Finger protocol server with few features.

  • Gigi can respond to Finger requests statically.
  • Gigi can respond to Finger requests dynamically.


Usage

A live, production deployment of Gigi exists at finger://fuwn.me. Feel free to poke and prod at it as you wish.

You can use a Finger client like finger to send requests, or you could use the old reliable telnet or nc commands.

$ finger fuwn.me
$ telnet fuwn.me
$ echo | nc fuwn.me 79

Local

$ git clone [email protected]:Fuwn/gigi.git
$ cd gigi
$ tup
$ # or
$ ninja

Docker

This command runs the latest Gigi Docker image, with port 79 mapped from inside the container to port 7979 on the host system. In practice, you'd actually map port 79 to port 79, but that requires root privileges, so we're using 7979.

It also mounts the ./.gigi directory from the host system to the /gigi/.gigi directory inside the container. This is where you'd place all your profile files. In practice, you'd likely make this a named volume, and add files to the named volume itself.

$ docker run -v ./.gigi/:/gigi/.gigi -p 7979:79 fuwn/gigi:latest
$ # or
$ docker run -v gigi-data:/gigi/.gigi -p 79:79 fuwn/gigi:latest

The second command is the more practical one, as it uses a named volume to store the profile files. The named volume is persistent, and can be found at /var/lib/docker/volumes/gigi-data/_data on most FHS systems.

Docker also significantly reduces the risk of running Gigi, as it is sandboxed from the host system. In static mode, there is little to no risk, but in dynamic mode, there is a small risk for arbitrary code execution depending on your .gigi/do file.

Configuration

Gigi is configured through the ./.gigi directory.

Dynamic response mode is disabled by default as dynamic code execution can be a big security risk. If you wish to live on the edge, pass the GIGI_DYNAMIC environment variable with a value greater than 1 to Gigi. Dropping Gigi into a container is significantly safer than running it on a host machine, so consider that as an option, too.

Dynamic mode runs any and all executables located at the path ./.gigi/do, and passes any arguments from the Finger request to the executable.

Static mode is enabled by default. A Finger request for test will return the contents of ./.gigi/test. A Finger request of nothing will return the contents of ./.gigi/default. The default file is also the fallback file in case the requested file does not exist.

To emulate dynamic mode, minus the support for arguments, you can setup a service of some kind to periodically update the contents of one of the static files.

You can additionally modify the GIGI_PORT environment variable to change the port Gigi listens on. The default port is 79. If you're running Gigi in a Docker container, you can ignore this variable and map any ports using Docker directly.

Licence

This project is licensed with the GNU General Public License v3.0.

gigi's People

Contributors

fuwn avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.