package asaModels import ( "regexp" "strconv" "github.rackspace.com/gorax/tools/util" ) var ( WEBVPNRE = regexp.MustCompile(`webvpn\n((.|\n)*?)(\n\S|$)`) WEBVPNENABLERE = regexp.MustCompile(`enable\s+(.*?)\n`) WEBVPNANYCONNRE = regexp.MustCompile(`(anyconnect|svc)\s+(enable)`) WEBVPNANYCONNESSENTIALRE = regexp.MustCompile(`anyconnect-essentials`) WEBVPNTUNNELRE = regexp.MustCompile(`tunnel-group-list\s+(enable)`) WEBVPNIMAGERE = regexp.MustCompile(`(\S+)\s+image\s+(\S+)\s+(\d+)`) webVpnProfileRe = regexp.MustCompile(`profiles[\s]([^\s]+)[\s]([^\s]+)`) ) type ( WebVPN struct { Enable *string `json:"enable"` ImgList []*WebVpnImg `json:"image_list"` ProfileList []*WebVpnProfile `json:"profile_list"` AnyConnect bool `json:"anyconnect_enable"` AnyConnectEssentials bool `json:"anyconnect_essentials"` TunnelGrpList bool `json:"tunnel-group-list"` } WebVpnImg struct { Type *string `json:"type"` Image *string `json:"image"` ImageNum int `json:"image_num"` } WebVpnProfile struct { Name string `json:"name"` Location string `json:"location"` } ) func (w *WebVPN) Parse(s string) error { r := util.RegexpString(WEBVPNRE, s) if r != "" { w.Enable = util.RegexpFindStringPtr(WEBVPNENABLERE, r) w.AnyConnect = WEBVPNANYCONNRE.MatchString(r) w.AnyConnectEssentials = WEBVPNANYCONNESSENTIALRE.MatchString(r) w.TunnelGrpList = WEBVPNTUNNELRE.MatchString(r) if err := w.imageList(r); err != nil { return err } w.profileList(r) } return nil } func (w *WebVPN) imageList(s string) error { for _, v := range WEBVPNIMAGERE.FindAllStringSubmatch(s, -1) { num, err := strconv.Atoi(v[3]) if err != nil { return err } w.ImgList = append(w.ImgList, &WebVpnImg{ Type: &v[1], Image: &v[2], ImageNum: num, }) } return nil } func (w *WebVPN) profileList(s string) { for _, v := range webVpnProfileRe.FindAllStringSubmatch(s, -1) { w.ProfileList = append(w.ProfileList, &WebVpnProfile{ Name: v[1], Location: v[2], }) } }