Advertisement
dev017

código em perl, porém não tenho premium para colocar o sintaxe dele

Jul 15th, 2023 (edited)
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.19 KB | Source Code | 0 0
  1. use strict;
  2. use warnings;
  3. use IO::Socket::INET;
  4. use Template;
  5. my $port = 8080;
  6. my $socket = IO::Socket::INET->new(
  7. LocalPort => $port,
  8. Type => SOCK_STREAM,
  9. Reuse => 1,
  10. Listen => SOMAXCONN
  11. );
  12. die "failed to create socket: $!\n" unless $socket;
  13. my $tt = Template->new();
  14. while (1) {
  15. my $client_socket = $socket->accept();
  16. my $request = <$client_socket>;
  17. my ($method, $url) = $request =~ /^(\w+)\s+\/?(\S+)/;
  18. if ($url ne "login" && !is_authenticated()) {
  19. redirect($client_socket, "/login");
  20. next;
  21. }
  22. if ($method eq "GET") {
  23. if ($url eq "hello") {
  24. my $vars = {
  25. title => "Welcome",
  26. heading => "Hello, user."
  27. };
  28. my $output;
  29. if ($tt->process("template.tt", $vars, \$output)) {
  30. success($client_socket, $output);
  31. } else {
  32. error($client_socket, "error processing template");
  33. }
  34. } elsif ($url eq "login") {
  35. my $content = "<h1>Login</h1>";
  36. success($client_socket, $content);
  37. } elsif ($url eq "logout") {
  38. my $content = "<h1>Logout</h1>";
  39. success($client_socket, $content);
  40. } else {
  41. not_found($client_socket);
  42. }
  43. } elsif ($method eq "POST") {
  44. if ($url eq "login") {
  45. my $content = "<h1>Processing login form submission</h1>";
  46. success($client_socket, $content);
  47. } else {
  48. not_found($client_socket);
  49. }
  50. } else {
  51. method_not_allowed($client_socket);
  52. }
  53. close($client_socket);
  54. }
  55. sub is_authenticated {
  56. # Supondo que o usuário está autenticado se envia o parâmetro 'authenticated' na query string
  57. my %query_params = parse_query_params($url);
  58. if (exists $query_params{'authenticated'} && $query_params{'authenticated'} eq 'true') {
  59. return 1;
  60. } else {
  61. return 0;
  62. }
  63. }
  64. sub redirect {
  65. my ($socket, $url) = @_;
  66. my $response = "HTTP/1.1 302 Found\r\nLocation: $url\r\n\r\n";
  67. print $socket $response;
  68. }
  69. sub success {
  70. my ($socket, $content) = @_;
  71. my $response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n" . $content;
  72. print $socket $response;
  73. }
  74. sub not_found {
  75. my ($socket) = @_;
  76. my $response = "HTTP/1.1 404 Not Found\r\nContent-Type: text/plain\r\n\r\nPágina não encontrada";
  77. print $socket $response;
  78. }
  79. sub method_not_allowed {
  80. my ($socket) = @_;
  81. my $response = "HTTP/1.1 405 Method Not Allowed\r\nContent-Type: text/plain\r\n\r\nMétodo não permitido";
  82. print $socket $response;
  83. }
  84. sub error {
  85. my ($socket, $message) = @_;
  86. my $response = "HTTP/1.1 500 Internal Server Error\r\nContent-Type: text/plain\r\n\r\n$message";
  87. print $socket $response;
  88. }
  89. sub parse_query_params {
  90. my ($url) = @_;
  91. my %params;
  92. if (my $query_string = (split /\?/, $url)[-1]) {
  93. my @pairs = split /[;&]/, $query_string;
  94. foreach my $pair (@pairs) {
  95. my ($key, $value) = split /=/, $pair;
  96. $params{$key} = $value if defined $key && defined $value;
  97. }
  98. }
  99. return %params;
  100. }
Tags: perl
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement