

I like having a system I know the internals of and can control.
But honestly, nowadays the software quality of Windows is just… Bad.
Hello there!
I’m also @savvywolf@furry.engineer , and I have a website at https://www.savagewolf.org/ .
He/They


I like having a system I know the internals of and can control.
But honestly, nowadays the software quality of Windows is just… Bad.


It’s still technically automaton if your workflow depends on people poking you when things break.


I don’t think those are sufficient. We could prove that a given binary can be produced from a given repo commit, but that doesn’t actually ensure that the code itself is safe. Malicious code is malicious code even if it’s reproducible.


I’d say dual booting would be best, as much as Windows will try to break it. Then you can stay in Linux as much as you can, only switching to Windows when you need to. And then, if you’re like me, you get annoyed at Windows lacking features and find alternatives that work under Linux.
For distro selection, I’d recommend Linux Mint. It just works well out of the box and most instructions online that apply to Ubuntu should work with it.
I think the home directory version of etc is ~/.config as per xdg.


Why would one use this rather than just using something like Matrix or self-hosted Stoat? I’m not sure what it being “Discord compatible” really gets this project. Bot compatibility is nice, but aren’t most Discord bots closed source anyway?
I’ve been using Hetzner boxes for my backups, although I did need to send them a copy of my id, which may or may not fit the paranoia thing.
Of course, encryption is always worth it.
So how are you going to fund this “global media campaign”?
Cinnamon user here. I wish I could use Wayland. ;_;


In before this is a big elaborate ad for NordVPN.
(VPNs and tor allow you to mask your IP)


Why not post here when everything is all ready? Fragmenting your big marketing push is just going to hurt you.


Honest comment: Bitsocial sounds an awful lot like Truth Social.
If that comparison is unintentional and not desired, maybe reconsider the name.
If that is intentional, we are probably not your target audience.


If you do a port scan on your box, what services are running? Maybe something like email or diagnostics is exposed to the internet and announcing subdomains?


I think realistically the best option is to stick with an older version of KDE until your issues get fixed upstream or switch to another DE.
Anyone technically literate enough to port KDE back to X11 is likely also literate enough to fix the blocking bugs.
… Unless they’re doing it purely on ideological grounds, which is probably not a healthy way to run a project.


Two factor authentication won’t help here. You have to build your app with the assumption that any attacker has a valid login and credentials and therefore restrict them to only information they have permission to see.
File uploads are encrypted in transit from the client to the server but not encrypted on the server.
Usually when people talk about e2e encrypted messaging they mean that everything is encrypted. That includes images and text content. The server should not be able to read any contents of any message sent through it.
Again this is a design choice I don’t want gifs.
Why? Sending memes is a core part of any social media experience.
There are filetype checks on line 350 of the app.
Line 350 in both files doesn’t seem to contain any filetype checks. I assume you mean file.content_type. That may not be accurate to the actual file uploaded; it can be spoofed.
Yes deleting is atomic.
# Delete the associated message if it exists
if chat_file.message_id:
msg = db.get(Message, chat_file.message_id)
if msg:
db.delete(msg)
---> Here
# Delete file from disk
file_path = os.path.join(CHAT_FILES_DIR, file_uuid)
if os.path.exists(file_path):
os.remove(file_path)
If the application crashes/closes at the indicated point, then you will delete the message from the database but still have the image on the server. If this is an image served from /img/whatever, it would have no checks beyond a login check.


to the extent Tor is secure
Tor doesn’t automatically secure your app. If your social media instance has 1000 users on it, and one user gets compromised, then the other 999 users shouldn’t have any interactions outside of that user leaked.
web crypto can be utilized for group and 1-1s for an additional layer of encryption
Are file uploads encrypted?
How would you ever discover a filename?
Maybe you have a data leak. Maybe they send the filename in plaintext somewhere. Maybe they take advantage of the fact that UUIDs might be deterministic. But if I may flip the question… Why does an inaccessible post even need to return 403 anyway? It just functions as a big footgun that may cause any other exploits to behave worse.
Even if you have the correct link, if those two conditions arnt satisfied you will not be able to view.
But you can determine its existence or not through the status code.
This was a design choice to have consistency in filetypes. What’s the downside? All browsers will support displaying a jpg.
Gifs will lose any animation, pngs will lose quality. Also, as far as I can tell, there’s nothing stopping a malicious user uploading a non-image file.
Which part are you talking about?
There are two steps to making a post: Upload and store the image and add the post to the database. There’s also similar steps to deleting a post: Removing the image upload and removing the post from the database. Are both these operations atomic?
Everything except the login page, registration link will behind these two checks see (def login) where the @loginrequired logic is defined for each of the app routes.
It’s not that hard for a sufficiently motivated adversary to get an account on a sufficiently large instance. You need to ensure that one user account being compromised doesn’t result in information leakage from unrelated accounts.
This discussion stems from issues I found in just one function. You’re making a product which requires a very high level of security. You need to understand how to write secure code, and your LLM won’t be able to do it for you.
I don’t want to discourage you from programming in general, but making a very secure social media site is a rather complex undertaking for someone new to programming.


You list “Activist/journalist secure communication” as a use case. Not all countries have freedom of press.
Looks like you name images based on a random uuid, so that should protect against filename attacks. But if you do have a filename you can tell whether the image has been an image or not.
Also, looks like all uploads are converted to jpg, regardless as to whether the original image was a jpg (or even an image) or not. Don’t do that.


Why not?
You say you’re not the sharpest tool in the shed, but I think gamedev is a good way to learn a variety of skills. And doing it as a hobby takes a lot of pressure off and allows you to take things at your own pace.


Had a quick skim and found this little guy:
# ---------- Protected media route ----------
@app.route('/img/<path:name>')
@login_required
def media(name):
db = SessionLocal()
try:
me = current_user(db)
# Find the post with this image
post = db.query(Post).filter_by(image_path=name).first()
if post:
# Check visibility
can_view = post.user_id == me.id or db.query(UserVisibility).filter_by(
owner_id=post.user_id, viewer_id=me.id
).first() is not None
if not can_view:
abort(403)
return send_from_directory(UPLOAD_DIR, os.path.basename(name))
finally:
db.close()
I’ve not read through everything, but there are some security concerns that jump out to me from just this function. Hopefully you can enlighten me on them.
Firstly, what is stopping a logged in user from accessing any image that, for whatever reason, doesn’t have an associated post for it?
Secondly, the return codes for “the image doesn’t exist” (404) and “the image exists but you can’t access it” (403) look to be different. This means that a logged in user can check whether a given filename (e.g. “epstien_and_trump_cuddling.jpg”) has been uploaded or not by any user.
Both of these look to be pretty bad security issues, especially for a project touting its ability to protect from nationstates. Am I missing something?
Does the age verification stuff matter for this? Microsoft, if they wanted to, could already lock down systems in this way.