Releases: shlinkio/shlink
v3.5.3
Changed
- Nothing
Added
- Nothing
Removed
- Nothing
Fixed
- #1715 Fix short URL creation/edition allowing long URLs without schema. Now a validation error is thrown.
- #1537 Fix incorrect list of tags being returned for some author-only API keys.
- #1738 Fix memory leak when importing short URLs with many visits.
Deprecated
- Nothing
v3.5.2
v3.5.2-beta.1
Fix performance issues
v3.5.1
Changed
- #1685 Changed
loosely
mode toloose
, as it was a typo. The old one keeps working and maps to the new one, but it's considered deprecated.
Added
- Nothing
Removed
- Nothing
Fixed
- #1682 Fixed incorrect case-insensitive checks in short URLs when using Microsoft SQL server.
- #1684 Fixed entities metadata cache not being cleared at docker container start-up when using redis with replication.
Deprecated
- Nothing
v3.5.0
Changed
- Nothing
Added
-
#1557 Added support to dynamically redirect to different long URLs based on the visitor's device type.
For the moment, only
android
,ios
anddesktop
can have their own specific long URL, and when the visitor cannot be matched against any of them, the regular long URL will be used.In the future, more granular device types could be added if appropriate (iOS tablet, android table, tablet, mobile phone, Linux, Mac, Windows, etc).
In order to match the visitor's device, the
User-Agent
header is used. -
#1632 Added amount of bots, non-bots and total visits to the visits summary endpoint.
-
#1633 Added amount of bots, non-bots and total visits to the tag stats endpoint.
-
#1653 Added support for all HTTP methods in short URLs, together with two new redirect status codes, 307 and 308.
Existing Shlink instances will continue to work the same. However, if you decide to set the redirect status codes as 307 or 308, Shlink will also return a redirect for short URLs even when the request method is different from
GET
.The status 308 is equivalent to 301, and 307 is equivalent to 302. The difference is that the spec requires the client to respect the original HTTP method when performing the redirect. With 301 and 302, some old clients might perform a
GET
request during the redirect, regardless the original request method. -
#1662 Added support to provide openswoole-specific config options via env vars prefixed with
OPENSWOOLE_
. -
#1389 and #706 Added support for case-insensitive short URLs.
In order to achieve this, a new env var/config option has been implemented (
SHORT_URL_MODE
), which allows eitherstrict
orloosely
.Default value is
strict
, but ifloosely
is provided, then short URLs will be matched in a case-insensitive way, and new short URLs will be generated with short-codes in lowercase only.
Removed
- Nothing
Fixed
- #1639 Fixed 500 error returned when request body is not valid JSON, instead of a proper descriptive error.
Deprecated
v3.4.0
Changed
- #1563 Moved logic to reuse command options to option classes instead of base abstract command classes.
- #1569 Migrated test doubles from phpspec/prophecy to PHPUnit mocks.
- #1329 Split some logic from
VisitRepository
andShortUrlRepository
into separated repository classes.
Added
-
#1612 Allowed to filter short URLs out of lists, when
validUntil
date is in the past or have reached their maximum amount of visits.This can be done by:
- Providing
excludeMaxVisitsReached=true
and/orexcludePastValidUntil=true
to theGET /short-urls
endpoint. - Providing
--exclude-max-visits-reached
and/or--exclude-past-valid-until
to theshort-urls:list
command.
- Providing
-
#1613 Added amount of visits coming from bots, non-bots and total to every short URL in the short URLs list.
Additionally, added option to order by non-bot visits, by passing
nonBotVisits-DESC
ornonBotVisits-ASC
. -
#1599 Added support for credentials on redis DSNs, either only password, or both username and password.
-
#1616 Added support to import orphan visits when importing short URLs from another Shlink instance.
-
#1519 Allowing to search short URLs by default domain.
-
#1555 and #1625 Added full support for PHP 8.2, updating the docker image to this version.
Removed
- Nothing
Fixed
- #1618 Fixed imported short URLs and visits dates not being set to the target server timezone.
- #1578 Fixed short URL allowing an empty string as the domain during creation.
- #1580 Fixed
FLUSHDB
being run on Shlink docker start-up when using redis, causing full cache to be flushed.
Deprecated
- Nothing
v3.3.2
v3.3.1
Changed
- #1474 Added preliminary support for PHP 8.2 during CI workflow.
- #1551 Moved services related to geolocating visits to the
Visit\Geolocation
namespace. - #1550 Reorganized main namespaces from Core module.
Added
- Nothing
Removed
- Nothing
Fixed
- #1556 Fixed trailing slash not working when enabling multi-segment slugs.
Deprecated
- Nothing
v3.3.0
Changed
- #1339 Added new test suite for CLI E2E tests.
- #1503 Drastically improved build time in GitHub Actions, by optimizing parallelization and adding php extensions cache.
- #1525 Migrated to custom doctrine CLI entry point.
- #1492 Migrated to immutable options objects, mapped with cuyz/valinor.
Added
-
#1221 Added experimental support to run Shlink with RoadRunner instead of openswoole.
-
#1531 and #1090 Added support for trailing slashes in short URLs.
-
#1406 Added new REST API version 3.
When making requests to the REST API with
/rest/v3/...
and an error occurs, all error types will be different, with the next correlation:INVALID_ARGUMENT
->https://shlink.io/api/error/invalid-data
INVALID_SHORT_URL_DELETION
->https://shlink.io/api/error/invalid-short-url-deletion
DOMAIN_NOT_FOUND
->https://shlink.io/api/error/domain-not-found
FORBIDDEN_OPERATION
->https://shlink.io/api/error/forbidden-tag-operation
INVALID_URL
->https://shlink.io/api/error/invalid-url
INVALID_SLUG
->https://shlink.io/api/error/non-unique-slug
INVALID_SHORTCODE
->https://shlink.io/api/error/short-url-not-found
TAG_CONFLICT
->https://shlink.io/api/error/tag-conflict
TAG_NOT_FOUND
->https://shlink.io/api/error/tag-not-found
MERCURE_NOT_CONFIGURED
->https://shlink.io/api/error/mercure-not-configured
INVALID_AUTHORIZATION
->https://shlink.io/api/error/missing-authentication
INVALID_API_KEY
->https://shlink.io/api/error/invalid-api-key
If you make a request to the API with v2 or v1, the old error types will be returned, until Shlink 4 is released, when only the new ones will be used.
Non-error responses are not affected.
-
#1513 Added publishing of the docker image in GHCR.
-
#1114 Added support to provide an initial API key via
INITIAL_API_KEY
env var, when running Shlink with openswoole or RoadRunner.Also, the installer tool now allows to generate an initial API key that can be copy-pasted (this tool is run interactively), in case you use php-fpm or you don't want to use env vars.
-
#1528 Added support to delay when the GeoLite2 DB file is downloaded in docker images, speeding up its startup time.
In order to do it, pass
SKIP_INITIAL_GEOLITE_DOWNLOAD=true
when creating the container.
Removed
- Nothing
Fixed
- Nothing
Deprecated
- Nothing
v3.2.1
Changed
- #1495 Centralized how routes are configured to support multi-segment slugs.
- #1497 Updated to latest shlink dependencies with support for PHP 8.1 only.
Added
- Nothing
Removed
- Nothing
Fixed
- #1499 Fixed loading of config options as env vars, which was making all default configurations to be loaded unless env vars were explicitly provided.
Deprecated
- Nothing