mirror of
https://github.com/MinetestForFun/mysql_auth.git
synced 2025-01-09 01:20:23 +01:00
124 lines
3.3 KiB
Markdown
124 lines
3.3 KiB
Markdown
# mysql_auth
|
|
|
|
Plug Minetest's auth mechanism into a MySQL database.
|
|
|
|
# Configuration
|
|
|
|
First, if mod security is enabled (`secure.enable_security = true`), this mod must be added as
|
|
a trusted mod (in the `secure.trusted_mods` config entry). There is **no** other solution to
|
|
make it work under mod security.
|
|
|
|
By default `mysql_auth` doesn't run in singleplayer. This can be overriden by setting
|
|
`mysql_auth.enable_singleplayer` to `true`.
|
|
|
|
Configuration may be done as regular Minetest settings entries, or using a config file, allowing
|
|
for more configuration options; to do so specify the path as `mysql_auth.cfgfile`. This config
|
|
must contain a Lua table that can be read by `minetest.deserialize`, i.e. a regular table
|
|
definition follwing a `return` statement (see the example below).
|
|
|
|
When using flat Minetest configuation entries, all the following option names must be prefixed
|
|
with `mysql_auth.`. When using a config file, entries are to be hierarchised as per the dot
|
|
separator.
|
|
|
|
Values written next to option names are default values.
|
|
|
|
## Database connection
|
|
|
|
### Flat config file
|
|
|
|
```lua
|
|
db.host = 'localhost'
|
|
db.user = nil -- MySQL connector defaults to current username
|
|
db.pass = nil -- Using password: NO
|
|
db.port = nil -- MySQL connector defaults to either 3306, or no port if using localhost/unix socket
|
|
db.db = nil -- <== Setting this is required
|
|
```
|
|
|
|
### Lua table config file
|
|
|
|
Connection options are passed as a table through the `db.connopts` entry.
|
|
Its format must be the same as [LuaPower's MySQL module `mysql.connect(options_t)` function][mycn],
|
|
that is (all members are optional);
|
|
|
|
```lua
|
|
connopts = {
|
|
host = ...,
|
|
user = ...,
|
|
pass = ...,
|
|
db = ...,
|
|
port = ...,
|
|
unix_socket = ...,
|
|
flags = { ... },
|
|
options = { ... },
|
|
attrs = { ... },
|
|
-- Also key, cert, ca, cpath, cipher
|
|
}
|
|
```
|
|
|
|
## Auth table schema finetuning
|
|
|
|
```lua
|
|
db.tables.auths.name = 'auths'
|
|
db.tables.auths.schema.userid = 'userid'
|
|
db.tables.auths.schema.userid_type = 'INT'
|
|
db.tables.auths.schema.username = 'username'
|
|
db.tables.auths.schema.username_type = 'VARCHAR(32)'
|
|
db.tables.auths.schema.password = 'password'
|
|
db.tables.auths.schema.password_type = 'VARCHAR(512)'
|
|
db.tables.auths.schema.privs = 'privs'
|
|
db.tables.auths.schema.privs_type = 'VARCHAR(512)'
|
|
db.tables.auths.schema.lastlogin = 'lastlogin'
|
|
db.tables.auths.schema.lastlogin_type = 'BIGINT'
|
|
```
|
|
|
|
The `_type` config entries are only used when creating an auth table, i.e. when
|
|
`db.tables.auths.name` doesn't exist.
|
|
|
|
## Examples
|
|
|
|
### Example 1
|
|
|
|
#### Using a Lua config file
|
|
|
|
`minetest.conf`:
|
|
```
|
|
mysql_auth.cfgfile = /srv/minetest/skyblock/mysql_auth_config
|
|
```
|
|
|
|
`/srv/minetest/skyblock/mysql_auth_config`:
|
|
```lua
|
|
return {
|
|
db = {
|
|
connopts = {
|
|
user = 'minetest',
|
|
pass = 'BQy77wK$Um6es3Bi($iZ*w3N',
|
|
db = 'minetest'
|
|
},
|
|
tables = {
|
|
auths = {
|
|
name = 'skyblock_auths'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Using only Minetest config entries
|
|
|
|
`minetest.conf`:
|
|
```
|
|
mysql_auth.db.user = minetest
|
|
mysql_auth.db.pass = BQy77wK$Um6es3Bi($iZ*w3N
|
|
mysql_auth.db.db = minetest
|
|
mysql_auth.db.tables.auth.name = skyblock_auths
|
|
```
|
|
|
|
# License
|
|
|
|
`mysql_auth` is licensed under [LGPLv3](https://www.gnu.org/licenses/lgpl.html).
|
|
|
|
Using the Public Domain-licensed LuaPower `mysql` module.
|
|
|
|
|
|
[mycn]: https://luapower.com/mysql#mysql.connectoptions_t---conn
|