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  }