All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased - xxxx-xx-xx
- Allow to remove a skin without removing all user information
- New StatsD metrics:
- Counters:
ely.skinsystem.{hostname}.app.profiles.request
- Counters:
- Adjusted Mojang usernames filter to be stickier according to their docs
/profile/{username}
endpoint now returns the correct signature for the custom property as well.
- Bumped Go version to 1.21.
- Removed mentioning and processing of skin uploading as a file, as this functionality was never implemented and was not planned to be implemented
- StatsD metrics:
- Gauges:
ely.skinsystem.{hostname}.app.redis.pool.available
4.6.0 - 2021-03-04
/profile/{username}
endpoint, which returns a profile and its textures, equivalent of the Mojang's UUID -> Profile + Skin/Cape endpoint./signature-verification-key.der
and/signature-verification-key.pem
endpoints, which returns the public key inDER
orPEM
formats for signature verification.
- #28: Added handling of corrupted data from the Mojang's username to UUID cache.
- #29: If a previously cached UUID no longer exists, it will be invalidated and re-requested.
- Use correct status code for error about empty response from Mojang's API.
- BREAKING:
/cloaks/{username}
and/textures/{username}
endpoints will no longer return a cape if there are no textures for the requested username. - All endpoints are now returns
500
status code when an error occurred during request processing. - Increased the response timeout for Mojang's API from 3 to 10 seconds.
4.5.0 - 2020-05-01
- #24: Implemented a new strategy for the queue in the batch provider of
Mojang UUIDs:
full-bus
. - New configuration param
QUEUE_STRATEGY
with the default valueperiodic
. - New configuration params:
MOJANG_API_BASE_URL
andMOJANG_SESSION_SERVER_BASE_URL
, that allow you to spoof Mojang API base addresses. - New health checker, that ensures that response for textures provider from Mojang's API is valid.
dev
Docker images now have the--cpuprofile
flag, which allows you to run the program with CPU profiling.- New StatsD metrics:
- Gauges:
ely.skinsystem.{hostname}.app.redis.pool.available
- Gauges:
- Handle the case when there is no textures property in Mojang's response.
- Handle
SIGTERM
as a valid stop signal for a graceful shutdown since it's the default stop code for the Docker. - Default connections pool size for Redis.
ely.skinsystem.{hostname}.app.mojang_textures.usernames.round_time
timer will not be recorded if the iteration was empty.
4.4.1 - 2020-04-24
- #20: Print hostname in the
version
command output. - #21: Print Chrly's version during server startup.
- #22: Correct version passing during building of the Docker image.
4.4.0 - 2020-04-22
-
Mojang textures queue now can be completely disabled via
MOJANG_TEXTURES_ENABLED
param. -
Remote mode for Mojang's textures queue with a new configuration params:
MOJANG_TEXTURES_UUIDS_PROVIDER_DRIVER
andMOJANG_TEXTURES_UUIDS_PROVIDER_URL
.For example, to send requests directly to Mojang's APIs, set the next configuration:
MOJANG_TEXTURES_UUIDS_PROVIDER_DRIVER=remote
MOJANG_TEXTURES_UUIDS_PROVIDER_URL=https://api.mojang.com/users/profiles/minecraft/
-
Implemented worker mode. The app starts with the only one API endpoint:
/api/worker/mojang-uuid/{username}
, which is compatible with Mojang's endpoint to exchange username to its UUID. It can be used with some load balancing software to increase throughput of Mojang's textures proxy by splitting the load across multiple servers with its own IPs. -
Textures extra param is now can be configured via
TEXTURES_EXTRA_PARAM_NAME
andTEXTURES_EXTRA_PARAM_VALUE
. -
New StatsD metrics:
- Counters:
ely.skinsystem.{hostname}.app.mojang_textures.usernames.textures_hit
ely.skinsystem.{hostname}.app.mojang_textures.usernames.textures_miss
- Counters:
-
All incoming requests are now logging to the console in Apache Common Log Format.
-
Added
/healthcheck
endpoint. -
Graceful server shutdown.
-
Panics in http are now logged in Sentry.
ely.skinsystem.{hostname}.app.mojang_textures.usernames.iteration_size
andely.skinsystem.{hostname}.app.mojang_textures.usernames.queue_size
are now updates even if the queue is empty.- Don't return an empty object if Mojang's textures don't contain any skin or cape.
- Provides a correct URL scheme for the cape link.
- BREAKING:
QUEUE_LOOP_DELAY
param is now sets as a Go duration, not milliseconds. For example, default value is now2s500ms
. - BREAKING: Event
ely.skinsystem.{hostname}.app.mojang_textures.already_in_queue
has been renamed intoely.skinsystem.{hostname}.app.mojang_textures.already_scheduled
. - Bumped Go version to 1.14.
- BREAKING:
ely.skinsystem.{hostname}.app.mojang_textures.invalid_username
counter has been removed.
4.3.0 - 2019-11-08
- 403 Forbidden errors from the Mojang's API are now logged.
QUEUE_LOOP_DELAY
configuration param to adjust Mojang's textures queue performance.
- Mojang's textures queue loop is now has an iteration delay of 2.5 seconds (was 1).
- Bumped Go version to 1.13.
4.2.3 - 2019-10-03
- Mojang's textures queue batch size reduced to 10.
- 400 BadRequest errors from the Mojang's API are now logged.
4.2.2 - 2019-06-19
- GC for in-memory textures cache has not been initialized.
4.2.1 - 2019-05-06
- Improved Keep-Alive settings for HTTP client used to perform requests to Mojang's APIs.
- Mojang's textures queue now has static delay of 1 second after each iteration to prevent strange
429
errors. - Mojang's textures queue now caches even errored responses for signed textures to avoid
429
errors. - Mojang's textures queue now caches textures data for 70 seconds to avoid strange
429
errors. - Mojang's textures queue now doesn't log timeout errors.
- Panic when Redis connection is broken.
- Duplication of Redis connections pool for Mojang's textures queue.
- Removed validation rules for
hash
field.
4.2.0 - 2019-05-02
CHANGELOG.md
file.- #1: Restored Mojang skins proxy.
- New StatsD metrics:
- Counters:
ely.skinsystem.{hostname}.app.mojang_textures.invalid_username
ely.skinsystem.{hostname}.app.mojang_textures.request
ely.skinsystem.{hostname}.app.mojang_textures.usernames.cache_hit_nil
ely.skinsystem.{hostname}.app.mojang_textures.usernames.queued
ely.skinsystem.{hostname}.app.mojang_textures.usernames.cache_hit
ely.skinsystem.{hostname}.app.mojang_textures.already_in_queue
ely.skinsystem.{hostname}.app.mojang_textures.usernames.uuid_miss
ely.skinsystem.{hostname}.app.mojang_textures.usernames.uuid_hit
ely.skinsystem.{hostname}.app.mojang_textures.textures.cache_hit
ely.skinsystem.{hostname}.app.mojang_textures.textures.request
- Gauges:
ely.skinsystem.{hostname}.app.mojang_textures.usernames.iteration_size
ely.skinsystem.{hostname}.app.mojang_textures.usernames.queue_size
- Timers:
ely.skinsystem.{hostname}.app.mojang_textures.result_time
ely.skinsystem.{hostname}.app.mojang_textures.usernames.round_time
ely.skinsystem.{hostname}.app.mojang_textures.textures.request_time
- Counters:
- Bumped Go version to 1.12.
- Bumped Alpine version to 3.9.3.
/textures
request no longer proxies request to Mojang in a case when there is no information about the skin, but there is a cape.- #5: Return Redis connection to the pool after commands are executed
hash
field from/textures
response because the game doesn't use it and calculates hash by getting the filename from the textures link instead.hash
field fromPOST /api/skins
endpoint.