Skip to content

Instantly share code, notes, and snippets.

@eggplants
Last active August 4, 2024 06:35
Show Gist options
  • Save eggplants/4536ffd4c59e2ba166068090e8818f03 to your computer and use it in GitHub Desktop.
Save eggplants/4536ffd4c59e2ba166068090e8818f03 to your computer and use it in GitHub Desktop.
Get gpg key hash of GitHub followers / followees
#!/usr/bin/env bash
set -eu
requirements=(curl gh gpg grep sed tee)
if ! command -v "${requirements[@]}" &>/dev/null
then
echo "required: ${requirements[*]}" >&2
exit 1
fi
if ! gh auth status &>/dev/null
then
echo 'first: `gh auth login`' >&2
exit 1
fi
get_followees() {
# <jq query> <page index number>
gh api --cache 1h -q "$1" "/user/following?per_page=100&page=$2"
}
for ((page=1;;page++))
do
get_followees '.[].login' "$page"
[[ "$(get_followees 'length' $page)" = '100' ]] || break
done > followees
while read -r id
do
curl -s 'https://github.com/'"$id"'.gpg' |
gpg --show-keys --fingerprint |
grep pub -A1 |
sed "/[-\[]/d;s/ //g;s/^/${id}\t/"
done < followees | tee followees_hash.tsv
#!/usr/bin/env bash
set -eu
requirements=(curl gh gpg grep sed tee)
if ! command -v "${requirements[@]}" &>/dev/null
then
echo "required: ${requirements[*]}" >&2
exit 1
fi
if ! gh auth status &>/dev/null
then
echo 'first: `gh auth login`' >&2
exit 1
fi
get_followers() {
# <jq query> <page index number>
gh api --cache 1h -q "$1" "/user/followers?per_page=100&page=$2"
}
for ((page=1;;page++))
do
get_followers '.[].login' "$page"
[[ "$(get_followers 'length' $page)" = '100' ]] || break
done > followers
while read -r id
do
curl -s 'https://github.com/'"$id"'.gpg' |
gpg --show-keys --fingerprint |
grep pub -A1 |
sed "/[-\[]/d;s/ //g;s/^/${id}\t/"
done < followers | tee followers_hash.tsv
@eggplants
Copy link
Author

$ sort followees_hash.tsv followers_hash.tsv | uniq -D
aucampia        BABDACFCFFCF7E9ABA4617C706AF686FB4F8CDB8
aucampia        FC45CCC352C56B0BE10866C65FF939C35A517B54
eniehack        6E1005C1115354DF97C80619AE054EAFB2F95E18
jiro4989        1C000FBC615CD03E899AD2A9AA09590B4B126DA2
Last-Vega       A9B3246B94EA5D3E67A59157E1B490AEB008299C
onokatio        6EA9974F9C2F03106BDE84F6160D8704EFA2F6D0
ripry   AAA0B5980FF89AE4206198624D618080AEEF8E5A
Seno7   4267A004636A2DDA801CD209826EB9DB0E4748B6
SnO2WMaN        F13B8777F7820455B3CE2A5FAFF74D3D99EC0563
soruly  BD46F2357D146E2539B46398EF971E90F3D2521F
stepney141      3C9C48384DAB8511375DFFBF7835F4AC680B922A
sui4    D41872DA9BBA20A595A7852A84CA5AFA0EBD51E1
tentenhase      490EC829E93BD1A971C79F458269CBC934EEB1E1
Totsugekitai    AFF4C616FEB127D3C61E243AE883FEC77495C1D6
ygkn    94DD6A9FC793990BE99F059975D9DB2350468783
yude    3745F270DB4E89756B0762BEEB0FE5D925C4A968

@eggplants
Copy link
Author

