-sub admin_required {
- local $_ = $_[0];
- return problem_owner $1 if m,^/pb/$word, && problem_private $1;
- return job_user $1 if m,^/log/(?:job|src)/$word, && job_private $1;
- return contest_owner $1 if m,^/ct/$word/(?:pb|log), && time < contest_start $1;
- if (m,^/ct/$word/log/(?:job|src)/$word, && time < contest_end $1){
- local $Gruntmaster::Data::contest = $1;
- return job_user $2;
- }
- 0
+sub authenticate {
+ my ($user, $pass, $env) = @_;
+ my $key = sha256 "$user:$pass";
+ $env->{'gruntmaster.user'} = $user;
+ return 1 if exists $auth{$key};
+ return unless $db->user($user) && $db->user($user)->check_passphrase($pass);
+ $auth{key} = 1;