Compare commits
	
		
			2 Commits
		
	
	
		
			845583e06b
			...
			92340069b1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 92340069b1 | |||
| 4342aa3901 | 
| @ -37,11 +37,14 @@ func handleTelnetConn(bufConn bufferedConn) { | |||||||
| 			fmt.Fprintf(os.Stdout, "Ending socket\n") | 			fmt.Fprintf(os.Stdout, "Ending socket\n") | ||||||
| 
 | 
 | ||||||
| 			if nil != u { | 			if nil != u { | ||||||
| 				delTcpChat <- *u | 				cleanTelnet <- *u | ||||||
| 			} | 			} | ||||||
| 			break | 			break | ||||||
| 		} | 		} | ||||||
| 		buf := buffer[:count] | 		msg := string(buffer[:count]) | ||||||
|  | 		if "" == strings.TrimSpace(msg) { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
| 		// Rate Limit: Reasonable poor man's DoS prevention (Part 1) | 		// Rate Limit: Reasonable poor man's DoS prevention (Part 1) | ||||||
| 		// A human does not send messages super fast and blocking the | 		// A human does not send messages super fast and blocking the | ||||||
| @ -63,7 +66,7 @@ func handleTelnetConn(bufConn bufferedConn) { | |||||||
| 				//fmt.Fprintf(os.Stdout, "buf{%s}\n", buf[:count]) | 				//fmt.Fprintf(os.Stdout, "buf{%s}\n", buf[:count]) | ||||||
| 
 | 
 | ||||||
| 				// TODO use safer email testing | 				// TODO use safer email testing | ||||||
| 				email = strings.TrimSpace(string(buf[:count])) | 				email = strings.TrimSpace(msg) | ||||||
| 				emailParts := strings.Split(email, "@") | 				emailParts := strings.Split(email, "@") | ||||||
| 				if 2 != len(emailParts) { | 				if 2 != len(emailParts) { | ||||||
| 					fmt.Fprintf(bufConn, "Email: ") | 					fmt.Fprintf(bufConn, "Email: ") | ||||||
| @ -120,7 +123,7 @@ func handleTelnetConn(bufConn bufferedConn) { | |||||||
| 				continue | 				continue | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			if code != strings.TrimSpace(string(buf[:count])) { | 			if code != strings.TrimSpace(msg) { | ||||||
| 				fmt.Fprintf(bufConn, "Incorrect Code\nAuth Code: ") | 				fmt.Fprintf(bufConn, "Incorrect Code\nAuth Code: ") | ||||||
| 			} else { | 			} else { | ||||||
| 				authn = true | 				authn = true | ||||||
| @ -132,7 +135,7 @@ func handleTelnetConn(bufConn bufferedConn) { | |||||||
| 					userCount: make(chan int, 1), | 					userCount: make(chan int, 1), | ||||||
| 					newMsg:    make(chan string, 10), // reasonably sized | 					newMsg:    make(chan string, 10), // reasonably sized | ||||||
| 				} | 				} | ||||||
| 				authTcpChat <- *u | 				authTelnet <- *u | ||||||
| 				// prevent data race on len(myRawConns) | 				// prevent data race on len(myRawConns) | ||||||
| 				// XXX (there can't be a race between these two lines, right?) | 				// XXX (there can't be a race between these two lines, right?) | ||||||
| 				count := <-u.userCount | 				count := <-u.userCount | ||||||
| @ -170,7 +173,7 @@ func handleTelnetConn(bufConn bufferedConn) { | |||||||
| 		broadcastMsg <- myMsg{ | 		broadcastMsg <- myMsg{ | ||||||
| 			ReceivedAt: time.Now(), | 			ReceivedAt: time.Now(), | ||||||
| 			sender:     bufConn, | 			sender:     bufConn, | ||||||
| 			Message:    string(buf[0:count]), | 			Message:    strings.TrimRight(msg, "\r\n"), | ||||||
| 			Channel:    "general", | 			Channel:    "general", | ||||||
| 			User:       email, | 			User:       email, | ||||||
| 		} | 		} | ||||||
| @ -191,9 +194,9 @@ func handleTelnetBroadcast(u *tcpUser) { | |||||||
| 		// https://blog.cloudflare.com/the-complete-guide-to-golang-net-http-timeouts/ | 		// https://blog.cloudflare.com/the-complete-guide-to-golang-net-http-timeouts/ | ||||||
| 		timeoutDuration := 2 * time.Second | 		timeoutDuration := 2 * time.Second | ||||||
| 		u.bufConn.SetWriteDeadline(time.Now().Add(timeoutDuration)) | 		u.bufConn.SetWriteDeadline(time.Now().Add(timeoutDuration)) | ||||||
| 		_, err := fmt.Fprintf(u.bufConn, msg) | 		_, err := fmt.Fprintf(u.bufConn, msg+"\r\n") | ||||||
| 		if nil != err { | 		if nil != err { | ||||||
| 			delTcpChat <- *u | 			cleanTelnet <- *u | ||||||
| 			break | 			break | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -96,8 +96,8 @@ var broadcastMsg chan myMsg | |||||||
| 
 | 
 | ||||||
| var virginConns chan net.Conn | var virginConns chan net.Conn | ||||||
| var wantsServerHello chan bufferedConn | var wantsServerHello chan bufferedConn | ||||||
| var authTcpChat chan tcpUser | var authTelnet chan tcpUser | ||||||
| var delTcpChat chan tcpUser | var cleanTelnet chan tcpUser | ||||||
| var gotClientHello chan bufferedConn | var gotClientHello chan bufferedConn | ||||||
| 
 | 
 | ||||||
| // Http | // Http | ||||||
| @ -272,8 +272,6 @@ func sendAuthCode(cnf ConfMailer, to string) (string, error) { | |||||||
| 	} | 	} | ||||||
| 	if resp.StatusCode < 200 || resp.StatusCode >= 300 || "{" != string(body[0]) { | 	if resp.StatusCode < 200 || resp.StatusCode >= 300 || "{" != string(body[0]) { | ||||||
| 		fmt.Fprintf(os.Stdout, "[Mailgun] Uh-oh...\n[Maigun] Baby Brent says: %s\n", body) | 		fmt.Fprintf(os.Stdout, "[Mailgun] Uh-oh...\n[Maigun] Baby Brent says: %s\n", body) | ||||||
| 	} else { |  | ||||||
| 		fmt.Fprintf(os.Stdout, "[Mailgun] Status: %d", resp.StatusCode) |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return code, nil | 	return code, nil | ||||||
| @ -322,7 +320,7 @@ func main() { | |||||||
| 	// TCP & Authentication | 	// TCP & Authentication | ||||||
| 	myRawConns := make(map[bufferedConn]tcpUser) | 	myRawConns := make(map[bufferedConn]tcpUser) | ||||||
| 	wantsServerHello = make(chan bufferedConn, 128) | 	wantsServerHello = make(chan bufferedConn, 128) | ||||||
| 	authTcpChat = make(chan tcpUser, 128) | 	authTelnet = make(chan tcpUser, 128) | ||||||
| 
 | 
 | ||||||
| 	// HTTP & Authentication | 	// HTTP & Authentication | ||||||
| 	myAuthReqs := make(map[string]authReq) | 	myAuthReqs := make(map[string]authReq) | ||||||
| @ -409,7 +407,7 @@ func main() { | |||||||
| 		case conn := <-virginConns: | 		case conn := <-virginConns: | ||||||
| 			// This is short lived | 			// This is short lived | ||||||
| 			go handleConnection(conn) | 			go handleConnection(conn) | ||||||
| 		case u := <-authTcpChat: | 		case u := <-authTelnet: | ||||||
| 			// allow to receive messages | 			// allow to receive messages | ||||||
| 			// (and be counted among the users) | 			// (and be counted among the users) | ||||||
| 			myRawConns[u.bufConn] = u | 			myRawConns[u.bufConn] = u | ||||||
| @ -433,13 +431,16 @@ func main() { | |||||||
| 			if ok { | 			if ok { | ||||||
| 				ar.Chan <- av | 				ar.Chan <- av | ||||||
| 			} else { | 			} else { | ||||||
|  | 				// sending empty object so that I can still send a copy | ||||||
|  | 				// rather than a pointer above. Maybe not the right way | ||||||
|  | 				// to do this, but it works for now. | ||||||
| 				ar.Chan <- authReq{} | 				ar.Chan <- authReq{} | ||||||
| 			} | 			} | ||||||
| 		case ar := <-delAuthReqs: | 		case ar := <-delAuthReqs: | ||||||
| 			delete(myAuthReqs, ar.Cid) | 			delete(myAuthReqs, ar.Cid) | ||||||
| 		case bufConn := <-wantsServerHello: | 		case bufConn := <-wantsServerHello: | ||||||
| 			go handleTelnetConn(bufConn) | 			go handleTelnetConn(bufConn) | ||||||
| 		case u := <-delTcpChat: | 		case u := <-cleanTelnet: | ||||||
| 			// we can safely ignore this error, if any | 			// we can safely ignore this error, if any | ||||||
| 			close(u.newMsg) | 			close(u.newMsg) | ||||||
| 			u.bufConn.Close() | 			u.bufConn.Close() | ||||||
| @ -473,7 +474,7 @@ func main() { | |||||||
| 			// I wonder if we could use IP detection to get the client's tz | 			// I wonder if we could use IP detection to get the client's tz | ||||||
| 			// ... could probably make time for this in the authentication loop | 			// ... could probably make time for this in the authentication loop | ||||||
| 			zone, _ := msg.ReceivedAt.Zone() | 			zone, _ := msg.ReceivedAt.Zone() | ||||||
| 			fmt.Fprintf(os.Stdout, tf+" [%s] (%s):\n\t%s", | 			fmt.Fprintf(os.Stdout, tf+" [%s] (%s): %s\r\n", | ||||||
| 				t.Year(), t.Month(), t.Day(), | 				t.Year(), t.Month(), t.Day(), | ||||||
| 				t.Hour(), t.Minute(), t.Second(), zone, | 				t.Hour(), t.Minute(), t.Second(), zone, | ||||||
| 				sender, | 				sender, | ||||||
| @ -497,7 +498,7 @@ func main() { | |||||||
| 					// In the case that it's experiencing network issues, | 					// In the case that it's experiencing network issues, | ||||||
| 					// well, these things happen when you're having network issues. | 					// well, these things happen when you're having network issues. | ||||||
| 					// It can reconnect. | 					// It can reconnect. | ||||||
| 					delTcpChat <- u | 					cleanTelnet <- u | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				/* | 				/* | ||||||
| @ -512,7 +513,7 @@ func main() { | |||||||
| 						conn.SetWriteDeadline(time.Now().Add(timeoutDuration)) | 						conn.SetWriteDeadline(time.Now().Add(timeoutDuration)) | ||||||
| 						_, err := fmt.Fprintf(conn, msg) | 						_, err := fmt.Fprintf(conn, msg) | ||||||
| 						if nil != err { | 						if nil != err { | ||||||
| 							delTcpChat <- u | 							cleanTelnet <- u | ||||||
| 						} | 						} | ||||||
| 					}(conn) | 					}(conn) | ||||||
| 				*/ | 				*/ | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user