diff --git a/lib/Urupam/Validation.pm b/lib/Urupam/Validation.pm new file mode 100644 index 0000000..230a3d2 --- /dev/null +++ b/lib/Urupam/Validation.pm @@ -0,0 +1,49 @@ +package Urupam::Validation; + +use Mojo::Base -base; +use Mojo::URL; +use Mojo::Util qw(url_unescape); + +sub is_valid_url { + my ( $self, $url ) = @_; + return 0 unless defined $url && length($url) > 0; + + $url = url_unescape($url) if $url =~ /%[0-9A-Fa-f]{2}/; + + return 0 unless $url =~ m{^https?://}i; + + my $parsed = eval { Mojo::URL->new($url) }; + return 0 unless $parsed; + + return 0 unless $parsed->scheme && $parsed->host; + + return 1; +} + +sub is_valid_short_code { + my ( $self, $code ) = @_; + return 0 unless defined $code && length($code) > 0; + + return 0 if length($code) > 20; + + return 0 unless $code =~ /^[0-9a-zA-Z]+$/; + + return 1; +} + +sub sanitize_url { + my ( $self, $url ) = @_; + return undef unless defined $url; + + $url =~ s/^\s+|\s+$//g; + $url = url_unescape($url) if $url =~ /%[0-9A-Fa-f]{2}/; + + unless ( $url =~ m{^https?://}i ) { + $url = 'http://' . $url; + } + + return $url; +} + +1; +