gitextract_5ryo2i8m/ ├── .dockerignore ├── .example.env ├── .github/ │ └── workflows/ │ ├── docker-build-development.yaml │ ├── docker-build-latest.yaml │ └── docker-build-release.yaml ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── custom/ │ └── .gitkeep ├── db/ │ └── .gitkeep ├── docker-compose.mariadb.yml ├── docker-compose.postgres.yml ├── docker-compose.sqlite-redis.yml ├── docker-compose.yml ├── docs/ │ └── api/ │ ├── api.js │ └── generate.js ├── jsconfig.json ├── knexfile.js ├── package.json ├── server/ │ ├── consts.js │ ├── cron.js │ ├── env.js │ ├── handlers/ │ │ ├── auth.handler.js │ │ ├── domains.handler.js │ │ ├── helpers.handler.js │ │ ├── links.handler.js │ │ ├── locals.handler.js │ │ ├── renders.handler.js │ │ ├── users.handler.js │ │ └── validators.handler.js │ ├── knex.js │ ├── mail/ │ │ ├── index.js │ │ ├── mail.js │ │ ├── template-change-email.html │ │ ├── template-reset.html │ │ ├── template-verify.html │ │ └── text.js │ ├── migrations/ │ │ ├── 20200211220920_constraints.js │ │ ├── 20200510140704_domains.js │ │ ├── 20200718124944_description.js │ │ ├── 20200730203154_expire_in.js │ │ ├── 20200810195255_change_email.js │ │ ├── 20241103083933_user-roles.js │ │ ├── 20241223062111_indexes.js │ │ ├── 20241223103044_visits_user_id.js │ │ ├── 20241223155527_visits_user_id_index.js │ │ └── 20250106070444_remove_cooldown.js │ ├── models/ │ │ ├── domain.model.js │ │ ├── host.model.js │ │ ├── index.js │ │ ├── ip.model.js │ │ ├── link.model.js │ │ ├── user.model.js │ │ └── visit.model.js │ ├── passport.js │ ├── queries/ │ │ ├── domain.queries.js │ │ ├── host.queries.js │ │ ├── index.js │ │ ├── link.queries.js │ │ ├── user.queries.js │ │ └── visit.queries.js │ ├── queues/ │ │ ├── index.js │ │ ├── queues.js │ │ └── visit.js │ ├── redis.js │ ├── routes/ │ │ ├── auth.routes.js │ │ ├── domain.routes.js │ │ ├── health.routes.js │ │ ├── index.js │ │ ├── link.routes.js │ │ ├── renders.routes.js │ │ ├── routes.js │ │ └── user.routes.js │ ├── server.js │ ├── utils/ │ │ ├── asyncHandler.js │ │ ├── index.js │ │ ├── knex.js │ │ ├── map.json │ │ └── utils.js │ └── views/ │ ├── 404.hbs │ ├── admin.hbs │ ├── banned.hbs │ ├── create_admin.hbs │ ├── error.hbs │ ├── homepage.hbs │ ├── layout.hbs │ ├── login.hbs │ ├── logout.hbs │ ├── partials/ │ │ ├── admin/ │ │ │ ├── dialog/ │ │ │ │ ├── add_domain.hbs │ │ │ │ ├── add_domain_success.hbs │ │ │ │ ├── ban_domain.hbs │ │ │ │ ├── ban_domain_success.hbs │ │ │ │ ├── ban_user.hbs │ │ │ │ ├── ban_user_success.hbs │ │ │ │ ├── create_user.hbs │ │ │ │ ├── create_user_success.hbs │ │ │ │ ├── delete_domain.hbs │ │ │ │ ├── delete_domain_success.hbs │ │ │ │ ├── delete_user.hbs │ │ │ │ ├── delete_user_success.hbs │ │ │ │ ├── frame.hbs │ │ │ │ └── mesasge.hbs │ │ │ ├── domains/ │ │ │ │ ├── actions.hbs │ │ │ │ ├── loading.hbs │ │ │ │ ├── table.hbs │ │ │ │ ├── tbody.hbs │ │ │ │ ├── tfoot.hbs │ │ │ │ ├── thead.hbs │ │ │ │ └── tr.hbs │ │ │ ├── index.hbs │ │ │ ├── links/ │ │ │ │ ├── actions.hbs │ │ │ │ ├── edit.hbs │ │ │ │ ├── loading.hbs │ │ │ │ ├── table.hbs │ │ │ │ ├── tbody.hbs │ │ │ │ ├── tfoot.hbs │ │ │ │ ├── thead.hbs │ │ │ │ └── tr.hbs │ │ │ ├── table_nav.hbs │ │ │ ├── table_tab.hbs │ │ │ └── users/ │ │ │ ├── actions.hbs │ │ │ ├── loading.hbs │ │ │ ├── table.hbs │ │ │ ├── tbody.hbs │ │ │ ├── tfoot.hbs │ │ │ ├── thead.hbs │ │ │ └── tr.hbs │ │ ├── auth/ │ │ │ ├── form.hbs │ │ │ ├── form_admin.hbs │ │ │ ├── login_disabled.hbs │ │ │ ├── verify.hbs │ │ │ └── welcome.hbs │ │ ├── footer.hbs │ │ ├── header.hbs │ │ ├── icons/ │ │ │ ├── arrow_left.hbs │ │ │ ├── chart.hbs │ │ │ ├── check.hbs │ │ │ ├── chevron_left.hbs │ │ │ ├── chevron_right.hbs │ │ │ ├── cog.hbs │ │ │ ├── copy.hbs │ │ │ ├── eye.hbs │ │ │ ├── heart.hbs │ │ │ ├── key.hbs │ │ │ ├── login.hbs │ │ │ ├── new_user.hbs │ │ │ ├── pencil.hbs │ │ │ ├── plus.hbs │ │ │ ├── qrcode.hbs │ │ │ ├── reload.hbs │ │ │ ├── send.hbs │ │ │ ├── shield.hbs │ │ │ ├── shuffle.hbs │ │ │ ├── spinner.hbs │ │ │ ├── stop.hbs │ │ │ ├── trash.hbs │ │ │ ├── write.hbs │ │ │ ├── x.hbs │ │ │ └── zap.hbs │ │ ├── links/ │ │ │ ├── actions.hbs │ │ │ ├── dialog/ │ │ │ │ ├── ban.hbs │ │ │ │ ├── ban_success.hbs │ │ │ │ ├── delete.hbs │ │ │ │ ├── delete_success.hbs │ │ │ │ ├── frame.hbs │ │ │ │ └── message.hbs │ │ │ ├── edit.hbs │ │ │ ├── loading.hbs │ │ │ ├── nav.hbs │ │ │ ├── table.hbs │ │ │ ├── tbody.hbs │ │ │ ├── tfoot.hbs │ │ │ ├── thead.hbs │ │ │ └── tr.hbs │ │ ├── protected/ │ │ │ └── form.hbs │ │ ├── report/ │ │ │ ├── email.hbs │ │ │ └── form.hbs │ │ ├── reset_password/ │ │ │ ├── new_password_form.hbs │ │ │ ├── new_password_success.hbs │ │ │ └── request_form.hbs │ │ ├── settings/ │ │ │ ├── apikey.hbs │ │ │ ├── change_email.hbs │ │ │ ├── change_password.hbs │ │ │ ├── delete_account.hbs │ │ │ └── domain/ │ │ │ ├── add_form.hbs │ │ │ ├── delete.hbs │ │ │ ├── delete_success.hbs │ │ │ ├── dialog.hbs │ │ │ ├── index.hbs │ │ │ └── table.hbs │ │ ├── shortener.hbs │ │ ├── stats.hbs │ │ └── support_email.hbs │ ├── protected.hbs │ ├── report.hbs │ ├── reset_password.hbs │ ├── reset_password_set_new_password.hbs │ ├── settings.hbs │ ├── stats.hbs │ ├── terms.hbs │ ├── url_info.hbs │ ├── verify.hbs │ └── verify_change_email.hbs └── static/ ├── css/ │ └── styles.css ├── manifest.webmanifest ├── robots.txt └── scripts/ ├── main.js └── stats.js