dsbHandler function

Future<Response> Function(Request) dsbHandler({
  1. String index = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"><HTML><HEAD><TITLE>Not Found</TITLE><META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD><BODY><h2>Not Found</h2><hr><p>HTTP Error 404. The requested resource is not found.</p></BODY></HTML>',
  2. Map<String, String> customHeaders = const {},
  3. required Future<String> generateAuthid(
    1. String user,
    2. String pass,
    3. String bundleid,
    4. String appversion,
    5. String osversion,
    ),
  4. required Future<String?> getContent(
    1. String endpoint,
    2. String authid
    ),
})

Implementation

Future<Response> Function(Request) dsbHandler({
  String index =
      '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"><HTML><HEAD><TITLE>Not Found</TITLE><META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD><BODY><h2>Not Found</h2><hr><p>HTTP Error 404. The requested resource is not found.</p></BODY></HTML>',
  Map<String, String> customHeaders = const {},
  required Future<String> Function(String user, String pass, String bundleid,
          String appversion, String osversion)
      generateAuthid,
  required Future<String?> Function(String endpoint, String authid) getContent,
}) =>
    (req) async {
      await initializeDateFormatting('C');
      final resp = _resp(customHeaders);
      final path = req.url.path;
      final query = req.url.queryParameters;
      if (path == 'authid') {
        if ([
          'bundleid',
          'appversion',
          'osversion',
          'pushid',
          'user',
          'password'
        ].map(query.containsKey).reduce((a, b) => a && b)) {
          final aid = await generateAuthid(query['user']!, query['password']!,
              query['bundleid']!, query['appversion']!, query['osversion']!);
          return resp(200, '"$aid"');
        }
        // TODO: actually figure out which endpoints exist
      } else if (query.containsKey('authid')) {
        final content = await getContent(path, query['authid']!);
        if (content != null) return resp(200, content);
      }
      return Response(404,
          body: index,
          headers: {
            'Content-Type': 'text/html; charset=us-ascii',
            'Server': 'Microsoft-HTTPAPI/2.0',
            'Date': httpDate(),
            'Connection': 'close'
          },
          encoding: ascii);
    };