summaryrefslogtreecommitdiff
path: root/puppet/modules/couchdb/manifests/add_user.pp
blob: 29c6a8c8ea1eff9e138cb6f4f55bc500fa0d5db8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
define couchdb::add_user ( $roles, $pw, $salt = '' ) {
  # Couchdb < 1.2 needs a pre-hashed pw and salt
  # If you provide a salt, couchdb::add_user will assume that
  # $pw is prehashed and pass both parameters to couchdb::update
  # If $salt is empty, couchdb::add_user will assume that the pw
  # is plaintext and will pass it to couchdb::update

  if $::couchdb::bigcouch == true {
    $port = 5986
  } else {
    $port = 5984
  }

  if $salt == '' {
    # unhashed, plaintext pw, no salt. For couchdb >= 1.2
    $data = "{\"type\": \"user\", \"name\": \"${name}\", \"roles\": ${roles}, \"password\": \"${pw}\"}"
  } else {
    # prehashed pw with salt, for couchdb < 1.2
    # salt and encrypt pw
    # str_and_salt2sha1 is a function from leap's stdlib module
    $pw_and_salt = [ $pw, $salt ]
    $sha         = str_and_salt2sha1($pw_and_salt)
    $data = "{\"type\": \"user\", \"name\": \"${name}\", \"roles\": ${roles}, \"password_sha\": \"${sha}\", \"salt\": \"${salt}\"}"
  }

  # update the user with the given password unless they already work
  couchdb::document { "update_user_${name}":
    host   => "127.0.0.1:${port}",
    db     => '_users',
    id     => "org.couchdb.user:${name}",
    data   => $data
  }

  couchdb::query::setup { $name:
    user  => $name,
    pw    => $pw,
  }

}