summaryrefslogtreecommitdiff
path: root/parabolaweb-hackers-discrepancies
blob: 69182910d99af81f4f133a30c46873ba097da3e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/bin/bash

# parabolaweb-hackers-discrepancies - detect discrepancies between
# the Parabola Hackers web page and hackers.git
#
# Copyright (C) 2019 bill-auger <bill-auger@programmer.net>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.


readonly HACKERS_GIT_URL=https://git.parabola.nu/hackers.git
readonly HACKERS_GIT_DIR=/tmp/$(basename $0)
readonly HACKERS_URL=https://www.parabola.nu/people/hackers/
readonly GIT_LOGIN_REGEX='s|^username: \(.*\)$|\1|'
readonly GIT_EMAIL_REGEX='s|^- \(.*\)$|\1|'
readonly HTML_KEYS_REGEX='.*<th>(Alias|Email):</th>.*'
readonly WEB_LOGIN_REGEX='s|.*>\(.*\)<.*|\1|'
readonly WEB_EMAIL_REGEX='s|.*>\(.*@.*\)<.*|\1|'

git_logins=''
git_emails=''
web_logins=''
web_emails=''
shell_logins=''
declare -a logins_git_not_web=()
declare -a emails_git_not_web=()
declare -a logins_web_not_git=()
declare -a emails_web_not_git=()
declare -a logins_shell_not_git=()
declare -a logins_git_not_shell=()


echo "
##############################################
## parabolaweb<->hackers.git discrepancies: ##
##############################################"

# sync hackers.git
which git &> /dev/null || sudo pacman -S git
! [[ -d ${HACKERS_GIT_DIR} ]] && git clone ${HACKERS_GIT_URL} ${HACKERS_GIT_DIR} &> /dev/null
cd ${HACKERS_GIT_DIR} && git pull origin &> /dev/null

# parse hackers.git YAML
for user_yaml in users/*
do  if           grep -A1 'groups:'   ${user_yaml} | tail -n 1 | grep 'hackers' > /dev/null
    then login=$(grep     'username:' ${user_yaml} | tail -n 1 | sed "${GIT_LOGIN_REGEX}")
         email=$(grep -A1 'email:'    ${user_yaml} | tail -n 1 | sed "${GIT_EMAIL_REGEX}")

         git_logins="${git_logins} ${login} "
         git_emails="${git_emails} ${email} "
    fi
done

# parse parabolaweb hackers HTML
for html in $(curl ${HACKERS_URL} 2> /dev/null | grep -A1 -E ${HTML_KEYS_REGEX})
do  [[ "${html}" =~ \</td\> ]] || continue

    login=$(sed "${WEB_EMAIL_REGEX}" <<< ${html})
    email=$(sed "${WEB_LOGIN_REGEX}" <<< ${html})

    [[ "${html}" =~ @ ]] && web_emails="${web_emails} ${login} " ||
                            web_logins="${web_logins} ${email} "
done

# parse parabola-hackers shell logins
for hacker in $(/usr/lib/parabola-hackers/meta-cat --group hackers)
do  login=${hacker##*,}

    shell_logins="${shell_logins} ${login} "
done

# compare entries
for login in ${git_logins}
do  [[ "${web_logins}"   =~ " ${login} " ]] || logins_git_not_web=(${logins_git_not_web[*]} ${login})
done
for email in ${git_emails}
do  [[ "${web_emails}"   =~ " ${email} " ]] || emails_git_not_web=(${emails_git_not_web[*]} ${email})
done
for login in ${web_logins}
do  [[ "${git_logins}"   =~ " ${login} " ]] || logins_web_not_git=(${logins_web_not_git[*]} ${login})
done
for email in ${web_emails}
do  [[ "${git_emails}"   =~ " ${email} " ]] || emails_web_not_git=(${emails_web_not_git[*]} ${email})
done
for login in ${shell_logins}
do  [[ "${git_logins}"   =~ " ${login} " ]] || logins_shell_not_git=(${logins_shell_not_git[*]} ${login})
done
for login in ${git_logins}
do  [[ "${shell_logins}" =~ " ${login} " ]] || logins_git_not_shell=(${logins_git_not_shell[*]} ${login})
done

# print report
if   (( ${#logins_git_not_web[*]} )) || (( ${#emails_git_not_web[*]} ))
then echo -e "\nin hackers.git but not on parabolaweb:"
     for login in ${logins_git_not_web[*]}   ; do echo "  (login) ${login}" ; done ;
     for email in ${emails_git_not_web[*]}   ; do echo "  (email) ${email}" ; done ;
fi
if   (( ${#logins_web_not_git[*]} )) || (( ${#emails_web_not_git[*]} ))
then echo -e "\non parabolaweb but not in hackers.git:"
     for login in ${logins_web_not_git[*]}   ; do echo "  (login) ${login}" ; done ;
     for email in ${emails_web_not_git[*]}   ; do echo "  (email) ${email}" ; done ;
fi
if   (( ${#logins_shell_not_git[*]} ))
then echo -e "\nshell logins not in hackers.git:"
     for login in ${logins_shell_not_git[*]} ; do echo "  (login) ${login}" ; done ;
fi
if   (( ${#logins_git_not_shell[*]} ))
then echo -e "\nin hackers.git without shell login:"
     for login in ${logins_git_not_shell[*]} ; do echo "  (login) ${login}" ; done ;
fi


# DEBUG begin
# echo "web_logins=$web_logins" 1>&2 ; echo "web_emails=$web_emails" 1>&2 ;
# echo "git_logins=$git_logins" 1>&2 ; echo "git_emails=$git_emails" 1>&2 ;
# echo "shell_logins=$shell_logins" 1>&2
# echo "logins_git_not_web=${logins_git_not_web[*]}" 1>&2
# echo "emails_git_not_web=${emails_git_not_web[*]}" 1>&2
# echo "logins_web_not_git=${logins_web_not_git[*]}" 1>&2
# echo "emails_web_not_git=${emails_web_not_git[*]}" 1>&2
# echo "logins_shell_not_git=${logins_shell_not_git[*]}" 1>&2
# echo "logins_git_not_shell=${logins_git_not_shell[*]}" 1>&2
# DEBUG end