The way their READMEs are written, it seems they’re meant for people who can “fill in the blanks” where they fall short. A lot of steps are missing, and unless you’ve been hosting things for years, you wouldn’t know to do those steps…
To be fair, they have said their software is still in alpha, so I’m sure this will get fixed once they’ve sorted everything out…
It seems to be built for scale.
Why they used to support installation on multiple OSes, and now, for some reason, only support Alpine Linux (lightweight Docker containers, maybe…?) isn’t actually clear…
The way it’s structured is you have several Go applications that bind to certain ports on your machine (or multiple machines), depending on what functions you want to have:
- meta
- User accounts
- Access control
- Customer Billing (if you really want that)
- git
- hg
- Mercurial integration (I think…)
- lists
- Mailing Lists
- Requires an SMTP server (which I have, but happy to use whatever)
- builds
- todo
- man
- pages
- paste
- hub
- Repository (or “project”, as they call it) indexing and organisation
They all seem to use a common config
directory, including the common config.ini
file.
I have set up all of them in a testing lab, and they all load (so far…), but the redirects across different Go applications (and corresponding ports) is driving me mental…
The resulting websites are full of redirects to all those various Go applications with some kind of authentication mechanism (it looks like session cookies).
I will provide an onion address for the lab once I solve all the Internal Server Errors (500) caused by failing redirects.
Also, @qubist, just putting it out there. With purely static pages being loaded, all the code is being executed by the server. This would include things like password hashing.
Without any kind of client-side code execution, anyone wanting to log into SourceHut via the web interface would essentially be sending a POST request:
<form method="POST" action="/login">
<div class="form-group">
<input type="hidden" name="_csrf_token" value="57c04912ab3272c9a64fe05313857afe191a77e28f45a491092bff52d3d84466077b02cd011df723149efedc0a5151080efa28cc8920d90392ed0bc220856196"><label for="username">Username</label>
<input type="text" name="username" id="username" class="form-control " required="" autocomplete="username" autofocus="">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" name="password" id="password" class="form-control " required="" autocomplete="current-password">
</div>
<input type="hidden" name="return_to" value="">
<button class="btn btn-primary pull-right" type="submit">
Log in <span class="icon icon-caret-right " aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 512"><path d="M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"></path></svg>
</span>
</button>
<p>
<a href="http://meta.sr.ht.qubes-os.org/forgot">Forgot your password?</a>
</p>
</form>
This would mean that the browser would be sending plaintext passwords to the server, as can be seen by the POST request below:
POST /login HTTP/1.1
Host: meta.sr.ht.qubes-os.org
Content-Length: 188
Cache-Control: max-age=0
Accept-Language: en-US,en;q=0.9
Origin: http://meta.sr.ht.qubes-os.org
Content-Type: application/x-www-form-urlencoded
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://meta.sr.ht.qubes-os.org/login
Accept-Encoding: gzip, deflate, br
Cookie: session=.eJwFwcsNAlEIBdBepgIeg3xsZgIDd2OiiRo3xt4957sd5-uJ4_24zf348HbdYjkNBFZgKFTSwDstiqa0QXXbiMJcEgjqVLGkOndXQ5R6QKmEG141imaRORO6RnVWqTSnOyddvC06OcPWag4d4337_QExQCtv.Z84rNA.qA3TpnpOq6kUh_oJ8Kixyh3G-k0
Connection: keep-alive
_csrf_token=9180ef4f7bf2f6f64a7f230109d0a7efbdd7e46f784aff90da647a0bc3867f9b689f60b42df8bbe6fd244ecaf61e66e1b64d2a882a058d79da2a9711d296e723&username=admin&password=plaintextpassword&return_to=
So, unless I’m wrong on this, this wouldn’t fly with most people, especially if they’re already paranoid about JavaScript and CSS… 