<feed xmlns='http://www.w3.org/2005/Atom'>
<title>farside/mix.exs, branch main</title>
<subtitle>Farside fork</subtitle>
<link rel='alternate' type='text/html' href='https://grim.freemyip.com/cgit/farside/'/>
<entry>
<title>Rewrite project, add daily update of services list</title>
<updated>2025-01-21T20:46:29+00:00</updated>
<author>
<name>Ben Busby</name>
<email>contact@benbusby.com</email>
</author>
<published>2025-01-21T20:46:29+00:00</published>
<link rel='alternate' type='text/html' href='https://grim.freemyip.com/cgit/farside/commit/?id=b5bad4defc6c75b9b969658229ce5fd2f3a46107'/>
<id>b5bad4defc6c75b9b969658229ce5fd2f3a46107</id>
<content type='text'>
The project was rewritten from Elixir to Go, primarily because:

- I don't write Elixir anymore and don't want to maintain a project in a
  language I no longer write
- I already write Go for other projects, including my day job, so it's
  a safer bet for a project that I want to maintain long term
- Go allows me to build portable executables that will make it easier
  for others to run farside on their own machines

The Go version of Farsside also has a built in task to fetch the latest
services{-full}.json file from the repo and ingest it, which makes
running a farside server a lot simpler.

It also automatically fetches the latest instance state from
https://farside.link unless configured as a primary farside node, which
will allow others to use farside without increasing traffic to all
instances that are queried by farside (just to the farside node itself).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The project was rewritten from Elixir to Go, primarily because:

- I don't write Elixir anymore and don't want to maintain a project in a
  language I no longer write
- I already write Go for other projects, including my day job, so it's
  a safer bet for a project that I want to maintain long term
- Go allows me to build portable executables that will make it easier
  for others to run farside on their own machines

The Go version of Farsside also has a built in task to fetch the latest
services{-full}.json file from the repo and ingest it, which makes
running a farside server a lot simpler.

It also automatically fetches the latest instance state from
https://farside.link unless configured as a primary farside node, which
will allow others to use farside without increasing traffic to all
instances that are queried by farside (just to the farside node itself).
</pre>
</div>
</content>
</entry>
<entry>
<title>Extract remote ip from `X-Forwarded-For`</title>
<updated>2024-01-09T16:55:55+00:00</updated>
<author>
<name>Ben Busby</name>
<email>contact@benbusby.com</email>
</author>
<published>2024-01-09T16:55:55+00:00</published>
<link rel='alternate' type='text/html' href='https://grim.freemyip.com/cgit/farside/commit/?id=60c318b5a37b5933fc2b5d39ea07f5a06c404a30'/>
<id>60c318b5a37b5933fc2b5d39ea07f5a06c404a30</id>
<content type='text'>
The remote IP returned in plug.conn is meant to be overwritten by the
developer, and doesn't reflect the origin of the request based on
headers. A new dependency has been added to make this change quicker to
roll out.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The remote IP returned in plug.conn is meant to be overwritten by the
developer, and doesn't reflect the origin of the request based on
headers. A new dependency has been added to make this change quicker to
roll out.
</pre>
</div>
</content>
</entry>
<entry>
<title>Allow compiling to standalone binary via bakeware</title>
<updated>2023-03-22T17:56:22+00:00</updated>
<author>
<name>Ben Busby</name>
<email>contact@benbusby.com</email>
</author>
<published>2023-03-22T17:56:22+00:00</published>
<link rel='alternate' type='text/html' href='https://grim.freemyip.com/cgit/farside/commit/?id=9eb11ed2645d30e81d89c8cfd53a4935b3167c10'/>
<id>9eb11ed2645d30e81d89c8cfd53a4935b3167c10</id>
<content type='text'>
This introduces a simple way of compiling Farside to a somewhat portable,
standalone binary. The resulting binary isn't completely portable since it
depends on the C runtime of the host system. As a result, it's advised to use
systems with older library versions when compiling for true portability.

Closes #50

Co-authored-by: Jason Clark &lt;mithereal@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This introduces a simple way of compiling Farside to a somewhat portable,
standalone binary. The resulting binary isn't completely portable since it
depends on the C runtime of the host system. As a result, it's advised to use
systems with older library versions when compiling for true portability.

Closes #50

