1. // Copyright (c) 2021. Huawei Technologies Co., Ltd. All rights reserved.

    // Package common this file common validators
    package common

    import (
    "crypto/tls"
    "errors"
    "net"
    "regexp"
    "time"

    "huawei.com/npu-exporter/hwlog"
    "huawei.com/npu-exporter/utils"

    "huawei.com/mindxdl/base/common/constants"
    )

    const (
    portLowerLimit = 1025
    portUpperLimit = 40000
    nameMaxLength = 63
    nameMinLength = 3
    serviceLogMaxSize = 200
    nameFormat = `^[a-z0-9]+[a-z0-9-]*[a-z0-9]+$`
    )

    // ServerParam ServerParam
    type ServerParam struct {
    IP string
    Port int
    Version bool
    Concurrency int
    MaxConcurrency int
    EnableHTTP bool
    EncryptAlgorithm int
    TLSSuites int
    CipherSuites []uint16
    AuthMode string
    OverdueTime int
    CheckCertPeriod time.Duration
    DNSName string
    DirName string
    ReadTimeOut time.Duration
    WriteTimeOut time.Duration
    }

    // GetDefaultServiceParam get default service param
    func GetDefaultServiceParam() *ServerParam {
    return &ServerParam{
    MaxConcurrency: MaxConcurrency,
    CheckCertPeriod: time.Hour,
    AuthMode: TwoWay,
    OverdueTime: utils.OverdueTime,
    ReadTimeOut: HTTPServerTimeout,
    WriteTimeOut: HTTPServerTimeout,
    }
    }

    // WebParamValid doing param check
    func WebParamValid(sp *ServerParam) error {
    if sp.Port < portLowerLimit || sp.Port > portUpperLimit {
    return errors.New("the port is invalid")
    }
    parsedIP := net.ParseIP(sp.IP)
    if parsedIP == nil {
    return errors.New("the listen ip is invalid")
    }
    sp.IP = parsedIP.String()
    hwlog.RunLog.Infof("listen on: %s", sp.IP)

    return nil
    }

    // ParseTLSParams ParseTLSParams
    func ParseTLSParams(sp *ServerParam) {
    if sp.EncryptAlgorithm != utils.Aes128gcm && sp.EncryptAlgorithm != utils.Aes256gcm {
    hwlog.RunLog.Warn("reset invalid encryptAlgorithm = 9")
    sp.EncryptAlgorithm = utils.Aes256gcm
    }
    if sp.TLSSuites != 0 && sp.TLSSuites != 1 {
    hwlog.RunLog.Warn("reset invalid tlsSuites = 1")
    sp.TLSSuites = 1
    }
    if sp.TLSSuites == 0 {
    sp.CipherSuites = []uint16{tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256}
    } else {
    sp.CipherSuites = []uint16{tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256}
    }
    }

    // ValidName valid pod name or namespace
    func ValidName(nameType, name string, b BaseCtx) bool {
    if name == "" {
    hwlog.RunLog.ErrorfWithCtx(b.Ctx, "%s is empty.", nameType)
    return false
    }
    array := []rune(name)
    if len(array) > nameMaxLength || len(array) < nameMinLength {
    hwlog.RunLog.ErrorfWithCtx(b.Ctx, "%s length (%v) invalid.", nameType, len(array))
    return false
    }
    var reg = regexp.MustCompile(nameFormat)
    ok := reg.MatchString(name)
    if !ok {
    hwlog.RunLog.ErrorfWithCtx(b.Ctx, "%s is not meet requirement.", nameType)
    return false
    }
    return true
    }

    func validLogLimitOffset(logOffset, logLimit uint64) error {
    if logLimit > serviceLogMaxSize {
    return errors.New("too large of limit")
    }
    if logOffset < 0 {
    return errors.New("offset is less than 0")
    }
    return nil
    }

    // CheckString check string
    func CheckString(passString string) error {
    if matched, err := regexp.MatchString(constants.PassRegex, passString); err != nil || !matched {
    return errors.New("password MatchString failed")
    }

    complexCheckRegexArr := []string{
    constants.LowercaseCharactersRegex,
    constants.UppercaseCharactersRegex,
    constants.BaseNumberRegex,
    constants.SpecialCharactersRegex,
    }
    complexCount := 0
    for _, pattern := range complexCheckRegexArr {
    if matched, err := regexp.MatchString(pattern, passString); matched && err == nil {
    complexCount++
    }
    }
    if complexCount < constants.MinComplexCount {
    return errors.New("password complexCheck failed")
    }
    return nil
    }

