# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

description   "Start the fingerprint study webserver"
author        "chromium-os-dev@chromium.org"

start on started system-services
stop on stopping system-services
respawn
respawn limit 3 10  # if the job respawns 3 times in 10 seconds, stop trying.

# Study parameters for FPC1025.
# Expect between 60 to 72 participants using Participant Groups - Option 3.
#
# During a normal enrollment with no faults (like low coverage) only 5
# samples are needed. We collect 10 enrollment captures to account for
# potentialy faulty enrollment captures. The biometric evaluation tool
# will only use as many captures as it needs to get coverage, which
# should be 5 normally. This attempts to simulate the normal enrollment
# flow, where a capture would be rejected if it contributed too little
# coverage.
#
# Fingers:         6
# Enrollment:      10
# Template Update: 20
# Verification:    60
#
# Capture 6 different fingers per participant.
env FINGER_COUNT=6
# Capture 10 enrollment samples per finger.
env ENROLLMENT_COUNT=10
# Capture 20 template update samples + the 60 verification samples per finger.
env VERIFICATION_COUNT=80

env LOG_DIR=/var/log/fingerprints
env PICTURE_DIR=/var/lib/fingers
env GNUPGHOME=/var/lib/fpstudygnupg

pre-start script
  mkdir -m 755 -p "${LOG_DIR}"
  mkdir -m 700 -p "${PICTURE_DIR}"
  mkdir -m 700 -p "${GNUPGHOME}"
end script

exec /opt/google/fingerprint_study/study_serve \
    --finger-count=${FINGER_COUNT}             \
    --enrollment-count=${ENROLLMENT_COUNT}     \
    --verification-count=${VERIFICATION_COUNT} \
    --log-dir=${LOG_DIR}                       \
    --picture-dir=${PICTURE_DIR}               \
    --syslog                                   \
    >${LOG_DIR}/server.out 2>&1
