Skip to content

Commit

Permalink
add moore detailed logs
Browse files Browse the repository at this point in the history
  • Loading branch information
MahdiAw committed Apr 12, 2023
1 parent a3703da commit 0528c54
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 74 deletions.
74 changes: 60 additions & 14 deletions client/api.go
Expand Up @@ -21,29 +21,75 @@ type CampAPI struct {
Settings CampSettings `json:"camp_settings"`
}

func (camp CampAPI) Equals(c2 CampAPI) bool {
if camp.Leader.Name != c2.Leader.Name {
return false
func compareMembers(first []SoldierAPI, second []SoldierAPI) ([]SoldierAPI, []SoldierAPI) {
firstMap := make(map[string]string)
secondMap := make(map[string]string)

// Count members in first slice
for _, member := range first {
firstMap[member.Ip] = member.Name
}
if len(camp.Soldiers) != len(c2.Soldiers) {
return false

// Count members in second slice
for _, member := range second {
secondMap[member.Ip] = member.Name
}
for i, soldier := range camp.Soldiers {
if soldier.Name != c2.Soldiers[i].Name {
return false

added := make([]SoldierAPI, 0)
removed := make([]SoldierAPI, 0)

// Check for removed members
for ip, name := range firstMap {
if _, ok := secondMap[ip]; !ok {
removed = append(removed, SoldierAPI{Name: name, Ip: ip})
}
if soldier.Ip != c2.Soldiers[i].Ip {
return false
}

// Check for added members
for ip, name := range secondMap {
if _, ok := firstMap[ip]; !ok {
added = append(added, SoldierAPI{Name: name, Ip: ip})
}
}

return added, removed
}

func (camp CampAPI) Equals(c2 CampAPI) (yes bool, message string) {
message = ""
yes = true
if camp.Leader.Name != c2.Leader.Name {
yes = false
message += "leader changed: " + c2.Leader.Name + "\n"
}
// check if set of soldiers is the same if not give me the difference
added, removed := compareMembers(camp.Soldiers, c2.Soldiers)
if len(added) > 0 {
yes = false
message += "soldier left: "
for _, soldier := range added {
message += soldier.Name + "\n"
}
}
if len(removed) > 0 {
yes = false
message += "soldier joined: "
for _, soldier := range removed {
message += soldier.Name + "\n"
}
}

if camp.Settings.Status != c2.Settings.Status {
return false
yes = false
message += "+" + c2.Settings.Status + "\n"
}
if camp.Settings.VictimServer != c2.Settings.VictimServer {
return false
yes = false
message += "victim changed: " + c2.Settings.VictimServer + "\n"
}
if camp.Settings.DDOSType != c2.Settings.DDOSType {
return false
yes = false
message += "ddos type changed: " + c2.Settings.DDOSType + "\n"
}
return true
return yes, message
}
10 changes: 2 additions & 8 deletions client/client.go
Expand Up @@ -84,22 +84,16 @@ func (c *Client) ListenAndDo(ChangedDataChan chan CampAPI, logChan chan string)
var cmp CampAPI
for {
cmp = c.GetCamp()
if !cmp.Equals(prevCmp) {
if yes, message := cmp.Equals(prevCmp); !yes {
select {
case <-ChangedDataChan:
default:
}
ChangedDataChan <- cmp
if cmp.Settings.DDOSType != prevCmp.Settings.DDOSType {
logChan <- "change attack mode " + cmp.Settings.DDOSType
}
logChan <- message
if cmp.Settings.Status == "attacking" {
go StartAttack(cmp.Settings.VictimServer, cmp.Settings.DDOSType, stopchan, logChan)
}
if cmp.Settings.VictimServer != prevCmp.Settings.VictimServer {
logChan <- "Victim server changed to " + cmp.Settings.VictimServer
}

if cmp.Settings.Status == "stopped" {
select {
case <-stopchan:
Expand Down
106 changes: 54 additions & 52 deletions client/leader.go
Expand Up @@ -32,57 +32,6 @@ func (l *Leader) Shutdown() error {
}
return errors.New("error in shutting down")
}
func (l *Leader) ListenChangeView(changedDataChan chan CampAPI) {
defer func() {
if r := recover(); r != nil {

color.Red("Dispatcher server is stopped")
os.Exit(0)
}
}()
prevCamp := l.GetCamp()
changedDataChan <- prevCamp
for {
camp := l.GetCamp()
if !camp.Equals(prevCamp) {
select {
case <-changedDataChan:
default:
}
changedDataChan <- camp
}
time.Sleep(1 * time.Second)
}
}
func (l *Leader) Start() {
func() {
defer func() {
if r := recover(); r != nil {
color.Red("Dispatcher server is not running")
os.Exit(0)
}
}()
err := l.Ping()
if err != nil {
panic(err)
}
}()

var changedDataChan = make(chan CampAPI, 1)
logChan := make(chan string, 10)
wg := sync.WaitGroup{}
wg.Add(1)

go func() {
l.ListenChangeView(changedDataChan)
wg.Done()
}()
go func() {
l.StartLeaderView(changedDataChan, logChan)
wg.Done()
}()
wg.Wait()
}
func (l *Leader) RemoveFromCamp(password string) error {
//delete request to dispatcher server /camp/
//with body {name: c.Name}
Expand All @@ -106,7 +55,6 @@ func (l *Leader) RemoveFromCamp(password string) error {
return errors.New(msg)
}
}

func (l *Leader) UpdateCampSettings(settings CampSettings) error {
//put request to dispatcher server /camp/
//convert settings to json and put it in the body
Expand Down Expand Up @@ -134,3 +82,57 @@ func (l *Leader) UpdateCampSettings(settings CampSettings) error {
return errors.New(msg)
}
}
func (l *Leader) ListenChangeView(changedDataChan chan CampAPI, logChan chan string) {
defer func() {
if r := recover(); r != nil {
color.Red("Dispatcher server is stopped")
os.Exit(0)
}
}()
prevCamp := l.GetCamp()
changedDataChan <- prevCamp
for {
camp := l.GetCamp()
if yes, message := camp.Equals(prevCamp); !yes {
select {
case <-changedDataChan:
default:
}

changedDataChan <- camp
logChan <- message
prevCamp = camp
}
time.Sleep(2 * time.Second)
}
}

func (l *Leader) Start() {
func() {
defer func() {
if r := recover(); r != nil {
color.Red("Dispatcher server is not running")
os.Exit(0)
}
}()
err := l.Ping()
if err != nil {
panic(err)
}
}()

var changedDataChan = make(chan CampAPI, 1)
logChan := make(chan string, 10)
wg := sync.WaitGroup{}
wg.Add(1)

go func() {
l.ListenChangeView(changedDataChan, logChan)
wg.Done()
}()
go func() {
l.StartLeaderView(changedDataChan, logChan)
wg.Done()
}()
wg.Wait()
}

0 comments on commit 0528c54

Please sign in to comment.