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  }