parent
34403053ac
commit
f574863601
|
@ -181,6 +181,7 @@ func (bb *KardBot) HandleChat() error {
|
||||||
case "PRIVMSG":
|
case "PRIVMSG":
|
||||||
msg := matches[4]
|
msg := matches[4]
|
||||||
rgb.GPrintf("[%s] %s: %s\n", TimeStamp(), userName, msg)
|
rgb.GPrintf("[%s] %s: %s\n", TimeStamp(), userName, msg)
|
||||||
|
rgb.GPrintf("[%s] raw line: %s\n", TimeStamp(), line)
|
||||||
|
|
||||||
// parse commands from user message
|
// parse commands from user message
|
||||||
cmdMatches := CmdRegex.FindStringSubmatch(msg)
|
cmdMatches := CmdRegex.FindStringSubmatch(msg)
|
||||||
|
|
|
@ -7,37 +7,37 @@ import (
|
||||||
"github.com/gorilla/handlers"
|
"github.com/gorilla/handlers"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
"encoding/json"
|
|
||||||
"io/ioutil"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
//var store = sessions.NewCookieStore(os.Getenv("SESSION_KEY"))
|
//var store = sessions.NewCookieStore(os.Getenv("SESSION_KEY"))
|
||||||
|
|
||||||
type twitchauthresponse struct {
|
type twitchauthresponse struct {
|
||||||
Access_token string `json: "access_token"`
|
Access_token string `json: "access_token"`
|
||||||
Expires_in int `json: "expires_in"`
|
Expires_in int `json: "expires_in"`
|
||||||
Refresh_token string `json: "refresh_token"`
|
Refresh_token string `json: "refresh_token"`
|
||||||
Scope []string `json: "scope"`
|
Scope []string `json: "scope"`
|
||||||
Token_type string `json: "token_type"`
|
Token_type string `json: "token_type"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type twitchUser struct {
|
type twitchUser struct {
|
||||||
Id string `json: "id"`
|
Id string `json: "id"`
|
||||||
Login string `json: "login"`
|
Login string `json: "login"`
|
||||||
Display_name string `json: "display_name"`
|
Display_name string `json: "display_name"`
|
||||||
Type string `json: "type"`
|
Type string `json: "type"`
|
||||||
Broadcaster_type string `json: "affiliate"`
|
Broadcaster_type string `json: "affiliate"`
|
||||||
Description string `json: "description"`
|
Description string `json: "description"`
|
||||||
Profile_image_url string `json: "profile_image_url"`
|
Profile_image_url string `json: "profile_image_url"`
|
||||||
Offline_image_url string `json: "offline_image_url"`
|
Offline_image_url string `json: "offline_image_url"`
|
||||||
View_count int `json: "view_count"`
|
View_count int `json: "view_count"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type twitchUsersBigResponse struct {
|
type twitchUsersBigResponse struct {
|
||||||
|
@ -102,7 +102,7 @@ func TemplateHandler(response http.ResponseWriter, request *http.Request) {
|
||||||
// NotFoundHandler(response, request)
|
// NotFoundHandler(response, request)
|
||||||
// return
|
// return
|
||||||
}
|
}
|
||||||
var td = TemplateData{ircBot.Prompts[rand.Intn(len(ircBot.Prompts))], len(ircBot.Prompts), ircBot.ActiveChannels(), 0, ircBot.AppCredentials.ClientID, "https://"+ircBot.Config.ExternalUrl}
|
var td = TemplateData{ircBot.Prompts[rand.Intn(len(ircBot.Prompts))], len(ircBot.Prompts), ircBot.ActiveChannels(), 0, ircBot.AppCredentials.ClientID, "https://" + ircBot.Config.ExternalUrl}
|
||||||
err = tmpl.Execute(response, td)
|
err = tmpl.Execute(response, td)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(response, err.Error(), http.StatusInternalServerError)
|
http.Error(response, err.Error(), http.StatusInternalServerError)
|
||||||
|
@ -184,37 +184,37 @@ func UnauthorizedHandler(response http.ResponseWriter, request *http.Request) {
|
||||||
tmpl.Execute(response, nil)
|
tmpl.Execute(response, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func twitchHTTPClient(call string, bearer string) (string,error) {
|
func twitchHTTPClient(call string, bearer string) (string, error) {
|
||||||
url := "https://api.twitch.tv/helix/" + call
|
url := "https://api.twitch.tv/helix/" + call
|
||||||
var bearerHeader = "Bearer " + bearer
|
var bearerHeader = "Bearer " + bearer
|
||||||
|
|
||||||
req, err := http.NewRequest("GET", url, nil)
|
req, err := http.NewRequest("GET", url, nil)
|
||||||
req.Header.Add("Authorization", bearerHeader)
|
req.Header.Add("Authorization", bearerHeader)
|
||||||
|
|
||||||
client := &http.Client{}
|
client := &http.Client{}
|
||||||
resp, err := client.Do(req)
|
resp, err := client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "",err
|
return "", err
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
body, _ := ioutil.ReadAll(resp.Body)
|
body, _ := ioutil.ReadAll(resp.Body)
|
||||||
return string([]byte(body)), nil
|
return string([]byte(body)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func TwitchAdminHandler(response http.ResponseWriter, request *http.Request) {
|
func TwitchAdminHandler(response http.ResponseWriter, request *http.Request) {
|
||||||
|
|
||||||
vars := mux.Vars(request)
|
vars := mux.Vars(request)
|
||||||
if (vars["code"] != "") {
|
if vars["code"] != "" {
|
||||||
response.Header().Add("Content-type", "text/plain")
|
response.Header().Add("Content-type", "text/plain")
|
||||||
resp, err := http.PostForm(
|
resp, err := http.PostForm(
|
||||||
"https://id.twitch.tv/oauth2/token",
|
"https://id.twitch.tv/oauth2/token",
|
||||||
url.Values{
|
url.Values{
|
||||||
"client_id": {ircBot.AppCredentials.ClientID},
|
"client_id": {ircBot.AppCredentials.ClientID},
|
||||||
"client_secret": {ircBot.AppCredentials.Password},
|
"client_secret": {ircBot.AppCredentials.Password},
|
||||||
"code": {vars["code"]},
|
"code": {vars["code"]},
|
||||||
"grant_type": {"authorization_code"},
|
"grant_type": {"authorization_code"},
|
||||||
"redirect_uri": {"https://"+ircBot.Config.ExternalUrl+"/twitchadmin"}})
|
"redirect_uri": {"https://" + ircBot.Config.ExternalUrl + "/twitchadmin"}})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.WriteHeader(500)
|
response.WriteHeader(500)
|
||||||
response.Header().Add("Content-type", "text/plain")
|
response.Header().Add("Content-type", "text/plain")
|
||||||
|
@ -265,37 +265,36 @@ func TwitchAdminHandler(response http.ResponseWriter, request *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
user := usersObject.Data[0]
|
user := usersObject.Data[0]
|
||||||
|
|
||||||
magicCode := ircBot.ReadOrCreateChannelKey(user.Login)
|
|
||||||
url := "https://"+ircBot.Config.ExternalUrl+"/admin/"+user.Login+"/"+magicCode
|
|
||||||
http.Redirect(response, request, url, http.StatusFound)
|
|
||||||
|
|
||||||
|
magicCode := ircBot.ReadOrCreateChannelKey(user.Login)
|
||||||
|
url := "https://" + ircBot.Config.ExternalUrl + "/admin/" + user.Login + "/" + magicCode
|
||||||
|
http.Redirect(response, request, url, http.StatusFound)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
fmt.Fprintf(response, "I'm not okay jack! %v \n", vars)
|
fmt.Fprintf(response, "I'm not okay jack! %v \n", vars)
|
||||||
for key, val := range(vars) {
|
for key, val := range vars {
|
||||||
fmt.Fprint(response, "%s = %s\n", key, val)
|
fmt.Fprint(response, "%s = %s\n", key, val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TwitchBackendHandler(response http.ResponseWriter, request *http.Request){
|
func TwitchBackendHandler(response http.ResponseWriter, request *http.Request) {
|
||||||
response.Header().Add("Content-type", "text/plain")
|
response.Header().Add("Content-type", "text/plain")
|
||||||
vars := mux.Vars(request)
|
vars := mux.Vars(request)
|
||||||
// fmt.Fprintf(response, "I'm okay jack! %v \n", vars)
|
// fmt.Fprintf(response, "I'm okay jack! %v \n", vars)
|
||||||
// for key, val := range(vars) {
|
// for key, val := range(vars) {
|
||||||
// fmt.Fprint(response, "%s = %s\n", key, val)
|
// fmt.Fprint(response, "%s = %s\n", key, val)
|
||||||
// }
|
// }
|
||||||
|
|
||||||
if (vars["code"] != "") {
|
if vars["code"] != "" {
|
||||||
// https://id.twitch.tv/oauth2/token
|
// https://id.twitch.tv/oauth2/token
|
||||||
// ?client_id=<your client ID>
|
// ?client_id=<your client ID>
|
||||||
// &client_secret=<your client secret>
|
// &client_secret=<your client secret>
|
||||||
// &code=<authorization code received above>
|
// &code=<authorization code received above>
|
||||||
// &grant_type=authorization_code
|
// &grant_type=authorization_code
|
||||||
// &redirect_uri=<your registered redirect URI>
|
// &redirect_uri=<your registered redirect URI>
|
||||||
|
|
||||||
// ircBot.AppCredentials.ClientID
|
// ircBot.AppCredentials.ClientID
|
||||||
// ircBot.AppCredentials.Password
|
// ircBot.AppCredentials.Password
|
||||||
// vars["oauthtoken"]
|
// vars["oauthtoken"]
|
||||||
|
@ -303,13 +302,13 @@ func TwitchBackendHandler(response http.ResponseWriter, request *http.Request){
|
||||||
// "https://"+ircBot.Config.ExternalUrl+/twitchadmin
|
// "https://"+ircBot.Config.ExternalUrl+/twitchadmin
|
||||||
fmt.Println("Asking twitch for more...")
|
fmt.Println("Asking twitch for more...")
|
||||||
resp, err := http.PostForm(
|
resp, err := http.PostForm(
|
||||||
"https://id.twitch.tv/oauth2/token",
|
"https://id.twitch.tv/oauth2/token",
|
||||||
url.Values{
|
url.Values{
|
||||||
"client_id": {ircBot.AppCredentials.ClientID},
|
"client_id": {ircBot.AppCredentials.ClientID},
|
||||||
"client_secret": {ircBot.AppCredentials.Password},
|
"client_secret": {ircBot.AppCredentials.Password},
|
||||||
"code": {vars["code"]},
|
"code": {vars["code"]},
|
||||||
"grant_type": {"authorization_code"},
|
"grant_type": {"authorization_code"},
|
||||||
"redirect_uri": {"https://"+ircBot.Config.ExternalUrl+"/twitchadmin"}})
|
"redirect_uri": {"https://" + ircBot.Config.ExternalUrl + "/twitchadmin"}})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.Header().Add("Content-type", "text/plain")
|
response.Header().Add("Content-type", "text/plain")
|
||||||
fmt.Fprint(response, "ERROR: "+err.Error())
|
fmt.Fprint(response, "ERROR: "+err.Error())
|
||||||
|
@ -340,8 +339,8 @@ func HandleHTTP(passedIrcBot *irc.KardBot) {
|
||||||
r.HandleFunc("/admin/{channel}/{key}", AdminHandler)
|
r.HandleFunc("/admin/{channel}/{key}", AdminHandler)
|
||||||
//r.HandleFunc("/twitchadmin", TwitchAdminHandler)
|
//r.HandleFunc("/twitchadmin", TwitchAdminHandler)
|
||||||
//r.HandleFunc("/twitchtobackend", TwitchBackendHandler)
|
//r.HandleFunc("/twitchtobackend", TwitchBackendHandler)
|
||||||
r.Path("/twitchtobackend").Queries("access_token","{access_token}","scope","{scope}","token_type","{token_type}").HandlerFunc(TwitchBackendHandler)
|
r.Path("/twitchtobackend").Queries("access_token", "{access_token}", "scope", "{scope}", "token_type", "{token_type}").HandlerFunc(TwitchBackendHandler)
|
||||||
r.Path("/twitchadmin").Queries("code","{code}","scope","{scope}").HandlerFunc(TwitchAdminHandler)
|
r.Path("/twitchadmin").Queries("code", "{code}", "scope", "{scope}").HandlerFunc(TwitchAdminHandler)
|
||||||
http.Handle("/", r)
|
http.Handle("/", r)
|
||||||
srv := &http.Server{
|
srv := &http.Server{
|
||||||
Handler: loggedRouter,
|
Handler: loggedRouter,
|
||||||
|
|
Loading…
Reference in New Issue