mindxdl--common--validators.go的更多相关文章

  1. RoR - More Active Record

    Active Record Scope: default_scope:   默认的检索方式 #Use unscoped to break out of the default class Hobby ...

  2. Yii2在Form中处理短信验证码的Validator,耦合度最低的短信验证码验证方式

    短信验证码在目前大多数web应用中都会有,本文介绍一个基于Yii2 Validator方式的验证码验证方式. 在其他文章中看到的方式大多比较难做到一次封装,多次重用. 使用此方式的好处自然不用多说,V ...

  3. ASP.NET - Validators

    ASP.NET validation controls validate the user input data to ensure that useless, unauthenticated, or ...

  4. Socket聊天程序——Common

    写在前面: 上一篇记录了Socket聊天程序的客户端设计,为了记录的完整性,这里还是将Socket聊天的最后一个模块--Common模块记录一下.Common的设计如下: 功能说明: Common模块 ...

  5. angularjs 1 开发简单案例(包含common.js,service.js,controller.js,page)

    common.js var app = angular.module('app', ['ngFileUpload']) .factory('SV_Common', function ($http) { ...

  6. Common Bugs in C Programming

    There are some Common Bugs in C Programming. Most of the contents are directly from or modified from ...

  7. ANSI Common Lisp Practice - My Answers - Chatper - 3

    Ok, Go ahead. 1 (a) (b) (c) (d) 2 注:union 在 Common Lisp 中的作用就是求两个集合的并集.但是这有一个前提,即给的两个列表已经满足集合的属性了.具体 ...

  8. [LeetCode] Lowest Common Ancestor of a Binary Tree 二叉树的最小共同父节点

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

  9. [LeetCode] Lowest Common Ancestor of a Binary Search Tree 二叉搜索树的最小共同父节点

    Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...

  10. [LeetCode] Longest Common Prefix 最长共同前缀

    Write a function to find the longest common prefix string amongst an array of strings. 这道题让我们求一系列字符串 ...

随机推荐

  1. 手把手教你搭建规范的团队vue项目,包含commitlint,eslint,prettier,husky,commitizen等等

    目录 1,前言 2,创建项目 2,安装vue全家桶 3,配置prettier 4,配置eslint 5,配置husky + git钩子 6,配置commitlint 6.1,配置commitlint格 ...

  2. Java中“指针”的解释以及对“引用”的理解

    Java中"指针"的解释以及对"引用"的理解 初学Java面对对象编程,对于一些概念还真的有点难以理解,主要是因为不由自主的联系到以前学过的C语言知识,时不时的 ...

  3. C++ "链链"不忘@必有回响之双向链表

    C++ "链链"不忘@必有回响之双向链表 1. 前言 写过一篇与单链表相关的博文(https://blog.51cto.com/gkcode/5681771),实际应用中,双向循环 ...

  4. crictl 命令 - Kubernetes 管理命令详解

    描述:crictl 是 CRI 兼容的容器运行时命令行对接客户端, 你可以使用它来检查和调试 Kubernetes 节点上的容器运行时和应用程序.由于该命令是为k8s通过CRI使用containerd ...

  5. es日志配置,只保存最近3天的日志

    Elasticsearch使用Log4j 2进行日志记录.可以使用log4j2.properties文件配置Log4j2. Elasticsearch公开三个属性 ${sys:es.logs.base ...

  6. 配置logstash消费kafka多个topic,分别生成索引

    filebeat配置多个topic #filebeat.prospectors: filebeat.inputs: - input_type: log encoding: GB2312 # field ...

  7. flask中验证用户登录的装饰器

    from flask import Flask,render_template,redirect,request,session from functools import wraps app = F ...

  8. 使用cnpm创建vue项目(含离线安装)

    # 全局安装淘宝cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org #升级 npm cnpm install npm ...

  9. 【可视化大屏教程】用Python开发智慧城市数据分析大屏!

    目录 一.开发背景 二.讲解代码 2.1 大标题+背景图 2.2 各区县交通事故统计图-系列柱形图 2.3 图书馆建设率-水球图 2.4 当年城市空气质量aqi指数-面积图 2.5 近7年人均生产总值 ...

  10. 在 WPF 中实现融合效果

    1. 融合效果 融合效果是指对两个接近的元素进行高斯模糊后再提高对比度,使它们看上去"粘"在一起.在之前的一篇文章中,我使用 Win2D 实现了融合效果,效果如下: 不过 Win2 ...