token-validator: display user associated domain and delegation
This commit is contained in:
parent
d28b14fa50
commit
8427a0adb8
|
@ -86,8 +86,10 @@ func check_dns(domain, ip string) (aaaa net.IP, err error) {
|
||||||
err = errors.New("failed to get a valid answer")
|
err = errors.New("failed to get a valid answer")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(r.Answer) > 0 {
|
for _, answer := range r.Answer {
|
||||||
aaaa = r.Answer[0].(*dns.AAAA).AAAA
|
if t, ok := answer.(*dns.AAAA); ok {
|
||||||
|
aaaa = t.AAAA
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
|
@ -56,7 +56,9 @@ func DBCreate() (err error) {
|
||||||
CREATE TABLE IF NOT EXISTS students(
|
CREATE TABLE IF NOT EXISTS students(
|
||||||
id_student INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
id_student INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
||||||
login VARCHAR(255) NOT NULL UNIQUE,
|
login VARCHAR(255) NOT NULL UNIQUE,
|
||||||
time TIMESTAMP NOT NULL
|
time TIMESTAMP NOT NULL,
|
||||||
|
associatedDomain VARCHAR(255) UNIQUE,
|
||||||
|
delegatedDomain VARCHAR(255) UNIQUE
|
||||||
) DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin;
|
) DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin;
|
||||||
`); err != nil {
|
`); err != nil {
|
||||||
return
|
return
|
||||||
|
|
|
@ -11,11 +11,19 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
func (student Student) MyDelegatedDomain() string {
|
func (student Student) MyDelegatedDomain() string {
|
||||||
return fmt.Sprintf("%s.%s", strings.Trim(strings.Replace(student.Login, "_", "-", -1), "-_"), DelegatedDomainSuffix)
|
if student.DelegatedDomain != nil {
|
||||||
|
return *student.DelegatedDomain
|
||||||
|
} else {
|
||||||
|
return fmt.Sprintf("%s.%s", strings.Trim(strings.Replace(student.Login, "_", "-", -1), "-_"), DelegatedDomainSuffix)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (student Student) MyAssociatedDomain() string {
|
func (student Student) MyAssociatedDomain() string {
|
||||||
return fmt.Sprintf("%s.%s", strings.Trim(strings.Replace(student.Login, "_", "-", -1), "-_"), AssociatedDomainSuffix)
|
if student.AssociatedDomain != nil {
|
||||||
|
return *student.AssociatedDomain
|
||||||
|
} else {
|
||||||
|
return fmt.Sprintf("%s.%s", strings.Trim(strings.Replace(student.Login, "_", "-", -1), "-_"), AssociatedDomainSuffix)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (student Student) GetAssociatedDomains() (ds []string) {
|
func (student Student) GetAssociatedDomains() (ds []string) {
|
||||||
|
|
|
@ -7,22 +7,24 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Student struct {
|
type Student struct {
|
||||||
Id int64 `json:"id"`
|
Id int64 `json:"id"`
|
||||||
Login string `json:"login"`
|
Login string `json:"login"`
|
||||||
Time *time.Time `json:"time"`
|
Time *time.Time `json:"time"`
|
||||||
IP *string `json:"ip"`
|
IP *string `json:"ip"`
|
||||||
MAC *string `json:"mac"`
|
MAC *string `json:"mac"`
|
||||||
|
AssociatedDomain *string `json:"associated_domain,omitempty"`
|
||||||
|
DelegatedDomain *string `json:"delegated_domain,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetStudents() (students []Student, err error) {
|
func GetStudents() (students []Student, err error) {
|
||||||
if rows, errr := DBQuery("SELECT S.id_student, S.login, MAX(L.time), L.ip, L.mac FROM students S INNER JOIN (SELECT a.id_student, a.time, a.ip, a.mac FROM student_login a INNER JOIN (SELECT id_student, MAX(time) AS time FROM student_login GROUP BY id_student) b ON a.id_student = b.id_student AND a.time = b.time) L ON S.id_student = L.id_student GROUP BY id_student"); errr != nil {
|
if rows, errr := DBQuery("SELECT S.id_student, S.login, MAX(L.time), L.ip, L.mac, S.associatedDomain, S.delegatedDomain FROM students S INNER JOIN (SELECT a.id_student, a.time, a.ip, a.mac FROM student_login a INNER JOIN (SELECT id_student, MAX(time) AS time FROM student_login GROUP BY id_student) b ON a.id_student = b.id_student AND a.time = b.time) L ON S.id_student = L.id_student GROUP BY id_student"); errr != nil {
|
||||||
return nil, errr
|
return nil, errr
|
||||||
} else {
|
} else {
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var s Student
|
var s Student
|
||||||
if err = rows.Scan(&s.Id, &s.Login, &s.Time, &s.IP, &s.MAC); err != nil {
|
if err = rows.Scan(&s.Id, &s.Login, &s.Time, &s.IP, &s.MAC, &s.AssociatedDomain, &s.DelegatedDomain); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
students = append(students, s)
|
students = append(students, s)
|
||||||
|
@ -36,12 +38,12 @@ func GetStudents() (students []Student, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetStudent(id int) (s Student, err error) {
|
func GetStudent(id int) (s Student, err error) {
|
||||||
err = DBQueryRow("SELECT S.id_student, S.login, MAX(L.time), L.ip, L.mac FROM students S INNER JOIN (SELECT a.id_student, a.time, a.ip, a.mac FROM student_login a INNER JOIN (SELECT id_student, MAX(time) AS time FROM student_login GROUP BY id_student) b ON a.id_student = b.id_student AND a.time = b.time) L ON S.id_student = L.id_student WHERE S.id_student=?", id).Scan(&s.Id, &s.Login, &s.Time, &s.IP, &s.MAC)
|
err = DBQueryRow("SELECT S.id_student, S.login, MAX(L.time), L.ip, L.mac, S.associatedDomain, S.delegatedDomain FROM students S INNER JOIN (SELECT a.id_student, a.time, a.ip, a.mac FROM student_login a INNER JOIN (SELECT id_student, MAX(time) AS time FROM student_login GROUP BY id_student) b ON a.id_student = b.id_student AND a.time = b.time) L ON S.id_student = L.id_student WHERE S.id_student=?", id).Scan(&s.Id, &s.Login, &s.Time, &s.IP, &s.MAC, &s.AssociatedDomain, &s.DelegatedDomain)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetStudentByLogin(login string) (s Student, err error) {
|
func GetStudentByLogin(login string) (s Student, err error) {
|
||||||
err = DBQueryRow("SELECT S.id_student, S.login, MAX(L.time), L.ip, L.mac FROM students S INNER JOIN (SELECT a.id_student, a.time, a.ip, a.mac FROM student_login a INNER JOIN (SELECT id_student, MAX(time) AS time FROM student_login GROUP BY id_student) b ON a.id_student = b.id_student AND a.time = b.time) L ON S.id_student = L.id_student WHERE login=?", login).Scan(&s.Id, &s.Login, &s.Time, &s.IP, &s.MAC)
|
err = DBQueryRow("SELECT S.id_student, S.login, MAX(L.time), L.ip, L.mac, S.associatedDomain, S.delegatedDomain FROM students S INNER JOIN (SELECT a.id_student, a.time, a.ip, a.mac FROM student_login a INNER JOIN (SELECT id_student, MAX(time) AS time FROM student_login GROUP BY id_student) b ON a.id_student = b.id_student AND a.time = b.time) L ON S.id_student = L.id_student WHERE login=?", login).Scan(&s.Id, &s.Login, &s.Time, &s.IP, &s.MAC, &s.AssociatedDomain, &s.DelegatedDomain)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +60,7 @@ func NewStudent(login string) (Student, error) {
|
||||||
} else if sid, err := res.LastInsertId(); err != nil {
|
} else if sid, err := res.LastInsertId(); err != nil {
|
||||||
return Student{}, err
|
return Student{}, err
|
||||||
} else {
|
} else {
|
||||||
return Student{sid, login, &t, nil, nil}, nil
|
return Student{sid, login, &t, nil, nil, nil, nil}, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +69,7 @@ func (s Student) GetPKey() []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Student) Update() (int64, error) {
|
func (s Student) Update() (int64, error) {
|
||||||
if res, err := DBExec("UPDATE students SET login = ?, time = ? WHERE id_student = ?", s.Login, s.Time, s.Id); err != nil {
|
if res, err := DBExec("UPDATE students SET login = ?, time = ?, associatedDomain = ?, delegatedDomain = ? WHERE id_student = ?", s.Login, s.Time, s.AssociatedDomain, s.DelegatedDomain, s.Id); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
} else if nb, err := res.RowsAffected(); err != nil {
|
} else if nb, err := res.RowsAffected(); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
|
|
Reference in New Issue
Block a user