Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F910229
test-arcanist-local-configuration.py
No One
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Authored By
avivey
Oct 26 2015, 5:47 PM
2015-10-26 17:47:36 (UTC+0)
Size
2 KB
Referenced Files
None
Subscribers
None
test-arcanist-local-configuration.py
View Options
#! /usr/bin/env python
import
subprocess
import
json
import
sys
import
re
PHAB_HTTP_URI
=
"http://phabricator.dev.clover.com/"
PHAB_SSH_HOST
=
"dweller@secure.phabricator.com"
PHAB_SSH_PORT
=
22
class
ExecutionException
(
Exception
):
def
__init__
(
self
,
command
,
exit_code
):
self
.
command
=
command
self
.
exit_code
=
exit_code
def
execute
(
*
cmd
,
**
kwargs
):
''' Execute command.
returns stdout if execution exited with 0
raise ExecutionException otherwise. '''
if
cmd
and
isinstance
(
cmd
[
0
],
(
list
,
tuple
)):
cmd
=
cmd
[
0
]
# print(str(cmd))
stdin
=
kwargs
.
get
(
'stdin'
)
p
=
subprocess
.
Popen
(
cmd
,
stdout
=
subprocess
.
PIPE
,
stdin
=
subprocess
.
PIPE
)
stdout
,
_
=
p
.
communicate
(
stdin
)
c
=
p
.
wait
()
if
c
!=
0
:
raise
ExecutionException
(
' '
.
join
(
cmd
),
c
)
return
stdout
.
strip
()
def
error
(
message
):
print
print
' '
+
str
(
message
)
print
sys
.
exit
(
2
)
try
:
output
=
execute
(
'arc'
,
'get-config'
,
'phabricator-uri'
,
'default'
)
match
=
re
.
search
(
'Current Value: "(.*)"'
,
output
)
if
match
is
None
:
error
(
'arc is not configured with a `phabricator-uri`'
)
api
=
match
.
group
(
1
)
if
api
!=
PHAB_HTTP_URI
:
error
(
'arc configuration mismatch: '
'arc is configured to use `
%s
`, but expected `
%s
`'
%
(
api
,
PHAB_HTTP_URI
))
except
OSError
:
error
(
'Could not execute `arc`. Check your path. Maybe start a new shell'
)
try
:
output
=
execute
(
'arc'
,
'call-conduit'
,
'user.whoami'
,
stdin
=
'{}'
)
except
:
error
(
'arcanist conduit token is not configured!'
)
output
=
json
.
loads
(
output
)
if
output
[
'errorMessage'
]
is
not
None
:
error
(
output
[
'errorMessage'
])
api_user
=
output
[
'response'
]
try
:
output
=
execute
(
'ssh'
,
'-p '
+
str
(
PHAB_SSH_PORT
),
PHAB_SSH_HOST
,
'conduit user.whoami'
,
stdin
=
'{}'
)
except
ExecutionException
:
error
(
'Failed to connect using SSH. Check your keys'
)
output
=
json
.
loads
(
output
)
print
output
if
output
[
'error_info'
]
is
not
None
:
error
(
output
[
'error_info'
])
ssh_user
=
output
[
'result'
]
api_user_name
=
api_user
[
'userName'
]
ssh_user_name
=
ssh_user
[
'userName'
]
if
api_user
!=
ssh_user
:
if
api_user_name
==
ssh_user_name
:
error
(
'Identity mismatch: '
'API and SSH access provide the same username, but the account'
'details are different.'
)
else
:
error
(
'Identity mismatch: '
'API token belongs to user `
%s
`, '
'but SSH key matches user `
%s
`'
%
(
api_user_name
,
ssh_user_name
))
print
print
'Successfuly configured to use arc as user `
%s
`'
%
api_user_name
File Metadata
Details
Attached
Mime Type
text/plain; charset=utf-8
Storage Engine
amazon-s3
Storage Format
Raw Data
Storage Handle
phabricator/pc/qb/4rhduqzrldh7w5mp
Default Alt Text
test-arcanist-local-configuration.py (2 KB)
Attached To
Mode
P1876 test-arcanist-local-configuration.py
Attached
Detach File
Event Timeline
Log In to Comment