- LiveView Authentication
- User Role and Permission system
- Direct to S3/Wasabi upload with LiveView
- Generates presigned urls for secure download
- Calculates file hashes with
:crypto.hash/2
- Uploads to Triage on upload to Vx Underground via Oban Job Scheduler and notifies the user of completion with
Phoenix.Channels
. - Checks for VT Report on load of the
Sample
show page. - Uses
libcluster
andfly_postgres
for scalability - Has CI/CD setup and is deployed on Fly.io.
- Searchable tables and Light / Dark mode
- Custom Discord Logger backend
- Postgres - ~ 15.2
- erlang - ~ 25.2
- Elixir - ~ 1.14.3-otp-25
- Phoenix - ~ 1.7.2
- Phoenix LiveView - ~ 0.18.17
- NodeJS - ~ 19.3.0
- TailwindCSS - ~ 3.0.23
-
Install
erlang
,Elixir
,NodeJS
,Postgres
- With homebrew the commands are:
brew update brew install erlang elixir nodejs postgres
- Or if you prefer
asdf
brew update brew install asdf asdf plugin-add erlang asdf plugin-add elixir asdf plugin-add nodejs asdf install
- Clone this Repo and enter the directory.
- Set up the project with the command
mix setup
- Set the following env variables in order to get Wasabi/S3 to work.
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
S3_BUCKET_NAME
- Set the following env variables in order to get Triage / VT to work.
VIRUS_TOTAL_API_KEY
TRIAGE_API_KEY
- Set the following env variables in order to get Discord Logging to work. (optional)
DISCORD_BOT_TOKEN
DISCORD_CHANNEL_ID
- Start Phoenix server with
iex -S mix phx.server
- Now you can visit
localhost:4000
orlocalhost:4001
from your browser.
- Now you can visit
- Once you register a user, you make it admin by running this in the same window you ran
iex -S mix phx.server
in (yes we run commands in a running server)VxUnderground.Accounts.get_user!(1) |> VxUnderground.Accounts.add_role_to_user("Admin")
You can run unit tests with the command
mix test
- Setup Minio for Dev upload / download
- Better file types
- YARA Tags
- API routes
classDiagram
class Sample{
+Integer size
+String md5
+String sha1
+String sha256
+String sha512
+String s3_object_key
+Array names
+Array tags
+DateTime first_seen
}
class Users {
+String email
+String username
+String tier
+String password
+Integer role_id
+String hashed_password
+DateTime confirmed_at
}
class Role {
+String name
+Jsonb permissions
}