2018-09-24 08:00:17 +00:00
|
|
|
package fic
|
|
|
|
|
2019-01-02 20:51:09 +00:00
|
|
|
import ()
|
2018-09-24 08:00:17 +00:00
|
|
|
|
2019-01-02 20:51:09 +00:00
|
|
|
type Flag interface {
|
|
|
|
Update() (int64, error)
|
|
|
|
Delete() (int64, error)
|
|
|
|
AddDepend(d Flag) (error)
|
|
|
|
GetDepends() ([]Flag, error)
|
|
|
|
Check(val interface{}) int
|
|
|
|
FoundBy(t Team)
|
2018-09-24 08:00:17 +00:00
|
|
|
}
|
|
|
|
|
2019-01-02 20:51:09 +00:00
|
|
|
// GetFlag returns a list of flags comming with the challenge.
|
2018-09-24 08:00:17 +00:00
|
|
|
func (e Exercice) GetFlags() ([]Flag, error) {
|
2019-01-02 20:51:09 +00:00
|
|
|
var flags = make([]Flag, 0)
|
|
|
|
|
|
|
|
if ks, err := e.GetFlagKeys(); err != nil {
|
2018-09-24 08:00:17 +00:00
|
|
|
return nil, err
|
|
|
|
} else {
|
2019-01-02 20:51:09 +00:00
|
|
|
for _, k := range ks {
|
2018-09-24 08:00:17 +00:00
|
|
|
flags = append(flags, k)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-01-02 20:51:09 +00:00
|
|
|
if ms, err := e.GetMCQ(); err != nil {
|
|
|
|
return nil, err
|
2018-09-24 08:00:17 +00:00
|
|
|
} else {
|
2019-01-02 20:51:09 +00:00
|
|
|
for _, m := range ms {
|
|
|
|
flags = append(flags, m)
|
2018-11-16 19:46:19 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-01-02 20:51:09 +00:00
|
|
|
return flags, nil
|
2018-09-24 08:00:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// WipeFlags deletes flags coming with the challenge.
|
|
|
|
func (e Exercice) WipeFlags() (int64, error) {
|
|
|
|
if _, err := DBExec("DELETE FROM exercice_files_deps WHERE id_flag IN (SELECT id_flag FROM exercice_flags WHERE id_exercice = ?)", e.Id); err != nil {
|
|
|
|
return 0, err
|
2018-12-02 18:21:07 +00:00
|
|
|
} else if _, err := DBExec("DELETE FROM exercice_flags_deps WHERE id_flag IN (SELECT id_flag FROM exercice_flags WHERE id_exercice = ?)", e.Id); err != nil {
|
|
|
|
return 0, err
|
2018-12-02 22:18:32 +00:00
|
|
|
} else if _, err := DBExec("DELETE FROM team_wchoices WHERE id_flag IN (SELECT id_flag FROM exercice_flags WHERE id_exercice = ?)", e.Id); err != nil {
|
|
|
|
return 0, err
|
2018-11-21 03:10:22 +00:00
|
|
|
} else if _, err := DBExec("DELETE FROM flag_choices WHERE id_flag IN (SELECT id_flag FROM exercice_flags WHERE id_exercice = ?)", e.Id); err != nil {
|
|
|
|
return 0, err
|
2018-09-24 08:00:17 +00:00
|
|
|
} else if res, err := DBExec("DELETE FROM exercice_flags WHERE id_exercice = ?", e.Id); err != nil {
|
|
|
|
return 0, err
|
|
|
|
} else if nb, err := res.RowsAffected(); err != nil {
|
|
|
|
return 0, err
|
|
|
|
} else {
|
|
|
|
return nb, err
|
|
|
|
}
|
|
|
|
}
|