From 2c3e4bb2dd9a245927ca4ecf39126d2a8889e7c0 Mon Sep 17 00:00:00 2001
From: System Administrator <apave001@gold.ac.uk>
Date: Wed, 19 Dec 2018 14:46:31 +0000
Subject: [PATCH] Initial Commit

---
 cgi-bin/.myserve_cat.py.swp                | Bin 0 -> 12288 bytes
 cgi-bin/__pycache__/myutils.cpython-35.pyc | Bin 0 -> 746 bytes
 cgi-bin/myserve_cat.py                     |  83 +++++++++++++++++++++
 cgi-bin/myservecat.py                      |   0
 cgi-bin/myutils.py                         |  30 ++++++++
 dump/catflucks/accounts.bson               | Bin 0 -> 11357 bytes
 dump/catflucks/accounts.metadata.json      |   1 +
 dump/catflucks/flucks.bson                 | Bin 0 -> 5150 bytes
 dump/catflucks/flucks.metadata.json        |   1 +
 dump/catflucks/images.bson                 | Bin 0 -> 4375 bytes
 dump/catflucks/images.metadata.json        |   1 +
 dump/catflucks/system.indexes.bson         | Bin 0 -> 215 bytes
 mysimpleServer.py                          |  26 +++++++
 13 files changed, 142 insertions(+)
 create mode 100644 cgi-bin/.myserve_cat.py.swp
 create mode 100644 cgi-bin/__pycache__/myutils.cpython-35.pyc
 create mode 100755 cgi-bin/myserve_cat.py
 create mode 100644 cgi-bin/myservecat.py
 create mode 100755 cgi-bin/myutils.py
 create mode 100644 dump/catflucks/accounts.bson
 create mode 100644 dump/catflucks/accounts.metadata.json
 create mode 100644 dump/catflucks/flucks.bson
 create mode 100644 dump/catflucks/flucks.metadata.json
 create mode 100644 dump/catflucks/images.bson
 create mode 100644 dump/catflucks/images.metadata.json
 create mode 100644 dump/catflucks/system.indexes.bson
 create mode 100755 mysimpleServer.py

diff --git a/cgi-bin/.myserve_cat.py.swp b/cgi-bin/.myserve_cat.py.swp
new file mode 100644
index 0000000000000000000000000000000000000000..85001640de113c39d8f680b7b15c483463167daf
GIT binary patch
literal 12288
zcmeI2F>fR_6vusZdvI_Z)lt37B4t-fcC!}{QM9`S$w^#+f|MNS6pqL<<DD5YV-L1x
zmn8~(2Si7~2RMm>jsgjZ1|$kVlt2wNrz@a<zh`z61maQy9_g>0v7evq-+Rwe6o(tH
z+<J+g?>)=#TxIOTuYWuI>I23;yTTYR`BZFd3|!a4o>)bjgRO^IG=1+Z9rj~6>n}e_
zt=<rk?MF$r9%iy%%#F}faTIaeE9Vz`^%kChCvYKw%1+j|uH4?dG1zdn?O=tTx_0}*
zVcx(K@B};oPrwuK1Uvyxz!UHU{yPM0d5OJ??L4yB(v8LMrN8_xKK+j;;0bsFo`5Id
z33vjYfG6Mycmke)C*TSE3kmR;v0qz^{dgIR$N&GAfB*md1Y<uzUqW9%??DN)1HAyP
zK~F>1q2C{8?0e{Q=ws*}^gc9&B$Plmp<QSPx(40H{ethHZ=r9XPoR$=4ZRL+K`YQ@
z=>B7j{Q}*C4xoMLI`rUC#y*9n&@MEFo`kMK53nD%rytzD{No9D0-k^;;0bsFo`5It
z{~%D7I+L~&4Ev#q=i^~NwM9M-x~xsAvSnq-s6x<0DJwL&PR3fxG39tqm8M7gFtKSS
z6PgKWX{MD-R)+o3`4PDh+pHA?L2sgT!EJ}KA~`ZTTB~1pZr8|I-H}ysG|8*z*mSAe
zWvwBnREx<d_=jt+0olyvVieSOVF`C(gYmw*7E4mh+~=^*$8b}Q57Nv~sg!oDlyXC%
z5R&T2L`)~A@KgvxJlBH9^PXEd24b0nWsZWA(*S+8d6{LgO-IjdY`|o}AqX(Z9aRz6
zf~J|6ITD;Sm$53aNuCH&6SQFZ#yM-9@0LashrMR!y-6nH4xI$`prb4fwrMYPcYkli
z9fvK8yK59=rXeNJKRBgsFH#kP2xx6`9tbm2-PUZ<&@8hl0e)0Rsqs`>%~F9ypF6}W
z;Wl%twXhkvARVq^;?=v0R-nL|>t?*3H3QYMxzc&v+@`Y1bC*bDQ_KRO=&I*+PONy#
zvKF$U?#U!+VXE9BTiTQ%-MAGPr&X1tq-qL=VC7szl{OgHF{!HZn3T-t2r3P_ESsFU
zffq-;@e26J<B&(ki~-c)39UY3cv0qJb(`>EvbWvafKKW3E?bPLLsQ4X^mvkJkzh?7
z)J7sKCKbyV<9c^hxYVEMWyB2vkmrb8rX-G%VLBMUD)Pt`lU20CZ4+@6++d92=(1s5
zfD8>t!Z91x**$(y<he6nS~sn1h=M~trCb|<#H??w1{ky$>*|zpE|XCpB-+mtb!B&N
z=ituEH|tV9>)27!V)^R_^HOZrajDON*W}+00yn|gK@f*^@*YJ>O6(K~*v78wcelxy
zTOM*F7^|^_M#)|i$1Fz3OQr2ub`yp=gFgk@WU)Z_3LGYi-mHY4yK@4y1=E5bBbd&9
zSsoPS+@OZ1Jj;2QyCX{@^b@4Fj9fu3R#D6=o8?HPX8t%_t{xYDSNfIFeRsoN$SIX`
Jn<}}<{s59+_Q3!E

literal 0
HcmV?d00001

diff --git a/cgi-bin/__pycache__/myutils.cpython-35.pyc b/cgi-bin/__pycache__/myutils.cpython-35.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..045c8e0d467591f624983cf3c1e4f4638910d7fc
GIT binary patch
literal 746
zcmZWnJ&)8d5FKYf6S&hhP*Ax*NGWc!chYG^gb;8bDh|XV0ZXxRV(%tLVn?>KtE}!C
z;LlJZ{ss+gS}OhmG)%H5I0;Mh<nerX-m`D+?Rnq7{eJhw0r&w|7W(i2&D=rY0CPkF
z+<}Zh?!epu!aKmb@CjqM>A}qJZ@*H{eU+q!=8Bh@poLcJlnX-{HNsN0q*|0lun1$N
zO|#TibXm&Srb?R2Qmkh5sZuM<F}6bFDmGT9az&$x+C<O|tHz%DQZSAeX+c?}O4~$o
zng}gIoFcKdFkujEHk)x#*+j{)(yM@rbx?@HG;lCEI-UmJPb3IFsjod#a-~kPR7e{)
zXU%G4aM4cC%w2?P1h$ppBY_Km*YXAsLToDy9+3|KZ{<F`IR`j%;DW$8ff*__^Sj%K
zzWAp{tfUkzacULPz`GwmqMTV4F(W*;;b%)NP3XDq^XLq7L;8>=OmdV2OW1!!NPBy$
z?ZhLbo~f8+i83}knobU<!S?nOt(6YxlBJp8O^;X$X2q@%ja%xcen&T~>t2D9+qoMv
zyUfb?z44uSf0t7`Jo*f}hiSi#gGA*bU<F%?$>cELa`V^0=Wpf?;#GPOr83B?=Fts4
zNbT`xaVf#|M%#S^7<9;pbcjcWUDweAJUR8d^<c5UAFx==2SwGgYv*gj?Fd((k0tf+
R-tPC^AEIZv2z_Vd`~ekT%18hJ

literal 0
HcmV?d00001

diff --git a/cgi-bin/myserve_cat.py b/cgi-bin/myserve_cat.py
new file mode 100755
index 0000000..ba914c6
--- /dev/null
+++ b/cgi-bin/myserve_cat.py
@@ -0,0 +1,83 @@
+#!/usr/bin/env python3
+
+from myutils import db_connect
+
+# make bson ObjectId class available for referencing 
+# bson objects inside a mongo query string
+from bson.objectid import ObjectId 
+from datetime import datetime
+# connect to database
+import cgi
+import cgitb
+cgitb.enable()
+form=cgi.FieldStorage()
+db = db_connect()
+
+# output some header html
+print("Content-Type: text/html\n")
+print("""<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<title>Hello Caflucks</title>
+</head>
+<body>
+<h1>Welcome to Catflucks</h1>""")
+
+
+# get one random document from images collection
+result = db.images.aggregate(
+	[{ '$sample': { 'size': 1 } }]
+)
+
+# if a result came back
+if result:
+	# iterate through objects in the cursor (should only be 1)
+	for img in result:
+		# pull out the img url and alt text
+		img_src = img['url']
+		img_alt = img['alt']
+		img_id = img['_id']
+
+	# find and count flucks with matching img_id and where is_flucked is 1
+	num_flucks = db.flucks.find( {"image_id": ObjectId(img_id), "is_flucked":1} ).count()
+	num_nice = db.flucks.find( {"image_id": ObjectId(img_id), "is_nice":1} ).count()
+	print("""<p>You are viewing a random image of a cat.</p>
+	<img src="{}" alt="{}" width=500>
+	<p>This poor cat has been flucked {} times already.</p>
+	<p>Nice Points {}</p>
+	<a href="/cgi-bin/myserve_cat.py" title="serve cat">Serve new cat</a>
+	""".format( img_src, img_alt, str(num_flucks), str(num_nice) ))
+else:
+	print("<p>Oops. Something went wrong!</p>")
+
+# output some footer html output a form with skip/fluck buttons
+print("""<form method="POST" action="/cgi-bin/myserve_cat.py">
+		<input type="hidden" value="{}" name="img_id">
+		<input name="btn_skip" type="submit" value="Skip">
+		<input name="btn_fluck" type="submit" value="Fluck">
+		<input name="btn_nice" type="submit" value="Nice">
+		</form>""".format( img_id ))
+# check if either button clicked and insert a fluck in the database
+if 'btn_fluck' in form:
+	result = db.flucks.insert( { 
+		"image_id":ObjectId(form['img_id'].value),
+		"is_flucked":1,
+		"timestamp":datetime.now().timestamp(),
+		"is_nice":0 
+	} )
+elif 'btn_skip' in form:
+	result = db.flucks.insert( { 
+		"image_id":ObjectId(form['img_id'].value),
+		"is_flucked":0,
+		"timestamp":datetime.now().timestamp(),
+		"is_nice":0 
+	} )
+elif 'btn_nice' in form:
+	result = db.flucks.insert( {
+		"image_id":ObjectId(form['img_id'].value),
+		"is_flucked":0,
+		"timestamp":datetime.now().timestamp(),
+		"is_nice":1
+	} )
+print("</body></html>")
diff --git a/cgi-bin/myservecat.py b/cgi-bin/myservecat.py
new file mode 100644
index 0000000..e69de29
diff --git a/cgi-bin/myutils.py b/cgi-bin/myutils.py
new file mode 100755
index 0000000..c217a9b
--- /dev/null
+++ b/cgi-bin/myutils.py
@@ -0,0 +1,30 @@
+#!/usr/bin/env python3
+
+""" 
+	This module provides a set of reuseable utility functions
+	This is a Google style docstring by the way.
+	Read more about them here: 
+	https://www.python.org/dev/peps/pep-0257/
+"""
+
+from pymongo import MongoClient
+
+def db_connect():
+	""" Provides a connection to mongoDB database
+	
+	Returns:
+		Object: A handle to a mongoDB database 
+	"""
+	# try to create instance of MongoClient object
+	try:
+		client = MongoClient('mongodb://localhost:27017/')
+	except:
+		print("Error: failed to create mongo client")
+		raise
+	# if we have a mongo client...
+	else:
+		# switch to the specified database
+		db = client.catflucks
+		# return a handle to the database
+		return db
+
diff --git a/dump/catflucks/accounts.bson b/dump/catflucks/accounts.bson
new file mode 100644
index 0000000000000000000000000000000000000000..f7495f04a5c0779de913effc8aa4284f27d2a10c
GIT binary patch
literal 11357
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
Be$)T}

