shuo-docs/Users.md

110 lines
2.5 KiB
Markdown

Once you've set up your Shou server, it's time to add your first users. Open your `config.js` and set `public` to `false`. This will enable user login.
When you start Shout in "private" mode it will load every user found in your `users/` folder. Here's some of the features users get:
- Stay online on IRC even when you log out
- Lets you chat from multiple devices simultaneously
## Add user
To add a new user, run this command:
```
$ shuo add <name>
```
This will create a new user in your `users/` folder.
_Note: By default, users are stored in the `~/.shout/users/` folder. You can change this location by using the `--home <path>` setting (see [Usage](/docs/getting_started/usage.html#--home))._
## Edit user
Open the `user.json` for the specified user:
```
$ shuo edit <name>
```
## Remove user
Simply run:
```
$ shuo remove <name>
```
## List users
This command will print a list of all your existing users:
```
$ shuo list
```
# User configuration
If you run `shuo edit <name>`, the `user.json` file will open.
The user configuration is loaded upon server start. Here's an example of what a `user.json` file might look like:
```json
{
"user": "example",
"password": "password",
"log": false,
"networks": [{
"name": "Freenode",
"host": "irc.freenode.net",
"port": 6697,
"tls": true,
"password": "serverpw",
"nick": "john",
"realname": "John Doe",
"commands": [
"/msg NickServ identify password",
"/msg ChanServ op #chan"
],
"join": "#foo, #bar"
}]
}
```
For those interested in automating account creation, an account can also be
represented by the following Go structure:
```go
type User struct {
Username string `json:"user"`
Password string `json:"password"`
Log bool `json:"log"`
Networks []*Network `json:"networks"`
}
type Network struct {
Name string `json:"name"`
Host string `json:"host"`
Port string `json:"port"`
TLS bool `json:"tls"`
Username string `json:"username"`
Realname string `json:"realname"`
Nick string `json:"nick"`
Join string `json:"join"`
}
```
Passwords must be encrypted using bcrypt. The following code fragment is known
to work for generating valid passwords:
```go
import "golang.org/x/crypto/bcrypt"
func clear(b []byte) {
for i := 0; i < len(b); i++ {
b[i] = 0
}
}
func Crypt(password []byte) ([]byte, error) {
defer clear(password)
return bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
}
```