Gerrit Code Review - Contact Information
========================================

To help ensure contributor privacy, but still support gathering of
contributor agreements as necessary, Gerrit encrypts all offline
contact information gathered from users.  This data is shipped to
another server, typically at a different location, to make it more
difficult for an attacker to obtain.

This feature is optional.  If the crypto APIs aren't installed
and the `contactstore.url` setting in `gerrit.config` is not set,
Gerrit will not collect contact information from users.


Setup
-----

Ensure Bouncy Castle Crypto API is available in the web application's
CLASSPATH (e.g. in `'JETTY_HOME'/lib/plus` for Jetty).  Gerrit needs
both `bcprov-jdk\*-*.jar` and `bcpg-jdk\*-*.jar` to be provided
for the contact encryption to work.

* link:http://www.bouncycastle.org/latest_releases.html[Bouncy Castle Crypto API]

Ensure a proper JCE policy file is installed.  By default most
JRE installations forbid the use of a strong key, resulting in
SecurityException messages when trying to encrypt the contact data.
You need to obtain a strong JCE policy file and install it by hand.
Look for the 'Unlimited Strength Jurisdiction Policy' download.

* link:http://java.sun.com/javase/downloads/index.jsp[Java SE Downloads]

Create a public/private key pair for contact data handling.
Generate the keys on a protected system, where the resulting
private key is unlikely to fall into the wrong hands.

====
  gpg --gen-key
====

Select to use a `DSA and Elgamal` key type, as the public key will
be used for data encryption.

The information chosen for name, email and comment fields can be
anything reasonable which would identify the contact store of this
Gerrit instance.  It is probably a good idea to not use a real
person's name here, but instead some sort of organizational role.
The actual values chosen don't matter later, and are only to help
document the purpose of the key.

Choose a fairly long expiration period, such as 20 years.  For most
Gerrit instances, contact data will be written once, and rarely,
if ever, read back.

Export the public key for Gerrit to use during encryption.  The
public key must be stored in a file called `contact_information.pub`
and reside inside of the `site_config` directory.  Armoring it
during export makes it easier to transport between systems, as
you can easily copy-and-paste the text.  Gerrit can read both the
armored and unarmored formats.

====
  gpg --export --armor KEYEMAIL >$site_path/etc/contact_information.pub
====

Consider storing the private key with some sort of key escrow
service within your organization.  Without the private key it
is impossible to recover contact records.

Install a contact store implementation somewhere to receive
the contact records.  To be really paranoid, Gerrit always
ships the data to another HTTP server, preferably over HTTPS.
Existing open-source server implementations can be found in the
gerrit-contactstore project.

* link:https://code.google.com/p/gerrit/source/checkout?repo=contactstore[gerrit-contactstore]

Configure `'$site_path'/etc/gerrit.config` with the contact store's
URL (in `contactstore.url`), and if needed, APPSEC value (in
`contactstore.appsec`):

====
  git config --file $site_path/etc/gerrit.config appsec.url https://...
  git config --file $site_path/etc/gerrit.config appsec.appsec sekret
====


Contact Store Protocol
----------------------

To implement a new contact store, the following details are useful.

Gerrit connects to the contact store by sending a standard
`application/x-www-form-urlencoded` within an HTTP POST request
sent to the store URL (the exact URL that is in contactstore.url)
with the following form fields in the body:

* APPSEC
+
A shared secret "password" that should be known only to Gerrit
and the contact store.  The contact store should test this value to
deter spamming of the contact store by outside parties.  Gerrit reads
this from contactstore.appsec.

* account_id
+
Unique account_id value from the Gerrit database for the account
the contact information belongs to.  Base 10 integer.

* email
+
Preferred email address of the account.  May facilitate lookups in
the contact store at a future date.  May be omitted or the empty
string if the user hasn't chosen a preferred email.

* filed
+
Seconds since the UNIX epoch of when the contact information
was filed.  May be omitted or the empty string if Gerrit
doesn't think the supplied contact information is valid enough.

* data
+
Encrypted account data as an armored ASCII blob.  This is usually
several KB of text data as a single string, with embedded newlines
to break the lines at about 70-75 characters per line.  Data can
be decoded using GnuPG with the correct private key.

Upon successful store, the contact store application should respond
with HTTP status code `200` and a body consisting only of `OK`
(or `OK\n`).  Any other response code or body is considered to be
a failure by Gerrit.

Using `https://` for the store URL is *highly* encouraged, as it
prevents man-in-the-middle attacks from reading the shared secret
APPSEC token, or messing with the data field.

Data Format
~~~~~~~~~~~

Once decrypted the `data` field looks something like the following:

----
Account-Id: 1001240
Date: 2009-02-23 20:32:32.852 UTC
Full-Name: John Doe
Preferred-Email: jdoe@example.com
Identity: jd15@some-isp.com
Identity: jdoe@example.com <https://www.google.com/accounts/o8/id?id=AIt18axxafvda821aQZaHDF1k8akbalk218sak>
Identity: jdoe@example.com <http://jdoe.blogger.com/>
Address:
	123 Any Street
	Any Town, Somewhere
Country: USA
Phone-Number: +1 (555) 555-1212
Fax-Number: 555.1200
----

The fields are as follows:

* `Account-Id`
+
Value of the `account_id` field in the metadata database.  This is
a unique key for this account, and links all data records to it.

* `Date`
+
Date and time of when this contact record was submitted by the user.
Written in an ISO formatted date/time string (`YYYY-MM-DD hh:mm:ss`),
in the UTC timezone.

* `Full-Name`
+
The `full_name` field of the account record when the user submitted
the contact information.  This should be the user's given name and
family name.

* `Preferred-Email`
+
The `preferred_email` field of the account record when the user
submitted the contact information.  This should be one of the emails
listed in the `Identity` field.

* `Identity`
+
This field occurs once for each `account_external_id` record
in the database for this account.  The email address is listed,
and if the user is using OpenID authentication, the OpenID claimed
identity follows in brackets (`<...>`).  Identity lines without an
OpenID identity are usually created by sending an email containing
a unique hyperlink that the user must visit to setup the identity.

* `Address`
+
Free form text, as entered by the user.  This should describe some
location that physical documents could be sent to, but it is not
verified, so users can enter pretty much anything here.  Each line
is prefixed with a single TAB character, but is otherwise exactly
as entered.

* `Country`
+
Free form text, as entered by the user.  This should be some sort
of country name or ISO country abbreviation, but it is not verified,
so it can be pretty much anything.

* `Phone-Number`, `Fax-Number`
+
Free form text, as entered by the user.  The format here can be
anything, and as the example shows, may not even be consistent in
the same record.

GERRIT
------
Part of link:index.html[Gerrit Code Review]
