github.com/line/line-bot-sdk-go/v7@v7.21.0/linebot/oauth.go (about)

     1  // Copyright 2016 LINE Corporation
     2  //
     3  // LINE Corporation licenses this file to you under the Apache License,
     4  // version 2.0 (the "License"); you may not use this file except in compliance
     5  // with the License. You may obtain a copy of the License at:
     6  //
     7  //   http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    11  // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
    12  // License for the specific language governing permissions and limitations
    13  // under the License.
    14  
    15  package linebot
    16  
    17  import (
    18  	"context"
    19  	"net/url"
    20  	"strings"
    21  )
    22  
    23  // IssueAccessToken method
    24  func (client *Client) IssueAccessToken(channelID, channelSecret string) *IssueAccessTokenCall {
    25  	return &IssueAccessTokenCall{
    26  		c:             client,
    27  		channelID:     channelID,
    28  		channelSecret: channelSecret,
    29  	}
    30  }
    31  
    32  // IssueAccessTokenCall type
    33  type IssueAccessTokenCall struct {
    34  	c   *Client
    35  	ctx context.Context
    36  
    37  	channelID     string
    38  	channelSecret string
    39  }
    40  
    41  // WithContext method
    42  func (call *IssueAccessTokenCall) WithContext(ctx context.Context) *IssueAccessTokenCall {
    43  	call.ctx = ctx
    44  	return call
    45  }
    46  
    47  // Do method
    48  func (call *IssueAccessTokenCall) Do() (*AccessTokenResponse, error) {
    49  	vs := url.Values{}
    50  	vs.Set("grant_type", "client_credentials")
    51  	vs.Set("client_id", call.channelID)
    52  	vs.Set("client_secret", call.channelSecret)
    53  	body := strings.NewReader(vs.Encode())
    54  
    55  	res, err := call.c.postForm(call.ctx, APIEndpointIssueAccessToken, body)
    56  	if err != nil {
    57  		return nil, err
    58  	}
    59  	defer closeResponse(res)
    60  	return decodeToAccessTokenResponse(res)
    61  }
    62  
    63  // RevokeAccessToken method
    64  func (client *Client) RevokeAccessToken(accessToken string) *RevokeAccessTokenCall {
    65  	return &RevokeAccessTokenCall{
    66  		c:           client,
    67  		accessToken: accessToken,
    68  	}
    69  }
    70  
    71  // RevokeAccessTokenCall type
    72  type RevokeAccessTokenCall struct {
    73  	c   *Client
    74  	ctx context.Context
    75  
    76  	accessToken string
    77  }
    78  
    79  // WithContext method
    80  func (call *RevokeAccessTokenCall) WithContext(ctx context.Context) *RevokeAccessTokenCall {
    81  	call.ctx = ctx
    82  	return call
    83  }
    84  
    85  // Do method
    86  func (call *RevokeAccessTokenCall) Do() (*BasicResponse, error) {
    87  	vs := url.Values{}
    88  	vs.Set("access_token", call.accessToken)
    89  	body := strings.NewReader(vs.Encode())
    90  
    91  	res, err := call.c.postForm(call.ctx, APIEndpointRevokeAccessToken, body)
    92  	if err != nil {
    93  		return nil, err
    94  	}
    95  	defer closeResponse(res)
    96  	return decodeToBasicResponse(res)
    97  }
    98  
    99  // VerifyAccessToken method
   100  func (client *Client) VerifyAccessToken(accessToken string) *VerifyAccessTokenCall {
   101  	return &VerifyAccessTokenCall{
   102  		c:           client,
   103  		accessToken: accessToken,
   104  	}
   105  }
   106  
   107  // VerifyAccessTokenCall type
   108  type VerifyAccessTokenCall struct {
   109  	c   *Client
   110  	ctx context.Context
   111  
   112  	accessToken string
   113  }
   114  
   115  // WithContext method
   116  func (call *VerifyAccessTokenCall) WithContext(ctx context.Context) *VerifyAccessTokenCall {
   117  	call.ctx = ctx
   118  	return call
   119  }
   120  
   121  // Do method
   122  func (call *VerifyAccessTokenCall) Do() (*VerifiedAccessTokenResponse, error) {
   123  	vs := url.Values{}
   124  	vs.Set("access_token", call.accessToken)
   125  	body := strings.NewReader(vs.Encode())
   126  
   127  	res, err := call.c.postForm(call.ctx, APIEndpointVerifyAccessToken, body)
   128  	if err != nil {
   129  		return nil, err
   130  	}
   131  	defer closeResponse(res)
   132  	return decodeToVerifiedAccessTokenResponse(res)
   133  }