Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "bufio"
- "database/sql"
- "fmt"
- _ "github.com/alexbrainman/odbc"
- "log"
- "net"
- "net/url"
- "os"
- "strings"
- )
- func main() {
- // Open connection to DB
- db, err := sql.Open("odbc", "DSN=dsn;UID=username;PWD=password")
- if err != nil {
- log.Fatal(err)
- }
- // Accept Standard Input
- scanner := bufio.NewScanner(os.Stdin)
- for scanner.Scan() {
- // Put the squid input into an array
- fields := strings.Fields(scanner.Text())
- // Database query variables
- var (
- blockReason int
- override int
- userType int
- exam int
- banned int
- realTime int
- typeOverride int
- )
- // Assorted variables and IP manipulation
- username := fields[2]
- ip := strings.TrimLeft(fields[1], "/")
- split := strings.Split(ip, ".")
- roomIP := split[2]
- // URL parsing and trimming
- url, err := url.Parse(fields[0])
- if err != nil {
- log.Fatal(err)
- }
- host, _, err := net.SplitHostPort(url.Host)
- if err != nil {
- host = url.Host
- }
- if strings.HasPrefix(host, "www.") {
- host = strings.TrimPrefix(host, "www.")
- }
- // Database query
- err = db.QueryRow(`SELECT TOP 1 ISNULL((SELECT reason FROM urlAddress WHERE urlAddress = ?),0) AS blockReason,
- (SELECT COUNT(*) FROM override O INNER JOIN urlAddress A ON O.add_id = A.add_id WHERE A.urlAddress = ? AND roomIP = ? AND DATEDIFF(SECOND, allowFrom, GETDATE()) >=0 AND DATEDIFF(SECOND, GETDATE(), allowTo) >= 0) AS override,
- ISNULL((SELECT userType FROM userCache WHERE userName = ?),1) AS userType,
- (SELECT COUNT(*) FROM userCache WHERE userName = ? AND userType = 4) AS exam,
- (SELECT COUNT(*) FROM userBanned WHERE userName = ?) AS banned,
- 1- (SELECT COUNT(*) FROM realTimeBan B INNER JOIN realTimeURL U ON B.radd_id = U.radd_id WHERE machineIP = ? AND urlAddress = ? AND DATEDIFF(MINUTE, GETDATE(), DATEADD(MINUTE, override, overrideTime)) >= 0) AS realTime,
- (SELECT COUNT(*) FROM userTypeOverride O INNER JOIN urlAddress A ON O.add_id = A.add_id WHERE A.urlAddress = ? AND userType = (SELECT userType FROM userCache WHERE userName = ?)) AS typeOverride
- `, host, host, roomIP, username, username, username, ip, host, host, username).Scan(&blockReason, &override, &userType, &exam, &banned, &realTime, &typeOverride)
- if err != nil {
- log.Fatal(err)
- }
- // Blocking
- if roomIP == "18" && host == "youtube.com" {
- if realTime != 1 {
- fmt.Println("")
- } else {
- fmt.Println("http://10.10.254.254/block.php")
- }
- }
- if blockReason == 0 && banned == 0 {
- fmt.Println("")
- } else {
- if exam == 1 {
- fmt.Println("http://10.10.254.254/exam.php")
- }
- if typeOverride != 1 {
- fmt.Println("http://10.10.254.254/block.php")
- } else {
- fmt.Println("")
- }
- }
- }
- // Close connection to DB
- defer db.Close()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement