func TwitchLogoutHandler(w http.ResponseWriter, r *http.Request) { token, err := controllerhelpers.GetToken(r) if err == http.ErrNoCookie { http.Error(w, "You are not logged in.", http.StatusUnauthorized) return } else if err != nil { http.Error(w, "Invalid jwt", http.StatusBadRequest) return } id := token.Claims.(*controllerhelpers.TF2StadiumClaims).PlayerID player, _ := player.GetPlayerByID(id) player.TwitchName = "" player.TwitchAccessToken = "" player.Save() referer, ok := r.Header["Referer"] if ok { http.Redirect(w, r, referer[0], 303) return } http.Redirect(w, r, config.Constants.LoginRedirectPath, http.StatusTemporaryRedirect) }
func updateAllPlayerInfo() { var players []*player.Player db.DB.Model(&player.Player{}).Find(&players) for _, player := range players { player.UpdatePlayerInfo() player.Save() } }
func ChangeRole(w http.ResponseWriter, r *http.Request) { err := r.ParseForm() if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } values := r.Form steamid := values.Get("steamid") remove := values.Get("remove") token := values.Get("xsrf-token") if !xsrftoken.Valid(token, config.Constants.CookieStoreSecret, "admin", "POST") { http.Error(w, "invalid xsrf token", http.StatusBadRequest) return } role, ok := map[string]authority.AuthRole{ "admin": helpers.RoleAdmin, "mod": helpers.RoleMod, }[values.Get("role")] if !ok { http.Error(w, "invalid role", http.StatusBadRequest) return } player, err := player.GetPlayerBySteamID(steamid) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } if remove == "true" { player.Role = 0 player.Save() fmt.Fprintf(w, "Player %s (%s) has been removed as %s", player.Name, player.SteamID, helpers.RoleNames[role]) return } player.Role = role player.Save() fmt.Fprintf(w, "Player %s (%s) has been made a %s", player.Name, player.SteamID, helpers.RoleNames[role]) return }
func CreatePlayer() *player.Player { bytes := make([]byte, 10) rand.Read(bytes) steamID := base64.URLEncoding.EncodeToString(bytes) player, _ := player.NewPlayer(steamID) player.MumbleUsername = steamID player.Save() return player }
func setPlayerExternalLinks() { var players []*player.Player db.DB.Model(&player.Player{}).Find(&players) for _, player := range players { player.ExternalLinks = make(postgres.Hstore) player.SetExternalLinks() player.Save() } }
func setMumbleInfo() { var players []*player.Player db.DB.Model(&player.Player{}).Find(&players) for _, player := range players { player.MumbleUsername = strconv.Itoa(rand.Int()) player.MumbleAuthkey = player.GenAuthKey() player.Save() } }
func Remove(w http.ResponseWriter, r *http.Request) { err := r.ParseForm() if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } steamid := r.Form.Get("steamid") player, err := player.GetPlayerBySteamID(steamid) if err != nil { http.Error(w, err.Error(), 400) return } player.Role = authority.AuthRole(0) player.Save() fmt.Fprintf(w, "%s (%s) is no longer an admin/mod", player.Name, player.SteamID) }
func TwitchAuthHandler(w http.ResponseWriter, r *http.Request) { token, err := controllerhelpers.GetToken(r) if err == http.ErrNoCookie { http.Error(w, "You are not logged in.", http.StatusUnauthorized) return } else if err != nil { http.Error(w, "Invalid jwt", http.StatusBadRequest) return } id := token.Claims.(*controllerhelpers.TF2StadiumClaims).PlayerID player, _ := player.GetPlayerByID(id) values := r.URL.Query() code := values.Get("code") if code == "" { http.Error(w, "No code given", http.StatusBadRequest) return } state := values.Get("state") if state == "" || !xsrftoken.Valid(state, config.Constants.CookieStoreSecret, player.SteamID, "GET") { http.Error(w, "Missing or Invalid XSRF token", http.StatusBadRequest) return } twitchRedirectURL, _ := url.Parse(config.Constants.PublicAddress) twitchRedirectURL.Path = "twitchAuth" // successful login, try getting access token now tokenURL := url.URL{ Scheme: "https", Host: "api.twitch.tv", Path: "kraken/oauth2/token", } values = tokenURL.Query() values.Set("client_id", config.Constants.TwitchClientID) values.Set("client_secret", config.Constants.TwitchClientSecret) values.Set("grant_type", "authorization_code") values.Set("redirect_uri", twitchRedirectURL.String()) values.Set("code", code) values.Set("state", state) req, err := http.NewRequest("POST", tokenURL.String(), strings.NewReader(values.Encode())) if err != nil { logrus.Error(err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } resp, err := helpers.HTTPClient.Do(req) if err != nil { logrus.Error(err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } reply := reply{} dec := json.NewDecoder(resp.Body) err = dec.Decode(&reply) if err != nil { logrus.Error(err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } info, err := getUserInfo(reply.AccessToken) if err != nil { logrus.Error(err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } player.TwitchName = info.Name player.TwitchAccessToken = reply.AccessToken player.Save() http.Redirect(w, r, config.Constants.LoginRedirectPath, http.StatusTemporaryRedirect) }