132 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
#!/usr/bin/env python
 | 
						|
#
 | 
						|
# Copyright (C) 2008 The Android Open Source Project
 | 
						|
#
 | 
						|
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
# you may not use this file except in compliance with the License.
 | 
						|
# You may obtain a copy of the License at
 | 
						|
#
 | 
						|
#      http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
#
 | 
						|
# Unless required by applicable law or agreed to in writing, software
 | 
						|
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
# See the License for the specific language governing permissions and
 | 
						|
# limitations under the License.
 | 
						|
 | 
						|
"""
 | 
						|
A faux Setup Wizard.  Stuffs one or two usernames + passwords into the
 | 
						|
database on the device.
 | 
						|
"""
 | 
						|
 | 
						|
import sys
 | 
						|
if sys.hexversion < 0x02040000:
 | 
						|
  print "This script requires python 2.4 or higher."
 | 
						|
  sys.exit(1)
 | 
						|
 | 
						|
import getpass
 | 
						|
import subprocess
 | 
						|
import time
 | 
						|
import sha
 | 
						|
 | 
						|
DB = "/data/data/com.google.android.googleapps/databases/accounts.db"
 | 
						|
 | 
						|
def RunCmd(args):
 | 
						|
  proc = subprocess.Popen(args, stdout=subprocess.PIPE)
 | 
						|
  out = proc.stdout.read()
 | 
						|
  if proc.wait():
 | 
						|
    print
 | 
						|
    print "failed: %s" % " ".join(args)
 | 
						|
    return None
 | 
						|
  return out
 | 
						|
 | 
						|
def GetProp(adb_flags, name):
 | 
						|
  args = ("adb",) + adb_flags + ("shell", "su", "root",
 | 
						|
                                 "/system/bin/getprop", name)
 | 
						|
  return RunCmd(args)
 | 
						|
 | 
						|
def SetProp(adb_flags, name, value):
 | 
						|
  args = ("adb",) + adb_flags + ("shell", "su", "root",
 | 
						|
                                 "/system/bin/setprop", name, value)
 | 
						|
  return RunCmd(args)
 | 
						|
 | 
						|
def DbExists(adb_flags):
 | 
						|
  args = ("adb",) + adb_flags + ("shell", "su", "root",
 | 
						|
                                 "/system/bin/ls", DB)
 | 
						|
  result = RunCmd(args)
 | 
						|
  if result is None: return None
 | 
						|
  return "No such file" not in result
 | 
						|
 | 
						|
def main(argv):
 | 
						|
  if len(argv) == 1:
 | 
						|
    print ("usage: %s [adb flags] "
 | 
						|
           "[<dasher address[:password]>] "
 | 
						|
           "[<gmail address[:password]>]") % (argv[0],)
 | 
						|
    sys.exit(2)
 | 
						|
 | 
						|
  argv = argv[1:]
 | 
						|
 | 
						|
  gmail = None
 | 
						|
  dasher = None
 | 
						|
  while argv and "@" in argv[-1]:
 | 
						|
    addr = argv.pop()
 | 
						|
    if "@gmail.com" in addr or "@googlemail.com" in addr:
 | 
						|
      gmail = addr
 | 
						|
    else:
 | 
						|
      dasher = addr
 | 
						|
 | 
						|
  adb_flags = tuple(argv)
 | 
						|
 | 
						|
  while True:
 | 
						|
    db = DbExists(adb_flags)
 | 
						|
    if db is None:
 | 
						|
      print "failed to contact device; will retry in 3 seconds"
 | 
						|
      time.sleep(3)
 | 
						|
      continue
 | 
						|
 | 
						|
    if db:
 | 
						|
      print
 | 
						|
      print "GoogleLoginService has already started on this device;"
 | 
						|
      print "it's too late to use this script to add accounts."
 | 
						|
      print
 | 
						|
      print "This script only works on a freshly-wiped device (or "
 | 
						|
      print "emulator) while booting for the first time."
 | 
						|
      print
 | 
						|
      break
 | 
						|
 | 
						|
    hosted_account = GetProp(adb_flags, "ro.config.hosted_account").strip()
 | 
						|
    google_account = GetProp(adb_flags, "ro.config.google_account").strip()
 | 
						|
 | 
						|
    if dasher and hosted_account:
 | 
						|
      print
 | 
						|
      print "A dasher account is already configured on this device;"
 | 
						|
      print "can't add", hosted_account
 | 
						|
      print
 | 
						|
      dasher = None
 | 
						|
 | 
						|
    if gmail and google_account:
 | 
						|
      print
 | 
						|
      print "A google account is already configured on this device;"
 | 
						|
      print "can't add", google_account
 | 
						|
      print
 | 
						|
      gmail = None
 | 
						|
 | 
						|
    if not gmail and not dasher: break
 | 
						|
 | 
						|
    if dasher:
 | 
						|
      SetProp(adb_flags, "ro.config.hosted_account", dasher)
 | 
						|
      print "set hosted_account to", dasher
 | 
						|
    if gmail:
 | 
						|
      SetProp(adb_flags, "ro.config.google_account", gmail)
 | 
						|
      print "set google_account to", gmail
 | 
						|
 | 
						|
    break
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
  main(sys.argv)
 |