Add ticket-based authentication for perforce.

Review Request #3850 — Created Feb. 7, 2013 and submitted — Latest diff uploaded

Information

Review Board
release-1.7.x

Reviewers

Add ticket-based authentication for perforce.

People running perforce these days are encouraged to use ticket-based
authentication, which dramatically improves security (it actually forces users
to authenticate, and uses per-host tickets that can be expired).

We've been putting this off for a long time, and it turns out that it's not so
bad these days. I was mostly worried because our PerforceClient used p4api for
most tasks but manually invoked 'p4 print' to actually get the file contents,
which meant that we'd have to have two different login implementations. Some
testing reveals that since perforce revamped the python bindings, they fixed it
so run_print actually returns usable data.

Whether we want to use ticket-based authentication gets stored into the
extra_data dictionary, so we don't have to have any migrations.
Verified that the field was shown and hidden at the right times, and that data
was correctly persisted into the database.

Set up a local perforce server that required password authentication. Verified
that diffs still displayed correctly (to test the run_print() change).

Set the "security" setting to "3" on the server, which enforces ticket
authentication, and verified that local p4 clients all required ticket
authentication. Set use_ticket_auth in the admin UI and cleared my cache, then
reloaded the diff successfully.