# Module OBus_auth.Server

    module Server: sig .. end

Server-side authentication

###### Mechanisms

    type mechanism_return =

`|` | `Mech_continue of `OBus_auth.data`` | `(*` | Continue the authentication with this challenge | `*)`
`|` | `Mech_ok of `int option`` | `(*` | The client is authentified. The argument is the user id the client is authenticated with. | `*)`
`|` | `Mech_reject` | `(*` | The client is rejected by the mechanism | `*)`

    class virtual mechanism_handler : object .. end

    type mechanism = {

`` | `mech_name : `string`;` | `(*` | The mechanism name | `*)`
`` | `mech_exec : `int option -> mechanism_handler`;` | `(*` | The mechanism creator. It receive the user id of the client, if available. | `*)`

}
A server-size authentication mechanism

    val mech_name : mechanism -> string

`mech_name projection`

    val mech_exec : mechanism ->
           int option -> mechanism_handler

`mech_exec projection`
Predefined mechanisms

    val mech_anonymous : mechanism

    val mech_external : mechanism

    val mech_dbus_cookie_sha1 : mechanism

    val default_mechanisms : mechanism list

###### Authentication

    val authenticate : ?capabilities:OBus_auth.capability list ->
           ?mechanisms:mechanism list ->
           ?user_id:int ->
           guid:OBus_address.guid ->
           stream:OBus_auth.stream ->
           unit -> (int option * OBus_auth.capability list) Lwt.t

Launch server-side authentication on the given stream. On success it returns the client uid and the list of capabilities that were successfully negotiated. A client uid of `None` means that the clinet used anonymous authentication, and may be disconnected according to server policy.

Note: `authenticate` does not read the first zero byte. You must read it by hand, and maybe use it to receive credentials.

`capabilities` : defaults to `[]`
`mechanisms` : default to `OBus_auth.Server.default_mechanisms`
`user_id` : is the user id determined by external method