Advertisement
Guest User

Untitled

a guest
Mar 1st, 2016
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 3.97 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.         "bufio"
  5.         "database/sql"
  6.         "fmt"
  7.         _ "github.com/alexbrainman/odbc"
  8.         "log"
  9.         "net"
  10.         "net/url"
  11.         "os"
  12.         "strings"
  13. )
  14.  
  15. func main() {
  16.         // Open connection to DB
  17.         db, err := sql.Open("odbc", "DSN=dsn;UID=username;PWD=password")
  18.         if err != nil {
  19.                 log.Fatal(err)
  20.         }
  21.  
  22.         // Accept Standard Input
  23.         scanner := bufio.NewScanner(os.Stdin)
  24.         for scanner.Scan() {
  25.                 // Put the squid input into an array
  26.                 fields := strings.Fields(scanner.Text())
  27.  
  28.                 // Database query variables
  29.                 var (
  30.                         blockReason  int
  31.                         override     int
  32.                         userType     int
  33.                         exam         int
  34.                         banned       int
  35.                         realTime     int
  36.                         typeOverride int
  37.                 )
  38.  
  39.                 // Assorted variables and IP manipulation
  40.                 username := fields[2]
  41.                 ip := strings.TrimLeft(fields[1], "/")
  42.                 split := strings.Split(ip, ".")
  43.                 roomIP := split[2]
  44.  
  45.                 // URL parsing and trimming
  46.                 url, err := url.Parse(fields[0])
  47.                 if err != nil {
  48.                         log.Fatal(err)
  49.                 }
  50.  
  51.                 host, _, err := net.SplitHostPort(url.Host)
  52.                 if err != nil {
  53.                         host = url.Host
  54.                 }
  55.      if strings.HasPrefix(host, "www.") {
  56.                         host = strings.TrimPrefix(host, "www.")
  57.                 }
  58.  
  59.                 // Database query
  60.                 err = db.QueryRow(`SELECT TOP 1 ISNULL((SELECT reason FROM urlAddress WHERE urlAddress = ?),0) AS blockReason,
  61.                 (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,
  62.                 ISNULL((SELECT userType FROM userCache WHERE userName = ?),1) AS userType,
  63.                 (SELECT COUNT(*) FROM userCache WHERE userName = ? AND userType = 4) AS exam,
  64.                 (SELECT COUNT(*) FROM userBanned WHERE userName = ?) AS banned,
  65.                 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,
  66.                 (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
  67.                 `, host, host, roomIP, username, username, username, ip, host, host, username).Scan(&blockReason, &override, &userType, &exam, &banned, &realTime, &typeOverride)
  68.                 if err != nil {
  69.                         log.Fatal(err)
  70.                 }
  71.  
  72.                 // Blocking
  73.                 if roomIP == "18" && host == "youtube.com" {
  74.                         if realTime != 1 {
  75.                                 fmt.Println("")
  76.                         } else {
  77.                                 fmt.Println("http://10.10.254.254/block.php")
  78.                         }
  79.                 }
  80.  
  81.                 if blockReason == 0 && banned == 0 {
  82.                         fmt.Println("")
  83.                 } else {
  84.                         if exam == 1 {
  85.                                 fmt.Println("http://10.10.254.254/exam.php")
  86.                         }
  87.                         if typeOverride != 1 {
  88.                                 fmt.Println("http://10.10.254.254/block.php")
  89.                         } else {
  90.                                 fmt.Println("")
  91.                         }
  92.                 }
  93.  
  94.         }
  95.  
  96.         // Close connection to DB
  97.         defer db.Close()
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement