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 }