Sfoglia il codice sorgente

update, add qiniu oss testing

joe 4 anni fa
parent
commit
63413dcc0c
7 ha cambiato i file con 184 aggiunte e 26 eliminazioni
  1. 7 0
      README.cn.md
  2. 18 0
      mq/mqsvr/nats_test.go
  3. 1 1
      oss/ioss.go
  4. 47 16
      oss/osssvr/qiniu.go
  5. 57 0
      oss/osssvr/qiniu_test.go
  6. 26 6
      utl/validators.go
  7. 28 3
      utl/validators_test.go

+ 7 - 0
README.cn.md

@@ -12,6 +12,13 @@ Redistros of many useful libraries
 - [qrcode](https://github.com/yeqown/go-qrcode)
 - [xorm]()
 - [gorm]()
+- [gopay]()
 - [viper]()
 - [flag]()
 - [cobra](https://github.com/spf13/cobra)
+
+# TODO
+
+- Add & test mq
+- Add & test oss
+- Add & test iploc

+ 18 - 0
mq/mqsvr/nats_test.go

@@ -1 +1,19 @@
 package mqsvr
+
+import "testing"
+
+func TestNats_Close(t *testing.T) {
+
+}
+
+func TestNats_Pub(t *testing.T) {
+
+}
+
+func TestNats_Sub(t *testing.T) {
+
+}
+
+func TestNats_QSub(t *testing.T) {
+
+}

+ 1 - 1
oss/ioss.go

@@ -10,5 +10,5 @@ type IOss interface {
 	UploadFile(absPath string, key string, conf *UploadConf) (string, error)
 	Upload(reader io.Reader, len int64, key string, conf *UploadConf) (string, error)
 	Delete(key string) error
-	Exists(key string) (bool, error)
+	Exists(key string) (bool)
 }

+ 47 - 16
oss/osssvr/qiniu.go

@@ -10,22 +10,52 @@ import (
 )
 
 const (
-	QINIU_REGION_HUANAN = storage.RIDHuanan
+	DEF_REGION = storage.RIDHuabei
 )
 
-func NewQiniuOss(accessKey, secretKey, bucket string, region storage.RegionID) oss.IOss {
-	return &qiniuOss{
+type QiniuOption func(*QiniuOss)
+
+func WithHTTPS(use bool) QiniuOption {
+	return func(qo *QiniuOss) {
+		qo.https = use
+	}
+}
+
+func WithCDN(use bool) QiniuOption {
+	return func(qo *QiniuOss) {
+		qo.cdn = use
+	}
+}
+
+func WithRegion(region storage.RegionID) QiniuOption {
+	return func(qo *QiniuOss) {
+		qo.region = region
+	}
+}
+
+func NewQiniuOss(accessKey, secretKey, bucket string, opts ...QiniuOption) oss.IOss {
+	qiniu := &QiniuOss{
 		accessKey: accessKey,
 		secretKey: secretKey,
 		bucket:    bucket,
-		region:    region,
+		region:    DEF_REGION,
+		https:     false,
+		cdn:       false,
 	}
+
+	for _, opt := range opts {
+		opt(qiniu)
+	}
+
+	return qiniu
 }
 
-type qiniuOss struct {
+type QiniuOss struct {
 	accessKey, secretKey string
 	bucket               string
 	region               storage.RegionID
+	https                bool
+	cdn                  bool
 }
 
 type qiniuUploadReturn struct {
@@ -34,7 +64,7 @@ type qiniuUploadReturn struct {
 	Bucket, Name string
 }
 
-func (self *qiniuOss) UploadFile(absPath string, key string, conf *oss.UploadConf) (string, error) {
+func (self *QiniuOss) UploadFile(absPath string, key string, conf *oss.UploadConf) (string, error) {
 	scope := self.bucket
 	if conf != nil && conf.Overwrite {
 		scope = fmt.Sprintf("%s:%s", self.bucket, key)
@@ -50,17 +80,18 @@ func (self *qiniuOss) UploadFile(absPath string, key string, conf *oss.UploadCon
 	}
 	cfg := storage.Config{
 		Zone:          &zone,
-		UseHTTPS:      false,
-		UseCdnDomains: false,
+		UseHTTPS:      self.https,
+		UseCdnDomains: self.cdn,
 	}
 	formUploader := storage.NewFormUploader(&cfg)
 	putExtra := storage.PutExtra{}
 	ret := qiniuUploadReturn{}
 	err := formUploader.PutFile(context.Background(), &ret, upToken, key, absPath, &putExtra)
-	return ret.Name, err
+	//fmt.Printf("%v\n", ret)
+	return ret.Key, err
 }
 
-func (self *qiniuOss) Upload(reader io.Reader, len int64, key string, conf *oss.UploadConf) (string, error) {
+func (self *QiniuOss) Upload(reader io.Reader, len int64, key string, conf *oss.UploadConf) (string, error) {
 	scope := self.bucket
 	if conf != nil && conf.Overwrite {
 		scope = fmt.Sprintf("%s:%s", self.bucket, key)
@@ -76,17 +107,17 @@ func (self *qiniuOss) Upload(reader io.Reader, len int64, key string, conf *oss.
 	}
 	cfg := storage.Config{
 		Zone:          &zone,
-		UseHTTPS:      false,
-		UseCdnDomains: false,
+		UseHTTPS:      self.https,
+		UseCdnDomains: self.cdn,
 	}
 	formUploader := storage.NewFormUploader(&cfg)
 	putExtra := storage.PutExtra{}
 	ret := qiniuUploadReturn{}
 	err := formUploader.Put(context.Background(), &ret, upToken, key, reader, len, &putExtra)
-	return ret.Name, err
+	return ret.Key, err
 }
 
-func (self *qiniuOss) Delete(key string) error {
+func (self *QiniuOss) Delete(key string) error {
 	mac := qbox.NewMac(self.accessKey, self.secretKey)
 	cfg := storage.Config{
 		UseHTTPS: false,
@@ -95,12 +126,12 @@ func (self *qiniuOss) Delete(key string) error {
 	return bucketManager.Delete(self.bucket, key)
 }
 
-func (self *qiniuOss) Exists(key string) (bool, error) {
+func (self *QiniuOss) Exists(key string) (bool) {
 	mac := qbox.NewMac(self.accessKey, self.secretKey)
 	cfg := storage.Config{
 		UseHTTPS: false,
 	}
 	bucketManager := storage.NewBucketManager(mac, &cfg)
 	fileInfo, err := bucketManager.Stat(self.bucket, key)
-	return len(fileInfo.Hash) > 0, err
+	return len(fileInfo.Hash) > 0 && err == nil
 }

+ 57 - 0
oss/osssvr/qiniu_test.go

@@ -1 +1,58 @@
 package osssvr
+
+import (
+	"github.com/qiniu/go-sdk/v7/storage"
+	"one.com/kettle/oss"
+	"path/filepath"
+	"testing"
+)
+
+const (
+	AK = "SneSBtnWLdStBhCx0O_QogNkXoRlKNOiv1--XMBB"
+	CK = "GXMg-ENcp2UKYQWdeaf43tk_06NnMoA4OVFxdkYw"
+)
+
+func TestQiniuOss_UploadFile(t *testing.T) {
+	qn := NewQiniuOss(AK, CK, "playerdna-net",
+		WithRegion(storage.RIDHuadong))
+	abs, err := filepath.Abs("./a.png")
+	if err != nil {
+		t.Fatal(err)
+	}
+	h, err := qn.UploadFile(abs, "a.png", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	t.Log(h)
+
+	h, err = qn.UploadFile(abs, "a.png", &oss.UploadConf{Overwrite: true})
+	if err != nil {
+		t.Fatal(err)
+	}
+	t.Log(h)
+}
+
+func TestQiniuOss_Exists(t *testing.T) {
+	qn := NewQiniuOss(AK, CK, "playerdna-net",
+		WithRegion(storage.RIDHuadong))
+
+	yes := qn.Exists("a.png")
+	if !yes {
+		t.Fatal("should exists a.png")
+	}
+
+	yes = qn.Exists("c.png")
+	if yes {
+		t.Fatal("should not exists c.png")
+	}
+
+	//delete
+	err := qn.Delete("a.png")
+	if err != nil {
+		t.Fatal(err)
+	}
+	yes = qn.Exists("a.png")
+	if yes {
+		t.Fatal("should not exists a.png")
+	}
+}

+ 26 - 6
utl/validators.go

@@ -1,14 +1,21 @@
 package utl
 
 import (
-"regexp"
+	"regexp"
 )
 
 var (
-	patternEmail string         = "^([.]?[a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+"
-	patternPhone string         = "^(13[0-9]|14[57]|15[0-35-9]|18[0-9]|17[0-9]|16[7]|19[1])\\d{8}$"
+	patternEmail string         = "^([.]?[a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+$"
 	expEmail     *regexp.Regexp = regexp.MustCompile(patternEmail)
+
+	patternPhone string         = "^(13[0-9]|14[57]|15[0-35-9]|18[0-9]|17[0-9]|16[7]|19[1])\\d{8}$"
 	expPhone     *regexp.Regexp = regexp.MustCompile(patternPhone)
+
+	patternAlpha string         = "^[a-zA-Z]+[a-zA-Z0-9]*$"
+	expAlpha     *regexp.Regexp = regexp.MustCompile(patternAlpha)
+
+	//patternSafePassword string			= ""
+	//expSafePassword *regexp.Regexp = regexp.MustCompile(patternSafePassword)
 )
 
 func IsEmail(email string) bool {
@@ -26,10 +33,23 @@ func IsPhoneSimple(phone string) bool {
 	return phone[0] == 49
 }
 
+/** begin with alpha, composed with alpha and num */
 func IsAlpha(alpha string) bool {
-	return false
+	return expAlpha.MatchString(alpha)
 }
 
-func IsSafePasswd(passwd string) bool {
-	return false
+func CheckPasswd(passwd string) (lower bool, num bool, upper bool, others bool) {
+	lower, upper, num, others = false, false, false, false
+	for _, ch := range passwd {
+		if ch >= 0x41 && ch <= 0x5A { //A-Z
+			upper = true
+		} else if ch >= 0x61 && ch <= 0x7A { // a-z
+			lower = true
+		} else if ch >= 0x30 && ch <= 0x39 {
+			num = true
+		} else {
+			others = true
+		}
+	}
+	return
 }

+ 28 - 3
utl/validators_test.go

@@ -29,13 +29,38 @@ func TestIsPhone(t *testing.T) {
 }
 
 func TestIsEmail(t *testing.T) {
-
+	yes := IsEmail("y282@163.com")
+	if !yes {
+		t.Fatal("?")
+	}
+	yes = IsEmail("t23.yjd@gmail.com")
+	if !yes {
+		t.Fatal("??")
+	}
+	yes = IsEmail("2343@163.com")
+	if !yes {
+		t.Fatal("???")
+	}
 }
 
 func TestIsAlpha(t *testing.T) {
-
+	yes := IsAlpha("y282@163.com")
+	if yes {
+		t.Fatal("?")
+	}
+	yes = IsAlpha("t45")
+	if !yes {
+		t.Fatal("??")
+	}
+	yes = IsAlpha("234")
+	if yes {
+		t.Fatal("???")
+	}
 }
 
 func TestIsSafePasswd(t *testing.T) {
-
+	l, n, u, o := CheckPasswd("Ty234#")
+	if (!(l&&n&&u&&o)){
+		t.Fatal("what")
+	}
 }