Bewest/user/update


# user updates
## `createServer(opts) -> server`
### `opts` options
#### `opts.updateUser(name, update, opts, onUpdate(profile))`
#### `opts.fetchUser(name, onProfile(profile))`

These options provided at server creation time will override the builtin defaults.  See below.

## server methods

### `server.fetchUser(name, fn(profile))`

Internal handlers user this to fetch user profile.

### `server.updateUser(name, {/*update*/}, {/*opts*/}, fn(profile))`

Internal handlers use this to update and create users profiles.


Uploads for users that do not exist are rejected.

To create a user, POST a `profile` to `/users/<user>/create`.

##### `profile`
To create or update a user, ensure that the `update` profile body
includes at least the following keys:
* `email`
* `name`

The `user` keys are optional.
  * `secret`

If you include the same `email`, and `name` keys in side of an object
keyed on `update.user`, eg, `update.user.email` and
`update.user.name`, then `committer` and `author` like this:
* `update.user.author.name`
* `update.user.author.email`
* `update.user.committer.name`
* `update.user.committer.email`

The key `handle` is an alias for `name` and will be preferred anywhere
`name` is accepted.

## endpoints

To perform an upload, `POST` `mime-encoded` parts to
`/repos/<owner>/<app>/upload`.  A `201` status code with json body
will include a `content` key which is an array of urls to follow in order
to fetch the uploaded content.