Squid url redirector

Diff
anonymous

Diff

Differences From Artifact [5b0680413b]:

To Artifact [4873692447]:


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
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







+
+





-
+




-
+

-
+





-
+




-
+







			# yes this should be written this way, and yes, this is why I hate threading
			if len(self._queue) > 1 and self._lock.locked():
				self._lock.release()
			req = self._queue.pop(0)
			self._lock_queue.release()
			self._log.info('trying {}\n'.format(req[1]))
			result = self._db.check(req[2], req[1])
			#reply = '{}://{}/{}'.format(req[4], req[1], req[3])
			reply = '-'
			for row in result:
				if row != None and row[0] != None:
					if row[1] != None:
						self._log.info('trying regexp "{}" versus "{}"\n'.format(row[1], req[3]))
						if re.compile(row[1]).match(req[3]):
							writeline('{} 302:{}\n'.format(req[0], row[0]))
							reply = '302:' + row[0]
							break
						else:
							continue
					else:
						writeline('{} 302:{}\n'.format(req[0], row[0]))
						reply = '302:' + row[0]
						break
			writeline('{} {}://{}/{}\n'.format(req[0], req[4], req[1], req[3]))
			writeline('{} {}\n'.format(req[0], reply))

	def check(self, line):
		request = re.compile('^([0-9]+)\ (http|ftp):\/\/([-\w.:]+)\/([^ ]*)\ ([0-9.]+)\/(-|[\w\.]+)\ (-|\w+)\ (-|GET|HEAD|POST).*$').match(line)
		if request:
			id = request.group(1)
			proto = request.group(2)
			#proto = request.group(2)
			site = request.group(3)
			url_path = request.group(4)
			ip_address = request.group(5)
			self._lock_queue.acquire()
			self._queue.append((id, site, ip_address, url_path, proto))
			self._queue.append((id, site, ip_address, url_path))
			if self._lock.locked():
				self._lock.release()
			self._lock_queue.release()
			self._log.info('request {} queued ({})\n'.format(id, line))
		else:
			self._log.info('bad request\n')
			writeline(line)