// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. package utils import ( "net" "net/http" "net/url" "strings" ) func StringInSlice(a string, slice []string) bool { for _, b := range slice { if b == a { return true } } return false } func RemoveStringFromSlice(a string, slice []string) []string { for i, str := range slice { if str == a { return append(slice[:i], slice[i+1:]...) } } return slice } func StringArrayIntersection(arr1, arr2 []string) []string { arrMap := map[string]bool{} result := []string{} for _, value := range arr1 { arrMap[value] = true } for _, value := range arr2 { if arrMap[value] { result = append(result, value) } } return result } func RemoveDuplicatesFromStringArray(arr []string) []string { result := make([]string, 0, len(arr)) seen := make(map[string]bool) for _, item := range arr { if !seen[item] { result = append(result, item) seen[item] = true } } return result } func StringSliceDiff(a, b []string) []string { m := make(map[string]bool) result := []string{} for _, item := range b { m[item] = true } for _, item := range a { if !m[item] { result = append(result, item) } } return result } func GetIpAddress(r *http.Request, trustedProxyIPHeader []string) string { address := "" for _, proxyHeader := range trustedProxyIPHeader { header := r.Header.Get(proxyHeader) if len(header) > 0 { addresses := strings.Fields(header) if len(addresses) > 0 { address = strings.TrimRight(addresses[0], ",") } } if len(address) > 0 { return address } } if len(address) == 0 { address, _, _ = net.SplitHostPort(r.RemoteAddr) } return address } func GetHostnameFromSiteURL(siteURL string) string { u, err := url.Parse(siteURL) if err != nil { return "" } return u.Hostname() }