$ cat followees_hash.tsv
ponapalt	CC4E2DA82A90F25791FE437029192618A5C54087
shadowmoose	0AB898F45C591CE45301269CB414B820F555DF27
sinoru	F5BEEEAB0B3DF5A7F01BD9263D63FE5C68AE16E5
sinoru	FDF2FFBAFA1BFA88F9EC6AFF788F6505702BF203
dtolnay	4628C5D82CFF65D68164A78AF9BA143B95FF6D82
soruly	BD46F2357D146E2539B46398EF971E90F3D2521F
jackyzy823	103058FE02C50485FC9940FC4FC2408D9EAF124E
rbernon	FC95D85112BC49CDA41B9A0338D0E5827B54E5C9
aucampia	FC45CCC352C56B0BE10866C65FF939C35A517B54
aucampia	BABDACFCFFCF7E9ABA4617C706AF686FB4F8CDB8
Babibubebon	17682D5E4593A1BFB46C717A575C0B67FDDAF4AE
Babibubebon	BA239A4A831ADE80E381DCC5ABF127E6F9E8716A
jiro4989	1C000FBC615CD03E899AD2A9AA09590B4B126DA2
onokatio	6EA9974F9C2F03106BDE84F6160D8704EFA2F6D0
yude	3745F270DB4E89756B0762BEEB0FE5D925C4A968
ygkn	94DD6A9FC793990BE99F059975D9DB2350468783
SnO2WMaN	F13B8777F7820455B3CE2A5FAFF74D3D99EC0563
algon-320	45B9E8DC8A1E2B90699D7E0CC9FFE4C110BBB43E
ryotosaito	038317F1E0FA9BF3246B71C2A7AB08E5558A5572
exuanbo	061B926FBF7BE128C28964059144950EFC4835F6
tentenhase	490EC829E93BD1A971C79F458269CBC934EEB1E1
stepney141	3C9C48384DAB8511375DFFBF7835F4AC680B922A
eniehack	6E1005C1115354DF97C80619AE054EAFB2F95E18
dragoneena12	917B61810C9545E5BF280FF5C567A445EB49CF62
Totsugekitai	AFF4C616FEB127D3C61E243AE883FEC77495C1D6
AumyF	BEDC500020425D0FB4E3C8235911EC1BAD704C03
sui4	D41872DA9BBA20A595A7852A84CA5AFA0EBD51E1
ripry	AAA0B5980FF89AE4206198624D618080AEEF8E5A
Last-Vega	A9B3246B94EA5D3E67A59157E1B490AEB008299C
Seno7	4267A004636A2DDA801CD209826EB9DB0E4748B6

@eggplants
Copy link
Author

$ cat followers_hash.tsv
soruly	BD46F2357D146E2539B46398EF971E90F3D2521F
aucampia	FC45CCC352C56B0BE10866C65FF939C35A517B54
aucampia	BABDACFCFFCF7E9ABA4617C706AF686FB4F8CDB8
Xvezda	725E57D666B94F50CAD1DE773E95629ACA316FCC
threeal	83C8A5AF0C41B9DB7F3A9E2BE2338B6CBCEC3688
threeal	16B2BE87DA6129C6DD5230279CE5266FA0F1F66C
threeal	2BF18147F4E7D8B4CE2E01742242A64C2A8DF5A4
threeal	B8F082398D5F9B25B6963A6DA5EF030CBC3CC85D
jiro4989	1C000FBC615CD03E899AD2A9AA09590B4B126DA2
onokatio	6EA9974F9C2F03106BDE84F6160D8704EFA2F6D0
yude	3745F270DB4E89756B0762BEEB0FE5D925C4A968
ygkn	94DD6A9FC793990BE99F059975D9DB2350468783
SnO2WMaN	F13B8777F7820455B3CE2A5FAFF74D3D99EC0563
tentenhase	490EC829E93BD1A971C79F458269CBC934EEB1E1
stepney141	3C9C48384DAB8511375DFFBF7835F4AC680B922A
eniehack	6E1005C1115354DF97C80619AE054EAFB2F95E18
Totsugekitai	AFF4C616FEB127D3C61E243AE883FEC77495C1D6
shuhei-fujita	B1A0D941CEA48F49E63FE460515B141D72722D1A
shuhei-fujita	AF3D4E562D63471BD2D78C44FC20669D195B8FDE
shuhei-fujita	981E69BAF75B23C18A3CED721B5E57D9D3F2A7BC
extratone	F34600B2B0447FA4B028490C05B678ACE0AC392D
extratone	DAF7D66BCC4CFCB9B2517132D2D1249897A66748
extratone	2F2E1211E2DF81C0CE7C48A5284A4D3F3496FC9A
extratone	10CE6E5867BC72404FAFA08DC08538E538C18AD9
extratone	DA6569E075618DD11D10A8955F9AF6D80F35A031
extratone	D066A03FF241F280FA729DC5D19C1DD2C0AD9E2A
sui4	D41872DA9BBA20A595A7852A84CA5AFA0EBD51E1
ripry	AAA0B5980FF89AE4206198624D618080AEEF8E5A
Last-Vega	A9B3246B94EA5D3E67A59157E1B490AEB008299C
KawaneRio	AC01F95E3F201118D49C53AAEE78322CBC2B203D
KawaneRio	AD67F93E1013404940517B5A80CE263DD8E1BC2C
KawaneRio	C00733FC334EF9A1E0BC5713BEEBFE1EA867E3D3
KawaneRio	3E79B889E83F04BBB5DD0F3DFFA7D26AEA4C4113
Seno7	4267A004636A2DDA801CD209826EB9DB0E4748B6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment