Commit 37e65a3c authored by Max Kanat-Alexander's avatar Max Kanat-Alexander Committed by Frédéric Buclin

Bug 629326: Make it simpler to check ETags

r/a=LpSolit
parent 6d02055d
......@@ -214,6 +214,26 @@ sub clean_search_url {
}
}
sub check_etag {
my ($self, $valid_etag) = @_;
# ETag support.
my $if_none_match = $self->http('If-None-Match');
return if !$if_none_match;
my @if_none = split(/[\s,]+/, $if_none_match);
foreach my $possible_etag (@if_none) {
# remove quotes from begin and end of the string
$possible_etag =~ s/^\"//g;
$possible_etag =~ s/\"$//g;
if ($possible_etag eq $valid_etag or $possible_etag eq '*') {
print $self->header(-ETag => $possible_etag,
-status => '304 Not Modified');
exit;
}
}
}
# Overwrite to ensure nph doesn't get set, and unset HEADERS_ONCE
sub multipart_init {
my $self = shift;
......
......@@ -44,15 +44,16 @@ use Digest::MD5 qw(md5_base64);
my $user = Bugzilla->login(LOGIN_OPTIONAL);
my $cgi = Bugzilla->cgi;
# Get data from the shadow DB as they don't change very often.
Bugzilla->switch_to_shadow_db;
# If the 'requirelogin' parameter is on and the user is not
# authenticated, return empty fields.
if (Bugzilla->params->{'requirelogin'} && !$user->id) {
display_data();
exit;
}
# Get data from the shadow DB as they don't change very often.
Bugzilla->switch_to_shadow_db;
# Pass a bunch of Bugzilla configuration to the templates.
my $vars = {};
$vars->{'priority'} = get_legal_field_values('priority');
......@@ -136,31 +137,9 @@ sub display_data {
utf8::encode($digest_data) if utf8::is_utf8($digest_data);
my $digest = md5_base64($digest_data);
# ETag support.
my $if_none_match = $cgi->http('If-None-Match') || "";
my $found304;
my @if_none = split(/[\s,]+/, $if_none_match);
foreach my $if_none (@if_none) {
# remove quotes from begin and end of the string
$if_none =~ s/^\"//g;
$if_none =~ s/\"$//g;
if ($if_none eq $digest or $if_none eq '*') {
# leave the loop after the first match
$found304 = $if_none;
last;
}
}
if ($found304) {
print $cgi->header(-type => 'text/html',
-ETag => $found304,
-status => '304 Not Modified');
}
else {
# Return HTTP headers.
print $cgi->header (-ETag => $digest,
-type => $format->{'ctype'});
print $output;
}
exit;
$cgi->check_etag($digest);
print $cgi->header (-ETag => $digest,
-type => $format->{'ctype'});
print $output;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment