nakamatest

module
v0.0.0-...-0371123 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 5, 2023 License: MIT

README

Additional handler for Nakama

What has been added?

New FileChecker endpoint has been created with the following input

{
    Type    string `json:"type,omitempty"`
    Version string `json:"version,omitempty"`
    Hash    string `json:"hash,omitempty"`
}

and output parameters

{
    Type    string `json:"type"`
    Version string `json:"version"`
    Hash    string `json:"hash"`
    Content string `json:"content"`
}

Request parameters are validated and default values - type=core, version=1.0.0, hash=null - are set if parameter is empty.

Just run "docker compose up" and you will get the nakama with the new endpoint.

New endpoint logic

  • Read a file from the disk (path=type/version.json)
  • Calculate file content hash. If hashes are not equal, then the content is "null".
  • Save data to the database (Fields: path, content, created_at, updated_at)
  • If the file doesn't exist, then return an error.

What can be improved/added in the future?

  • Change default parameters for nakama
  • Discuss the endpoint name
  • Discuss the hash function being used
  • Extend the request parameters with type of the hash function and limit for the file content size
  • Add limiter for the endpoint
  • Read the file with the help of buffer. Maybe it will be a good idea to limit file size to read and additinally validate input parameters to prevent system files access
  • Save request parameters to the database along with the request results (currently it's just an example of working with database)
  • Configure a separate database to store data for the new endpoint (as for me, it's not good to use nakama database to store your own data)
  • Discuss the logging rules

Test data

There are two test files in the repository:

  • /nakama/data/1.0.0.json (hash: 312119bc2ec8e367a4a7320a49eba3972ddfb3c04c7bc948ecda97a5429947de)
{
  "field01": "really long text",
  "field02": 1234567890,
  "field03": 1234567890.1234567890,
  "field04": true
}
  • /nakama/data/1.0.1.json (hash: 4e8b76ab4f85f91d3a5fcd17198de10a280673abb4852fb8e2c5634779aac84e)
{
  "field01": "really long text"
}

Examples of usage

Empty request

Empty request

Request for 1.0.0.json with correct hash

Request for 1.0.0.json with correct hash

Request for 1.0.0.json with incorrect hash

Request for 1.0.0.json with incorrect hash

Directories

Path Synopsis
cmd
internal
service
Package service is a generated GoMock package.
Package service is a generated GoMock package.
storage
Package storage is a generated GoMock package.
Package storage is a generated GoMock package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL