⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dispatcher.pm

📁 codestriker is a develop useful tool to review code on web user interface.
💻 PM
字号:
################################################################################ Codestriker: Copyright (c) 2001, 2002 David Sitsky.  All rights reserved.# sits@users.sourceforge.net## This program is free software; you can redistribute it and modify it under# the terms of the GPL.# Module for dispatching a URL to the appropriate Action class.package Codestriker::Http::Dispatcher;use strict;use CGI;use Codestriker::Http::Method;use Codestriker::Http::Method::ListTopicsMethod;use Codestriker::Http::Method::CreateTopicMethod;use Codestriker::Http::Method::ViewTopicTextMethod;use Codestriker::Http::Method::ViewTopicCommentsMethod;use Codestriker::Http::Method::ViewTopicFileMethod;use Codestriker::Http::Method::ViewTopicMetricsMethod;use Codestriker::Http::Method::ViewTopicPropertiesMethod;use Codestriker::Http::Method::DownloadTopicTextMethod;use Codestriker::Http::Method::UpdateTopicPropertiesMethod;use Codestriker::Http::Method::UpdateTopicMetricsMethod;use Codestriker::Http::Method::UpdateCommentMetricsMethod;use Codestriker::Http::Method::AddCommentMethod;use Codestriker::Http::Method::CreateCommentMethod;use Codestriker::Http::Method::AddTopicMethod;use Codestriker::Http::Method::CreateProjectMethod;use Codestriker::Http::Method::DownloadMetricsMethod;use Codestriker::Http::Method::EditProjectMethod;use Codestriker::Http::Method::UpdateProjectMethod;use Codestriker::Http::Method::ListProjectsMethod;use Codestriker::Http::Method::SearchTopicsMethod;use Codestriker::Http::Method::SubmitSearchTopicsMethod;use Codestriker::Http::Method::StaticResourcesMethod;use Codestriker::Http::Method::ViewMetricsMethod;use Codestriker::Http::Method::UpdateTopicStateMethod;use Codestriker::Http::Method::AddProjectMethod;use Codestriker::Http::Method::LoginMethod;use Codestriker::Http::Method::AuthenticateMethod;use Codestriker::Http::Method::NewPasswordMethod;use Codestriker::Http::Method::UpdatePasswordMethod;use Codestriker::Http::Method::ResetPasswordMethod;use Codestriker::Http::Method::CreateNewUserMethod;use Codestriker::Http::Method::AddNewUserMethod;# Initialise all of the methods that are known to the system.sub new {    my ($type, $query) = @_;    my $self = {};    $self->{query} = $query;    $self->{list_topics_method} =      Codestriker::Http::Method::ListTopicsMethod->new($query);    $self->{create_topic_method} =      Codestriker::Http::Method::CreateTopicMethod->new($query);    my @methods = ();    push @methods, Codestriker::Http::Method::SearchTopicsMethod->new($query);    push @methods, Codestriker::Http::Method::ViewTopicTextMethod->new($query);    push @methods, Codestriker::Http::Method::ViewTopicCommentsMethod->new($query);    push @methods, Codestriker::Http::Method::ViewTopicFileMethod->new($query);    push @methods, Codestriker::Http::Method::ViewTopicMetricsMethod->new($query);    push @methods, Codestriker::Http::Method::ViewTopicPropertiesMethod->new($query);    push @methods, Codestriker::Http::Method::UpdateTopicPropertiesMethod->new($query);    push @methods, Codestriker::Http::Method::UpdateTopicMetricsMethod->new($query);    push @methods, Codestriker::Http::Method::UpdateCommentMetricsMethod->new($query);    push @methods, $self->{list_topics_method};    push @methods, Codestriker::Http::Method::CreateCommentMethod->new($query);    push @methods, Codestriker::Http::Method::AddCommentMethod->new($query);    push @methods, Codestriker::Http::Method::AddTopicMethod->new($query);    push @methods, Codestriker::Http::Method::CreateProjectMethod->new($query);    push @methods, $self->{create_topic_method};    push @methods, Codestriker::Http::Method::DownloadTopicTextMethod->new($query);    push @methods, Codestriker::Http::Method::DownloadMetricsMethod->new($query);    push @methods, Codestriker::Http::Method::EditProjectMethod->new($query);    push @methods, Codestriker::Http::Method::UpdateProjectMethod->new($query);    push @methods, Codestriker::Http::Method::ListProjectsMethod->new($query);    push @methods, Codestriker::Http::Method::SubmitSearchTopicsMethod->new($query);    push @methods, Codestriker::Http::Method::StaticResourcesMethod->new($query);    push @methods, Codestriker::Http::Method::ViewMetricsMethod->new($query);    push @methods, Codestriker::Http::Method::UpdateTopicStateMethod->new($query);    push @methods, Codestriker::Http::Method::AddProjectMethod->new($query);    push @methods, Codestriker::Http::Method::LoginMethod->new($query);    push @methods, Codestriker::Http::Method::AuthenticateMethod->new($query);    push @methods, Codestriker::Http::Method::NewPasswordMethod->new($query);    push @methods, Codestriker::Http::Method::UpdatePasswordMethod->new($query);    push @methods, Codestriker::Http::Method::ResetPasswordMethod->new($query);    push @methods, Codestriker::Http::Method::AddNewUserMethod->new($query);    push @methods, Codestriker::Http::Method::CreateNewUserMethod->new($query);    $self->{methods} = \@methods;    return bless $self, $type;}# Determine which method can satisfy the input request and dispatch it# to the appropriate action.sub dispatch {    my ($self, $http_input, $http_output) = @_;    # Extract all cookie and CGI parameters.    $http_input->extract_cgi_parameters();    # Determine which method can handle this URL.    my $found_method;    foreach my $method ( @{$self->{methods}} ) {        if ($method->extract_parameters($http_input)) {            $found_method = $method;        }    }    # Set to a default method if none were found.    if (! defined $found_method) {        $found_method = $Codestriker::allow_searchlist ?          $self->{list_topics_method} : $self->{create_topics_method};    }    # Check if the method requires authentication.    my $user;    if ($found_method->requires_authentication()) {        my $query = $http_output->get_query();        my $email = $http_input->get('email');        my $password_hash = $http_input->get('password_hash');        # If the user is not logged in, redirect to the login screen.        my $full_url = $query->url(-path_info => 1, -query => 1);        my $login_url =          Codestriker::Http::Method::LoginMethod->new($query)->url(redirect => $full_url);        if (!defined($email) || $email eq '' ||            !defined($password_hash) || $password_hash eq '') {            print $query->redirect(-URI => $login_url);            return;        }        # If email has been specified, but it doesn't exist, redirect        # to the login screen.        if (!Codestriker::Model::User->exists($email)) {            print $query->redirect(-URI => $login_url);            return;        }        # Check that the user has supplied the right credentials.        $user = Codestriker::Model::User->new($email);        if ($user->{password_hash} ne $password_hash) {            print $query->redirect(-URI => $login_url);            return;        }    }    # Check if the method requires admin priviledges.    if (defined $Codestriker::admin_users &&        $found_method->requires_admin() && !$user->{admin}) {        $http_output->error("This function requires admin access.");        return;    }    # All checks have completed, execute the method.    $found_method->execute($http_input, $http_output);}1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -