this is based on calsyslab project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

345 lines
8.7 KiB

1 year ago
  1. __author__ = 'DarkWeb'
  2. import psycopg2
  3. import traceback
  4. import time
  5. from datetime import date
  6. '''
  7. user
  8. add
  9. forum_id
  10. user_reputation
  11. status_user
  12. interest_user
  13. post
  14. remove
  15. user_reputation
  16. status_user
  17. interest_user
  18. '''
  19. def connectDataBase():
  20. try:
  21. return psycopg2.connect(host='localhost', user='postgres', password='password', dbname='darkweb_markets_forums')
  22. except:
  23. print ("Data base (darkweb_forums) not found.")
  24. raise SystemExit
  25. def verifyForum(cur, nameForum):
  26. try:
  27. cur.execute("select id from forums where name = %(nameForum)s limit 1", {'nameForum': nameForum})
  28. recset = cur.fetchall()
  29. if recset:
  30. return recset[0][0]
  31. else:
  32. return 0
  33. except:
  34. trace = traceback.format_exc()
  35. print (trace)
  36. def verifyBoard(cur, forum, nameBoard):
  37. try:
  38. cur.execute("select id from boards where forum_id = %(forum)s and name = %(nameBoard)s limit 1",
  39. {'forum': forum, 'nameBoard': nameBoard})
  40. recset = cur.fetchall()
  41. if recset:
  42. return recset[0][0]
  43. else:
  44. return 0
  45. except:
  46. trace = traceback.format_exc()
  47. print (trace)
  48. def verifyTopic(cur, forum, board, nameTopic):
  49. try:
  50. cur.execute("select id from topics where forum_id = %(forum)s and board_id = %(board)s and "
  51. "name = %(nameTopic)s limit 1",{'forum': forum, 'board': board, 'nameTopic': nameTopic})
  52. recset = cur.fetchall()
  53. if recset:
  54. return recset[0][0]
  55. else:
  56. return 0
  57. except:
  58. trace = traceback.format_exc()
  59. print (trace)
  60. def verifyUser(cur, nameUser):
  61. try:
  62. cur.execute("select id from users where name = %(nameUser)s limit 1", {'nameUser': nameUser})
  63. recset = cur.fetchall()
  64. if recset:
  65. return recset[0][0]
  66. else:
  67. return 0
  68. except:
  69. trace = traceback.format_exc()
  70. print (trace)
  71. def getLastForum(cur):
  72. try:
  73. cur.execute("select id from forums order by id desc limit 1")
  74. recset = cur.fetchall()
  75. if recset:
  76. return recset[0][0]
  77. else:
  78. return 0
  79. except:
  80. trace = traceback.format_exc()
  81. print (trace)
  82. def getLastBoard(cur):
  83. try:
  84. cur.execute("select id from boards order by id desc limit 1")
  85. recset = cur.fetchall()
  86. if recset:
  87. return recset[0][0]
  88. else:
  89. return 0
  90. except:
  91. trace = traceback.format_exc()
  92. print (trace)
  93. def getLastTopic(cur):
  94. try:
  95. cur.execute("select id from topics order by id desc limit 1")
  96. recset = cur.fetchall()
  97. if recset:
  98. return recset[0][0]
  99. else:
  100. return 0
  101. except:
  102. trace = traceback.format_exc()
  103. print (trace)
  104. def getLastUser(cur):
  105. try:
  106. cur.execute("select id from Users order by id desc")
  107. recset = cur.fetchall()
  108. if recset:
  109. return recset[0][0]
  110. else:
  111. return 0
  112. except:
  113. trace = traceback.format_exc()
  114. print (trace)
  115. def getLastPost(cur):
  116. try:
  117. cur.execute("select id from Posts order by id desc limit 1")
  118. recset = cur.fetchall()
  119. if recset:
  120. return recset[0][0]
  121. else:
  122. return 0
  123. except:
  124. trace = traceback.format_exc()
  125. print (trace)
  126. def create_forum(cur, row):
  127. forum = verifyForum(cur, row[0])
  128. if not forum:
  129. forum = int(getLastForum(cur) + 1)
  130. sql = "Insert into forums (id, name, date_Inserted) Values (%s, %s, %s)"
  131. recset = [forum, row[0], time.asctime()]
  132. cur.execute(sql, recset)
  133. return forum
  134. def create_board(cur, row, forum):
  135. board = verifyBoard(cur, forum, row[2])
  136. if not board:
  137. board = int(getLastBoard(cur) + 1)
  138. sql = "Insert into boards (id, forum_id, name, date_inserted) Values (%s, %s, %s, %s)"
  139. recset = [board, forum, row[2], time.asctime()]
  140. cur.execute(sql, recset)
  141. return board
  142. def create_topic(cur, row, forum, board, user):
  143. topic = verifyTopic(cur, board, forum, row[2])
  144. if not topic:
  145. topic = int(getLastTopic(cur) + 1)
  146. sql = "Insert into topics (id, forum_id, board_id, author_id, name, classification, date_added, date_inserted) " \
  147. "Values (%s, %s, %s, %s, %s, %s, %s, %s)"
  148. recset = [topic, forum, board, user, row[1], row[17], row[6] if row[6]!= '-1' else None, time.asctime()]
  149. cur.execute(sql, recset)
  150. return topic
  151. def create_user(cur, nameUser):
  152. user = verifyUser(cur, nameUser)
  153. if not user:
  154. user = int(getLastUser(cur) + 1)
  155. sql = "Insert into users (id, name, date_Inserted) Values (%s, %s, %s)"
  156. recset = [user, nameUser, time.asctime()]
  157. cur.execute(sql, recset)
  158. return user
  159. def create_posts(cur, row, forum, board, topic):
  160. if row[8] != "-1":
  161. for i in range(len(row[8])):
  162. id = int(getLastPost(cur) + 1)
  163. user = create_user(cur, row[9][i])
  164. sql = "Insert into posts (id, forum_id, board_id, topic_id, user_id, content, rule, date_added, reputation_user, " \
  165. "status_user, feedback_user, interest_user, date_inserted) Values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
  166. recset = [id, forum, board, topic, user, row[8][i] if row[8][i]!= '-1' else None,
  167. row[14][i] if row[14][i]!= '-1' else None, row[10][i] if row[10][i]!= '-1' else None,
  168. row[13][i] if row[13][i]!= '-1' else None, row[12][i] if row[12][i]!= '-1' else None,
  169. row[11][i] if row[11][i]!= '-1' else None, row[15][i] if row[15][i]!= '-1' else None,
  170. str("%02d" %date.today().month) + "/" + str("%02d" %date.today().day) + "/" +
  171. str("%04d" %date.today().year) + " " + time.strftime("%I:%M:%S")]
  172. cur.execute(sql, recset)
  173. def create_database(cur, con):
  174. try:
  175. sql = "create table forums (id integer NOT NULL, name character varying(255) NOT NULL, " \
  176. "date_inserted timestamp(6) with time zone NOT NULL, constraint forums_pk primary key (id))"
  177. cur.execute(sql)
  178. sql = "create table boards (id integer NOT NULL, forum_id integer NOT NULL, name character varying(255) NOT NULL," \
  179. "date_inserted timestamp(6) with time zone NOT NULL, constraint boards_pk primary key (id), " \
  180. "constraint boards_forum_id_fkey foreign key (forum_id) references forums (id))"
  181. cur.execute(sql)
  182. sql = "create table users (id integer NOT NULL, name character varying(255) NOT NULL, " \
  183. "date_inserted timestamp(6) with time zone NOT NULL, constraint users_pk primary key (id))"
  184. cur.execute(sql)
  185. sql = "create table topics(id integer NOT NULL, forum_id integer NOT NULL, board_id integer NOT NULL, " \
  186. "author_id integer NOT NULL, name character varying(255) NOT NULL, classification double precision not null, " \
  187. "date_added timestamp(6) with time zone, date_inserted timestamp(6) with time zone NOT NULL, " \
  188. "constraint topics_pk primary key (id), constraint topics_author_id_fkey foreign key (author_id) references users (id), " \
  189. "constraint topics_board_id_fkey foreign key (board_id) references boards (id), " \
  190. "constraint topics_forum_id_fkey foreign key (forum_id) references forums (id))"
  191. cur.execute(sql)
  192. sql = "create table posts(id integer NOT NULL, forum_id integer NOT NULL, board_id integer NOT NULL, " \
  193. "topic_id integer NOT NULL, user_id integer NOT NULL, content character varying(100000), rule character varying(5000), " \
  194. "reputation_user character varying(100), status_user character varying(255), feedback_user integer, " \
  195. "interest_user character varying(1000), date_added timestamp(6) with time zone, date_inserted timestamp(6) with time zone NOT NULL, " \
  196. "constraint posts_pk primary key (id), constraint posts_author_id_fkey foreign key (user_id) references users (id), " \
  197. "constraint posts_board_id_fkey foreign key (board_id) references boards (id), " \
  198. "constraint posts_forum_id_fkey foreign key (forum_id) references forums (id)," \
  199. "constraint posts_topic_id_fkey foreign key (topic_id) references topics (id))"
  200. cur.execute(sql)
  201. con.commit()
  202. except:
  203. con.rollback()
  204. trace = traceback.format_exc()
  205. if (trace.find("already exists")==-1):
  206. print ("There was a problem during the database creation." )
  207. raise SystemExit