Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Hiro
GetTor
Commits
dd799fd5
Commit
dd799fd5
authored
Mar 01, 2019
by
Hiro
🏄
Browse files
Update how Gettor communicates with DB
Update scripts
parent
28f71d53
Changes
4
Hide whitespace changes
Inline
Side-by-side
README.md
View file @
dd799fd5
...
...
@@ -33,7 +33,7 @@ Here is a list of the main goals the new GetTor should accomplish:
Installing GetTor
=================
WORKON_HOME=${HOME}/
.virtual
env
s
WORKON_HOME=${HOME}/
v
env
export WORKON_HOME
mkdir -p $WORKON_HOME
source $(which virtualenvwrapper.sh)
...
...
@@ -46,6 +46,7 @@ without exiting the shell, do ``$ deactivate``.
export PYTHONPATH=$PYTHONPATH:${VIRTUAL_ENV}/lib/python/site-packages
$ ./scripts/create_db
$ ./bin/gettor_service start
...
...
bin/gettor_service
View file @
dd799fd5
...
...
@@ -10,12 +10,9 @@
#
# :license: This is Free Software. See LICENSE for license information.
source
venv/bin/activate
alias
twistd3
=
"venv/bin/twistd"
case
"
$1
"
in
start
)
twistd
3
--python
=
scripts/gettor
--logfile
=
log/gettor.log
--pidfile
=
gettor.pid
twistd
--python
=
scripts/gettor
--logfile
=
log/gettor.log
--pidfile
=
gettor.pid
;;
stop
)
kill
-INT
`
cat
gettor.pid
`
...
...
gettor/services/email/sendmail.py
View file @
dd799fd5
...
...
@@ -21,7 +21,7 @@ from email import mime
from
twisted.internet
import
defer
from
twisted.mail.smtp
import
sendmail
from
...utils.db
import
DB
from
...utils.db
import
SQLite3
as
DB
from
...utils.commons
import
log
...
...
gettor/utils/db.py
View file @
dd799fd5
...
...
@@ -2,131 +2,87 @@
#
# This file is part of GetTor, a Tor Browser distribution system.
#
# :authors:
I
sra
el Leiva <ilv@riseup.net
>
# :authors:
i
sra
<ilv@torproject.org
>
# see also AUTHORS file
#
# :copyright: (c) 2008-2014, The Tor Project, Inc.
# (c) 2014, Israel Leiva
#
# :license: This is Free Software. See LICENSE for license information.
import
time
import
sqlite3
import
datetime
"""DB interface for comunicating with sqlite3"""
class
DBError
(
Exception
):
pass
class
DB
(
object
):
"""
Public methods:
add_request(): add a request to the database (requests table).
get_user(): get user info from the database (users table).
add_user(): add a user to the database (users table).
update_user(): update a user on the database (users table).
Exceptions:
DBError: Something went wrong when trying to connect/interact
with the database.
"""
def
__init__
(
self
,
dbname
):
"""Create a new db object.
:param: dbname (string) the path of the database.
"""
self
.
dbname
=
dbname
def
connect
(
self
):
""" """
try
:
self
.
con
=
sqlite3
.
connect
(
self
.
dbname
)
self
.
con
.
row_factory
=
sqlite3
.
Row
except
sqlite3
.
Error
as
e
:
raise
DBError
(
"%s"
%
str
(
e
))
def
add_request
(
self
):
"""Add a request to the database.
For now we just count the number of requests we have received so far.
"""
try
:
with
self
.
con
:
cur
=
self
.
con
.
cursor
()
cur
.
execute
(
"SELECT counter FROM requests WHERE id = 1"
)
row
=
cur
.
fetchone
()
if
row
:
cur
.
execute
(
"UPDATE requests SET counter=? WHERE id=?"
,
(
row
[
'counter'
]
+
1
,
1
))
else
:
cur
.
execute
(
"INSERT INTO requests VALUES(?, ?)"
,
(
1
,
1
))
except
sqlite3
.
Error
as
e
:
raise
DBError
(
"%s"
%
str
(
e
))
def
get_user
(
self
,
user
,
service
):
"""Get user info from the database.
:param: user (string) unique (hashed) string that represents the user.
:param: service (string) the service related to the user (e.g. SMTP).
:return: (dict) the user information, with fields as indexes
(e.g. row['user']).
"""
try
:
with
self
.
con
:
cur
=
self
.
con
.
cursor
()
cur
.
execute
(
"SELECT * FROM users WHERE id =? AND service =?"
,
(
user
,
service
))
row
=
cur
.
fetchone
()
return
row
except
sqlite3
.
Error
as
e
:
raise
DBError
(
"%s"
%
str
(
e
))
def
add_user
(
self
,
user
,
service
,
blocked
):
"""Add a user to the database.
We add a user with one 'times' and the current time as 'last_request'
by default.
:param: user (string) unique (hashed) string that represents the user.
:param: service (string) the service related to the user (e.g. SMTP).
:param: blocked (int) one if user is blocked, zero otherwise.
"""
try
:
with
self
.
con
:
cur
=
self
.
con
.
cursor
()
cur
.
execute
(
"INSERT INTO users VALUES(?,?,?,?,?)"
,
(
user
,
service
,
1
,
blocked
,
str
(
time
.
time
())))
except
sqlite3
.
Error
as
e
:
raise
DBError
(
"%s"
%
str
(
e
))
def
update_user
(
self
,
user
,
service
,
times
,
blocked
):
"""Update a user on the database.
We update the user info with the current time as 'last_request'.
:param: user (string) unique (hashed) string that represents the user.
:param: service (string) the service related to the user (e.g. SMTP).
:param: times (int) the number of requests the user has made.
:param: blocked (int) one if user is blocked, zero otherwise.
"""
try
:
with
self
.
con
:
cur
=
self
.
con
.
cursor
()
cur
.
execute
(
"UPDATE users SET times =?, blocked =?,"
" last_request =? WHERE id =? AND service =?"
,
(
times
,
blocked
,
str
(
time
.
time
()),
user
,
service
))
except
sqlite3
.
Error
as
e
:
raise
DBError
(
"%s"
%
str
(
e
))
from
__future__
import
absolute_import
from
datetime
import
datetime
from
twisted.python
import
log
from
twisted.enterprise
import
adbapi
class
SQLite3
(
object
):
"""
"""
def
__init__
(
self
,
dbname
):
"""Constructor."""
self
.
dbpool
=
adbapi
.
ConnectionPool
(
"sqlite3"
,
dbname
,
check_same_thread
=
False
)
def
query_callback
(
self
,
results
=
None
):
""" """
log
.
msg
(
"Database query executed successfully."
)
return
results
def
query_errback
(
self
,
error
=
None
):
""" """
if
error
:
log
.
msg
(
"Database error: {}"
.
format
(
error
))
return
None
def
new_request
(
self
,
id
,
command
,
service
,
platform
,
date
,
status
):
""" """
query
=
"INSERT INTO requests VALUES(?, ?, ?, ?, ?, ?)"
return
self
.
dbpool
.
runQuery
(
query
,
(
id
,
command
,
platform
,
service
,
date
,
status
)
).
addCallback
(
self
.
query_callback
).
addErrback
(
self
.
query_errback
)
def
get_requests
(
self
,
status
,
command
,
service
):
""" """
query
=
"SELECT * FROM requests WHERE service=? AND command=? AND "
\
"status = ?"
return
self
.
dbpool
.
runQuery
(
query
,
(
service
,
command
,
status
)
).
addCallback
(
self
.
query_callback
).
addErrback
(
self
.
query_errback
)
def
get_num_requests
(
self
,
id
,
service
):
""" """
query
=
"SELECT COUNT(rowid) FROM requests WHERE id=? AND service=?"
return
self
.
dbpool
.
runQuery
(
query
,
(
id
,
service
)
).
addCallback
(
self
.
query_callback
).
addErrback
(
self
.
query_errback
)
def
update_request
(
self
,
id
,
hid
,
status
,
service
,
date
):
""" """
query
=
"UPDATE requests SET id=?, status=? WHERE id=? AND "
\
"service=? AND date=?"
return
self
.
dbpool
.
runQuery
(
query
,
(
hid
,
status
,
id
,
service
,
date
)
).
addCallback
(
self
.
query_callback
).
addErrback
(
self
.
query_errback
)
def
update_stats
(
self
,
command
,
service
,
platform
=
None
):
""" """
now_str
=
datetime
.
now
().
strftime
(
"%Y%m%d"
)
query
=
"REPLACE INTO stats(num_requests, platform, "
\
"command, service, date) VALUES(COALESCE((SELECT num_requests FROM stats "
\
"WHERE date=?)+1, 0), ?, ?, ?, ?) "
\
return
self
.
dbpool
.
runQuery
(
query
,
(
now_str
,
platform
,
command
,
service
,
now_str
)
).
addCallback
(
self
.
query_callback
).
addErrback
(
self
.
query_errback
)
def
get_links
(
self
,
platform
,
status
):
""" """
query
=
"SELECT * FROM links WHERE platform=? AND status=?"
return
self
.
dbpool
.
runQuery
(
query
,
(
platform
,
status
)
).
addCallback
(
self
.
query_callback
).
addErrback
(
self
.
query_errback
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment