generate_gmail_token 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. #!/bin/sh
  2. refresh_token_file()
  3. {
  4. echo ./D_oauth2_refresh_token_"$1".txt
  5. }
  6. access_token_file()
  7. {
  8. echo ./D_oauth2_access_token_"$1".txt
  9. }
  10. oauthdirect_file()
  11. {
  12. echo ./D_oauth2_oauthdirect_"$1".txt
  13. }
  14. #echo
  15. #echo "get_refresh_token youremail@gmail.com # First time, then once in a while when the refresh_token is no longer working"
  16. get_refresh_token()
  17. {
  18. refresh_token_file="`refresh_token_file $1`"
  19. access_token_file="`access_token_file $1`"
  20. # 1 Get an access_token and a refresh_token
  21. ${my_dirname}/oauth2_google.py --user="$1" \
  22. --client_id="108687549524-86sjq07f3ch8otl9fnr56mjnniltdrvn.apps.googleusercontent.com" \
  23. --client_secret=zAJO4PLxzeJ4yOaiJRk6f69k \
  24. --generate_oauth2_token --quiet
  25. cat typescript | grep -i 'Refresh Token:' | tail -1 | sed -e 's/Refresh Token: *//' | tr -d '\r' | tee "$refresh_token_file"
  26. cat typescript | grep -i 'Access Token:' | tail -1 | sed -e 's/Access Token: *//' | tr -d '\r' | tee "$access_token_file"
  27. echo refresh_token saved in "$refresh_token_file"
  28. echo access_token saved in "$access_token_file"
  29. }
  30. #echo
  31. #echo "regenerate_access_token youremail@gmail.com # 2 Regenerate an access_token if time passes too long (3600s)"
  32. regenerate_access_token()
  33. {
  34. refresh_token_file="`refresh_token_file $1`"
  35. access_token_file="`access_token_file $1`"
  36. # 2 Regenerate an access_token if time passes too long (3600s)
  37. refresh_token="`cat $refresh_token_file|tr -d '\r'`"
  38. echo ${my_dirname}/oauth2_google.py --quiet --user="$1" \
  39. --client_id="108687549524-86sjq07f3ch8otl9fnr56mjnniltdrvn.apps.googleusercontent.com" \
  40. --client_secret=zAJO4PLxzeJ4yOaiJRk6f69k \
  41. --refresh_token="$refresh_token"
  42. ${my_dirname}/oauth2_google.py --quiet --user="$1" \
  43. --client_id="108687549524-86sjq07f3ch8otl9fnr56mjnniltdrvn.apps.googleusercontent.com" \
  44. --client_secret=zAJO4PLxzeJ4yOaiJRk6f69k \
  45. --refresh_token="$refresh_token" | tee "$access_token_file"
  46. echo access_token saved in "$access_token_file"
  47. }
  48. refresh_token_is_here()
  49. {
  50. echo In refresh_token_is_here "$@"
  51. # force mode
  52. if test -n "$2"; then
  53. return $2
  54. fi
  55. refresh_token_file="`refresh_token_file $1`"
  56. if test -f "$refresh_token_file" && test -s "$refresh_token_file" ; then
  57. echo $refresh_token_file is here
  58. return 0
  59. else
  60. echo $refresh_token_file is not here or empty
  61. return 1
  62. fi
  63. }
  64. #echo
  65. #echo 'generate_oauthdirect youremail@gmail.com'
  66. generate_oauthdirect()
  67. {
  68. access_token_file="`access_token_file $1`"
  69. access_token="`cat $access_token_file`"
  70. oauthdirect_file="`oauthdirect_file $1`"
  71. # 3 Generate oauth2_string for imap authentication
  72. ${my_dirname}/oauth2_google.py --generate_oauth2_string --user="$1" \
  73. --access_token="$access_token" | tail -1 | tee "$oauthdirect_file"
  74. echo oauth2_string saved in "$oauthdirect_file"
  75. echo Give this to imapsync --oauthdirect1 or --oauthdirect2
  76. }
  77. #echo
  78. #echo authenticate_imap youremail@gmail.com
  79. authenticate_imap()
  80. {
  81. # 4
  82. access_token_file="`access_token_file $1`"
  83. access_token="`cat $access_token_file`"
  84. echo $access_token
  85. ${my_dirname}/oauth2_imap_from_token "$1" "$access_token"
  86. }
  87. #echo 'authenticate_imap_google_from_access_token youremail@gmail.com'
  88. authenticate_imap_google_from_access_token()
  89. {
  90. # 5
  91. access_token_file="`access_token_file $1`"
  92. access_token="`cat $access_token_file`"
  93. echo "$access_token"
  94. ${my_dirname}/oauth2_google.py --user="$1" \
  95. --access_token="$access_token" --test_imap_authentication
  96. }
  97. #echo generate_for_imapsync_tests
  98. generate_for_imapsync_tests()
  99. {
  100. regenerate_access_token imapsync.gl0@gmail.com \
  101. && generate_oauthdirect imapsync.gl0@gmail.com \
  102. && authenticate_imap_google_from_access_token imapsync.gl0@gmail.com \
  103. && authenticate_imap imapsync.gl0@gmail.com
  104. }
  105. verify_email()
  106. {
  107. test X"" != X"$1"
  108. }
  109. usage()
  110. {
  111. verify_email "$1" || {
  112. echo "Please, give an email address as parameter"
  113. return 1
  114. }
  115. }
  116. get_refresh_token_by_script_fork()
  117. {
  118. if test -f $0.lock; then
  119. echo I am a child in script $$
  120. get_refresh_token "$1"
  121. else
  122. echo I am the parent
  123. touch $0.lock
  124. echo will do: script -q -f -c "$0 $1 $2"
  125. script -q -f -c "$0 $1 $2"
  126. rm $0.lock
  127. regenerate_access_token "$1"
  128. generate_oauthdirect "$1"
  129. fi
  130. }
  131. I_am_interractive_or_exit()
  132. {
  133. if test -t 0; then
  134. echo Interractive
  135. return 0
  136. else
  137. echo Not interractive
  138. exit 1
  139. fi
  140. }
  141. #echo "generate_token youremail@gmail.com"
  142. generate_token()
  143. {
  144. echo I am PID $$ $0 "$@"
  145. #
  146. usage "$1" || return 1
  147. if refresh_token_is_here "$1" "$2" ; then
  148. regenerate_access_token "$1"
  149. generate_oauthdirect "$1"
  150. authenticate_imap_google_from_access_token "$1"
  151. authenticate_imap "$1"
  152. else
  153. I_am_interractive_or_exit
  154. get_refresh_token_by_script_fork "$@"
  155. fi
  156. }
  157. my_dirname=`dirname $0`
  158. generate_token "$@"