private static DefaultGatewayList parseList(HtmlDocument parser, string fieldName) { var select = parser.DocumentNode.SelectSingleNode($"//select[@name='{fieldName}']"); if (select == null) { throw new InvalidOperationException($"Unable to parse html, cannot find select element named {fieldName}, this is a bug"); } var list = new DefaultGatewayList(); foreach (var opt in select.ChildNodes) { if (opt.Name == "option") { var item = new DefaultGatewayListItem() { InternalName = opt.Attributes["value"].Value, Name = opt.InnerText }; list.items.Add(item); if (opt.Attributes["selected"] != null) { list.Selected = item; } } } return(list); }
private void parsePageContent(string htmlBody) { var parser = new HtmlDocument(); parser.LoadHtml(htmlBody); gateways = parseGatewaysTable(parser); DefaultGatewayIPv4 = parseList(parser, "defaultgw4"); DefaultGatewayIPv6 = parseList(parser, "defaultgw6"); formSaveDefaultGatewaysCsrfToken = extractDefaultGatewayFormCsrfToken(parser); // "changes must be applied" banner that shows if Gateways have been saved formApplyChangesCsrfToken = extractApplyChangesFormCsrfToken(parser); }