Commit f8ba4afc by Li Feifei

init

parents
File added
# Default ignored files
/workspace.xml
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="Go" enabled="true" />
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/im-microservice.iml" filepath="$PROJECT_DIR$/.idea/im-microservice.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="$PROJECT_DIR$/u-center" vcs="Git" />
</component>
</project>
\ No newline at end of file
package db
import (
"fmt"
"github.com/astaxie/beego/orm"
"github.com/go-redis/redis/v8"
"log"
"sync"
_ "github.com/go-sql-driver/mysql"
)
var (
RedisClient *redis.Client
once sync.Once
MysqlClient orm.Ormer
)
var (
redis_host = "192.168.10.20:6379"
redis_pass = "test.eoffcn.com"
redis_db = 13
mysql_host = "rm-2zevlk47ul0ovuci80o.mysql.rds.aliyuncs.com"
mysql_user = "video"
mysql_pass = "vlty&AxMwT$lmLv6bN8dkDuBYlh%N5pe"
mysql_port = "3306"
mysql_db = "media_microservice"
mysql_charset = "utf8"
mysql_driver = "mysql"
)
func init() {
once.Do(func() {
newRedisClient()
newMysqlClient()
})
}
func newRedisClient() {
RedisClient = redis.NewClient(&redis.Options{
Addr: redis_host,
Password: redis_pass, // no password set
DB: redis_db, // use default DB
})
}
func newMysqlClient() {
dbConfStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s",
mysql_user, mysql_pass, mysql_host, mysql_port, mysql_db, mysql_charset)
_ = orm.RegisterDriver(mysql_driver, orm.DRMySQL)
err := orm.RegisterDataBase("default", mysql_driver, dbConfStr, 10, 100)
if err != nil {
log.Println("db connect error => ", err)
return
}
orm.RegisterModel(new(CompanyApp))
MysqlClient = orm.NewOrm()
log.Println("MySQL connect success")
}
package db
type CompanyApp struct {
Id int
Name string
Key string
Secret string
Cid int64
}
module im-microservice
go 1.12
require (
github.com/astaxie/beego v1.12.1
github.com/go-playground/universal-translator v0.17.0 // indirect
github.com/go-redis/redis/v8 v8.0.0-beta.5
github.com/go-sql-driver/mysql v1.5.0
github.com/golang/protobuf v1.4.1
github.com/leodido/go-urn v1.2.0 // indirect
github.com/rs/xid v1.2.1
github.com/segmentio/ksuid v1.0.2
google.golang.org/grpc v1.30.0
google.golang.org/protobuf v1.24.0
gopkg.in/go-playground/validator.v9 v9.31.0
)
This diff is collapsed. Click to expand it.
package helper
import "im-microservice/db"
const (
table_name = "company_app"
app_name = "name"
app_key = "key"
app_secret = "secret"
app_cid = "cid"
)
func GetSecretByKey(key string) (error, string) {
var u_app db.CompanyApp
err := db.MysqlClient.QueryTable(table_name).Filter(app_key, key).One(&u_app, app_secret)
if err != nil {
return err, ""
}
return nil, u_app.Secret
}
package helper
import (
"errors"
"log"
"gopkg.in/go-playground/validator.v9"
)
func Valiator(in interface{}) error {
validate := validator.New()
err := validate.Struct(in)
if err != nil {
for _, err := range err.(validator.ValidationErrors) {
log.Println("error == ", err)
return errors.New("表单验证失败")
}
}
return nil
}
package main
import (
"encoding/hex"
"errors"
"fmt"
"log"
"net"
"crypto/sha1"
"strconv"
"strings"
"time"
"im-microservice/helper"
"golang.org/x/net/context"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/metadata"
)
const (
port = ":50051"
)
func checksum(req map[string]string) (error) {
err,AppSecret := helper.GetSecretByKey(req["appkey"])
if err != nil {
return err
}
server_time := time.Now().Unix()
client_time,err := strconv.Atoi(req["curtime"])
if err != nil {
return err
}
if server_time > int64(client_time) {
return errors.New("当前客户端时间不能小于服务端时间")
}
sha11 := sha1.New()
sha11.Write([]byte(AppSecret+req["nonce"] + req["curtime"]))
sevice_checksum := hex.EncodeToString(sha11.Sum([]byte(nil)))
if sevice_checksum != req["checksum"] {
return errors.New("加密串不正确")
}
return nil
}
func auth(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
_, ok := metadata.FromIncomingContext(ctx)
if !ok {
return nil, grpc.Errorf(codes.Unauthenticated, "无Token认证信息")
}
request_map := make(map[string]string)
s := fmt.Sprintf("%v", req)
reqs := strings.Fields(s)
if len(reqs) > 0 {
for _, v := range reqs {
params := strings.Split(v, ":")
request_map[params[0]] = params[1]
}
}
if len(request_map) < 0 {
return nil, errors.New("请求参数为空")
}
if _, ok := request_map["appkey"]; !ok {
return nil, errors.New("缺少appkey")
}
if _, ok := request_map["nonce"]; !ok {
return nil, errors.New("缺少nonce")
}
if _, ok := request_map["curtime"]; !ok {
return nil, errors.New("缺少nonce")
}
if _, ok := request_map["checksum"]; !ok {
return nil, errors.New("checksum")
}
if err := checksum(request_map); err != nil {
return nil, err
}
return handler(ctx, req)
}
func main() {
lis, err := net.Listen("tcp", port)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
var opts []grpc.ServerOption
opts = append(opts, grpc.UnaryInterceptor(auth))
s := grpc.NewServer(opts...)
//pb.RegisterUserServer(s, &user.UserSevice{})
//pb.RegisterAppServer(s, &app.AppSevice{})
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
File added
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment