# == Class: etherpad_lite::site
#
class etherpad_lite::site (
  $database_password,
  $etherpad_title,
  $sessionKey    = '',
  $dbType        = 'mysql',
  $database_user = 'eplite',
  $database_name = 'etherpad-lite',
  $database_host = 'localhost'
) {

  include etherpad_lite

  $base = $etherpad_lite::base_install_dir

  service { 'etherpad-lite':
    ensure    => running,
    enable    => true,
    subscribe => File["${base}/etherpad-lite/settings.json"],
  }

  file { "${base}/etherpad-lite/settings.json":
    ensure  => present,
    content => template('etherpad_lite/etherpad-lite_settings.json.erb'),
    replace => true,
    owner   => $etherpad_lite::ep_user,
    group   => $etherpad_lite::ep_user,
    mode    => '0600',
    require => Class['etherpad_lite'],
  }

  file { "${base}/etherpad-lite/src/static/custom/pad.js":
    ensure  => present,
    source  => 'puppet:///modules/etherpad_lite/pad.js',
    owner   => $etherpad_lite::ep_user,
    group   => $etherpad_lite::ep_user,
    mode    => '0644',
    require => Class['etherpad_lite'],
  }

  include logrotate
  logrotate::file { 'epliteerror':
    log     => "${base}/${etherpad_lite::ep_user}/error.log",
    options => [
      'compress',
      'copytruncate',
      'missingok',
      'rotate 7',
      'daily',
      'notifempty',
    ],
    require => Service['etherpad-lite'],
  }

  logrotate::file { 'epliteaccess':
    log     => "${base}/${etherpad_lite::ep_user}/access.log",
    options => [
      'compress',
      'copytruncate',
      'missingok',
      'rotate 7',
      'daily',
      'notifempty',
    ],
    require => Service['etherpad-lite'],
  }
}
