Kharec
|
af5a924ae3
|
refactor: add respond_once helper and refactor async handlers to use it
|
2025-12-29 15:31:43 +01:00 |
|
Kharec
|
4730c577fa
|
test: cover head/get fallback
|
2025-12-29 15:25:24 +01:00 |
|
Kharec
|
940f60e471
|
test: add UTF-8 path case
|
2025-12-29 15:25:16 +01:00 |
|
Kharec
|
407289cd2a
|
fix: head/get reachability fallback
|
2025-12-29 15:25:08 +01:00 |
|
Kharec
|
b5ab00ef93
|
fix: decode UTF-8 after url_unescape
|
2025-12-29 15:24:56 +01:00 |
|
Kharec
|
0b277a3e65
|
fix: use Socket getaddrinfo for host resolution
|
2025-12-29 15:13:46 +01:00 |
|
Kharec
|
e9c298110d
|
test: update validation specs for DNS SSRF logic
|
2025-12-29 15:08:53 +01:00 |
|
Kharec
|
ae1dab8116
|
feat: add DNS-based SSRF checks
|
2025-12-29 15:08:46 +01:00 |
|
Kharec
|
eb4c4e4c4c
|
feat: use secure RNG for short codes
|
2025-12-29 15:08:35 +01:00 |
|
Kharec
|
e2c4916565
|
fix: guard async responses with local flag
|
2025-12-29 15:08:26 +01:00 |
|
Kharec
|
15f082fcdc
|
deps: lock Bytes::Random::Secure and transitive deps
|
2025-12-29 15:08:05 +01:00 |
|
Kharec
|
8e6665971e
|
deps: add Bytes::Random::Secure
|
2025-12-29 15:07:58 +01:00 |
|
Kharec
|
09a0fe017a
|
fix: use $c->rendered instead of stash->{rendered}
|
2025-12-29 14:48:06 +01:00 |
|
Kharec
|
9fc620130c
|
fix: use $c->rendered instead of stash->{rendered}
|
2025-12-29 14:47:59 +01:00 |
|
Kharec
|
2903aa51ff
|
revert: cpanfile.snapshot
|
2025-12-29 08:59:41 +01:00 |
|
Kharec
|
bf9579ab14
|
fix: deploy templates/public but not cpanfile.snapshot
|
2025-12-29 08:57:39 +01:00 |
|
Kharec
|
48f2b8448a
|
docs: update readme
|
2025-12-29 08:56:43 +01:00 |
|
Kharec
|
10fd579d0b
|
docs: update readme
|
2025-12-29 08:48:53 +01:00 |
|
Kharec
|
4810966b1c
|
feat: add version in /health
|
2025-12-29 08:43:55 +01:00 |
|
Kharec
|
8c62bff80b
|
clean: remove div
|
2025-12-29 08:43:05 +01:00 |
|
Kharec
|
17857a6b56
|
feat: add brand-version to display version bottom right
|
2025-12-29 08:42:59 +01:00 |
|
Kharec
|
4053b89cf4
|
feat: title top left, version bottom right
|
2025-12-29 08:42:48 +01:00 |
|
Kharec
|
331dba9211
|
feat: setup version
|
2025-12-29 08:42:27 +01:00 |
|
Kharec
|
bd4c6c9a1d
|
test: add unit testing for URL.pm
|
2025-12-28 19:40:50 +01:00 |
|
Kharec
|
6f40a4569a
|
clean: shorten title
|
2025-12-28 19:32:47 +01:00 |
|
Kharec
|
9f8570eea2
|
test: add unit testing for App.pm
|
2025-12-28 19:30:37 +01:00 |
|
Kharec
|
611a25c88d
|
fix: center the box and its button
|
2025-12-28 17:59:08 +01:00 |
|
Kharec
|
801b09ac83
|
feat: favicon
|
2025-12-28 17:55:55 +01:00 |
|
Kharec
|
39fd9d5c20
|
feat: add our favicon
|
2025-12-28 17:55:51 +01:00 |
|
Kharec
|
b15b473033
|
clean: remove useless label
|
2025-12-28 17:53:58 +01:00 |
|
Kharec
|
e9969841b1
|
feat: add brand-mark class to place "urupam"
|
2025-12-28 17:53:41 +01:00 |
|
Kharec
|
edc1c8cd66
|
refactor: extract shared styles to app.css
|
2025-12-28 17:48:58 +01:00 |
|
Kharec
|
fcbb8f8e5e
|
feat: adopt layout and improve error handling
|
2025-12-28 17:48:37 +01:00 |
|
Kharec
|
d8c43cd29b
|
feat: add a shared html layout
|
2025-12-28 17:48:17 +01:00 |
|
Kharec
|
2ae22a271b
|
feat: use shared layout
|
2025-12-28 17:48:05 +01:00 |
|
Kharec
|
6912495a04
|
test: use perl.org for reachability edge case
|
2025-12-28 17:46:49 +01:00 |
|
Kharec
|
aa9f557aa0
|
docs: remove warning
|
2025-12-28 17:37:57 +01:00 |
|
Kharec
|
fb500c7799
|
feat: create main template
|
2025-12-28 17:37:50 +01:00 |
|
Kharec
|
d9b05bab33
|
feat: render our new main template
|
2025-12-28 17:37:43 +01:00 |
|
Kharec
|
6ce43f4608
|
feat: use HTML templates for public errors
|
2025-12-28 17:32:25 +01:00 |
|
Kharec
|
09abbd84dc
|
feat: template for error 500
|
2025-12-28 17:31:40 +01:00 |
|
Kharec
|
43253e6fc6
|
feat: template for 404
|
2025-12-28 17:31:32 +01:00 |
|
Kharec
|
64a9db7324
|
fix: prevent double-rendering in async route handlers
|
2025-12-28 17:29:10 +01:00 |
|
Kharec
|
40b848eeee
|
fix: prevent double-rendering in async promise chains
|
2025-12-28 17:28:53 +01:00 |
|
Kharec
|
7d46eb3922
|
rename: db is third alphabetical module
|
2025-12-28 17:25:45 +01:00 |
|
Kharec
|
71c5d4b628
|
test: add some testing for DB module
|
2025-12-28 17:24:58 +01:00 |
|
Kharec
|
4e4820c165
|
test: simplify utils test cases with tables
|
2025-12-28 17:20:24 +01:00 |
|
Kharec
|
7ffa61846f
|
test: add unit test for Validation module
|
2025-12-28 08:48:40 +01:00 |
|
Kharec
|
1826f7e847
|
fix: guard validation helpers against undef IP
|
2025-12-28 08:48:29 +01:00 |
|
Kharec
|
86007a74d8
|
fix: guard validation helpers against undef host
|
2025-12-28 08:48:24 +01:00 |
|
Kharec
|
4d48f90ceb
|
chore: update cpanfile.snapshot
|
2025-12-28 08:47:37 +01:00 |
|
Kharec
|
8c4aaad6a5
|
build: add Test::MockObject as test requirement
|
2025-12-28 08:47:29 +01:00 |
|
Kharec
|
0c75d2b5b5
|
feat: add a dummy / route while frontend is in progress
|
2025-12-26 08:26:30 +01:00 |
|
Kharec
|
a1ae380ffa
|
feat: use /health to build a healthcheck in compose
|
2025-12-26 08:12:07 +01:00 |
|
Kharec
|
3e7a6f7b20
|
test: update with latest route architecture
|
2025-12-24 18:51:05 +01:00 |
|
Kharec
|
add71c68e4
|
fix: return the normalized URL from the validator in the response
|
2025-12-24 18:48:20 +01:00 |
|
Kharec
|
795d3d8e9f
|
test: update test with new route architecture
|
2025-12-24 18:46:09 +01:00 |
|
Kharec
|
7c967b179e
|
feat: new route architecture
|
2025-12-24 18:45:54 +01:00 |
|
Kharec
|
a67a6214d1
|
feat: add a ping method
|
2025-12-24 18:45:41 +01:00 |
|
Kharec
|
f0731b40f8
|
fix: preserve unicode letters/digits while still stripping unsafe characters
|
2025-12-24 18:45:30 +01:00 |
|
Kharec
|
990a471af4
|
revert: error, we need it
|
2025-12-24 18:14:00 +01:00 |
|
Kharec
|
fd51393917
|
clean: get rid of FindBin
|
2025-12-23 08:31:20 +01:00 |
|
Kharec
|
cf9597a25d
|
feat: ignore local at docker build
|
2025-12-23 04:14:58 +01:00 |
|
Kharec
|
f1197626be
|
fix: double copy + local useless copy
|
2025-12-23 04:14:50 +01:00 |
|
Kharec
|
76cbd130a0
|
refactor: export functions
|
2025-12-22 20:23:42 +01:00 |
|
Kharec
|
6a5dcd91b7
|
refactor: explicit function imports
|
2025-12-22 20:20:41 +01:00 |
|
Kharec
|
e495bc6f4f
|
refactor: explicit function import
|
2025-12-22 20:20:27 +01:00 |
|
Kharec
|
5241c1b758
|
clean: remove unused import
|
2025-12-22 20:20:01 +01:00 |
|
Kharec
|
f259113a88
|
feat: Dockerfile
|
2025-12-22 20:13:23 +01:00 |
|
Kharec
|
b368b4103a
|
fix: hypnotoad runs by default on 8080
|
2025-12-22 20:13:05 +01:00 |
|
Kharec
|
d992f68a6a
|
build: re-add Mojolicious
|
2025-12-22 18:54:17 +01:00 |
|
Kharec
|
8c4f376563
|
feat: create docker-compose.yml for the app
|
2025-12-22 17:57:12 +01:00 |
|
Kharec
|
a6e3866427
|
test: add use_ok()
|
2025-12-22 17:43:48 +01:00 |
|
Kharec
|
9ce3a97ca9
|
test: add utils unit tests
|
2025-12-22 17:40:21 +01:00 |
|
Kharec
|
0228cd9c9d
|
feat: harden sanitize_url host parsing
|
2025-12-22 17:37:37 +01:00 |
|
Kharec
|
3369b018e3
|
test: API unit testing
|
2025-12-22 17:24:02 +01:00 |
|
Kharec
|
db9fab083d
|
test: add integration tests
|
2025-12-22 17:04:44 +01:00 |
|
Kharec
|
747dbc3782
|
build: update cpanfile
|
2025-12-22 16:35:19 +01:00 |
|
Kharec
|
47302c4bf2
|
docs: update readme
|
2025-12-22 16:35:11 +01:00 |
|
Kharec
|
87f1f67c50
|
refactor: use Utils get_error_status
|
2025-12-22 15:42:53 +01:00 |
|
Kharec
|
52ec5a010a
|
clean: remove redundant helper
|
2025-12-22 15:42:36 +01:00 |
|
Kharec
|
ab68257e74
|
feat: add URL shortening API endpoints to app
|
2025-12-22 15:39:46 +01:00 |
|
Kharec
|
50a12816b1
|
feat: implement API
|
2025-12-22 15:39:28 +01:00 |
|
Kharec
|
65570d3b6d
|
fix: remove redundant short code validation from get_original_url
|
2025-12-22 15:35:18 +01:00 |
|
Kharec
|
86258332c8
|
feat: sanitize error message
|
2025-12-22 15:34:25 +01:00 |
|
Kharec
|
0743db5a12
|
feat: comprehensive URL validation module with security checks
|
2025-12-22 15:04:57 +01:00 |
|
Kharec
|
2b993e11a4
|
feat: create setnx()
|
2025-12-22 15:03:43 +01:00 |
|
Kharec
|
57fd42604e
|
feat: add app utils
|
2025-12-22 15:03:31 +01:00 |
|
Kharec
|
1b79d48dc6
|
feat: url generation and handling logic
|
2025-12-22 15:03:20 +01:00 |
|
Kharec
|
9cf87f6e57
|
feat: add check ssl and check url reachability
|
2025-12-22 14:13:06 +01:00 |
|
Kharec
|
3eb09c5cda
|
feat: add basic validators
|
2025-12-22 14:01:18 +01:00 |
|
Kharec
|
bc4e5c353c
|
feat: add incr() and exists() methods
|
2025-12-22 13:52:16 +01:00 |
|
Kharec
|
45f8072679
|
feat: render the dummy test in json
|
2025-12-18 09:31:57 +01:00 |
|
Kharec
|
984438729e
|
docs: update readme
|
2025-12-18 07:28:59 +01:00 |
|
Kharec
|
1e8bfc2ac0
|
build: update cpan.snapshot
|
2025-12-18 07:28:46 +01:00 |
|
Kharec
|
1148a65355
|
build: add Mojo::Redis2 as a requirement
|
2025-12-18 07:28:41 +01:00 |
|
Kharec
|
acb1f63bae
|
feat: add a dummy set/get in the main route to try redis
|
2025-12-18 07:28:24 +01:00 |
|
Kharec
|
6565be735d
|
feat: add basic db logic
|
2025-12-18 07:27:55 +01:00 |
|
Kharec
|
1de83a858e
|
docs: update roadmap
|
2025-12-17 16:54:38 +01:00 |
|
Kharec
|
7d7360fc16
|
feat: first version of installation script
|
2025-12-17 16:54:07 +01:00 |
|