#!/usr/bin/python
"""
Configures git to authenticate to *.googlesource.com.

Adds a cookie to ~/.git-credential-cache/cookies and sets
Git variable http.cookiefile to this path.
"""

import cookielib
import os
from subprocess import Popen, PIPE, check_call

def write_cookie(token):
  git_config = ['git', 'config', '--global', 'http.cookiefile']
  set_config = False

  fn = Popen(git_config, stdout=PIPE).communicate()[0]
  if fn == '':
    home = os.environ['HOME']
    fn = os.path.join(home, '.git-credential-cache', 'cookies')
    set_config = True
  elif fn[-1] == '\n':
    fn = fn[:-1]

  dir = os.path.dirname(fn)
  if os.path.exists(dir):
    os.chmod(dir, 0700)
  else:
    os.mkdir(dir, 0700)

  cj = cookielib.MozillaCookieJar(fn)
  if os.path.exists(cj.filename):
    cj.load()
  cj.set_cookie(cookielib.Cookie(
    version = 0,
    name = 'o',
    value = token,
    port = None,
    port_specified = False,
    domain = '.googlesource.com',
    domain_specified = True,
    domain_initial_dot = True,
    path = '/',
    path_specified = True,
    secure = True,
    expires = (1 << 31) - 1,
    discard = False,
    comment = None,
    comment_url = None,
    rest = None))
  cj.save()
  os.chmod(cj.filename, 0600)
  if set_config:
    check_call(git_config + [cj.filename])
  return cj.filename

def main():
  print 'Open https://www.googlesource.com/new-password ...'
  t = raw_input("Password (under 'Login for Git'): ")
  p = write_cookie(t)
  print "Saved to %s" % (p,)

if __name__ == '__main__':
  main()
