-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathjob.go
executable file
·138 lines (110 loc) · 2.56 KB
/
job.go
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
137
138
package main
import (
"fmt"
"labix.org/v2/mgo"
"labix.org/v2/mgo/bson"
"time"
)
type Job struct {
Id int "_id" // uniq id for task
AttackMode int // 0 for dict, or 3 for hashmask.
HashType int // type of hash.
HashFile []byte // the file that contains hashes
Mask string // mask or dict.
Start int // start of number
Finish int // Ending of string
Tasks []Task // subset of tasks
Results []Result // sets of results
Pause bool // if the job is paused
Name string // Name of the job for humans
}
// Save the initial job to the database.
func (j *Job) save(session *mgo.Session) {
c := session.DB(MONGO_DB).C("tasks")
err := c.Insert(&j)
if err != nil {
panic(err)
}
}
// Save the updated job to the database.
func (j *Job) update(con *mgo.Session) {
c := con.DB(MONGO_DB).C("tasks")
search := bson.M{"_id": j.Id}
err := c.Update(search, j)
if err != nil {
panic(err)
}
con.Close()
}
// Checks if a job is done.
func (j *Job) IsDone() bool {
if j.Start >= j.Finish {
for _, task := range j.Tasks {
if task.Done == false {
return false
}
}
return true
} else {
return false
}
}
// Gets a list of all the tasks todo.
func (j *Job) TasksToDo() bool {
if j.Start >= j.Finish {
for _, task := range j.Tasks {
if task.Done == false && time.Since(task.Timestamp).Minutes() > 15 {
return true
}
}
return false
} else {
return true
}
}
// Checks if the job is paused.
func (j *Job) IsPaused() bool {
return j.Pause
}
// HELPER FUNCTIONS
// Loads a job from the database based on job id.
func loadJob(id int, con *mgo.Session) *Job {
c := con.DB(MONGO_DB).C("tasks")
job := Job{}
err := c.Find(bson.M{"_id": id}).One(&job)
if err != nil {
fmt.Println(err)
}
return &job
}
// Marks a task as finished.
func (j *Job) finishTask(task_id int) {
j.Tasks[task_id-1].Done = true
j.update(getConnection())
fmt.Println("Task has been marked as finished.")
}
// Creates a job and saves it to the database.
func createJob(AttackMode int, HashType int, HashFile []byte, Mask string, max int, name string, con *mgo.Session) (j Job) {
c := con.DB(MONGO_DB).C("tasks")
job := Job{}
err := c.Find(nil).Sort("-_id").One(&job)
if err != nil {
fmt.Println(err)
}
id := job.Id + 1
j = Job{
Id: id,
AttackMode: AttackMode,
HashType: HashType,
HashFile: HashFile,
Mask: Mask,
Start: 0,
Finish: max,
Pause: false,
Name: name,
//Tasks: []JobSub{},
}
j.save(con)
con.Close()
return
}