Skip to content

Commit

Permalink
Optionally accept HTTP key through header in RPC requests.
Browse files Browse the repository at this point in the history
  • Loading branch information
zyro committed Oct 7, 2023
1 parent db4f588 commit 0433a53
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 12 deletions.
5 changes: 3 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ All notable changes to this project are documented below.
The format is based on [keep a changelog](http://keepachangelog.com) and this project uses [semantic versioning](http://semver.org).

## [Unreleased]
### Added
- Allow HTTP key to be read from an HTTP request's Basic auth header if present.

### Changed
- Use Steam partner API instead of public API for Steam profiles and friends requests.

### Fixed
- Fixed multiple issues found by linter.

### Fixed
- Fixes calculation of leaderboard and tournament times for rare types of CRON expressions that don't execute at a fixed interval.
- Improved how start and end times are calculated for tournaments occuring in the future.

Expand Down
33 changes: 23 additions & 10 deletions server/api_rpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,17 +63,30 @@ func (s *ApiServer) RpcFuncHttp(w http.ResponseWriter, r *http.Request) {
return
}
} else if auth := r.Header["Authorization"]; len(auth) >= 1 {
var token string
userID, username, vars, expiry, token, isTokenAuth = parseBearerAuth([]byte(s.config.GetSession().EncryptionKey), auth[0])
if !isTokenAuth || !s.sessionCache.IsValidSession(userID, expiry, token) {
// Auth token not valid or expired.
w.Header().Set("content-type", "application/json")
w.WriteHeader(http.StatusUnauthorized)
_, err := w.Write(authTokenInvalidBytes)
if err != nil {
s.logger.Debug("Error writing response to client", zap.Error(err))
if httpKey, _, ok := parseBasicAuth(auth[0]); ok {
if httpKey != s.config.GetRuntime().HTTPKey {
// HTTP key did not match.
w.Header().Set("content-type", "application/json")
w.WriteHeader(http.StatusUnauthorized)
_, err := w.Write(httpKeyInvalidBytes)
if err != nil {
s.logger.Debug("Error writing response to client", zap.Error(err))
}
return
}
} else {
var token string
userID, username, vars, expiry, token, isTokenAuth = parseBearerAuth([]byte(s.config.GetSession().EncryptionKey), auth[0])
if !isTokenAuth || !s.sessionCache.IsValidSession(userID, expiry, token) {
// Auth token not valid or expired.
w.Header().Set("content-type", "application/json")
w.WriteHeader(http.StatusUnauthorized)
_, err := w.Write(authTokenInvalidBytes)
if err != nil {
s.logger.Debug("Error writing response to client", zap.Error(err))
}
return
}
return
}
} else {
// No authentication present.
Expand Down

0 comments on commit 0433a53

Please sign in to comment.