| | |
| | | // @Success 200 {string} logout success |
| | | // @router /logout [get] |
| | | func (u *UserController) Logout() { |
| | | cid := u.GetString("cid") //unipush clientid |
| | | fmt.Println("clientId:", cid) |
| | | |
| | | if cid != "" { |
| | | go func() { |
| | | unbindB, unE := service.UnbindAlias(cid) |
| | | fmt.Println("unbind result:", unbindB, "err:", unE) |
| | | var uc models.UserClient |
| | | uc.DeleteByCid(cid) |
| | | }() |
| | | } |
| | | resp := code.Code{} |
| | | resp.Success = true |
| | | resp.Status = http.StatusOK |
| | |
| | | return false |
| | | } |
| | | |
| | | |
| | | func (uc *UserClient) Delete(phoneNum string, clientId string) (int64, error) { |
| | | func (uc *UserClient) GetByCid(cid string) []UserClient { |
| | | var list []UserClient |
| | | o := orm.NewOrm() |
| | | sql := fmt.Sprintf("delete from "+uc.TableName()+" where phoneNum='%s' and clientId='%s'", phoneNum, clientId) |
| | | _, err := o.QueryTable(uc.TableName()).Filter("clientId", cid).All(&list) |
| | | if err != nil { |
| | | return nil |
| | | } |
| | | return list |
| | | } |
| | | |
| | | |
| | | func (uc *UserClient) DeleteByCid(clientId string) (int64, error) { |
| | | o := orm.NewOrm() |
| | | sql := fmt.Sprintf("delete from "+uc.TableName()+" where clientId='%s'", clientId) |
| | | result, err := o.Raw(sql).Exec() |
| | | if err != nil { |
| | | return 0, err |
| | |
| | | }() |
| | | } |
| | | |
| | | //解绑所有与该别名绑定的cid |
| | | //func UnbindAlias(alias string) (bool, error) { |
| | | // appId := beego.AppConfig.String("pushAppId") |
| | | // baseUrl := beego.AppConfig.String("pushBaseUrl") + appId |
| | | // retryTimes := 0 |
| | | //ReTry: |
| | | // token := getCacheToken() |
| | | // if token == "" { |
| | | // return false, errors.New("token is nil") |
| | | // } |
| | | // url := baseUrl + "/user/alias/"+alias |
| | | // header := map[string]string { |
| | | // "token": token, |
| | | // } |
| | | // b,err := util.DoDeleteRequest(url, util.CONTENT_TYPE_UTF8_JSON, nil, header) |
| | | // if err !=nil { |
| | | // fmt.Println("DoDelete err:", err) |
| | | // return false, err |
| | | // } |
| | | // var result PushResult |
| | | // err = json.Unmarshal(b, &result) |
| | | // if err != nil { |
| | | // fmt.Println("unmarshal err:", err) |
| | | // return false, err |
| | | // } |
| | | // if result.Code == 0 { //解绑成功 |
| | | // return true, nil |
| | | // } else if result.Code == 10001 { //token过期 |
| | | // if retryTimes <=3 { |
| | | // newToken, err := RefreshToken() |
| | | // if err == nil { |
| | | // updateToken(newToken) |
| | | // retryTimes++ |
| | | // goto ReTry |
| | | // } |
| | | // } |
| | | // } |
| | | // return false, errors.New(result.Msg) |
| | | //} |
| | | //批量解绑别名 |
| | | func UnbindAlias(cid string) (bool, error) { |
| | | var uc models.UserClient |
| | | ucList := uc.GetByCid(cid) |
| | | if ucList ==nil { |
| | | return true,errors.New("ucList is nil") |
| | | } |
| | | var aliasArr []string |
| | | for _,als := range ucList { |
| | | aliasArr = append(aliasArr, als.PhoneNum) |
| | | } |
| | | appId := beego.AppConfig.String("pushAppId") |
| | | baseUrl := beego.AppConfig.String("pushBaseUrl") + appId |
| | | retryTimes := 0 |
| | | ReTry: |
| | | token := getCacheToken() |
| | | if token == "" { |
| | | return false, errors.New("token is nil") |
| | | } |
| | | url := baseUrl + "/user/alias" |
| | | header := map[string]string { |
| | | "token": token, |
| | | } |
| | | caArr := make([]map[string]string, 0) |
| | | for _,as := range aliasArr { |
| | | caArr = append(caArr, map[string]string{ |
| | | "cid": cid, |
| | | "alias": as, |
| | | }) |
| | | } |
| | | |
| | | reqBody := map[string]interface{}{ |
| | | "data_list": caArr, |
| | | } |
| | | b,err := util.DoDeleteRequest(url, util.CONTENT_TYPE_UTF8_JSON, reqBody, header) |
| | | if err !=nil { |
| | | fmt.Println("DoDelete err:", err) |
| | | return false, err |
| | | } |
| | | var result PushResult |
| | | err = json.Unmarshal(b, &result) |
| | | if err != nil { |
| | | fmt.Println("unmarshal err:", err) |
| | | return false, err |
| | | } |
| | | if result.Code == 0 { //解绑成功 |
| | | return true, nil |
| | | } else if result.Code == 10001 { //token过期 |
| | | if retryTimes <=3 { |
| | | newToken, err := RefreshToken() |
| | | if err == nil { |
| | | updateToken(newToken) |
| | | retryTimes++ |
| | | goto ReTry |
| | | } |
| | | } |
| | | } |
| | | return false, errors.New(result.Msg) |
| | | } |
| | | |
| | | //一个别名最多允许绑定10个cid |
| | | func BindAlias(cid, alias string) (bool, error) { |
| | |
| | | if cid != "" { |
| | | go func() { |
| | | var uc models.UserClient |
| | | ucList := uc.GetByCid(cid) |
| | | if ucList != nil && len(ucList) >0 { |
| | | if len(ucList) >1 || ucList[0].PhoneNum != phoneNum { |
| | | unbindB, unE := UnbindAlias(cid) |
| | | fmt.Println("unbindB:", unbindB, "err:", unE) |
| | | } |
| | | } |
| | | if !uc.ExistByCid(phoneNum, cid) { |
| | | new := models.UserClient{ |
| | | Id:uuid.NewV4().String(), |
| | |
| | | BindTime: time.Now().Format("2006-01-02 15:04:05"), |
| | | } |
| | | new.Insert() |
| | | bindR, bindE := BindAlias(cid, phoneNum) |
| | | fmt.Println("bind cid:",cid, "phoneNum:",phoneNum,"result:", bindR, "err:", bindE) |
| | | } |
| | | bindR, bindE := BindAlias(cid, phoneNum) |
| | | fmt.Println("bind cid:",cid, "phoneNum:",phoneNum,"result:", bindR, "err:", bindE) |
| | | }() |
| | | } |
| | | return true, &vo.UserInfo{ |
| | |
| | | if cid != "" { |
| | | go func() { |
| | | var uc models.UserClient |
| | | ucList := uc.GetByCid(cid) |
| | | if ucList != nil && len(ucList) >0 { |
| | | if len(ucList) >1 || ucList[0].PhoneNum != phoneNum { |
| | | unbindB, unE := UnbindAlias(cid) |
| | | fmt.Println("unbindB:", unbindB, "err:", unE) |
| | | } |
| | | } |
| | | if !uc.ExistByCid(phoneNum, cid) { |
| | | new := models.UserClient{ |
| | | Id:uuid.NewV4().String(), |
| | |
| | | BindTime: time.Now().Format("2006-01-02 15:04:05"), |
| | | } |
| | | new.Insert() |
| | | bindR, bindE := BindAlias(cid, phoneNum) |
| | | fmt.Println("bind cid:",cid, "phoneNum:",phoneNum,"result:", bindR, "err:", bindE) |
| | | } |
| | | bindR, bindE := BindAlias(cid, phoneNum) |
| | | fmt.Println("bind cid:",cid, "phoneNum:",phoneNum,"result:", bindR, "err:", bindE) |
| | | }() |
| | | } |
| | | return true, &vo.UserInfo{ |