github.com/gogf/gf@v1.16.9/text/gstr/gstr_domain.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/gogf/gf. 6 7 package gstr 8 9 import "strings" 10 11 // IsSubDomain checks whether <subDomain> is sub-domain of mainDomain. 12 // It supports '*' in <mainDomain>. 13 func IsSubDomain(subDomain string, mainDomain string) bool { 14 if p := strings.IndexByte(subDomain, ':'); p != -1 { 15 subDomain = subDomain[0:p] 16 } 17 if p := strings.IndexByte(mainDomain, ':'); p != -1 { 18 mainDomain = mainDomain[0:p] 19 } 20 subArray := strings.Split(subDomain, ".") 21 mainArray := strings.Split(mainDomain, ".") 22 subLength := len(subArray) 23 mainLength := len(mainArray) 24 // Eg: 25 // "s.s.goframe.org" is not sub-domain of "*.goframe.org" 26 // but 27 // "s.s.goframe.org" is not sub-domain of "goframe.org" 28 if mainLength > 2 && subLength > mainLength { 29 return false 30 } 31 minLength := subLength 32 if mainLength < minLength { 33 minLength = mainLength 34 } 35 for i := minLength; i > 0; i-- { 36 if mainArray[mainLength-i] == "*" { 37 continue 38 } 39 if mainArray[mainLength-i] != subArray[subLength-i] { 40 return false 41 } 42 } 43 return true 44 }