Yoink banner

Yoink

7 devlogs
24h 37m 50s

Synchronize a folder over to a distant server. It's basically a git but overkilled and made in rust 🦀

Check out the demo video if you don't want to run yourself, or run the demo yourself! Instructions in the DEMO tab :)

Also yea dont ask abo…

Synchronize a folder over to a distant server. It’s basically a git but overkilled and made in rust 🦀

Check out the demo video if you don’t want to run yourself, or run the demo yourself! Instructions in the DEMO tab :)

Also yea dont ask about the banner im bad at that stuff 😭

Demo Repository

Loading README...

Kubik

Shipped this project!

Hours: 24.63
Cookies: 🍪 343
Multiplier: 27.12 cookies/hr

Woohoo! New Version :D

Had to change a few things cause it was frustrating, now it’s starting to look really nice! Look at the demo video :)


✨ New Features:

  • Rate Limiter
  • Custom Encryption (RSA 😭)
  • /test/{username} endpoint
  • Large files upload bug-fix (and other fixes 🐛)
  • MULTITHREADIINNGG ⚡

YOINK™

Kubik

🤞 Final Update?

  • Working rate limiter! Customize how many “invalid password” an IP can do (max tries, reset every)
  • Also mini bugfix lol

And I rebuilt the demo on github with the rate limiter (2 tries, 15s reset) so you can try it out!

Attachment
0
Kubik

uh… thought it was done but I guess not!!!

So what’s new now! ✨

  • using another web request crate: ureq -> reqwest
  • new endpoint: /test/{username}: allows to test if credentials are valid
  • A WHOLE SELF IMPLEMENTED ENCRYPTION MECHANISM. for real. 😭

Basically I added the self_https flag. If enabled (enable when untrusted connection / http), it will encrypt the requests and responses with a shared AES-256 key (and nonce of course). It just so happened I needed this scenario… lol

Basically works like this:

Raw Data  -->  [base64]  -->  [RSA Encryption]  -->  SEND
RECEIVE  -->  [RSA Decryption]  -->  [base64]  -->  Raw Data

What’s next…? 🤔

  • rate limiter tbh, would be cool and useful
    and that’s pretty much it? i hope? thanks for reading!!
Attachment
0
Kubik

didnt think of doing a devlog again but I guess I wasn’t done lol

what changed again

  • SUPPORT FOR LARGE FILES. like….. DAMN IT WAS SILENTLY FAILING 😭 (now it works super duper fine)
  • Multithreading! Using rayon, the client will now send multiple files in parallel ⚡
  • bug fix: change ‘\’ from windows path to ‘/’ >:(
  • smaller demo binaries (thanks upx)
  • hash while receiving file (not re-read again) = faster :)

what nex-

nothing. i’m done. unless bugs. (there will be bugs lol)

Attachment
0
Kubik

Shipped this project!

Hours: 12.12
Cookies: 🍪 325
Multiplier: 26.78 cookies/hr

Thanks for following me during this journey!

It wasn’t TOOOO hard to build this, but still challenging!

Had to build a rust http server for the first time! That was pretty cool :D

YOINK™

Kubik

Oh boy! I thikn i’m doneeee :DDDD

What’s neewww

  • Now supports multi-path on the client
  • Wait for the path to be available, will retry if not (max 15 times, 2 min before each re-try)

I guess i have a readme now and I made a working demo working :)
HOW DID IT TAKE 4H30 OH MY-

Attachment
0
Kubik

Basically done! I mean it works now, just have a few more ideas to improve :)

what new

  • New .yoinkconfig file (server & client) to configure at compile time
  • Added the .yoinkignore file to specify which paths to ignore when transferring
  • Added the .yoinkpass config for the server

what now

  • Make it support multi paths to transfer (not just one)
  • Wait for a path to be available (like F: for a USB stick to backup)
Attachment
Attachment
Attachment
0
Kubik

PROGRESS!!! Finished the diff and file uploader!

Whats new ✨

  • File sending & receiving
  • Hash checks (will update files when changed)

and now???

oh boy still a lot lol

  • a “per user password” system
  • a “what to ignore” file config (like node_modules, cargo’s target, dist, build…..)
  • delete files when removed?? (no sure i will do that, i personally dont need it)

image:

on the left: the client sent all the files (it does not log anything tho)
on the right: the server received all the files the client had in the configured folder

Attachment
0
Kubik

Hi!! I’m still prototyping a lot, but I got some progress!

title™

Right now, the client reads a pre-defined folder (./test) and sends all the files path it found to the server. The server replies with the files that are not up to date (all for now, database doesn’t exist yet) and the client logs the response.

Next steps!

send the files, and implement the database on the server
oh and check the hash! the server will reply with the known hash of files it already has so that the client can check if it changed :)

Attachment
0