github.com/infraboard/keyauth@v0.8.1/apps/wxwork/http/wxwork.go (about) 1 package http 2 3 import ( 4 "fmt" 5 "net/http" 6 7 "github.com/infraboard/keyauth/apps/domain" 8 "github.com/infraboard/keyauth/apps/token" 9 "github.com/infraboard/keyauth/apps/token/issuer" 10 "github.com/infraboard/keyauth/apps/user/types" 11 "github.com/infraboard/keyauth/apps/wxwork" 12 "github.com/infraboard/mcube/exception" 13 "github.com/infraboard/mcube/http/context" 14 "github.com/infraboard/mcube/http/request" 15 "github.com/infraboard/mcube/http/response" 16 ) 17 18 // WechatWorkCheck todo 待添加企业微信配置数据后进行更新 19 // 扫码授权文档: https://work.weixin.qq.com/api/doc/90000/90135/91019 20 func (h *handler) WechatWorkCheck(w http.ResponseWriter, r *http.Request) { 21 values := r.URL.Query() 22 service := values.Get("service") 23 state := values.Get("state") 24 clientId := values.Get("client_id") 25 clientSecret := values.Get("client_secret") 26 d := values.Get("domain") 27 if d == "" { 28 d = domain.AdminDomainName 29 } 30 31 i, err := issuer.NewTokenIssuer() 32 if err != nil { 33 response.Failed(w, err) 34 } 35 nt, err := i.IssueToken(r.Context(), &token.IssueTokenRequest{ 36 GrantType: token.GrantType_WECHAT_WORK, 37 ClientId: clientId, 38 ClientSecret: clientSecret, 39 State: state, 40 Service: service, 41 Username: d, 42 }) 43 if err != nil { 44 response.Failed(w, err) 45 return 46 } 47 http.Redirect(w, r, fmt.Sprintf("%s?token=%s", service, nt.AccessToken), http.StatusFound) 48 return 49 } 50 51 // CreateConf 创建企业微信配置 52 func (h *handler) CreateConf(w http.ResponseWriter, r *http.Request) { 53 ctx := context.GetContext(r) 54 tk := ctx.AuthInfo.(*token.Token) 55 56 req := wxwork.NewSaveConfRequest() 57 req.WithToken(tk) 58 if err := request.GetDataFromRequest(r, req); err != nil { 59 response.Failed(w, err) 60 return 61 } 62 63 if !tk.UserType.IsIn(types.UserType_SUPPER, types.UserType_PRIMARY) { 64 response.Failed(w, exception.NewPermissionDeny("只有域管理员可以设置域的LDAP")) 65 return 66 } 67 68 d, err := h.service.SaveConfig(req) 69 if err != nil { 70 response.Failed(w, err) 71 return 72 } 73 74 response.Success(w, d) 75 } 76 77 // GetConf 获取企业微信配置 78 func (h *handler) GetConf(w http.ResponseWriter, r *http.Request) { 79 ctx := context.GetContext(r) 80 tk := ctx.AuthInfo.(*token.Token) 81 82 req := wxwork.NewDescribeConfWithDomain(tk.Domain) 83 d, err := h.service.DescribeConfig(req) 84 if err != nil { 85 response.Failed(w, err) 86 return 87 } 88 89 //d.Desensitize() 90 response.Success(w, d) 91 } 92 93 func (h *handler) ListConf(w http.ResponseWriter, r *http.Request) { 94 page := request.NewPageRequestFromHTTP(r) 95 req := wxwork.NewQueryConfigRequest(page) 96 97 apps, err := h.service.QueryConfig(req) 98 if err != nil { 99 response.Failed(w, err) 100 return 101 } 102 103 response.Success(w, apps) 104 } 105 106 func (h *handler) DestroyConfig(w http.ResponseWriter, r *http.Request) { 107 ctx := context.GetContext(r) 108 tk := ctx.AuthInfo.(*token.Token) 109 req := wxwork.NewDescribeConfWithDomain(tk.Domain) 110 err := h.service.DeleteConfig(req) 111 if err != nil { 112 response.Failed(w, err) 113 return 114 } 115 116 response.Success(w, "delete ok") 117 }