// Copyright 2019 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:async';
import 'dart:io';

import 'package:meta/meta.dart';
import 'package:shelf/shelf.dart';

import '../requests/exceptions.dart';

/// Class capable of authenticating [HttpRequest]s.
///
///  If the request has the `'X-Appengine-Cron'` HTTP header set to "true",
///  then the request will be authenticated as an App Engine cron job.
///
///  The `'X-Appengine-Cron'` HTTP header is set automatically by App Engine
///  and will be automatically stripped from the request by the App Engine
///  runtime if the request originated from anything other than a cron job.
///  Thus, the header is safe to trust as an authentication indicator.
///
/// See also:
///
///  * <https://cloud.google.com/appengine/docs/standard/python/reference/request-response-headers>
@immutable
// TODO(Kristin): Generalize this to implement from a AuthProvider. https://github.com/flutter/flutter/issues/101614
class CronAuthProvider {
  const CronAuthProvider();

  /// Authenticates the specified [request].
  ///
  /// This will throw an [Unauthenticated] exception if the request is
  /// unauthenticated.
  Future<bool> authenticate(Request request) async {
    final Map<String, String> reqHeader = request.headers;
    final bool isCron = reqHeader['X-Appengine-Cron'] == 'true';
    if (isCron) {
      // Authenticate cron requests
      return true;
    }
    throw const Unauthenticated('User is not signed in');
  }
}
