Compare commits

...

6 commits

6 changed files with 35 additions and 21 deletions

View file

@ -18,4 +18,6 @@ COPY --from=gobuild /go/src/login-validator/login-validator /bin/login-validator
ENTRYPOINT ["/bin/login-validator", "-bind=:8081"]
WORKDIR /data
LABEL org.mobyproject.config='{"capabilities": ["CAP_NET_BIND_SERVICE"]}'

View file

@ -52,7 +52,7 @@ func main() {
log.Fatal(err)
}
var lc loginChecker
lc := &loginChecker{}
if auth != nil && *auth == "ldap" {
log.Printf("Auth method: LDAP(%s@%s:%d?%s)", *ldapbindusername, *ldapAddr, *ldapPort, *ldapbase)
@ -87,6 +87,7 @@ func main() {
if err != nil {
log.Fatal(err)
}
log.Printf("%d students loaded", len(lc.students))
// Prepare graceful shutdown
interrupt := make(chan os.Signal, 1)
@ -100,7 +101,7 @@ func main() {
log.Println("Registering handlers...")
mux := http.NewServeMux()
mux.Handle("/login", &lc)
mux.Handle("/login", lc)
mux.HandleFunc("/logout", logout)
mux.HandleFunc("/passwd", passwd)
http.HandleFunc("/", mux.ServeHTTP)

View file

@ -26,15 +26,13 @@ func readStudentsList(studentsFile string) (stds []Student, err error) {
return nil, err
} else {
for _, i := range list {
var s Student
s.Lastname = i[0]
s.Firstname = i[1]
s.Login = i[2]
s.EMail = i[3]
s.Phone = i[4]
stds = append(stds, s)
stds = append(stds, Student{
Lastname: i[0],
Firstname: i[1],
Login: i[2],
EMail: i[3],
Phone: i[4],
})
}
return stds, nil

View file

@ -154,7 +154,7 @@ services:
net: /run/netns/dmzi-wg
- name: login-validator
image: nemunaire/adlin-login-validator:923d04a3c3c744f4a60c882f0264ffff88b7a9f6
image: nemunaire/adlin-login-validator:7b6560b8ebf5d726ac1f2740621075dfb59b5e58
# command: ["/bin/login-validator", "-bind=:8081", "-auth=ldap", "-ldaphost=auth.cri.epita.net", "-ldapport=636", "-ldaptls", "-ldapbase=dc=epita,dc=net"]
command: ["/bin/login-validator", "-bind=:8081", "-auth=krb5", "-krb5realm=CRI.EPITA.FR"]
# command: ["/bin/login-validator", "-bind=:8081", "-auth=fwd", "-fwduri=https://adlin.nemunai.re/auth"]
@ -162,13 +162,16 @@ services:
net: /run/netns/login
binds:
- /etc/resolv.conf:/etc/resolv.conf:ro
- /var/lib/adlin/students.csv:/students.csv:ro
- /var/lib/adlin/students:/data/:ro
- /var/lib/adlin/pxelinux.cfg:/var/tftp/pxelinux.cfg
- /var/lib/adlin/shadows:/var/tftp/shadows
- /srv/solver.sh:/var/solver.sh:ro
- /srv/tftp/challenge-initrd.img:/var/tftp/challenge-initrd.img:ro
- /etc/ssl/certs:/etc/ssl/certs:ro
- /usr/share/ca-certificates:/usr/share/ca-certificates:ro
runtime:
mkdir:
- /var/lib/adlin/students
- name: nginx-login
image: nginx:stable-alpine
capabilities:
@ -941,6 +944,15 @@ files:
source: challenge-initrd.img
mode: "0644"
- path: root/.ash_history
contents: |
tail -f /var/log/login-validator.log
ln -sf nemunaire.csv /var/lib/adlin/students/students.csv
ln -sf students2025.csv students.csv
pkill -HUP login-validator
cd /var/lib/adlin
mode: "0640"
trust:
org:
- linuxkit

View file

@ -28,8 +28,9 @@
width: calc(100vw / 12 - 0.26vw);
}
.student-title {
width: calc(2 * (100vw / 12 - 0.22vw) + 0.2vw);
font-size: 15px;
/* width: calc(2 * (100vw / 12 - 0.22vw) + 0.2vw); */
/* font-size: 15px; */
font-size: 11px;
}
.student h5 {
font-size: 16px;
@ -60,7 +61,7 @@
<div ng-controller="StudentProgressionController" class="m-4">
<div class="card-group offset-md-1 col-md-10 offset-lg-2 col-lg-8">
<div class="card">
<img src="photos/thumb/{{ img | lowercase }}" class="card-img-top" alt="{{ student.login }}">
<img src="/dashboard/photos/thumb/{{ img | lowercase }}" class="card-img-top" alt="{{ student.login }}">
</div>
<div class="card">
<div class="card-body">
@ -100,8 +101,8 @@
<div ng-cloak ng-if="!onestudent">
<div ng-controller="StudentsProgressionController" class="d-flex flex-wrap">
<div class="card student student-title d-flex flex-column justify-content-around" style="background-image: url('https://srs.epita.fr/assets/images/logo-srs.png');">
<h5 class="text-center" title="SRS" ng-cloak>
ADLIN TP {{tutoid+1}}
<h5 class="text-center text-truncate mb-0" title="SRS" ng-cloak>
TP {{tutoid+1}}
<span ng-click="toogleDropdown()">
<svg class="bi bi-chevron-down" width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 01.708 0L8 10.293l5.646-5.647a.5.5 0 01.708.708l-6 6a.5.5 0 01-.708 0l-6-6a.5.5 0 010-.708z" clip-rule="evenodd"/>
@ -120,7 +121,7 @@
</div>
</div>
<div class="card student d-flex flex-column justify-content-between" ng-repeat="(login, mychallenges) in students" ng-if="login != 'nemunaire'" style="background-image: url('photos/square/{{ mychallenges.img | lowercase }}')" ng-show="!filterBadgeState.challenge || (filterBadgeState.state == 'bad' && (!mychallenges[filterBadgeState.challenge] || !mychallenges[filterBadgeState.challenge].recent)) || (filterBadgeState.state == 'passed' && mychallenges[filterBadgeState.challenge] && mychallenges[filterBadgeState.challenge].recent) || (filterBadgeState.state == 'online' && mychallenges[filterBadgeState.challenge] && mychallenges[filterBadgeState.challenge].recent <= 300) || (filterBadgeState.state == 'offline' && mychallenges[filterBadgeState.challenge] && mychallenges[filterBadgeState.challenge].recent > 300)">
<div class="card student d-flex flex-column justify-content-between" ng-repeat="(login, mychallenges) in students" ng-if="login != 'nemunaire'" style="background-image: url('/dashboard/photos/square/{{ mychallenges.img | lowercase }}')" ng-show="!filterBadgeState.challenge || (filterBadgeState.state == 'bad' && (!mychallenges[filterBadgeState.challenge] || !mychallenges[filterBadgeState.challenge].recent)) || (filterBadgeState.state == 'passed' && mychallenges[filterBadgeState.challenge] && mychallenges[filterBadgeState.challenge].recent) || (filterBadgeState.state == 'online' && mychallenges[filterBadgeState.challenge] && mychallenges[filterBadgeState.challenge].recent <= 300) || (filterBadgeState.state == 'offline' && mychallenges[filterBadgeState.challenge] && mychallenges[filterBadgeState.challenge].recent > 300)">
<h5 class="login text-truncate" title="{{ login }}">
<span class="badge" ng-class="{'badge-success': mychallenges['ping'] && mychallenges['ping'].recent < 120, 'badge-info': mychallenges['ping'] && mychallenges['ping'].recent >= 120 && mychallenges['ping'].recent < 300, 'badge-warning': mychallenges['ping'] && mychallenges['ping'].recent >= 300 && mychallenges['ping'].recent < 900, 'badge-danger': mychallenges['ping'] && mychallenges['ping'].recent >= 900, 'badge-dark': !mychallenges['ping']}" title="{{ mychallenges['ping'].time }}">
&#x1f4bb;

View file

@ -3,7 +3,7 @@ kernel:
cmdline: "console=tty0 console=ttyS0 root=/dev/sda1 root=/dev/sr0 adlin.format=/dev/sda quiet"
init:
- nemunaire/adlin-tuto2:55c520c84f1aeb93d5af2255851ece5589312271
- nemunaire/adlin-tuto2:5a42a080ac2644e92aef80647f37580c5dda1d01
files:
- path: etc/hostname
@ -178,7 +178,7 @@ files:
- path: etc/shadow
contents: |
root:$6$R0XGKnrwzA4kTcET$6JsBy0Ib7xzy3OUZLq81/Cu4XswmOzv4VmCBJ76jAq/lJ049rxrHsyzGhUY8TONLdlbKfm0.EhCKB4NLivdck/:18336:0:99999:7:::
root:$y$j9T$.GjDIyRkcMni489J0rTPS0$.TecjwXa3nlysU16kk7KFIZ2QLIA66Jt5ZG39aE7hf1:18336:0:99999:7:::
daemon:*:18316:0:99999:7:::
bin:*:18316:0:99999:7:::
sys:*:18316:0:99999:7:::