func()

in lib/scim/scim_group.go [370:404]


func (h *GroupHandler) normalizeMember(member *spb.Member, name string, idx int) error {
	switch member.Type {
	case "User":
	case "":
		member.Type = "User"
	default:
		return errutil.NewIndexError(codes.InvalidArgument, errutil.ErrorPath("scim", "groups", name, "members", strconv.Itoa(idx), "type"), idx, "invalid member type")
	}
	email, err := mail.ParseAddress(member.Value)
	if err != nil {
		return errutil.NewIndexError(codes.InvalidArgument, errutil.ErrorPath("scim", "groups", name, "members", strconv.Itoa(idx), "value"), idx, fmt.Sprintf("%q must be an email address", member.Value))
	}
	member.Value = email.Address
	if member.Display == "" && email.Name != "" {
		member.Display = strings.TrimSpace(email.Name)
	}
	if member.Display != "" && strings.Contains(member.Display, "@") {
		// Do not accept email addresses as the display name.
		// Reject when a different email address, or remove display field when it repeats the value field.
		if member.Display != member.Value {
			return errutil.NewIndexError(codes.InvalidArgument, errutil.ErrorPath("scim", "groups", name, "members", strconv.Itoa(idx), "display"), idx, "display name as an email address not allowed")
		}
		member.Display = ""
	}
	if member.ExtensionIssuer != "" && !strutil.IsURL(member.ExtensionIssuer) {
		return errutil.NewIndexError(codes.InvalidArgument, errutil.ErrorPath("scim", "groups", name, "members", strconv.Itoa(idx), "issuer"), idx, fmt.Sprintf("invalid member issuer %q", member.ExtensionIssuer))
	}
	if member.ExtensionIssuer != "" && len(member.ExtensionIssuer) > 256 {
		return errutil.NewIndexError(codes.InvalidArgument, errutil.ErrorPath("scim", "groups", name, "members", strconv.Itoa(idx), "issuer"), idx, fmt.Sprintf("member issuer %q exceeds maximum length", member.ExtensionIssuer))
	}
	if member.ExtensionSubject != "" && len(member.ExtensionSubject) > 60 {
		return errutil.NewIndexError(codes.InvalidArgument, errutil.ErrorPath("scim", "groups", name, "members", strconv.Itoa(idx), "subject"), idx, fmt.Sprintf("member subject %q exceeds maximum length", member.ExtensionSubject))
	}
	return nil
}