literal 0
HcmV?d00001

diff --git a/dump/catflucks/accounts.metadata.json b/dump/catflucks/accounts.metadata.json
new file mode 100644
index 0000000..0fbe266
--- /dev/null
+++ b/dump/catflucks/accounts.metadata.json
@@ -0,0 +1 @@
+{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "catflucks.accounts" } ] }
\ No newline at end of file
diff --git a/dump/catflucks/flucks.bson b/dump/catflucks/flucks.bson
new file mode 100644
index 0000000000000000000000000000000000000000..d8f227e8d594e884fd32c51ae4b8faf867510a38
GIT binary patch
literal 5150
zcmb8yT};hk90%}!4M&k8DKAAKbSiIQwp?)IBC|HGm|9Lp&J=AGbHR*>3ogvukVqjm
zo3flJ3eAW`UMl8oUdA%bDD#p{o9Een`|fwXTeoND>~p@q=l49%@5yr<$Cd5Nb=E{}
zJKuOXA|p3CVOWH(D0@SGiD#2H*9jW<LQt`<z*|(DQ&8v>_11N-+uO0!<txa^^O_$X
z`~SoEN3I-?XG_WEV)J>m`TVbwr!X$U)P`LS%-jU#ocZ6uDl?ogrE!G01B^}6uQDNo
z2~H(U6EJ0_XirooR5Alam21<SPME8}oHfjEl^G!!Xo0K@!aM-xxM7~D%t*qdtR>71
zU~KCSRhcl!K+!_-3DXXYE!rQI8AX`n9fY|JOt~rAOO*+i46MzHgM`5}oQWXJp|U|R
z6(-F`HO*+kBwZlP6(}0to?|2fEl|-w7~D6NCe0T$O{8RCZK7HU<A*dS4f9rI#!3d#
z^mP)Z0hlVod{vn!$v~Rw4}`%}fER5XVRn5d%tJ_H8~TNsCYmsrLH@w^4PFGCiIEJf
zO;<Q!+8~WB+GjP*c*(%pT#O}53oxfl3w%<U36g;{``v`WGtFKE&sAokWFSrHV!~k2
z?CtqfWhO}m(kxj{m}^ipyFK5lOe|quttQM}U~HNWm5C#ae?4LF_B>-+;HSz=Cd}?a
z!rX&2wgtLWW{PB>1y=4P%ynRFnjb0?Pnfs^guyfIgelq^l}R8><Wa(48h+SJC5%%&
z2*wUjL)0|W2-8qU7`)bOL+jgfx@2H`ZoNeqoS{#fwdqyUBod~noiO##X*P{Ms?U%N
zG<4N#!r%$bTVN((F7*)RKBVCdJxemMHf{Zc!8CjvOd`y;(E7laG`>CUDWIQeZo+iN
z5T+T5W^d1KwbPO%11(UVNEqxio2E}?QX~UwvnP!(k0FhH-~3XURLMY^Rm%v|3XHuy
z_2G85WFU<<lQ1}PSmvFYW{zYajVFsRI1AWoO@HFfl?<dw&nFB{opx>Xx92><v}`8~
zKBM^doKKjVeS=`^(Wy^1X_A4pX+J_390&RPW&vU9DhY%4jXeeQ8G4~)panM85C&%f
WenKyj3>3}XM3_d{p7!C<<NO1)M#XXf

literal 0
HcmV?d00001

diff --git a/dump/catflucks/flucks.metadata.json b/dump/catflucks/flucks.metadata.json
new file mode 100644
index 0000000..a75d15a
--- /dev/null
+++ b/dump/catflucks/flucks.metadata.json
@@ -0,0 +1 @@
+{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "catflucks.flucks" } ] }
\ No newline at end of file
diff --git a/dump/catflucks/images.bson b/dump/catflucks/images.bson
new file mode 100644
index 0000000000000000000000000000000000000000..448eb07b3d19f1c0bf05370acab47cae26a117c5
GIT binary patch
literal 4375
zcmciEOK;jh5C`yWE>&;6RK3zuE)9>=7~0#EnAB|`COquq5*gco!3MHkFz_|1NR|3Q
z`byvLcheqw>=&uI)e%M`)ys8PTKzQh_l%DTA?FWmlN?;~@1NYgc*nea<-yvBIwT$3
zbQl|YH&Ur#(@QencH2o~;HF&5wDr_hX{;(4MfCtgM^Td9VVhhqsHHQ@B&WIGe-6(P
zvZgzXTn%25UA=83sO8MB6Ks%JH*~h1@C>RCgM$_wxQUu?GiFgjju)UFVo_$%>8NP{
zVX{#TqqKb7s7E-IB;GCvP)~zYl*C>bMPo-j#-U1M>(<8ZynV`!lHrYdf<rB<loxxY
zPH?DYL60Bx6pM-udi<zoSX8S#Drj{8RVbdx6pOum&#@@e6x(VK!0ISF;h@KldVxi?
z>XZhRlDzFBJ&YQ~Ua6N@l$9?rEtpd?EuV`Mb#K8$e}zQ#X_J-fd5{XCv%dtDTDWF<
z^PSR<+BAz?uaPb)Ot1H~AXaMgrVw_G|LtI0t~XfMEHiT(KEO=g-dlm|E!MSZ)FzDz
zK;Hs)1+I5U*H|mLdqKXSP*m*|xZY!3s&K7amjQfFr(u`RBVQk|u1d2EngKAa$@vwy
zK4M)`y5r4vk0%VB6}UbjT_dqm+f)IdE1O4Q*MvtOKO<dB<|-H07o=;+T;<~WigiWL
zRW7b?SXcC1o$|=nccg3V=Cb?q+<S$sGrwJ2TtBcbyIS3C3;+(M(`@*A<l;KTx}x_G
g7uQd$t5NA?RRKWGR=se&W<2us3+syBL;vmi3;2d;7XSbN

