110 lines
2.5 KiB
Markdown
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)
|
|
}
|
|
```
|