appkr/timemachine

Laravel/Lumen application-level time setter for testing

v0.3.0 2017-07-04 06:22 UTC

This package is not auto-updated.

Last update: 2024-12-21 01:19:21 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

Timemachine

Manipulates application(Laravel/Lumen) server's time arbitrarily for a given minutes.

CAVEAT

USE THIS ONLY FOR TEST PURPOSE. DO NOT MAKE THIS AVAILABLE IN PUBLICLY ACCESSIBLE SERVICES.

  • Provided apis are not protected by authz.
  • While setting is alive, it affects all time related functions of the application. e.g. created_at written in the DB tables.

1. Install

Pull the library to your project.

composer install appkr/timemachine 

Append service provider in the providers array.

<?php // config/app.php (Laravel)

return [
    'providers' => [
        Appkr\Timemachine\TimemachineServiceProvider::class,
    ],
];

// boostrap/app.php (Lumen)
$app->register(Appkr\Timemachine\TimemachineServiceProvider::class);

Optionally publish config.

php artisan vendor:publish --provider="Appkr\Timemachine\TimemachineServiceProvider"

2. How to use

There are three APIs. For conveniences, a Postman collection is provided.

2.1. GET /timemachine

Returns time diff from current server time when target_server_time parameter is given. Or print current server time when nothing is given.

GET /timemachine
Accept: application/json
Content-Type: application/json
HTTP/1.1 200 OK
Content-Type: application/json
Date: Thu, 01 Jun 2017 12:00:00 +0900

{
  "current_server_time": "2017-06-01T12:00:00+0900",
  "target_server_time": "2017-06-01T12:05:00+0900",
  "add_days": 0,
  "add_minutes": 5,
  "sub_days": null,
  "sub_minutes": null
}

2.2. PUT /timemachine

Manipulates server's time for the given ttl.

PUT /timemachine
Accept: application/json
Content-Type: application/json

{
    "add_minutes": 5,
    "ttl": 5
}
HTTP/1.1 200 OK
Content-Type: application/json
Date: Thu, 01 Jun 2017 12:00:00 +0900

{
  "current_server_time": "2017-06-01T12:00:00+0900",
  "message": "Success. The settings will be effective from next request on for 5 minutes."
}

2.3. DELETE /timemachine

Removes time setting and restore back to the machine time.

DELETE /timemachine
Accept: application/json
Content-Type: application/json
HTTP/1.1 200 OK
Content-Type: application/json
Date: Thu, 01 Jun 2017 12:00:00 +0900

{
  "current_server_time": "2017-06-01T12:00:00+0900",
  "message": "Success. Settings removed."
}

3. Sponsors

This library is a by-product of a company project. Thanks MeshKorea.

MeshKorea

Open source version was created using IntelliJ IDE sponsored by JetBrains.

JetBrains

4. Note on HTTP Date response header

In Nginx, Date header can be settable from application side. So the following was possible:

<?php

header('Date: ' . Carbon\Carbon::now()->addMinutes(5)->toRfc2822String());
echo $httpResponseBody;

While in Apache, it is not doable. https://laracasts.com/discuss/channels/servers/how-can-i-override-http-date-response-header-under-apache24