literal 0
HcmV?d00001

diff --git a/dump/catflucks/images.metadata.json b/dump/catflucks/images.metadata.json
new file mode 100644
index 0000000..b12bd68
--- /dev/null
+++ b/dump/catflucks/images.metadata.json
@@ -0,0 +1 @@
+{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "catflucks.images" } ] }
\ No newline at end of file
diff --git a/dump/catflucks/system.indexes.bson b/dump/catflucks/system.indexes.bson
new file mode 100644
index 0000000000000000000000000000000000000000..3a045ae92526736da2b0678107defbc96f47294f
GIT binary patch
literal 215
zcmZ=~U|<j^V_*bQ%-N}x416Gdd}az*gn=n9F*lWg6(|N2iU)Fw83cix<iwJ+oYLg%
qV!h1V#Prl+1_n=%Hd2fcMlmKaIXS;HuLNk2JE;btx(DJc1_l7MI4aQq

literal 0
HcmV?d00001

diff --git a/mysimpleServer.py b/mysimpleServer.py
new file mode 100755
index 0000000..7999374
--- /dev/null
+++ b/mysimpleServer.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python3
+# above 'she-bang' line makes the script executable from command line
+
+""" A Simple Web Server
+	Run with ./simpleServer.py
+	Make sure all cgi scripts are executable
+	for single script:
+		 chmod +x simpleServer.py
+	or for a whole directory:
+		 chmod -r +x cgi-bin/
+"""
+
+import http.server										# import http.server module
+import cgitb; cgitb.enable()							# import and enable cgitb module for exception handling
+
+PORT = 8000												# specifies the port number to accept connections on
+
+server = http.server.HTTPServer 						# provides simple web server
+handler = http.server.CGIHTTPRequestHandler 			# provides request handler
+server_address = ("", PORT)								# specify server directory and port number
+handler.cgi_directories = ["/","/cgi-bin","/htbin"]		# where CGI scripts will reside in relation to the `server' directory
+
+print("Starting server...")					# outputs a message 
+httpd = server(server_address, handler)		# creates the server, passing it the server address and port number, as well as the CGI handler (httpd stands for HTTP Daemon)
+print("serving at port", PORT)				# outputs a message
+httpd.serve_forever()						# puts program in infinite loop so that the server can `serve_forever'
-- 
GitLab