extractCertSelectDomains function

List<UserID> extractCertSelectDomains(
  1. PromptResult promptResult
)

Implementation

List<UserID> extractCertSelectDomains(PromptResult promptResult) {
  final params = (promptResult.value as Notification).params;
  final htmlStr = params!.last as String;
  final domains = parseFragment(htmlStr).nodes;
  final registrars = <UserID>[];
  domains.retainWhere(
    (Node node) {
      if (node is Element &&
          (node.localName == 'a' && node.className.contains('cert') ||
              node.localName == 'div')) {
        if (node.localName == 'div') {
          final registers = parseFragment(node.innerHtml).nodes;
          registers.retainWhere(
            (node) =>
                node is Element &&
                node.localName == 'a' &&
                node.className == 'select',
          );
          for (var element in registers) {
            final keys = ['href', 'target', 'class'];
            final result = element.attributes.keys.skipWhile(
              (value) => keys.contains(value),
            );
            if (result.isEmpty) {
              final domain = element.attributes['href']!;
              final String domainString;
              if (!domain.startsWith('/')) {
                domainString = domain;
              } else {
                domainString = domain.substring(1);
              }
              final isEmpty = registrars
                  .where((element) => element.domain == domainString)
                  .isEmpty;
              if (isEmpty) {
                registrars.add(UserID(
                  domainString,
                  '',
                  false,
                  registered: false,
                ));
              }
            }
          }
          return false;
        }
        return true;
      }
      return false;
    },
  );
  final mapped = domains.map((element) {
    final title = element.attributes['title']!;
    var username = (element as Element)
        .innerHtml
        .replaceAll('<b>', '')
        .replaceAll('</b>', '');
    var isActive = false;
    if (username.contains(' <small>')) {
      username = username.split(' ').first;
      isActive = true;
    }
    return UserID(
      title,
      username,
      isActive,
    );
  }).toList();
  mapped.addAll(registrars);
  return mapped;
}