Co-authored-by: Jason Clark &lt;mithereal@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove Redis dep, replace w/ native Elixir lib</title>
<updated>2022-10-31T22:45:31+00:00</updated>
<author>
<name>Ben Busby</name>
<email>contact@benbusby.com</email>
</author>
<published>2022-10-31T22:45:31+00:00</published>
<link rel='alternate' type='text/html' href='https://grim.freemyip.com/cgit/farside/commit/?id=e58d6e23edd2cfc1da7feab3cfc2b09326b73bff'/>
<id>e58d6e23edd2cfc1da7feab3cfc2b09326b73bff</id>
<content type='text'>
This removes the dependency on Redis for core app functionality. Rather
than using the key/value store provided by Redis, Farside now uses a
key/val store provided by [cubdb](https://github.com/lucaong/cubdb) for
identical functionality but without reliance on a non-Elixir service.

This solution was chosen instead of ets, because storing instance data
in memory leads to a period of broken functionality whenever the app
restarts and hasn't re-populated instance data yet. It was also chosen
instead of dets, because the documentation for dets was pretty hard to
understand at first glance.

Tests and the CI build were updated to reflect the removed dependency on
Redis.

New environment variable `FARSIDE_DATA_DIR` can be used to point to a
directory where the instance data can be stored by cubdb.

Co-authored-by: Jason Clark &lt;mithereal@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This removes the dependency on Redis for core app functionality. Rather
than using the key/value store provided by Redis, Farside now uses a
key/val store provided by [cubdb](https://github.com/lucaong/cubdb) for
identical functionality but without reliance on a non-Elixir service.

This solution was chosen instead of ets, because storing instance data
in memory leads to a period of broken functionality whenever the app
restarts and hasn't re-populated instance data yet. It was also chosen
instead of dets, because the documentation for dets was pretty hard to
understand at first glance.

Tests and the CI build were updated to reflect the removed dependency on
Redis.

New environment variable `FARSIDE_DATA_DIR` can be used to point to a
directory where the instance data can be stored by cubdb.

Co-authored-by: Jason Clark &lt;mithereal@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Replace `poison` dependency w/ `jason`</title>
<updated>2022-02-14T18:21:32+00:00</updated>
<author>
<name>Ben Busby</name>
<email>contact@benbusby.com</email>
</author>
<published>2022-02-14T18:21:32+00:00</published>
<link rel='alternate' type='text/html' href='https://grim.freemyip.com/cgit/farside/commit/?id=5235f5a3bf620a787d0d2ee0021336c893ffa013'/>
<id>5235f5a3bf620a787d0d2ee0021336c893ffa013</id>
<content type='text'>
The dependency took a long time to compile, and was causing problems for
a user who was attempting to build the project.

Since it wasn't a strictly necessary dependency, and `jason` was already
included in the project, all instances of `poison` have been replaced
with `jason`.

The only additional code that this introduced was converting from
generic maps returned by `Jason.decode` into Service structs.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The dependency took a long time to compile, and was causing problems for
a user who was attempting to build the project.

Since it wasn't a strictly necessary dependency, and `jason` was already
included in the project, all instances of `poison` have been replaced
with `jason`.

The only additional code that this introduced was converting from
generic maps returned by `Jason.decode` into Service structs.
</pre>
</div>
</content>
</entry>
<entry>
<title>Use quantum core for update scheduling</title>
<updated>2021-11-24T16:35:21+00:00</updated>
<author>
<name>Ben Busby</name>
<email>noreply+git@benbusby.com</email>
</author>
<published>2021-11-24T16:35:21+00:00</published>
<link rel='alternate' type='text/html' href='https://grim.freemyip.com/cgit/farside/commit/?id=ff97d258f0ac2bbd3b89df892ce3aed08b5e0a42'/>
<id>ff97d258f0ac2bbd3b89df892ce3aed08b5e0a42</id>
<content type='text'>
Rather than requiring a traditional crontab install, the app now
leverages quantum-core (link below) to schedule the instance update/sync
task every 5 minutes. Some updates as a result:

  - The new job is scheduled at runtime in server.ex.
  - The update.exs script was refactored to be compiled along with the
    rest of the app as instances.ex.
  - Scheduler and Server modules were added for creating and executing
    the new update task
  - All shell scripts were removed, as they are no longer needed

https://github.com/quantum-elixir/quantum-core
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Rather than requiring a traditional crontab install, the app now
leverages quantum-core (link below) to schedule the instance update/sync
task every 5 minutes. Some updates as a result:

  - The new job is scheduled at runtime in server.ex.
  - The update.exs script was refactored to be compiled along with the
    rest of the app as instances.ex.
  - Scheduler and Server modules were added for creating and executing
    the new update task
  - All shell scripts were removed, as they are no longer needed

https://github.com/quantum-elixir/quantum-core
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix formatting</title>
<updated>2021-11-12T21:40:05+00:00</updated>
<author>
<name>Ben Busby</name>
<email>noreply+git@benbusby.com</email>
</author>
<published>2021-11-12T21:40:05+00:00</published>
<link rel='alternate' type='text/html' href='https://grim.freemyip.com/cgit/farside/commit/?id=fec966ae59af3de1d1098ca11192041402c039cb'/>
<id>fec966ae59af3de1d1098ca11192041402c039cb</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Throttle incoming requests to 1/sec per ip</title>
<updated>2021-11-12T21:34:36+00:00</updated>
<author>
<name>Ben Busby</name>
<email>noreply+git@benbusby.com</email>
</author>
<published>2021-11-12T21:34:36+00:00</published>
<link rel='alternate' type='text/html' href='https://grim.freemyip.com/cgit/farside/commit/?id=2d988a1239bd9988d453df5baba75a610f979eb3'/>
<id>2d988a1239bd9988d453df5baba75a610f979eb3</id>
<content type='text'>
This introduces a way of throttling requests in a way that makes sense
for the purpose of the app. The app only supports redirecting to one
particular service when browsing, which would seldom be required more
than once per second for normal "human" browsing.

Without this, the service could easily be used to DOS multiple instances
at once. That being said, anyone concerned about someone DOS-ing
multiple instances at once should be aware that this would be trivial to
do with a simple bash script. This is simply a preventative measure to
hopefully deter people from trying to attack all public instances of
private frontends using farside.link.

Note that this throttling applies to all routes in the app, including
the homepage. This could be updated to exclude the homepage I guess,
but I'm not really sure what the use case would be for that.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This introduces a way of throttling requests in a way that makes sense
for the purpose of the app. The app only supports redirecting to one
particular service when browsing, which would seldom be required more
than once per second for normal "human" browsing.

Without this, the service could easily be used to DOS multiple instances
at once. That being said, anyone concerned about someone DOS-ing
multiple instances at once should be aware that this would be trivial to
do with a simple bash script. This is simply a preventative measure to
hopefully deter people from trying to attack all public instances of
private frontends using farside.link.

Note that this throttling applies to all routes in the app, including
the homepage. This could be updated to exclude the homepage I guess,
but I'm not really sure what the use case would be for that.
</pre>
</div>
</content>
</entry>
<entry>
<title>Refactor project to new name</title>
<updated>2021-11-07T19:29:06+00:00</updated>
<author>
<name>Ben Busby</name>
<email>noreply+git@benbusby.com</email>
</author>
<published>2021-11-07T19:29:06+00:00</published>
<link rel='alternate' type='text/html' href='https://grim.freemyip.com/cgit/farside/commit/?id=8042dcad0c61110111949a856c935325ca65f8ef'/>
<id>8042dcad0c61110111949a856c935325ca65f8ef</id>
<content type='text'>
The name of the project is being refactored from Privacy Revolver to
Farside. The reasoning behind this is:
1. A shorter name is easier to remember
2. It can stand for "FOSS alternative redirecting service" (which I know
doesn't encapsulate all letters from "farside", but it's close enough).

This commit also includes improvements to the update script for
determining how far along the script is.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The name of the project is being refactored from Privacy Revolver to
Farside. The reasoning behind this is:
1. A shorter name is easier to remember
2. It can stand for "FOSS alternative redirecting service" (which I know
doesn't encapsulate all letters from "farside", but it's close enough).

This commit also includes improvements to the update script for
determining how far along the script is.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add basic router test</title>
<updated>2021-10-26T06:23:31+00:00</updated>
<author>
<name>Ben Busby</name>
<email>noreply+git@benbusby.com</email>
</author>
<published>2021-10-26T06:23:31+00:00</published>
<link rel='alternate' type='text/html' href='https://grim.freemyip.com/cgit/farside/commit/?id=e87973c5e5c3c2091a1bf2b69f5adf40f48ffde7'/>
<id>e87973c5e5c3c2091a1bf2b69f5adf40f48ffde7</id>
<content type='text'>
Obviously going to be expanded upon by quite a bit, but just wanted to
get started with basic testing sooner rather than later.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Obviously going to be expanded upon by quite a bit, but just wanted to
get started with basic testing sooner rather than later.
</pre>
</div>
</content>
</entry>
</feed>
